资源简介

一款用C实现的带协商的私有通信协议, 协议 通信 传输 tcp 服务

资源截图

代码片段和文件信息

#include 
#include 
#include “packet.h“
#include “iks/dom.h“
#include “iks/iksemel.h“
#include “encrypt/ert_rsa.h“
#include “encrypt/ert_aes.h“
#include “encrypt/ert_des3.h“
#include “compress/cps_zlib.h“
#include “util.h“


void set_content(const char *source char **dest);
int set_cps_type(const char *src packet_parser_t *pkg);
int cmp_cps_type(const char *src packet_parser_t *pkg);
void set_heatbeat(const char *sponsor const char* seconds packet_parser_t *pkg);
int set_talk_crt_type(const char* src packet_parser_t *pkg);
int set_transfer_crt_type(const char* src packet_parser_t *pkg);
int cmp_transfer_crt_type(const char* src packet_parser_t *pkg);
int set_talk_crt_public_key(const char* src packet_parser_t *pkg);
int set_talk_crt_private_key(const char* src packet_parser_t *pkg);
int set_transfer_crt_key(const char* src packet_parser_t *pkg);
char* get_transfer_crt_key(const packet_parser_t *pkg);
int set_client_id(const char* src packet_parser_t *pkg);
int set_cert_id(const char* src packet_parser_t *pkg);
int set_client_subject(const char* src packet_parser_t *pkg);
int set_client_signature(const char* src packet_parser_t *pkg);
int set_talk_type(int type packet_parser_t *pkg);


/** 
 * 为数据包添加头部
 *
 * @param source [in] 数据源
 * @param src_len [in] 数据源长度。如果为-1则表示source是以\0结尾的字符串。
 * @param plain_len [in] 压缩加密前的数据包长度
 * @param dest_len [out] 输出数据的长度
 *
 * @return 返回添加头部的数据包
 *
 * @note 注意使用后主动释放内存
 */
char *pkg_add_header(const char *source int src_len int plain_len int *dest_len);

/** 
 * 获取数据包的包体,去掉包头。
 * 如果数据包完整,则截取完整部分去掉包头,返回包体,剩余未解析的数据包通过source返回。
 * 如果数据包不完整,则返回NULL。
 *
 * @param source [in] 数据源
 * @param source_len [in] 数据源长度
 * @param plain_body_len [out] 加密压缩前数据包体的长度,用于解压缩数据时分配数据缓冲区
 * @param cipher_body_len [out] 输出数据包体的长度
 * @param remainLen [out] 剩余未解析的数据包片段的长度
 *
 * @return 返回去掉头部的包体
 *
 * @note 注意使用后主动释放内存
 */
char *pkg_get_body(char **source int source_len int *plain_body_len int *cipher_body_len int *remainLen);

/**
 * 将来自网络端的数据解码。
 * 服务器端:解析协商包和数据包
 * 客户端:解析服务器响应的协商包和数据包
 * 通过回调函数返回解析结果
 *
 * @param pkg [in][out] 协商结构填充
 * @param source [in] 数据源
 * @param source_len [in] 数据源长度
 * @param plain_body_len [in] 数据包在压缩加密前的长度
 * 
 * @return 成功返回0,否则返回错误码
 */
int pkg_data_parse( packet_parser_t *pkg const char* source int source_len int plain_body_len);

// 客户端组装发送给服务器端的协商包。
char* pkg_talk_make(const packet_parser_t *pkg);

// 服务器端组装响应给客户端的协商包
char* pkg_talk_rtn(const packet_parser_t *pkg);

// 
int pkg_talk_parse(packet_parser_t *pkg const char* xml);

// 对数据包包体进行压缩加密
// 压缩加密后的字符串可能不是以0结尾的,所以需要返回字符串的长度cipher_body_len
char *pkg_compress_encrypt(const packet_parser_t *pkg const char *source int source_len int *cipher_body_len);

// 对收到的数据包包体进行解密解压缩
// 由于返回的是明文数据包所以不需要返回明文数据包的长度(以0结尾的字符串)
char *pkg_uncompress_decrypt(const packet_parser_t *pkg const char *source int source_len int plain_body_len

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-04-24 17:51  packet\
     目录           0  2013-08-20 11:19  packet\.svn\
     文件        2442  2013-08-20 11:19  packet\.svn\entries
     目录           0  2013-04-24 17:50  packet\.svn\prop-base\
     文件          53  2012-11-29 13:14  packet\.svn\prop-base\packet.suo.svn-base
     目录           0  2013-08-22 17:27  packet\.svn\props\
     目录           0  2013-04-24 17:51  packet\.svn\text-base\
     文件        1284  2012-11-30 09:13  packet\.svn\text-base\Makefile.svn-base
     文件          45  2012-11-30 09:13  packet\.svn\text-base\README.md.svn-base
     文件       23143  2012-12-03 11:19  packet\.svn\text-base\packet.c.svn-base
     文件        4209  2012-11-30 09:13  packet\.svn\text-base\packet.h.svn-base
     文件         878  2012-11-30 09:13  packet\.svn\text-base\packet.sln.svn-base
     文件       21504  2012-11-30 09:13  packet\.svn\text-base\packet.suo.svn-base
     文件        2490  2012-11-30 09:13  packet\.svn\text-base\packet.vcxproj.filters.svn-base
     文件        5287  2012-11-30 09:13  packet\.svn\text-base\packet.vcxproj.svn-base
     文件         143  2012-11-30 09:13  packet\.svn\text-base\packet.vcxproj.user.svn-base
     文件        2148  2012-11-30 09:13  packet\.svn\text-base\type.h.svn-base
     文件        2546  2012-12-03 11:19  packet\.svn\text-base\unit_test.c.svn-base
     文件         661  2012-12-03 11:19  packet\.svn\text-base\util.c.svn-base
     文件         126  2012-12-03 11:19  packet\.svn\text-base\util.h.svn-base
     文件       86717  2012-11-30 09:13  packet\.svn\text-base\zlib.h.svn-base
     目录           0  2013-08-20 11:19  packet\.svn\tmp\
     目录           0  2013-08-22 17:27  packet\.svn\tmp\prop-base\
     目录           0  2013-08-22 17:27  packet\.svn\tmp\props\
     目录           0  2013-08-22 17:27  packet\.svn\tmp\text-base\
     文件        1284  2012-11-29 09:18  packet\Makefile
     文件          45  2012-11-29 09:18  packet\README.md
     目录           0  2013-04-24 17:51  packet\compress\
     目录           0  2013-08-20 11:19  packet\compress\.svn\
     文件         521  2013-08-20 11:19  packet\compress\.svn\entries
     目录           0  2013-08-22 17:27  packet\compress\.svn\prop-base\
............此处省略74个文件信息

评论

共有 条评论