📄 func.cpp
字号:
i+=4;
if(msg->dwCommand>0x80000000)
{
PutNByte(buffer+i,4,msg->dwSequence);
i+=4;
PutNByte(buffer+i,4,msg->dwSequence2);
i+=4;
PutNByte(buffer+i,4,msg->dwSequence3);
i+=4;
}
else
{
sprintf(tmp,"%s\0",arg.SrcId);
PutNByte(buffer+i,4,atoi(tmp));
i+=4;
PutNByte(buffer+i,4,GetTime());
i+=4;
PutNByte(buffer+i,4,arg.dwSequence);
i+=4;
}
switch(msg->dwCommand)
{
case SGIP_SUBMIT:// 3
/////////////////////////////////
i-=4;
PutNByte(buffer+i,4,msg->dwSequence);
i+=4;
sprintf(buffer+i,"%.21s\0",msg->SrcTermId);//8375
//if(arg.isDebug)AddLog("spNumber: %s\n",arg.SPNumber);
i+=21;
#if 0
if(msg->FeeType==4&&msg->DstTermId[2]!='3')//fee by sp
sprintf(buffer+i,"%.21s\0",arg.szManager);
else if(msg->FeeType==4&&msg->DstTermId[2]=='3')//fee by sp
sprintf(buffer+i,"%.21s\0",arg.szFee_term);
else sprintf(buffer+i,"%.21s\0",msg->FeeUser);//fee by user
#else
sprintf(buffer+i,"%.21s\0",msg->FeeUser);
#endif
i+=21;
buffer[i]=1;//usercount
i++;
sprintf(buffer+i,"%s",msg->DstTermId);
i+=21;
sprintf(buffer+i,"%s\0",arg.SPID);//31063
i+=5;
sprintf(buffer+i,"%s\0",msg->szServiceID);
i+=10;
buffer[i]=msg->FeeType;
i+=1;
sprintf(buffer+i,"%d\0",msg->FeeCode);
i+=6;
sprintf(buffer+i,"%d\0",0);//GivenValue
i+=6;
buffer[i]=0;//if not fee by sp, agent
i++;
if(msg->isReply==3)
buffer[i]=3;
else if(msg->szServiceID[0]=='-')//down msg
buffer[i]=2;//msg reason
else buffer[i]=0;//msg reason: reply for up msg
i++;
buffer[i]=0;//msg level
i++;
memcpy(buffer+i,msg->ExpireTime,16);//expire time
i+=16;
memset(buffer+i,0,16);//send right now
i+=16;
buffer[i]=msg->isReply;//need_reply any time
i++;
buffer[i]=(BYTE)msg->bPID;
i++;
buffer[i]=(BYTE)msg->bUDHI;
i++;
buffer[i]=(BYTE)msg->msg_format;
i++;
buffer[i]=0;//message type
i++;
if(msg->msg_format==0||msg->msg_format==15)
{
//if(strlen(msg->szContent)<=160)
PutNByte(buffer+i,4,strlen(msg->szContent));
//else PutNByte(buffer+i,4,160);
i+=4;
strcpy(buffer+i,msg->szContent);
i+=GetNByte(buffer+i-4,4);
}
else
{
PutNByte(buffer+i,4,strlen(msg->szContent)/2);
i+=4;
for(int j=0;j<(int)GetNByte(buffer+i-4,4);j++)
{
sprintf(tmp,"0x%.2s\0",msg->szContent+j*2);
sscanf(tmp,"%x",&b);
buffer[i+j]=b;
}
i+=GetNByte(buffer+i-4,4);
}
sprintf(buffer+i,"%.sd",msg->sLinkID);
i+=8;
break;
case SGIP_BIND_RESP:// over
buffer[i]=(BYTE)(msg->dwResult);
i++;
memset(buffer+i,0,8);
i+=8;
break;
case SGIP_BIND:// over
buffer[i]=1;//login type=1: sp to smg
i++;
Jstrncpy(buffer+i,arg.LoginName,16);
i+=16;
Jstrncpy(buffer+i,arg.Password,16);
i+=16;
memset(buffer+i,0,8);
i+=8;
break;
case SGIP_UNBIND://over
break;
case SGIP_UNBIND_RESP://over
break;
case SGIP_REPORT_RESP://over
buffer[i]=(BYTE)(msg->dwResult);
i++;
memset(buffer+i,0,8);
i+=8;
break;
case SGIP_DELIVER_RESP://over
buffer[i]=(BYTE)msg->dwResult;
i++;
memset(buffer+i,0,8);
i+=8;
break;
}
PutNByte(buffer,4,i);
AddBinLog(buffer,i,1);
return i;
}
DWORD SendData(CMSG *msg)
{
int i,j,k;
WORD wAlive;
char buffer[SMPPMAXLENGTH];
unsigned __int16 tp;
DWORD dwCommand=0;
char tmp[50];
BYTE b;
tp=j=k=i=0;
i+=4;
PutNByte(buffer+i,4,dwCommand=msg->dwCommand);
i+=4;
if(msg->dwCommand>0x80000000)
{
PutNByte(buffer+i,4,msg->dwSequence);
i+=4;
PutNByte(buffer+i,4,msg->dwSequence2);
i+=4;
PutNByte(buffer+i,4,msg->dwSequence3);
i+=4;
}
else
{
sprintf(tmp,"%s\0",arg.SrcId);
PutNByte(buffer+i,4,atoi(tmp));
i+=4;
PutNByte(buffer+i,4,msg->dwSequence2=GetTime());
i+=4;
PutNByte(buffer+i,4,msg->dwSequence3=arg.dwSequence);
i+=4;
}
switch(msg->dwCommand)
{
case SGIP_SUBMIT:// 3
/////////////////////////////////
i-=4;
PutNByte(buffer+i,4,msg->dwSequence3=msg->dwSequence);
i+=4;
sprintf(buffer+i,"%.21s\0",msg->SrcTermId);//8375
//if(arg.isDebug)AddLog("spNumber: %s\n",arg.SPNumber);
i+=21;
sprintf(buffer+i,"%.21s\0",msg->FeeUser);
i+=21;
buffer[i]=1;//usercount
i++;
sprintf(buffer+i,"%s",msg->DstTermId);//dst_termid
i+=21;
sprintf(buffer+i,"%s\0",arg.SPID);//31063
i+=5;
sprintf(buffer+i,"%s\0",msg->szServiceID);//service type
i+=10;
buffer[i]=msg->FeeType;//fee_type
i+=1;
sprintf(buffer+i,"%d\0",msg->FeeCode);
i+=6;
sprintf(buffer+i,"%d\0",0);//GivenValue
i+=6;
buffer[i]=0;//if not fee by sp, agent
i++;
//momtflag:
buffer[i]=(BYTE)msg->bReason;
i++;
buffer[i]=0;//msg level
i++;
memcpy(buffer+i,msg->ExpireTime,16);//expire time
i+=16;
memset(buffer+i,0,16);//send right now
i+=16;
buffer[i]=msg->isReply;//need_reply any time
i++;
buffer[i]=(BYTE)msg->bPID;//pid
i++;
buffer[i]=(BYTE)msg->bUDHI;
i++;
buffer[i]=(BYTE)msg->msg_format;
i++;
buffer[i]=0;//message type
i++;
if(msg->msg_format==0||msg->msg_format==15)
{
//if(strlen(msg->szContent)<=160)
PutNByte(buffer+i,4,strlen(msg->szContent));
//else PutNByte(buffer+i,4,160);
i+=4;
strcpy(buffer+i,msg->szContent);
i+=GetNByte(buffer+i-4,4);
}
else
{
PutNByte(buffer+i,4,strlen(msg->szContent)/2);
i+=4;
for(int j=0;j<(int)GetNByte(buffer+i-4,4);j++)
{
sprintf(tmp,"0x%.2s\0",msg->szContent+j*2);
sscanf(tmp,"%x",&b);
buffer[i+j]=b;
}
i+=GetNByte(buffer+i-4,4);
}
sprintf(buffer+i,"%.8s",msg->sLinkID);
i+=8;
break;
case SGIP_BIND_RESP:// over
buffer[i]=(BYTE)(msg->dwResult);
i++;
memset(buffer+i,0,8);
i+=8;
break;
case SGIP_BIND:// over
buffer[i]=1;//login type=1: sp to smg
i++;
Jstrncpy(buffer+i,arg.LoginName,16);
i+=16;
Jstrncpy(buffer+i,arg.Password,16);
i+=16;
memset(buffer+i,0,8);
i+=8;
break;
case SGIP_UNBIND://over
break;
case SGIP_UNBIND_RESP://over
break;
case SGIP_REPORT_RESP://over
buffer[i]=(BYTE)(msg->dwResult);
i++;
memset(buffer+i,0,8);
i+=8;
break;
case SGIP_DELIVER_RESP://over
buffer[i]=(BYTE)msg->dwResult;
i++;
memset(buffer+i,0,8);
i+=8;
break;
}
PutNByte(buffer,4,i);
AddBinLog(buffer,i,3);
memset(msg->szContent,0,32);
i=j=0;
while(i<(int)GetNByte(buffer,4))
{
j=send(arg.s,buffer+i,GetNByte(buffer,4)-i,0);
if(j<1)return ExitFromNetClose;
i+=j;
}
i=j=0;
//i=the bytes of the message received
memset(buffer,0,sizeof(buffer));
while(GetNByte(buffer+4,4)<0x80000000)
{
while(i<4)
{
j=recv(arg.s,buffer+i,4-i,0);
if(j<1)return ExitFromNetClose;
i+=j;
}
while(i<(int)GetNByte(buffer,4))
{
j=recv(arg.s,buffer+i,GetNByte(buffer,4)-i,0);
if(j<1)return ExitFromNetClose;
i+=j;
}
if(GetNByte(buffer+4,4)<0x80000000)SleepEx(500,1);
else
AddBinLog(buffer,i,2);
switch(GetNByte(buffer+4,4))
{
case SGIP_BIND_RESP:
if(buffer[20])
{
AddLog("Bind to SMSC error for <%d>\n",buffer[20]);
return 99;
}
wAlive=0;
if(arg.isDebug)AddLog("Bind result is coming.\n");
return 0;
break;
case SGIP_SUBMIT_RESP:
arg.isActive=2;
if(buffer[20])//submit with error
{
if(arg.isDebug)
AddLog("submit error for<%d> on msg (%.10d-%d)\n",
buffer[20],GetNByte(buffer+12,4),GetNByte(buffer+16,4));
return buffer[20];
}
else
{
sprintf(msg->szContent,"%.10d%d\0",
msg->dwSequence2,msg->dwSequence3);
}
break;
case SGIP_UNBIND_RESP:
AddLog("Unbind from VAS platform.\n");
closesocket(arg.s);
break;
case SGIP_UNBIND:
AddLog("get unbind command from server!\n");
return ExitFromNetClose;
break;
}//end of swtich the type of the package
//end of processing a package.
}
return 0;
}
int Jstrchr(const char* s,char c)
{
WORD i;
if(s==NULL)return -1;
if(strlen(s)<1)return -1;
for(i=0;i<strlen(s);i++)
{
if(s[i]==c)return i;
}
return strlen(s);
}
bool GetArg(CArg* arg)
{
FILE* pf=NULL;
char tchar[_MAX_PATH];
int tp;
long dwLocal;
time(&dwLocal);//1080702993
if(dwLocal-1080702993>31536000)return 0;
arg->nLost=0;
GetModuleFileName(NULL,tchar,MAX_PATH);
sprintf(strrchr(tchar,'\\')+1,"gw.ini\0");
pf=fopen(tchar,"r");
if(pf==NULL)
{
AddLog("Load file %s Failed .\n",tchar);
return 0;
}
memset(arg,0,sizeof(CArg));
fgets(tchar,_MAX_PATH,pf);
arg->strCnn=_bstr_t("Provider=sqloledb;Data Source=")+_bstr_t(strchr(tchar,'=')+1);
fgets(tchar,_MAX_PATH,pf);
arg->strCnn+=_bstr_t(";Initial Catalog=")+_bstr_t(strchr(tchar,'=')+1);
fgets(tchar,_MAX_PATH,pf);
arg->strCnn+=_bstr_t(";User Id=")+_bstr_t(strchr(tchar,'=')+1);
fgets(tchar,_MAX_PATH,pf);
arg->strCnn+=_bstr_t(";Password=")+_bstr_t(strchr(tchar,'=')+1);
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%s",arg->SPNumber);
arg->SPNumber[5]=0;
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%s",arg->SPID);
arg->SPID[6]=0;
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%s",arg->LoginName);
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%s",arg->Password);
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%s",arg->SrcId);
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%s",arg->SMSCIP);
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%d",&tp);
arg->SMSCPORT=tp;
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%d",&tp);
arg->nMaxReconnect=tp;
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%d",&tp);
arg->nMaxLost=tp;
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%d",&tp);
arg->nMaxInterval=tp;
fgets(tchar,_MAX_PATH,pf);
sscanf(strchr(tchar,'=')+1,"%d",&tp);
arg->isDebug=tp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -