📄 hgsmsenddlg.cpp
字号:
}
else
{
esm_class=0;
}
memset(buffer,0,sizeof(buffer));
memcpy(buffer,buf+35,3);
nLength=atoi(buffer);
if (nLength>140||nLength<1)
{
sprintf(buffer,"READ FROM %s MESSAGE LENGTH ERROR!",ip);
xprintf(buffer,"OK");
SendNak(PARITYERROR,ip);
sprintf(buffer,"SEND NAK TO %s",ip);
xprintf(buffer,"OK");
return ;
}
memset(buffer,0,sizeof(buffer));
memcpy(buffer,buf+38,nLength);
buffer[nLength]=0;
memset(tempring,0,sizeof(tempring));
sprintf(tempring,"READ:7198From UDP:%s",ip);
xprintf(tempring,"OK");
SendACK(ip);
Submit_Sm_7198(id,nLength,buffer,(BYTE)buf[1],data_coding,esm_class,FeeValue,FeeType,ChargeID);
break;
}else
if(buf[1]==ORDERCONT)
{
memcpy(temp,buf+2,3);temp[3]=0;
len=atoi(temp);
if (len<=sizeof(DEF_SENDPOCKET))
memcpy((char *)&m_sendpocket,buf+5,len);
else
memcpy((char *)&m_sendpocket,buf+5,sizeof(DEF_SENDPOCKET));
sprintf(tempring,"READ:结构From UDP:%s",ip);
xprintf(tempring,"OK");
SendACK(ip);
Submit_Sm_Cont(m_sendpocket);
if (m_sendpocket.feetype==3) {
m_sendpocket.feetype=9;
Submit_Sm_Cont(m_sendpocket);
}
break;
}
else
{
i=1;
memset(buffer,0,sizeof(buffer));
memcpy(buffer,buf+i,2);
i+=2;
nLength=atoi(buffer);
mlong=nLength;
if (nLength>20)
{
sprintf(buffer,"READ FROM %s PHONE LENGTH ERROR!",ip);
xprintf(buffer,"OK");
UdpSockSend.SocketSend("NAK",3,UDP_PORT_SEND,ip);
sprintf(buffer,"SEND: NAK TO %s",ip);
xprintf(buffer,"OK");
return;
}
memcpy(temp,buf+i,nLength);
sprintf(id,"86%s",temp);
i+=nLength;
memset(buffer,0,sizeof(buffer));
memcpy(buffer,buf+i,3);
i+=3;
nLength=atoi(buffer);
if (nLength>999||nLength<1)
//if (nLength>80||nLength<1)
{
sprintf(buffer,"READ FROM %s MESSAGE LENGTH ERROR!",ip);
xprintf(buffer,"OK");
UdpSockSend.SocketSend("NAK",3,UDP_PORT_SEND,ip);
sprintf(buffer,"SEND: NAK TO %s",ip);
xprintf(buffer,"OK");
return ;
}
memset(buffer,0,sizeof(buffer));
memcpy(buffer,buf+i,nLength);
i+=nLength;
if (i!=length)
{
sprintf(buffer,"READ FROM %s PACKET ERROR!",ip);
xprintf(buffer,"OK");
UdpSockSend.SocketSend("NAK",3,UDP_PORT_SEND,ip);
sprintf(buffer,"SEND: NAK TO %s",ip);
xprintf(buffer,"OK");
return;
}
sprintf(buffer,"READ SUBMIT_SM FROM %s (%s) \n %s",ip,id,buf+6+mlong);
xprintf(buffer,"OK");
UdpSockSend.SocketSend("ACK",3,UDP_PORT_SEND,ip);
sprintf(buffer,"SEND: ACK TO %s",ip);
xprintf(buffer,"OK");
Submit_Sm(id,buf+6+mlong,"000010",2 );
break;
}
case 'A':
sprintf(buffer,"READ DELIVER_SM_RESP FROM %s ",ip);
xprintf(buffer,"OK");
break;
}
}
void CHgsmsendDlg::Submit_Sm(char *ID, char *sm,char *FeeValue,BYTE FeeType)
{
SUBMIT s;
int length,Fee=0;
char short_msg[8192],buffer[1024];
char temptime[100];
memset(temptime,0,sizeof(temptime));
memset(&s,0,sizeof(SUBMIT));
memset(buffer,0,sizeof(buffer));
s.h.command_id=SGIP_SUBMIT;
s.h.sequence.code=SOURCODE;///源结点码。
MakeTime(temptime);
s.h.sequence.time=atol(temptime);
s.h.sequence.sequence=sequence_number++;
sequence_number%=0x10000000;
memset(short_msg,0,sizeof(short_msg));
memcpy(s.ChargeNumber,ID,strlen(ID));
memcpy(s.UserNumber,ID,strlen(ID));
s.UserCount=1;
s.MessageCoding=8;//unicode
s.FeeType=FeeType;
memcpy(s.CorpId,CORPID,5);
sprintf(s.SPNumber,"%s",SPNUMBER);
//memcpy(s.ServiceType,业务代码,strlen(业务代码));
if ((FeeType==0)&&(Fee==20)) strcpy(s.ServiceType,"TH");
Fee=atoi(FeeValue);
if(Fee>=100000||Fee<0)
{
return;
}
sprintf(s.FeeValue,"%d",Fee);
//sprintf(s.GivenValue,"%d",取值范围0-99999,赠送用户的话费,单位为分,由SP定义);
s.AgentFlag=1;
if(strnicmp(sm,"您已成功定制世界杯足球信息",strlen("您已成功定制世界杯足球信息"))==0)
{
s.MorelatetoMTFlag=0;
}
else
{
s.MorelatetoMTFlag=2;
}
// s.Priority=0;优先级0-9从低到高,默认为0
//sprintf((s.ExpireTime,"%02d%02d%02d%02d%02d%02d032+",短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中“tnnp”取固定值“032+”,即默认系统为北京时间);
//sprintf(s.ScheduleTime,"02d%02d%02d%02d%02d%02d032+",短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为“yymmddhhmmsstnnp” ,其中“tnnp”取固定值“032+”,即默认系统为北京时间);
s.ReportFlag=2;
//s.TP_pid=GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9;
//s.TP_udhi=GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9;
//s.MessageType=0;信息类型:0-短消息信息
//memcpy(s.Reserve,保留,扩展用);
length=AnsiToUnicode(sm,short_msg,1);
s.sm_length=length*2;
if(s.sm_length>141)
{
xprintf("TO 短信中心信息过长,信息被截短!!!!","ERROR!");
memcpy(s.short_message,short_msg,140);
s.sm_length=140;
}
else
{
memcpy(s.short_message,short_msg,s.sm_length);
}
SaveSubmitSm(s);
}
void CHgsmsendDlg::CheckSubmitSmBuffer()
{
if(m_save.i<=0) return;
if(LineTest==3) {
//LineTest=0;
TcpReset();
LineTest++;
return;
}
m_save.times[0]++;
if(m_save.times[0]>6) {
RemoveSubmitSM(m_save.submit[0].h.sequence.sequence);
return;
}else{
LineTest++;
send_submit_sm(m_save.submit[0]);
}
}
void CHgsmsendDlg::RemoveSubmitSM(unsigned int number)
{
int i,j;
for (i=0;i<m_save.i;i++)
{
if (m_save.submit[i].h.sequence.sequence==number)
{
for (j=i;j<(m_save.i-1);j++)
{
memcpy(&m_save.submit[j],&m_save.submit[j+1],sizeof(SUBMIT));
m_save.times[j]=m_save.times[j+1];
}
m_save.i--;
if (m_save.i<0) m_save.i=0;
memset(&m_save.submit[m_save.i],0,sizeof(SUBMIT));
m_save.times[m_save.i]=0;
break;
}
}
}
void CHgsmsendDlg::SaveSubmitSm(SUBMIT s)
{
if(m_save.i>=BUFFER_SIZE)
{
xprintf("BUFFER IS FULL!","");
return;
}
m_save.times[m_save.i]=0;
memcpy(&m_save.submit[m_save.i],&s,sizeof(SUBMIT));
m_save.i++;
}
void CHgsmsendDlg::TcpRead(char *buf, int length)
{
HEADER h;
char buffer[1024];
char Status[1024];
stocpy(&h.command_length,buf);
stocpy(&h.command_id,buf+4);
stocpy(&h.sequence.code,buf+8);
stocpy(&h.sequence.time,buf+12);
stocpy(&h.sequence.sequence,buf+16);
switch (h.command_id)
{
case SGIP_BIND_RESP:
m_connect=1;
if(GetStatus(buf[20],Status))
{
sprintf(buffer,"READ: BIND_TRANSMITTER_RESP FROM %s",SERVER_ADR);
xprintf(buffer,"绑定成功");
}
else
{
sprintf(buffer,"READ: BIND_TRANSMITTER_RESP FROM %s",SERVER_ADR);
xprintf(buffer,Status);
}
break;
case SGIP_UNBIND:
sprintf(buffer,"READ: UNBIND FROM %s",SERVER_ADR);
xprintf(buffer,"连接中断");
Unbind_Resp(h.sequence);
TcpReset();
break;
case SGIP_UNBIND_RESP:
m_connect=1;
sprintf(buffer,"READ: UNBIND_RESP FROM %s",SERVER_ADR);
xprintf(buffer,"OK");
if(WantReset)
{
TcpReset();
WantReset=0;
}
break;
case SGIP_SUBMIT_RESP:
m_connect=1;
if(GetStatus(buf[20],Status))
{
sprintf(buffer,"READ: SUBMIT_SM_RESP FROM %s",SERVER_ADR);
xprintf(buffer,"OK");
SaveLog(h.sequence);
LineTest=0;
RemoveSubmitSM(h.sequence.sequence);
}
else
{
sprintf(buffer,"READ: SUBMIT_SM_RESP FROM %s",SERVER_ADR);
xprintf(buffer,Status);
}
break;
case SGIP_TRACE_RESP:
sprintf(buffer,"READ: TRACE_RESP FROM %s",SERVER_ADR);
xprintf(buffer,"OK");
break;
default :
memset(buffer,0,sizeof(buffer));
sprintf(buffer,"command id= %8x",h.command_id);
xprintf(buffer,"OK");
break;
}
}
void CHgsmsendDlg::send_submit_sm(SUBMIT s)
{
long i;
char buffer[1024];
char temptime[100];
memset(temptime,0,sizeof(temptime));
i=4L;
memset(sendstring,0,sizeof(sendstring));
ltocpy(sendstring+i,s.h.command_id);
i+=4L;
ltocpy(sendstring+i,s.h.sequence.code);
i+=4L;
ltocpy(sendstring+i,s.h.sequence.time);
i+=4L;
ltocpy(sendstring+i,s.h.sequence.sequence);
i+=4L;
memcpy(sendstring+i,s.SPNumber,21);
i+=21L;
memcpy(sendstring+i,s.ChargeNumber,21);
i+=21L;
sendstring[i]=s.UserCount;
i+=1L;
for(int j=0;j<s.UserCount;j++)
{
memcpy(sendstring+i,s.UserNumber[j],21);
i+=21L;
}
memcpy(sendstring+i,s.CorpId,5);
i+=5L;
memcpy(sendstring+i,s.ServiceType,10);
i+=10L;
sendstring[i]=s.FeeType;
i+=1L;
memcpy(sendstring+i,s.FeeValue,6);
i+=6L;
memcpy(sendstring+i,s.GivenValue,6);
i+=6L;
sendstring[i]=s.AgentFlag;
i+=1L;
sendstring[i]=s.MorelatetoMTFlag;
i+=1L;
sendstring[i]=s.Priority;
i+=1L;
memcpy(sendstring+i,s.ExpireTime,16);
i+=16L;
memcpy(sendstring+i,s.ScheduleTime,16);
i+=16L;
sendstring[i]=s.ReportFlag;
i+=1L;
sendstring[i]=s.TP_pid;
i+=1L;
sendstring[i]=s.TP_udhi;
i+=1L;
sendstring[i]=s.MessageCoding;
i+=1L;
sendstring[i]=s.MessageType;
i+=1L;
ltocpy(sendstring+i,s.sm_length);
i+=4L;
memcpy(sendstring+i,s.short_message,s.sm_length);
i+=s.sm_length;
memcpy(sendstring+i,s.Reserve,8);
i+=8;
s.h.command_length=i;
ltocpy(sendstring,s.h.command_length);
sprintf(buffer,"SEND: SUBMIT_SM TO %s",SERVER_ADR);
xprintf(buffer,"OK");
m_connect=0;
TcpClient.SocketSend(sendstring,s.h.command_length,TCP_PORT,SERVER_ADR);
}
void CHgsmsendDlg::Bind_Transmitter()
{
long i;
BIND b;
char buffer[1024];
char temptime[100];
memset(&b,0,sizeof(BIND));
memset(temptime,0,sizeof(temptime));
b.h.command_id=SGIP_BIND;
b.h.sequence.code=SOURCODE;///源结点码。
MakeTime(temptime);
b.h.sequence.time=atol(temptime);
b.h.sequence.sequence=sequence_number++;
sequence_number%=0x10000000;
memcpy(b.login_name,LOG_NAME,strlen(LOG_NAME));
memcpy(b.login_password,LOG_PASSWORD,strlen(LOG_PASSWORD));
i=4L;
memset(sendstring,0,sizeof(sendstring));
ltocpy(sendstring+i,b.h.command_id);
i+=4L;
ltocpy(sendstring+i,b.h.sequence.code);
i+=4L;
ltocpy(sendstring+i,b.h.sequence.time);
i+=4L;
ltocpy(sendstring+i,b.h.sequence.sequence);
i+=4L;
b.login_type=1;
sendstring[i]=1;//login type
i+=1;
memcpy(sendstring+i,b.login_name,16);
i+=16;
memcpy(sendstring+i,b.login_password,16);
i+=16;
memcpy(sendstring+i,b.reserve,8);
i+=8;
b.h.command_length=i;
ltocpy(sendstring,b.h.command_length);
sprintf(buffer,"SEND: BIND_TRANSMITTER TO %s ",SERVER_ADR);
xprintf(buffer,"OK");
m_connect=0;
TcpClient.SocketSend(sendstring,b.h.command_length,TCP_PORT,SERVER_ADR);
}
void CHgsmsendDlg::UnBind()
{
long i;
HEADER h;
char buffer[1024];
char temptime[100];
memset(temptime,0,sizeof(temptime));
memset(&h,0,sizeof(HEADER));
h.command_length=20L;
h.command_id=SGIP_UNBIND;
h.sequence.code=SOURCODE;///源结点码。
MakeTime(temptime);
h.sequence.time=atol(temptime);
h.sequence.sequence=sequence_number++;
sequence_number%=0x10000000;
i=0L;
memset(sendstring,0,sizeof(sendstring));
ltocpy(sendstring+i,h.command_length);
i+=4L;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -