资源简介
一个用C语言实现的解析HTTP chunked方式传输的数据包的演示程序
代码片段和文件信息
/*
* dechunk.c
* http_chunk_demo
*
* Created by I MAC on 11-9-7.
* Copyright 2011 __MyCompanyName__. All rights reserved.
*
*/
#include “dechunk.h“
#include
#include
#define DC_MIN(x y) (x) > (y) ? (y) : (x)
static char *g_buff_out = NULL;
static char *g_buff_pt = NULL;
static size_t g_buff_outlen = 0;
static size_t g_chunk_len = 0;
static size_t g_chunk_read = 0;
static int g_is_running = 0;
static int g_is_first = 1;
static int g_is_chunkbegin = 0;
void *memstr(void *src size_t src_len char *sub)
{
if (NULL == src || NULL == sub || src_len < strlen(sub))
{
return NULL;
}
char *p = src;
char *q = sub;
size_t indx = src_len;
size_t sub_len = strlen(sub);
while (indx > 0)
{
int i = 0;
while (i < sub_len)
{
char cp = *(p + i);
char cq = *(q + i);
// case ignore
if (cq >= ‘A‘ && cq <= ‘Z‘)
{
cq |= 0x20;
}
if (cp >= ‘A‘ && cp <= ‘Z‘)
{
cp |= 0x20;
}
if (cq != cp)
{
break;
}
i++;
}
if (i == sub_len)
{
return p;
}
p++;
indx--;
}
return NULL;
}
int dechunk_init()
{
if (g_is_running)
{
return DCE_ISRUNNING;
}
g_buff_out = NULL;
g_buff_pt = NULL;
g_buff_outlen = 0;
g_chunk_len = 0;
g_chunk_read = 0;
g_is_running = 1;
g_is_first = 1;
g_is_chunkbegin = 0;
return DCE_OK;
}
int dechunk(void *input size_t inlen)
{
if (!g_is_running)
{
return DCE_LOCK;
}
if (NULL == input || inlen <= 0)
{
return DCE_ARGUMENT;
}
void *data_start = input;
size_t data_len = inlen;
if (g_is_first)
{
data_start = memstr(data_start data_len “\r\n\r\n“);
if (NULL == data_start)
{
return DCE_FORMAT;
}
data_start += 4;
data_len -= (data_start - input);
g_is_first = 0;
}
if (!g_is_chunkbegin)
{
char *stmp = data_start;
int itmp = 0;
sscanf(stmp “%x“ &itmp);
itmp = (itmp > 0 ? itmp - 2 : itmp); // exclude the terminate “\r\n“
data_start = memstr(stmp data_len “\r\n“);
data_start += 2; // strlen(“\r\n“)
data_len -= (data_start - (void *)stmp);
g_chunk_len = itmp;
g_buff_outlen += g_chunk_len;
g_is_chunkbegin = 1;
g_chunk_read = 0;
if (g_chunk_len > 0 && 0 != g_buff_outlen)
{
if (NULL == g_buf
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2011-09-07 18:27 http_chunk_demo\
文件 4548 2011-09-07 17:44 http_chunk_demo\dechunk.c
目录 0 2011-09-07 18:27 __MACOSX\
目录 0 2011-09-07 18:27 __MACOSX\http_chunk_demo\
文件 171 2011-09-07 17:44 __MACOSX\http_chunk_demo\._dechunk.c
文件 590 2011-09-07 17:36 http_chunk_demo\dechunk.h
文件 171 2011-09-07 17:36 __MACOSX\http_chunk_demo\._dechunk.h
文件 3057 2011-09-07 08:44 http_chunk_demo\http_chunk_demo.1
目录 0 2011-09-07 18:27 http_chunk_demo\http_chunk_demo.xcodeproj\
文件 40864 2011-09-07 18:27 http_chunk_demo\http_chunk_demo.xcodeproj\imac1.mode1v3
文件 48849 2011-09-07 18:27 http_chunk_demo\http_chunk_demo.xcodeproj\imac1.pbxuser
文件 7653 2011-09-07 18:27 http_chunk_demo\http_chunk_demo.xcodeproj\project.pbxproj
文件 5153 2011-09-07 18:27 http_chunk_demo\main.c
文件 171 2011-09-07 18:27 __MACOSX\http_chunk_demo\._main.c
- 上一篇:C语言函数速查效率手册 光盘
- 下一篇:linux类EXT2文件系统源码
相关资源
- C语言的嵌入式汇编基本使用.docx(2页
- C语言嵌入式Modbus协议栈,支持主站和
- C语言封装的HttpClient接口
- C语言课设计算器
- C语言 学生兴趣管理系统
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- c语言实现竞技比赛打分系统
- KMP算法C语言程序
- Linux c语言 学生成绩管理系统
- 弹跳的小球(test.c)
- 林锐—高质量C编程
- 基于c语言的通讯录系统
- C语言全套课件与教学资料-哈工大
- 计算机二级C语言真题.docx
- C语言实现 设备信息管理系统
- GBT 28169-2011 嵌入式软件 C语言编码规范
- C语言标准库函数大全.chm
- C语言常用代码(分章节)
- c语言课程设计:客房登记系统源码
- C语言常用算法源代码
- 吕鑫:VS2015之博大精深的0基础C语言视
- c语言文都讲义2020
- c语言课件56883
- C语言推箱子win控制台
- C语言程序设计50例.docx
- 烟花优化算法(c语言版)
- C语言程序设计教材习题参考答案.do
- 数据结构(C语言版)ppt课件,清华,
- c语言编程经典例题100例 word版
评论
共有 条评论