📄 packer.c
字号:
/* Name: packer.c *//* 打包及解包函数 *//* write by hgt */#include <stdlib.h>#include <strings.h>#include <string.h>/* user defind head */#include "account.h"#include "packer.h"/*********** Define globle variables **********/ int L_BYTE=sizeof(BYTE);int L_WORD=sizeof(WORD);int L_INT16=sizeof(INT16);int L_INT32=sizeof(INT32);int L_HEAD;int packer(BYTE * pkg,TRANSACTION *p){ int temp; int count=0; memset((int *)pkg,0x00,L_PKG); count=L_HEAD=pack_head(p,pkg); switch ((int)p->Tcode) { case TRC_SYN: break; case TRC_GQUQR: count=pack_gquqr(p,pkg); break; case TRC_GQUS: count=pack_gqus(p,pkg); break; case TRC_CSUQR: count=pack_csuqr(p,pkg); break; case TRC_CSUS: count=pack_csus(p,pkg); break; case TRC_SCRE: count=pack_scre(p,pkg); break; case TRC_CCRE: count=pack_ccre(p,pkg); break; case TRC_UPSDOC: count=pack_upsdoc(p,pkg); break; case TRC_UPCDOC: count=pack_upcdoc(p,pkg); break; case TRC_GETPAS: count=pack_getpas(p,pkg); break; case TRC_ULOGIN: break; case TRC_DROP: break; case TRC_CHPWD: break; case TRC_CHUSER: break; case TRC_SDOCQR: count=pack_sdocqr(p,pkg); break; case TRC_CDOCQR: count=pack_cdocqr(p,pkg); break; case TRC_AMTQR: count=pack_amtqr(p,pkg); break; case TRC_TRQR: count=pack_trqr(p,pkg); break; case TRC_AUQR: count=pack_auqr(p,pkg); break; case TRC_TRS: count=pack_trs(p,pkg); break; case TRC_SBT: count=pack_sbt(p,pkg); break; case TRC_FLUCT: count=pack_fluct(p,pkg); break; case TRC_CSU: count=pack_csu(p,pkg); break; case TRC_LTRAD: break; case TRC_LMOND: break; case TRC_LTLOG: break; case TRC_LUSER: count=pack_luser(p,pkg); break; case TRC_LUEXT: break; default: pkg=NULL; count=0; break; } return(count); }int unpacker(BYTE *pkg,TRANSACTION *p){ int count=0; memset((int *)p,0x00,sizeof(TRANSACTION)); count=L_HEAD=unpack_head(pkg,p); switch ((int)p->Tcode){ case TRC_SYN: break; case TRC_GQUQR: count=unpack_gquqr(pkg,p); break; case TRC_GQUS: count=unpack_gqus(pkg,p); break; case TRC_CSUQR: count=unpack_csuqr(pkg,p); break; case TRC_CSUS: count=unpack_csus(pkg,p); break; case TRC_SCRE: count=unpack_scre(pkg,p); break; case TRC_CCRE: count=unpack_ccre(pkg,p); break; case TRC_UPSDOC: count=unpack_upsdoc(pkg,p); break; case TRC_UPCDOC: count=unpack_upcdoc(pkg,p); break; case TRC_GETPAS: count=unpack_getpas(pkg,p); break; case TRC_ULOGIN: break; case TRC_CHPWD: break; case TRC_CHUSER: break; case TRC_DROP: break; case TRC_SDOCQR: count=unpack_sdocqr(pkg,p); break; case TRC_CDOCQR: count=unpack_cdocqr(pkg,p); break; case TRC_AMTQR: count=unpack_amtqr(pkg,p); break; case TRC_TRQR: count=unpack_trqr(pkg,p); break; case TRC_AUQR: count=unpack_auqr(pkg,p); break; case TRC_TRS: count=unpack_trs(pkg,p); break; case TRC_SBT: count=unpack_sbt(pkg,p); break; case TRC_FLUCT: count=unpack_fluct(pkg,p); break; case TRC_CSU: count=unpack_csu(pkg,p); break; case TRC_LTRAD: break; case TRC_LMOND: break; case TRC_LTLOG: break; case TRC_LUSER: count=unpack_luser(pkg,p); break; case TRC_LUEXT: break; default: pkg=NULL; count=0; break; } return (count);}int pack_head(TRANSACTION *p,BYTE *pkgH){ int i=0; memcpy((void*)pkgH,&(p->Tcode),L_INT16); i+=L_INT16;/* 交易代码 */ memcpy((void*)(pkgH+i),&(p->Version),L_INT16); i+=L_INT16;/* 版本号 */ memcpy((void*)(pkgH+i),p->User,L_ACCID*L_BYTE); i+=L_ACCID*L_BYTE;/* 用户名 */ memcpy((void*)(pkgH+i),p->Operator,L_ACCID*L_BYTE); i+=L_ACCID*L_BYTE;/* 操作员 */ memcpy((void*)(pkgH+i),p->Passwd,L_PASSWD*L_BYTE); i+=L_PASSWD*L_BYTE;/* 密码 */ memcpy((void*)(pkgH+i),&(p->RetCode),L_INT32); i+=L_INT32;/* 流水号 */ memcpy((void*)(pkgH+i),&(p->Time),L_INT32); i+=L_INT32;/* 时间 */ memcpy((void*)(pkgH+i),p->Reserve,L_BYTE*L_RESERVE); i+=L_RESERVE*L_BYTE;/* 保留 */ memcpy((void*)(pkgH+i),p->Note,L_BYTE*L_NOTE); i+=L_NOTE*L_BYTE;/* 说明 */ return i; }int unpack_head(BYTE *pkg,TRANSACTION *p){ int i=0; memcpy((void *)(&(p->Tcode)),pkg,L_INT16); i+=L_INT16;/* 交易代码 */ memcpy((void *)(&(p->Version)),pkg+i,L_INT16); i+=L_INT16;/* 版本号 */ memcpy((void *)p->User,pkg+i,L_BYTE*L_ACCID); i+=L_BYTE*L_ACCID;/* 用户名 */ memcpy((void *)p->Operator,pkg+i,L_BYTE*L_ACCID); i+=L_BYTE*L_ACCID;/* 操作员 */ memcpy((void *)p->Passwd,pkg+i,L_PASSWD*L_BYTE); i+=L_PASSWD*L_BYTE;/* 密码 */ memcpy((void *)(&(p->RetCode)),pkg+i,L_INT32); i+=L_INT32;/* 流水号 */ memcpy((void *)(&(p->Time)),pkg+i,L_INT32); i+=L_INT32;/* 时间 */ memcpy ((void *)p->Reserve,pkg+i,L_BYTE*L_RESERVE); i+=L_BYTE*L_RESERVE;/* 保留 */ memcpy ((void *)p->Note,pkg+i,L_BYTE*L_NOTE); i+=L_BYTE*L_NOTE;/* 说明 */ return i;}int pack_gquqr(TRANSACTION *p,BYTE * pkg){ int i=0,j=0; i+=L_HEAD; memcpy((void *)(pkg+i),&(p->data.gquqr.Page),L_INT16); i+=L_INT16;/* 页码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.Lastpg),L_INT16); i+=L_INT16;/* 最后页面标志 */ for(j=0;j<LINE_PER_PAGE;j++) { memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].Gid),L_INT32); i+=L_INT32;/* 组编码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].GpMask),L_INT32); i+=L_INT32;/* 组掩码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].Ip),L_INT32); i+=L_INT32;/* Ip */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].IpMask),L_INT32); i+=L_INT32;/* IpMask */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].PeriodTm),L_INT32); i+=L_INT32;/* 时段 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].Wday),L_BYTE); i+=L_BYTE;/* 一周各天 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].SmgMask),L_INT32); i+=L_INT32;/* 系统管理功能掩码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].UmgMask),L_INT32); i+=L_INT32;/* 用户管理功能掩码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].UquMask),L_INT32); i+=L_INT32;/* 查询功能掩码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].OquMask),L_INT32); i+=L_INT32;/* 查询功能掩码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].MgaGid),L_INT32); i+=L_INT32;/* 可管理的GID */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].GidMask),L_INT32); i+=L_INT32;/* 组掩码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].MumgMask),L_INT32); i+=L_INT32;/* 用户管理功能掩码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].MquMask),L_INT32); i+=L_INT32;/* 查询功能掩码 */ memcpy((void *)(pkg+i),&(p->data.gquqr.line[j].MtradMask),L_INT32); i+=L_INT32;/* 查询功能掩码 */ memcpy ((void *)(pkg+i),p->data.gquqr.line[j].Reserve,L_BYTE*L_RESERVE); i+=L_BYTE*L_RESERVE;/* 保留 */ memcpy ((void *)(pkg+i),p->data.gquqr.line[j].Note,L_BYTE*L_NOTE); i+=L_BYTE*L_NOTE;/* 说明 */ } return i;}int unpack_gquqr(BYTE *pkg,TRANSACTION *p){ int i=0,j=0; i+=L_HEAD; memcpy((void *)&(p->data.gquqr.Page),(pkg+i),L_INT16); i+=L_INT16;/* 页码 */ memcpy((void *)&(p->data.gquqr.Lastpg),(pkg+i),L_INT16); i+=L_INT16;/* 最后页面标志 */ for(j=0;j<LINE_PER_PAGE;j++) { memcpy((void *)&(p->data.gquqr.line[j].Gid),(pkg+i),L_INT32); i+=L_INT32;/* 组编码 */ memcpy((void *)&(p->data.gquqr.line[j].GpMask),(pkg+i),L_INT32); i+=L_INT32;/* 组掩码 */ memcpy((void *)&(p->data.gquqr.line[j].Ip),(pkg+i),L_INT32); i+=L_INT32;/* Ip */ memcpy((void *)&(p->data.gquqr.line[j].IpMask),(pkg+i),L_INT32); i+=L_INT32;/* IpMask */ memcpy((void *)&(p->data.gquqr.line[j].PeriodTm),(pkg+i),L_INT32); i+=L_INT32;/* 时段 */ memcpy((void *)&(p->data.gquqr.line[j].Wday),(pkg+i),L_BYTE); i+=L_BYTE;/* 一周各天 */ memcpy((void *)&(p->data.gquqr.line[j].SmgMask),(pkg+i),L_INT32); i+=L_INT32;/* 系统管理功能掩码 */ memcpy((void *)&(p->data.gquqr.line[j].UmgMask),(pkg+i),L_INT32); i+=L_INT32;/* 用户管理功能掩码 */ memcpy((void *)&(p->data.gquqr.line[j].UquMask),(pkg+i),L_INT32); i+=L_INT32;/* 查询功能掩码 */ memcpy((void *)&(p->data.gquqr.line[j].OquMask),(pkg+i),L_INT32); i+=L_INT32;/* 查询功能掩码 */ memcpy((void *)&(p->data.gquqr.line[j].MgaGid),(pkg+i),L_INT32); i+=L_INT32;/* 可管理的GID */ memcpy((void *)&(p->data.gquqr.line[j].GidMask),(pkg+i),L_INT32); i+=L_INT32;/* 组掩码 */ memcpy((void *)&(p->data.gquqr.line[j].MumgMask),(pkg+i),L_INT32); i+=L_INT32;/* 用户管理功能掩码 */ memcpy((void *)&(p->data.gquqr.line[j].MquMask),(pkg+i),L_INT32); i+=L_INT32;/* 查询功能掩码 */ memcpy((void *)&(p->data.gquqr.line[j].MtradMask),(pkg+i),L_INT32); i+=L_INT32;/* 查询功能掩码 */ memcpy ((void *)p->data.gquqr.line[j].Reserve,(pkg+i),L_BYTE*L_RESERVE); i+=L_BYTE*L_RESERVE;/* 保留 */ memcpy ((void *)p->data.gquqr.line[j].Note,(pkg+i),L_BYTE*L_NOTE); i+=L_BYTE*L_NOTE;/* 说明 */ } return i;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -