⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packer.c

📁 国际标准协议的
💻 C
📖 第 1 页 / 共 4 页
字号:
/* 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 + -