C++解析http-chunked数据

来源:互联网 发布:淘宝童装名片设计 编辑:程序博客网 时间:2024/06/04 17:54
chunked 是http传输过程中常用的一种分块手段, 这里是对chunked数据的简易处理方法,主要是拼接block, 去掉块大小和回车信息即可
static ResponseStream *rlib_parse_chunk_data(char *lp_chunk_data, intptr_t nsize){auto pstream = new ResponseStream(Utility::round_up_8(nsize));if (pstream == nullptr) {return pstream;} //if// to small data size, just ignore itif (nsize < 16){pstream->Write(lp_chunk_data, nsize);} else {// get chunked data sizeconst int crlf        = RLIB_COUNTOF_STR("\r\n");int block_size        = 0;LPSTR pDataEnd        = lp_chunk_data + nsize;LPSTR pBlockDataBegin = lp_chunk_data, pBlockDataEnd = lp_chunk_data;while (pBlockDataBegin < pDataEnd) {pBlockDataEnd = strstr(pBlockDataBegin, "\r\n");if (pBlockDataEnd == nullptr) {trace(!"invalid chunked data");break;}//pBlockDataEnd[0] = '\0';block_size = Int32::TryParse(pBlockDataBegin, 16);//pBlockDataEnd[0] = '\r';if (block_size <= 0) {break;} //ifpstream->Write(pBlockDataEnd + crlf, block_size);pBlockDataBegin = pBlockDataEnd + crlf + block_size + crlf;// skip CRLF// crlf = 0;// while (*pBlockDataBegin == '\r' || *pBlockDataBegin == '\n') {// ++crlf;// ++pBlockDataBegin;// }}} //ifpstream->Position = 0;return pstream;}
原创粉丝点击