?? hgsmsenddlg.cpp
字號:
}
memset(sm,0,sizeof(sm));
length1/=2;
memcpy(sm,graphic,length1);
//s.TP_udhi=64;
}
if(data_coding==8||data_coding==24||m_unicode)//unicode
{
length=AnsiToUnicode(sm,short_msg,1);
s.sm_length=length*2;
memcpy(s.short_message,short_msg,2*length);
}
else//plain
{
s.sm_length=length1;
memcpy(s.short_message,sm,length1);
}
sprintf(buffer,"SEND:短信息測試:%s %s",ID,sm);
buffer[100]='\0';
xprintf(buffer,"OK");
SaveSubmitSm(s);
}
void CHgsmsendDlg::ChangeReport(REPORT *rep,char *buffer)
{
stocpy(&rep->sequence.code,buffer);
stocpy(&rep->sequence.time,buffer+4);
stocpy(&rep->sequence.sequence,buffer+8);
rep->ReportType=buffer[12];
memcpy(rep->UserNumber,buffer+13,21);rep->UserNumber[21]=0;
rep->State=buffer[34];
rep->ErrorCode=buffer[35];
memcpy(rep->Reserve,buffer+36,8);rep->Reserve[8]=0;
}
void CHgsmsendDlg::ServerRead(char *buf, int length)
{
HEADER h;
REPORT report={0};
char buffer[1024];
char szTemp[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:
sprintf(buffer,"SERVERREAD: BIND FROM %s",SERVER_ADR);
xprintf(buffer,"OK");
Bind_Resp(h.sequence);
break;
case SGIP_UNBIND:
sprintf(buffer,"SERVERREAD: UNBIND FROM %s",SERVER_ADR);
xprintf(buffer,"連接中斷");
Unbind_Resp(h.sequence);
TcpSock.Clean();
break;
case SGIP_UNBIND_RESP:
m_connect=1;
sprintf(buffer,"SERVERREAD: UNBIND_RESP FROM %s",SERVER_ADR);
xprintf(buffer,"OK");
if(WantReset) {
TcpReset();
WantReset=0;
}
break;
case SGIP_DELIVER:
memset(szTemp,0,sizeof(szTemp));
memcpy(szTemp,buf,length);
Deliver_Resp(h.sequence);
sprintf(buffer,"SERVERREAD: DELIVER FROM %s",SERVER_ADR);
xprintf(buffer,"OK");
SaveMoMessage(szTemp);
DeliverProcess(szTemp);
break;
case SGIP_REPORT:
sprintf(buffer,"SERVERREAD: REPORT FROM %s",SERVER_ADR);
xprintf(buffer,"OK");
ChangeReport(&report,buf+20);
SaveReport(report);
Report_Resp(h.sequence);
break;
case SGIP_USERRPT:
sprintf(buffer,"SERVERREAD: USERRPT FROM %s",SERVER_ADR);
xprintf(buffer,"OK");
UserRpt_Resp(h.sequence);
break;
default :
memset(buffer,0,sizeof(buffer));
sprintf(buffer,"command id= %8x",h.command_id);
xprintf(buffer,"OK");
break;
}
}
void CHgsmsendDlg::DeliverProcess(char *buffer)
{
char SPNumber[100];
char UserNumber[100];
char MessageCoding;
char temp[100];
int ContentLength;
unsigned long MessageLength;
char MessageContent[400];
memset(temp,0,sizeof(temp));
memset(UserNumber,0,sizeof(UserNumber));
memcpy(UserNumber,buffer+20,21);
memset(SPNumber,0,sizeof(SPNumber));
memcpy(SPNumber,buffer+41,21);
MessageCoding=buffer[64];
stocpy(&MessageLength,buffer+65);
memset(MessageContent,0,sizeof(MessageContent));
if (MessageCoding==0x00) {
ContentLength=MessageLength;
memcpy(MessageContent,buffer+69,MessageLength);
}
else if (MessageCoding==0x08) {
ContentLength=UnicodeToAnsi(buffer+69,MessageContent);
}
if (stricmp(SPNumber,SPNUMBER)==0) {
if ((strcmp(MessageContent,"00000")==0)||(strcmp(MessageContent,"0000")==0)) {
strcpy(temp,"HYD");
strcpy(MessageContent,"0000");
ToInfoServer(UserNumber,temp);
}
ToInfoServer(UserNumber,MessageContent);
}else {
sprintf(temp,"SPNUM=%s Message=%s",SPNumber,MessageContent);
xprintf(temp,"ERROR!");
}
}
void CHgsmsendDlg::To7199Server(char * UserNumber, char * Message)
{
char szBuffer[1024];
char buffer[1024];
sprintf(szBuffer,"%c%c%s%s%c",STX,FOOTBALL,UserNumber+2,Message,ETX);
AddParityChar((BYTE *)szBuffer);
UdpSockUser.SocketSend(szBuffer,strlen(szBuffer),UDP_PORT_USER,SERVER_7199);
sprintf(buffer,"SENDTO7199 :%s to %s",szBuffer,SERVER_7199);
xprintf(buffer,"WAIT");
}
void CHgsmsendDlg::UdpPortUserRead(char *buf, int length, CString ip)
{
char buffer[8192],temp[300];
char szBuffer[1024];
char FeeValue[100];
char UserNum[100];
char Message[1024];
int UserCount,ptr=0,len;
UserAllStr uas;
int MessageLen=0;
BYTE FeeType=0;
DEF_SENDPOCKET m_sendpocket;
memset(buffer,0,sizeof(buffer));
sprintf(buffer,"READ:message=%s length=%d from %s",buf,length,ip);
buffer[100]=0;
if (buf[1]==ACK) {
if (ip!=SERVER_7199) return;
xprintf("READ ACK FROM 7199SERVER","ACK");
}
else if (buf[1]==NAK) {
if (ip!=SERVER_7199) return;
xprintf("READ NAK FROM 7199SERVER","NAK");
}
else if (buf[1]==IDCALL) {
memset(FeeValue,0,sizeof(FeeValue));
memset(UserNum,0,sizeof(UserNum));
memset(Message,0,sizeof(Message));
memset(szBuffer,0,sizeof(szBuffer));
FeeType=buf[2]-'0';
memcpy(FeeValue,buf+3,6);
memcpy(UserNum,buf+10,11);
memcpy(szBuffer,buf+21,3);
MessageLen=atoi(szBuffer);
if(MessageLen>=1024||MessageLen<0) {
return;
}
memcpy(Message,buf+24,MessageLen);
memset(szBuffer,0,sizeof(szBuffer));
sprintf(szBuffer,"86%s",UserNum);
Submit_Sm(szBuffer,Message,FeeValue,FeeType);
sprintf(szBuffer,"%c%c%c",STX,ACK,ETX);
AddParityChar((BYTE *)szBuffer);
UdpSockUser.SocketSend(szBuffer,strlen(szBuffer),UDP_PORT_USER,SERVER_7199);
xprintf(buffer,"ACK");
xprintf("SENDTO7199 ACK","ACK");
} else if (buf[1]==GROUPCALL) {
memset(FeeValue,0,sizeof(FeeValue));
memset(&uas,0,sizeof(uas));
memset(Message,0,sizeof(Message));
memset(szBuffer,0,sizeof(szBuffer));
FeeType=buf[2]-'0';
memcpy(FeeValue,buf+3,6);
memcpy(szBuffer,buf+9,3);
UserCount=atoi(szBuffer);
ptr=12;
if(UserCount>=100) {
UserCount=100;
}
for(int i=0;i<UserCount;i++) {
ptr+=1;
memset(szBuffer,0,sizeof(szBuffer));
memcpy(szBuffer,buf+ptr,11);
sprintf(uas.item[i].UserNumber,"86%s",szBuffer);
ptr+=11;
}
memset(szBuffer,0,sizeof(szBuffer));
memcpy(szBuffer,buf+ptr,3);
ptr+=3;
MessageLen=atoi(szBuffer);
if(MessageLen>=1024||MessageLen<0) {
return;
}
memcpy(Message,buf+ptr,MessageLen);
Submit_Sm_All(uas,Message,FeeValue,UserCount,FeeType);
sprintf(szBuffer,"%c%c%c",STX,ACK,ETX);
AddParityChar((BYTE *)szBuffer);
UdpSockUser.SocketSend(szBuffer,strlen(szBuffer),UDP_PORT_USER,SERVER_7199);
xprintf(buffer,"ACK");
xprintf("SENDTO7199SERVER ACK","ACK");
}else if(buf[1]==ORDERCONT) {
memcpy(temp,buf+2,3);temp[3]=0;
len=atoi(temp);
memcpy((char *)&m_sendpocket,buf+5,len);
sprintf(buffer,"READ:結構From UDP:%s",ip);
xprintf(buffer,"OK");
SendACK(ip);
Submit_Sm_Cont(m_sendpocket);
if (m_sendpocket.feetype==3) {
m_sendpocket.feetype=9;
Submit_Sm_Cont(m_sendpocket);
}
}else {
xprintf("Unkonw message!","ERROR");
return;
}
}
void CHgsmsendDlg::ServerUnBind()
{
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;
ltocpy(sendstring+i,h.command_id);
i+=4L;
ltocpy(sendstring+i,h.sequence.code);
i+=4L;
ltocpy(sendstring+i,h.sequence.time);
i+=4L;
ltocpy(sendstring+i,h.sequence.sequence);
i+=4L;
sprintf(buffer,"SERVERSEND: UNBIND TO %s",SERVER_ADR);
xprintf(buffer,"OK");
m_connect=0;
// TcpClient.SocketSend(sendstring,h.command_length,TCP_PORT,SERVER_ADR);
Rsock.Send(sendstring,h.command_length);
}
void CHgsmsendDlg::Submit_Sm_All(UserAllStr UserAll, char *Message, char *FeeValue,int UserCount,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));
memset(s.ChargeNumber,0,sizeof(s.ChargeNumber));
for (int i=0;i<UserCount;i++)
strcpy(s.UserNumber[i],UserAll.item[i].UserNumber);
s.UserCount=UserCount;
s.MessageCoding=8;//unicode
s.FeeType=FeeType;
memcpy(s.CorpId,CORPID,5);
strcpy(s.SPNumber,SPNUMBER);
//memcpy(s.ServiceType,業務代碼,strlen(業務代碼));
Fee=atoi(FeeValue);
if(Fee>=100000||Fee<0) {
return;
xprintf("Fee Error!!!","Error");
}
sprintf(s.FeeValue,"%d",Fee);
//sprintf(s.GivenValue,"%d",取值范圍0-99999,贈送用戶的話費,單位為分,由SP定義);
s.AgentFlag=1;
if(strnicmp(Message,"您已成功定制世界杯足球信息",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(Message,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::OnSysconfig()
{
WinExec("notepad.exe sgipini.ini",1);
}
void CHgsmsendDlg::ToInfoServer(char *UserNumber, char *Message)
{
char szBuffer[1024],addr[100]={0},opt[100]={0},id[100]={0};
char buffer[1024];
char length[50];
int len=0;
len=strlen(Message);
len+=strlen(UserNumber)-2;
memset(length,0,sizeof(length));
sprintf(length,"%03d",len);
sprintf(szBuffer,"%c%c%s%s%s%c",STX,AUTOMO,length,UserNumber+2,Message,ETX);
AddParityChar((BYTE *)szBuffer);
GetService(id,Message,opt,addr);
if (strcmp(addr,SERVER_7199)==0)
UdpSockUser.SocketSend(szBuffer,strlen(szBuffer),UDP_PORT_USER,addr);
else
UdpSockSend.SocketSend(szBuffer,strlen(szBuffer),UDP_PORT_SEND,addr);
sprintf(buffer,"SENDTOINFOSERVER :%s to %s",szBuffer,addr);
xprintf(buffer,"WAIT");
MoLog(UserNumber+2,"",Message);
}
void CHgsmsendDlg::SaveMoMessage(char * buffer)
{
CTime time;
FILE *hFile;
char temp[512]={0},buf[512]={0},UserNumber[100]={0};
time=time.GetCurrentTime();
memcpy(UserNumber,buffer+20,21);
sprintf(temp,"e:/Original/%02d%02d.txt",time.GetMonth(),time.GetDay());
hFile=_fsopen(temp,"a",SH_DENYWR);
strcpy(temp,buffer+65);
if(hFile==NULL)
return;
sprintf(buf,"%02d:%02d:%02d %s %s",time.GetHour(),time.GetMinute(),time.GetSecond(),UserNumber,temp);
fprintf(hFile,"%s\n",buf);
fclose(hFile);
}
void CHgsmsendDlg::OnOk()
{
// TODO: Add your command handler code here
CDialog::OnOK();
}
void CHgsmsendDlg::OnOK()
{
return;
}
void CHgsmsendDlg::OnCancel()
{
return;
}
//===========<B add by 肖桂云 2003/08/28 監控>================//
void CHgsmsendDlg::SendActive()
{
char szBuffer[1024],temp[200]="SGIP7199",ss[500];
static char WatchAddr[50]="128.1.0.51";
static char WatchMode='3';
int len;
static aOldTime=time(NULL);
time_t aCurTime;
time(&aCurTime);
if (aCurTime > (aOldTime + 10))
{
aOldTime = aCurTime;
sprintf(ss,"%03d%s%03d%s",strlen(temp),temp,strlen(watchstr),watchstr);
len = strlen(ss);
sprintf(szBuffer,"%c%c%03d%s%c",STX,0x99,len,ss,ETX);
AddParityChar((BYTE *)szBuffer);
UdpSockUser.SocketSend(szBuffer,strlen(szBuffer),3000,WatchAddr);
}
}
//===========<E add by 肖桂云 2003/08/28 監控>================//
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -