📄 packetq.cpp
字号:
// PacketQ.cpp: implementation of the PacketQ class.
//
//////////////////////////////////////////////////////////////////////
#include "..\stdafx.h"
//#include "DRPointManger.h"
#include "PacketQ.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#include "../MyLog.h"
// 010309 KHS
int putpacketcount;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
/*
* The following functions are used for randomlize packets
*/
#define KEY 120751750
uint PacketQ::rotate(uint a,uint rn,int dir)
{
uint b,sizeI;
b=a;
sizeI=8*sizeof(uint);
/*dir=-1 : left rotate,from lsb to msb*/
if(dir==1) {
a=a<<rn;
b=b>>(sizeI-rn);
}
/*others : right rotate,from msb to lsb*/
else if(dir==0) {
a=a>>rn;
b=b<<(sizeI-rn);
}
return a=a|b;
}
void PacketQ::intToBuf(char *cp, int val)
{
*cp++ = (char) (val & 0x000000ff);
*cp++ = (char)((val & 0x0000ff00) >> 8);
*cp++ = (char)((val & 0x00ff0000) >> 16);
*cp++ = (char)((val & 0xff000000) >> 24);
}
//---------------------------------------------------------------------------
int PacketQ::bufToInt(unsigned char *cp)
{
int val;
val = *cp++;
val += ((int) *cp++) << 8 ;
val += ((int) *cp++) << 16;
val += ((int) *cp++) << 24;
return(val);
}
uint PacketQ::atrandom(uchar *src, uchar *resstr)
{
uint sizeI,key,source;
memcpy((void*)&source,src,sizeof(uint));
// rn=time(NULL);
sizeI=8*sizeof(uint);
source=(~source&KEY)|(source&(~KEY));
key=rotate(source,KEY%sizeI,1);
memcpy(resstr,(void*)&key,sizeof(uint));
resstr[sizeof(uint)]=0;
return key;
}
uint PacketQ::derandom(uchar *src, uchar *resstr)
{
uint a,sizeI,data,res;
memcpy((void*)&data,src,sizeof(uint));
sizeI=8*sizeof(uint);
//printf("src=%s,key=%u,data=%u\n",src,key,data);
a=rotate(data,KEY%sizeI,0);
res = (~a&(KEY))|(a&(~(KEY)));
memcpy(resstr,(void*)&res,sizeof(uint));
resstr[sizeof(uint)]=0;
return res;
}
//---------------------------------------------------------------------------
PacketQ::PacketQ()
{
query=NULL;
}
PacketQ::~PacketQ()
{
clear();
}
void PacketQ::clear() {
Query *tempque;
tempque=query;
while (tempque!=NULL){
query=query->next;
free (tempque);
tempque=query;
}
query=tempque=NULL;
}
int PacketQ::put(char *buf, int len, bool encode)
{
Query *newque,*tempque;
unsigned char code[MAX_PACKET_LEN+1];
int i;
//DebugPrintf("alloc queue!");
newque = (Query *)malloc(sizeof(Query));
if (newque==NULL)
return 0;
//DebugPrintf("en(de)code (%s)",buf);
if (encode){
int morespaces;
memcpy(code,buf+1,len-1);
morespaces=4-(len-1)%4; /* Ι奔'-'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -