xrtMultipartLimitsInit

XRT_API void xrtMultipartLimitsInit(xmultipartlimits* pLimits);

;
返回:XRT_API void xrtMultipartLimitsInit(xmultipartlimits* pLimits);

示例已编译验证

multipartlimitsinit obj;
xrtMultipartLimitsInit(&obj);

xrtMultipartBoundaryParse

校验并复制已经解码的 MIME boundary;输出可以未对齐。

bool xrtMultipartBoundaryParse( xstrview Text, xmultipartboundary* pBoundary );
参数说明
xstrview Text文本视图
xmultipartboundary* pBoundary边界
返回:校验并复制已经解码的 MIME boundary;输出可以未对齐。

示例已编译验证

/* 校验并复制已经解码的 MIME boundary;输出可以未对齐。 */
result = xrtMultipartBoundaryParse(Text, pBoundary);

xrtMultipartBoundaryFromContentType

从 multipart Content-Type 中严格读取并解码 boundary 参数。

bool xrtMultipartBoundaryFromContentType( xstrview ContentType, xmultipartboundary* pBoundary );
参数说明
xstrview ContentType内容类型
xmultipartboundary* pBoundary边界
返回:从 multipart Content-Type 中严格读取并解码 boundary 参数。

示例已编译验证

/* 从 multipart Content-Type 中严格读取并解码 boundary 参数。 */
result = xrtMultipartBoundaryFromContentType(ContentType, pBoundary);

xrtMultipartBoundaryView

返回借用边界结构的视图;无效结构返回空视图并设置错误。

xstrview xrtMultipartBoundaryView( const xmultipartboundary* pBoundary );
参数说明
const xmultipartboundary* pBoundary边界
返回:返回借用边界结构的视图;无效结构返回空视图并设置错误。

示例已编译验证

/* 返回借用边界结构的视图;无效结构返回空视图并设置错误。 */
result = xrtMultipartBoundaryView(pBoundary);

xrtMultipartBoundaryRandom

使用 128 位系统安全随机数原子生成 boundary;输出可以未对齐。

bool xrtMultipartBoundaryRandom( xmultipartboundary* pBoundary );
参数说明
xmultipartboundary* pBoundary边界
返回:使用 128 位系统安全随机数原子生成 boundary;输出可以未对齐。

示例已编译验证

/* 使用 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 );

示例已编译验证

/* XRT_API xhttpnext xrtMultipartNext( xbytesview Body, const xmultipartboundary* pBoundary, size_t* pOffset, xmultipartpart* pPart, xmultiparterrorinfo* pError ); */
result = xrtMultipartNext();

xrtMultipartValidate

按限制严格验证完整 multipart 正文,要求存在至少一个 Part 和关闭边界。

bool xrtMultipartValidate( xbytesview Body, const xmultipartboundary* pBoundary, const xmultipartlimits* pLimits, xmultiparterrorinfo* pError );
参数说明
xbytesview Body消息体内容
const xmultipartboundary* pBoundary边界
const xmultipartlimits* pLimitsLmts 参数
xmultiparterrorinfo* pError错误对象
返回:按限制严格验证完整 multipart 正文,要求存在至少一个 Part 和关闭边界。

示例已编译验证

/* 按限制严格验证完整 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 );

示例已编译验证

/* 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 );

示例已编译验证

/* 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 参数。

bool xrtMultipartFormPartValid( const xmultipartpart* pPart );
参数说明
const xmultipartpart* pPart出:片段
返回:验证 Part 具备 RFC 7578 form-data 所需的 disposition 类型和 name 参数。

示例已编译验证

/* 验证 Part 具备 RFC 7578 form-data 所需的 disposition 类型和 name 参数。 */
result = xrtMultipartFormPartValid(pPart);

xrtMultipartPartNameWrite

读取 form-data 字段名;结果不附加零字符。

bool xrtMultipartPartNameWrite( const xmultipartpart* pPart, void* pOutput, size_t iCapacity, size_t* pSize );
参数说明
const xmultipartpart* pPart出:片段
void* pOutput出:输出缓冲
size_t iCapacity容量
size_t* pSize出:大小
返回:读取 form-data 字段名;结果不附加零字符。

示例已编译验证

/* 读取 form-data 字段名;结果不附加零字符。 */
result = xrtMultipartPartNameWrite(pPart, pOutput, iCapacity, pSize);

xrtMultipartPartFileNameWrite

读取上传文件名;优先采用受支持的 filename*,结果不附加零字符。

bool xrtMultipartPartFileNameWrite( const xmultipartpart* pPart, void* pOutput, size_t iCapacity, size_t* pSize );
参数说明
const xmultipartpart* pPart出:片段
void* pOutput出:输出缓冲
size_t iCapacity容量
size_t* pSize出:大小
返回:读取上传文件名;优先采用受支持的 filename*,结果不附加零字符。

示例已编译验证

/* 读取上传文件名;优先采用受支持的 filename*,结果不附加零字符。 */
result = xrtMultipartPartFileNameWrite(pPart, pOutput, iCapacity, pSize);

xrtMultipartReaderInit

XRT_API bool xrtMultipartReaderInit( xmultipartreader* pReader, const xmultipartboundary* pBoundary, const xmultipartlimits* pLimits );

;
返回:XRT_API bool xrtMultipartReaderInit( xmultipartreader* pReader, const xmultipartboundary* pBoundary, const xmultipartlimits* pLimits );

示例已编译验证

multipartreaderinit obj;
xrtMultipartReaderInit(&obj);

xrtMultipartReaderReset

保留 boundary 与限制并重置解析进度,便于复用 Reader 对象。

void xrtMultipartReaderReset( xmultipartreader* pReader );
参数说明
xmultipartreader* pReader读取器
返回:保留 boundary 与限制并重置解析进度,便于复用 Reader 对象。

示例已编译验证

/* 保留 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 );

示例已编译验证

/* 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。

bool xrtMultipartReaderDone( const xmultipartreader* pReader );
参数说明
const xmultipartreader* pReader读取器
返回:判断 Reader 是否已经消费关闭 boundary 和全部 epilogue。

示例已编译验证

/* 判断 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 );

示例已编译验证

/* 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 );

示例已编译验证

/* 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 );

示例已编译验证

/* 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 和零复制正文发送组合使用。

bool xrtMultipartPartEndWrite( void* pOutput, size_t iCapacity, size_t* pSize );
参数说明
void* pOutput出:输出缓冲
size_t iCapacity容量
size_t* pSize出:大小
返回:写出 Part 正文后的 CRLF,可与 PartHeadWrite 和零复制正文发送组合使用。

示例已编译验证

/* 写出 Part 正文后的 CRLF,可与 PartHeadWrite 和零复制正文发送组合使用。 */
result = xrtMultipartPartEndWrite(pOutput, iCapacity, pSize);

xrtMultipartPartWrite

一次写出原始 Part;容量不足时不产生部分结果。

bool xrtMultipartPartWrite( const xmultipartboundary* pBoundary, const xhttpfield* pFields, size_t iFieldCount, xbytesview Body, void* pOutput, size_t iCapacity, size_t* pSize );
参数说明
const xmultipartboundary* pBoundary边界
const xhttpfield* pFields字段数组
size_t iFieldCount字段数量
xbytesview Body消息体内容
void* pOutput出:输出缓冲
size_t iCapacity容量
size_t* pSize出:大小
返回:一次写出原始 Part;容量不足时不产生部分结果。

示例已编译验证

/* 一次写出原始 Part;容量不足时不产生部分结果。 */
result = xrtMultipartPartWrite(pBoundary, pFields, iFieldCount, Body, pOutput, iCapacity, pSize);

xrtMultipartFieldWrite

写出一个 form-data 普通字段 Part。

bool xrtMultipartFieldWrite( const xmultipartboundary* pBoundary, xstrview Name, xbytesview Value, void* pOutput, size_t iCapacity, size_t* pSize );
参数说明
const xmultipartboundary* pBoundary边界
xstrview Name名称(xstrview)
xbytesview Value值
void* pOutput出:输出缓冲
size_t iCapacity容量
size_t* pSize出:大小
返回:写出一个 form-data 普通字段 Part。

示例已编译验证

/* 写出一个 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 );

示例已编译验证

/* 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 之后。

bool xrtMultipartCloseWrite( const xmultipartboundary* pBoundary, void* pOutput, size_t iCapacity, size_t* pSize );
参数说明
const xmultipartboundary* pBoundary边界
void* pOutput出:输出缓冲
size_t iCapacity容量
size_t* pSize出:大小
返回:写出关闭 boundary;它必须位于最后一个 PartEndWrite 之后。

示例已编译验证

/* 写出关闭 boundary;它必须位于最后一个 PartEndWrite 之后。 */
result = xrtMultipartCloseWrite(pBoundary, pOutput, iCapacity, pSize);