资源简介
一个用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++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
- 算符优先语法分析器(C语言编写)
- 基于C语言的密码锁程序
评论
共有 条评论