xrtSshPacketCodecInit
初始化双向 plain codec;零上限使用 XSSH_PACKET_MAX_DEFAULT。
xsshcode xrtSshPacketCodecInit( xsshpacketcodec* pCodec, uint32 iMaxPacketSize );
| 参数 | 说明 |
|---|---|
| xsshpacketcodec* pCodec | 编解码器 |
| uint32 iMaxPacketSize | MaxPacketSze 参数 |
返回:初始化双向 plain codec;零上限使用 XSSH_PACKET_MAX_DEFAULT。
示例已编译验证
sshpacketcodecinit obj; xrtSshPacketCodecInit(&obj, pCodec, iMaxPacketSize);
xrtSshPacketCodecClear
清除双向 cipher、nonce、序列号和状态标记。
void xrtSshPacketCodecClear(xsshpacketcodec* pCodec);
| 参数 | 说明 |
|---|---|
| xsshpacketcodec* pCodec | 编解码器 |
返回:清除双向 cipher、nonce、序列号和状态标记。
示例已编译验证
/* 清除双向 cipher、nonce、序列号和状态标记。 */ result = xrtSshPacketCodecClear(pCodec);
xrtSshPacketCodecSetReadAesGcm
在收到 peer NEWKEYS 后原子切换读取方向,不修改读取序列号。
xsshcode xrtSshPacketCodecSetReadAesGcm( xsshpacketcodec* pCodec, xbytesview Key, xbytesview InitialIV );
| 参数 | 说明 |
|---|---|
| xsshpacketcodec* pCodec | 编解码器 |
| xbytesview Key | 键 |
| xbytesview InitialIV | IntalIV 参数 |
返回:在收到 peer NEWKEYS 后原子切换读取方向,不修改读取序列号。
示例已编译验证
/* 在收到 peer NEWKEYS 后原子切换读取方向,不修改读取序列号。 */ result = xrtSshPacketCodecSetReadAesGcm(pCodec, Key, InitialIV);
xrtSshPacketCodecSetWriteAesGcm
在发送本端 NEWKEYS 后原子切换写入方向,不修改写入序列号。
xsshcode xrtSshPacketCodecSetWriteAesGcm( xsshpacketcodec* pCodec, xbytesview Key, xbytesview InitialIV );
| 参数 | 说明 |
|---|---|
| xsshpacketcodec* pCodec | 编解码器 |
| xbytesview Key | 键 |
| xbytesview InitialIV | IntalIV 参数 |
返回:在发送本端 NEWKEYS 后原子切换写入方向,不修改写入序列号。
示例已编译验证
/* 在发送本端 NEWKEYS 后原子切换写入方向,不修改写入序列号。 */ result = xrtSshPacketCodecSetWriteAesGcm(pCodec, Key, InitialIV);
xrtSshPacketCodecResetReadSequence
仅供协商 strict-kex 后在对应方向 NEWKEYS 边界重置序列号。
xsshcode xrtSshPacketCodecResetReadSequence( xsshpacketcodec* pCodec );
| 参数 | 说明 |
|---|---|
| xsshpacketcodec* pCodec | 编解码器 |
返回:仅供协商 strict-kex 后在对应方向 NEWKEYS 边界重置序列号。
示例已编译验证
/* 仅供协商 strict-kex 后在对应方向 NEWKEYS 边界重置序列号。 */ result = xrtSshPacketCodecResetReadSequence(pCodec);
xrtSshPacketCodecResetWriteSequence
XRT_API xsshcode xrtSshPacketCodecResetWriteSequence( xsshpacketcodec* pCodec );
;
返回:XRT_API xsshcode xrtSshPacketCodecResetWriteSequence( xsshpacketcodec* pCodec );
示例已编译验证
/* XRT_API xsshcode xrtSshPacketCodecResetWriteSequence( xsshpacketcodec* pCodec ); */ result = xrtSshPacketCodecResetWriteSequence();
xrtSshPacketCodecInspect
探测 reader 当前 packet 的完整线长和所需解密工作区。
xsshcode xrtSshPacketCodecInspect( const xsshpacketcodec* pCodec, const xsshreader* pReader, xsshpacketneed* pNeed );
| 参数 | 说明 |
|---|---|
| const xsshpacketcodec* pCodec | 编解码器 |
| const xsshreader* pReader | 读取器 |
| xsshpacketneed* pNeed | Need 参数 |
返回:探测 reader 当前 packet 的完整线长和所需解密工作区。
示例已编译验证
/* 探测 reader 当前 packet 的完整线长和所需解密工作区。 */ result = xrtSshPacketCodecInspect(pCodec, pReader, pNeed);
xrtSshPacketCodecWriteMeasure
按当前写方向精确计算 packet_length 和最终线路长度。
xsshcode xrtSshPacketCodecWriteMeasure( const xsshpacketcodec* pCodec, size_t iPayloadSize, xsshpacketneed* pNeed );
| 参数 | 说明 |
|---|---|
| const xsshpacketcodec* pCodec | 编解码器 |
| size_t iPayloadSize | PayloadSze 参数 |
| xsshpacketneed* pNeed | Need 参数 |
返回:按当前写方向精确计算 packet_length 和最终线路长度。
示例已编译验证
/* 按当前写方向精确计算 packet_length 和最终线路长度。 */ result = xrtSshPacketCodecWriteMeasure(pCodec, iPayloadSize, pNeed);
xrtSshPacketCodecWritePrepareWithPadding
XRT_API xsshcode xrtSshPacketCodecWritePrepareWithPadding( xsshpacketcodec* pCodec, xsshwriter* pWriter, xbytesview Payload, xsshpaddingproc pPadding, ptr pUserData );
;
返回:XRT_API xsshcode xrtSshPacketCodecWritePrepareWithPadding( xsshpacketcodec* pCodec, xsshwriter* pWriter, xbytesview Payload, xsshpaddingproc pPadding, ptr pUserData );
示例已编译验证
/* XRT_API xsshcode xrtSshPacketCodecWritePrepareWithPadding( xsshpacketcodec* pCodec, xsshwriter* pWriter, xbytesview Payload, xsshpaddingproc pPadding, ptr pUserData ); */ result = xrtSshPacketCodecWritePrepareWithPadding();
xrtSshPacketCodecWriteCommit
提交唯一一个已可靠入队的写事务,并推进 sequence 与 cipher nonce。
xsshcode xrtSshPacketCodecWriteCommit(xsshpacketcodec* pCodec);
| 参数 | 说明 |
|---|---|
| xsshpacketcodec* pCodec | 编解码器 |
返回:提交唯一一个已可靠入队的写事务,并推进 sequence 与 cipher nonce。
示例已编译验证
/* 提交唯一一个已可靠入队的写事务,并推进 sequence 与 cipher nonce。 */ result = xrtSshPacketCodecWriteCommit(pCodec);
xrtSshPacketCodecWriteAbort
放弃尚未发送的写事务;调用方负责丢弃已生成的线路字节。
xsshcode xrtSshPacketCodecWriteAbort(xsshpacketcodec* pCodec);
| 参数 | 说明 |
|---|---|
| xsshpacketcodec* pCodec | 编解码器 |
返回:放弃尚未发送的写事务;调用方负责丢弃已生成的线路字节。
示例已编译验证
/* 放弃尚未发送的写事务;调用方负责丢弃已生成的线路字节。 */ result = xrtSshPacketCodecWriteAbort(pCodec);
xrtSshPacketCodecWriteWithPadding
使用调用方 padding 源一次性准备并提交,适用于无需背压重试的路径。
xsshcode xrtSshPacketCodecWriteWithPadding( xsshpacketcodec* pCodec, xsshwriter* pWriter, xbytesview Payload, xsshpaddingproc pPadding, ptr pUserData );
| 参数 | 说明 |
|---|---|
| xsshpacketcodec* pCodec | 编解码器 |
| xsshwriter* pWriter | 写入器 |
| xbytesview Payload | 负载 |
| xsshpaddingproc pPadding | Paddng 参数 |
| ptr pUserData | 透传用户数据 |
返回:使用调用方 padding 源一次性准备并提交,适用于无需背压重试的路径。
示例已编译验证
/* 使用调用方 padding 源一次性准备并提交,适用于无需背压重试的路径。 */ result = xrtSshPacketCodecWriteWithPadding(pCodec, pWriter, Payload, pPadding, pUserData);
xrtSshPacketCodecRead
从当前方向增量读取;AES-GCM 模式把明文写入调用方工作区。
xsshcode xrtSshPacketCodecRead( xsshpacketcodec* pCodec, xsshreader* pReader, xsshpacketview* pPacket, void* pPlain, size_t iPlainCapacity );
| 参数 | 说明 |
|---|---|
| xsshpacketcodec* pCodec | 编解码器 |
| xsshreader* pReader | 读取器 |
| xsshpacketview* pPacket | 数据包 |
| void* pPlain | 明文 |
| size_t iPlainCapacity | PlanCaacty 参数 |
返回:从当前方向增量读取;AES-GCM 模式把明文写入调用方工作区。
示例已编译验证
/* 从当前方向增量读取;AES-GCM 模式把明文写入调用方工作区。 */ result = xrtSshPacketCodecRead(pCodec, pReader, pPacket, pPlain, iPlainCapacity);