xrtMultipartLimitsInit
XRT_API void xrtMultipartLimitsInit(xmultipartlimits* pLimits);
示例已编译验证
multipartlimitsinit obj; xrtMultipartLimitsInit(&obj);
xrtMultipartBoundaryParse
校验并复制已经解码的 MIME boundary;输出可以未对齐。
| 参数 | 说明 |
|---|---|
| xstrview Text | 文本视图 |
| xmultipartboundary* pBoundary | 边界 |
示例已编译验证
/* 校验并复制已经解码的 MIME boundary;输出可以未对齐。 */ result = xrtMultipartBoundaryParse(Text, pBoundary);
xrtMultipartBoundaryFromContentType
从 multipart Content-Type 中严格读取并解码 boundary 参数。
| 参数 | 说明 |
|---|---|
| xstrview ContentType | 内容类型 |
| xmultipartboundary* pBoundary | 边界 |
示例已编译验证
/* 从 multipart Content-Type 中严格读取并解码 boundary 参数。 */ result = xrtMultipartBoundaryFromContentType(ContentType, pBoundary);
xrtMultipartBoundaryView
返回借用边界结构的视图;无效结构返回空视图并设置错误。
| 参数 | 说明 |
|---|---|
| const xmultipartboundary* pBoundary | 边界 |
示例已编译验证
/* 返回借用边界结构的视图;无效结构返回空视图并设置错误。 */ result = xrtMultipartBoundaryView(pBoundary);
xrtMultipartBoundaryRandom
使用 128 位系统安全随机数原子生成 boundary;输出可以未对齐。
| 参数 | 说明 |
|---|---|
| xmultipartboundary* pBoundary | 边界 |
示例已编译验证
/* 使用 128 位系统安全随机数原子生成 boundary;输出可以未对齐。 */ result = xrtMultipartBoundaryRandom(pBoundary);
xrtMultipartNext
XRT_API xhttpnext xrtMultipartNext( xbytesview Body, const xmultipartboundary* pBoundary, size_t* pOffset, xmultipartpart* pPart, xmultiparterrorinfo* pError );
示例已编译验证
/* XRT_API xhttpnext xrtMultipartNext( xbytesview Body, const xmultipartboundary* pBoundary, size_t* pOffset, xmultipartpart* pPart, xmultiparterrorinfo* pError ); */ result = xrtMultipartNext();
xrtMultipartValidate
按限制严格验证完整 multipart 正文,要求存在至少一个 Part 和关闭边界。
| 参数 | 说明 |
|---|---|
| xbytesview Body | 消息体内容 |
| const xmultipartboundary* pBoundary | 边界 |
| const xmultipartlimits* pLimits | Lmts 参数 |
| xmultiparterrorinfo* pError | 错误对象 |
示例已编译验证
/* 按限制严格验证完整 multipart 正文,要求存在至少一个 Part 和关闭边界。 */ result = xrtMultipartValidate(Body, pBoundary, pLimits, pError);
xrtMultipartValidateCount
XRT_API bool xrtMultipartValidateCount( xbytesview Body, const xmultipartboundary* pBoundary, const xmultipartlimits* pLimits, uint32 Flags, size_t* pPartCount, xmultiparterrorinfo* pError );
示例已编译验证
/* XRT_API bool xrtMultipartValidateCount( xbytesview Body, const xmultipartboundary* pBoundary, const xmultipartlimits* pLimits, uint32 Flags, size_t* pPartCount, xmultiparterrorinfo* pError ); */ result = xrtMultipartValidateCount();
xrtMultipartParse
XRT_API bool xrtMultipartParse( xbytesview Body, const xmultipartboundary* pBoundary, xmultipartpart* pParts, size_t iCapacity, size_t* pCount, const xmultipartlimits* pLimits, xmultiparterrorinfo* pError );
示例已编译验证
/* XRT_API bool xrtMultipartParse( xbytesview Body, const xmultipartboundary* pBoundary, xmultipartpart* pParts, size_t iCapacity, size_t* pCount, const xmultipartlimits* pLimits, xmultiparterrorinfo* pError ); */ result = xrtMultipartParse();
xrtMultipartFormPartValid
验证 Part 具备 RFC 7578 form-data 所需的 disposition 类型和 name 参数。
| 参数 | 说明 |
|---|---|
| const xmultipartpart* pPart | 出:片段 |
示例已编译验证
/* 验证 Part 具备 RFC 7578 form-data 所需的 disposition 类型和 name 参数。 */ result = xrtMultipartFormPartValid(pPart);
xrtMultipartPartNameWrite
读取 form-data 字段名;结果不附加零字符。
| 参数 | 说明 |
|---|---|
| const xmultipartpart* pPart | 出:片段 |
| void* pOutput | 出:输出缓冲 |
| size_t iCapacity | 容量 |
| size_t* pSize | 出:大小 |
示例已编译验证
/* 读取 form-data 字段名;结果不附加零字符。 */ result = xrtMultipartPartNameWrite(pPart, pOutput, iCapacity, pSize);
xrtMultipartPartFileNameWrite
读取上传文件名;优先采用受支持的 filename*,结果不附加零字符。
| 参数 | 说明 |
|---|---|
| const xmultipartpart* pPart | 出:片段 |
| void* pOutput | 出:输出缓冲 |
| size_t iCapacity | 容量 |
| size_t* pSize | 出:大小 |
示例已编译验证
/* 读取上传文件名;优先采用受支持的 filename*,结果不附加零字符。 */ result = xrtMultipartPartFileNameWrite(pPart, pOutput, iCapacity, pSize);
xrtMultipartReaderInit
XRT_API bool xrtMultipartReaderInit( xmultipartreader* pReader, const xmultipartboundary* pBoundary, const xmultipartlimits* pLimits );
示例已编译验证
multipartreaderinit obj; xrtMultipartReaderInit(&obj);
xrtMultipartReaderReset
保留 boundary 与限制并重置解析进度,便于复用 Reader 对象。
| 参数 | 说明 |
|---|---|
| xmultipartreader* pReader | 读取器 |
示例已编译验证
/* 保留 boundary 与限制并重置解析进度,便于复用 Reader 对象。 */ result = xrtMultipartReaderReset(pReader);
xrtMultipartReaderRead
XRT_API xmultipartreadstatus xrtMultipartReaderRead( xmultipartreader* pReader, xbytesview Input, bool bEnd, size_t* pConsumed, xmultipartpart* pPart, xbytesview* pData, xmultiparterrorinfo* pError );
示例已编译验证
/* XRT_API xmultipartreadstatus xrtMultipartReaderRead( xmultipartreader* pReader, xbytesview Input, bool bEnd, size_t* pConsumed, xmultipartpart* pPart, xbytesview* pData, xmultiparterrorinfo* pError ); */ result = xrtMultipartReaderRead();
xrtMultipartReaderDone
判断 Reader 是否已经消费关闭 boundary 和全部 epilogue。
| 参数 | 说明 |
|---|---|
| const xmultipartreader* pReader | 读取器 |
示例已编译验证
/* 判断 Reader 是否已经消费关闭 boundary 和全部 epilogue。 */ result = xrtMultipartReaderDone(pReader);
xrtMultipartContentTypeWrite
XRT_API bool xrtMultipartContentTypeWrite( const xmultipartboundary* pBoundary, void* pOutput, size_t iCapacity, size_t* pSize );
示例已编译验证
/* XRT_API bool xrtMultipartContentTypeWrite( const xmultipartboundary* pBoundary, void* pOutput, size_t iCapacity, size_t* pSize ); */ result = xrtMultipartContentTypeWrite();
xrtMultipartPartHeadWrite
XRT_API bool xrtMultipartPartHeadWrite( const xmultipartboundary* pBoundary, const xhttpfield* pFields, size_t iFieldCount, void* pOutput, size_t iCapacity, size_t* pSize );
示例已编译验证
/* XRT_API bool xrtMultipartPartHeadWrite( const xmultipartboundary* pBoundary, const xhttpfield* pFields, size_t iFieldCount, void* pOutput, size_t iCapacity, size_t* pSize ); */ result = xrtMultipartPartHeadWrite();
xrtMultipartFormHeadWrite
XRT_API bool xrtMultipartFormHeadWrite( const xmultipartboundary* pBoundary, xstrview Name, const xstrview* pFilename, xstrview ContentType, void* pOutput, size_t iCapacity, size_t* pSize );
示例已编译验证
/* XRT_API bool xrtMultipartFormHeadWrite( const xmultipartboundary* pBoundary, xstrview Name, const xstrview* pFilename, xstrview ContentType, void* pOutput, size_t iCapacity, size_t* pSize ); */ result = xrtMultipartFormHeadWrite();
xrtMultipartPartEndWrite
写出 Part 正文后的 CRLF,可与 PartHeadWrite 和零复制正文发送组合使用。
| 参数 | 说明 |
|---|---|
| void* pOutput | 出:输出缓冲 |
| size_t iCapacity | 容量 |
| size_t* pSize | 出:大小 |
示例已编译验证
/* 写出 Part 正文后的 CRLF,可与 PartHeadWrite 和零复制正文发送组合使用。 */ result = xrtMultipartPartEndWrite(pOutput, iCapacity, pSize);
xrtMultipartPartWrite
一次写出原始 Part;容量不足时不产生部分结果。
| 参数 | 说明 |
|---|---|
| const xmultipartboundary* pBoundary | 边界 |
| const xhttpfield* pFields | 字段数组 |
| size_t iFieldCount | 字段数量 |
| xbytesview Body | 消息体内容 |
| void* pOutput | 出:输出缓冲 |
| size_t iCapacity | 容量 |
| size_t* pSize | 出:大小 |
示例已编译验证
/* 一次写出原始 Part;容量不足时不产生部分结果。 */ result = xrtMultipartPartWrite(pBoundary, pFields, iFieldCount, Body, pOutput, iCapacity, pSize);
xrtMultipartFieldWrite
写出一个 form-data 普通字段 Part。
| 参数 | 说明 |
|---|---|
| const xmultipartboundary* pBoundary | 边界 |
| xstrview Name | 名称(xstrview) |
| xbytesview Value | 值 |
| void* pOutput | 出:输出缓冲 |
| size_t iCapacity | 容量 |
| size_t* pSize | 出:大小 |
示例已编译验证
/* 写出一个 form-data 普通字段 Part。 */ result = xrtMultipartFieldWrite(pBoundary, Name, Value, pOutput, iCapacity, pSize);
xrtMultipartFileWrite
XRT_API bool xrtMultipartFileWrite( const xmultipartboundary* pBoundary, xstrview Name, xstrview Filename, xstrview ContentType, xbytesview Body, void* pOutput, size_t iCapacity, size_t* pSize );
示例已编译验证
/* XRT_API bool xrtMultipartFileWrite( const xmultipartboundary* pBoundary, xstrview Name, xstrview Filename, xstrview ContentType, xbytesview Body, void* pOutput, size_t iCapacity, size_t* pSize ); */ result = xrtMultipartFileWrite();
xrtMultipartCloseWrite
写出关闭 boundary;它必须位于最后一个 PartEndWrite 之后。
| 参数 | 说明 |
|---|---|
| const xmultipartboundary* pBoundary | 边界 |
| void* pOutput | 出:输出缓冲 |
| size_t iCapacity | 容量 |
| size_t* pSize | 出:大小 |
示例已编译验证
/* 写出关闭 boundary;它必须位于最后一个 PartEndWrite 之后。 */ result = xrtMultipartCloseWrite(pBoundary, pOutput, iCapacity, pSize);