📄 smppsock3.cpp
字号:
phead->command_length=packet_len;
//phead->sequence_no=m_sequence++;
//UINT send_sequence=phead->sequence_no;
network_head(phead);
if(send(m_hSocket,(const char*)phead,packet_len,0)==SOCKET_ERROR)
send(m_hSocket,(const char*)phead,packet_len,0);
printf(" smc query link,and have responde.\n");
}
else if(phead->command_id==ESME_SUB_SM_RESP)
{
if(send_sequence!=phead->sequence_no) //序号不对
{
printf("FAILED: Sequence not equal,%u->%u",send_sequence,phead->sequence_no);
}
if(phead->command_status==E_SUCCESS)
{
strcpy(smc_msgid,(char*)(buffer+sizeof(struct MESSAGE_HEAD)));
char str[100];
sprintf(str,"%05u--> %s Submit +OK.",send_sequence,destaddr);
PRINTOUT(str);
return 1;
}
else
{
char str[100];
sprintf(str,"FAILED: SubmitSM. command_status=%d ",phead->command_status);
PRINTOUT(str);
return -2;
}
}
if(phead->command_status==E_SUCCESS)
{
puts(" Submit +OK.");
return 1;
}
else
{
puts("FAILED: Submit.");
return -2;
}
}
}
Sleep(50);
if(bEventMainOver) break;
if(time(NULL)-starttime>MAX_SUBTIME) //5--10s
{
puts("FAILED: SendSM receive timeout");
//fLogout(FALSE); //fDisconnect();
Sleep(1000);
return -4;
}
}
return -4;
}
/*******************************************************************************
return
0 : no login or socket connect
-1: send buf failed
-4: receive response timeout
-5: logout be rejected
>0: success
*******************************************************************************/
int CSmppSock::fLogout(bool bResp)
{
printf("Logouting.....") ;
if(!m_bAlive) {printf("FAILED: logout,but no login."); return 0;}
MESSAGE_HEAD head;
UINT packet_len=sizeof(MESSAGE_HEAD);
head.command_length=packet_len;
head.command_id=ESME_UBD;
head.command_status=0;
head.sequence_no=m_sequence++;
UINT logout_sequence=head.sequence_no;
network_head(&head);
if(send(m_hSocket,(const char*)&head,packet_len,0)<0)
if(send(m_hSocket,(const char*)&head,packet_len,0)<0)
{
puts("FAILED: send packet failed.");
return -0xff;
}
Sleep(100);
if(!bResp) return 1;
//receive
DWORD dRevLen;
UINT starttime=time(NULL);
while(1)
{
ioctlsocket(m_hSocket,FIONREAD,&dRevLen);
if(dRevLen>=sizeof(MESSAGE_HEAD))
{
memset(&head,0,sizeof(MESSAGE_HEAD));
dRevLen=fReceive((BYTE*)&head,sizeof(MAX_SMPP_COM_BUF));
if(logout_sequence==head.sequence_no && head.command_id==ESME_UBD_RESP)
{
if(head.command_status==E_SUCCESS)
{
m_bAlive=FALSE; puts("Logout +OK.");
return 1;
}
else
{
puts("FAILED: Logout ");
return -5;
}
}
}
Sleep(100);
if(bEventMainOver) break;
if(time(NULL)-starttime>MAX_LOGOUTTIME) //5--10s
{
puts("FAILED: Logout,receive timeout");
return -4;
}
}
return -4;
}
/*********************************************************************************
return
/*********************************************************************************/
int CSmppSock::fAliveTst(BOOL bResp)
{
puts("Alive test.....") ;
if(!m_bConnected) {printf("FAILED: have not connected."); return 0;}
MESSAGE_HEAD head;
UINT packet_len=sizeof(MESSAGE_HEAD);
head.command_length=packet_len;
head.command_id=ESME_QRYLINK;
head.command_status=0;
head.sequence_no=m_sequence++;
UINT querylink_sequence=head.sequence_no;
network_head(&head);
if(send(m_hSocket,(const char*)&head,packet_len,0)<0)
if(send(m_hSocket,(const char*)&head,packet_len,0)<0)
{
puts("FAILED: send packet failed.");
return -0xff;
}
if(!bResp) return m_bAlive;
Sleep(100);
//receive
DWORD dRevLen;
UINT starttime=time(NULL);
while(1)
{
ioctlsocket(m_hSocket,FIONREAD,&dRevLen);
if(dRevLen>=sizeof(MESSAGE_HEAD))
{
memset(&head,0,sizeof(MESSAGE_HEAD));
dRevLen=fReceive((BYTE*)&head,sizeof(MAX_SMPP_COM_BUF));
//printf("%d and resp %d\n",querylink_sequence,head.sequence_no);
if(head.command_id==ESME_QRYLINK_RESP)//序列号对不上 && querylink_sequence==head.sequence_no)
{
if(head.command_status==E_SUCCESS)
{
m_bAlive=TRUE; puts("Alivet test +OK.");
return 1;
}
else
{
m_bAlive=FALSE;
puts("FAILED: Alive test.");
return -5;
}
}
}
Sleep(100);
if(bEventMainOver) break;
if(time(NULL)-starttime>MAX_ALIVETESTTIME) //5--10s
{
puts("FAILED: Alive test receive timeout");
//fDisconnect();
return -4;
}
}
return m_bAlive;
}
/*******************************************************************************
return
-1:host or port is unexpect
-2:create error
-3:connect failed
1:success connect
/*******************************************************************************/
int CSmppSock::fConnect(char *host, unsigned int port)
{
int ret=1;
if( (!host)||(port<1) )
{
puts("FAILED: host or port is unexpect.");
return -1;
}
char degTemp[100];
sprintf(degTemp,"connecting to %s...\n",host);
printf(degTemp);
if(m_bAlive) fLogout(FALSE);
if(m_bConnected)
{
fDisconnect(); Sleep(1000);
}
if(m_hSocket==INVALID_SOCKET)
{
if(CreateSocket()==0) return -2;
}
m_sequence=1;
m_bConnected=m_bAlive=FALSE;
SMEConfig.smc_port=port;
strcpy(SMEConfig.smc_ip,host);
SOCKADDR_IN sockaddr_inServer;
memset(&sockaddr_inServer,0,sizeof(SOCKADDR_IN));
sockaddr_inServer.sin_family=AF_INET;
sockaddr_inServer.sin_addr.s_addr=inet_addr(host);
sockaddr_inServer.sin_port=htons(port);
if(connect(m_hSocket,(SOCKADDR *)&sockaddr_inServer,sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
{
puts("FAILED: connect failed!");
int nErrorCode_=WSAGetLastError();
//ShowTcpErr(nErrorCode_);
//out("Error:connect()\n");
return(-3);
}
puts("connect +OK.");
m_bConnected=TRUE;
return 1;
}
/*******************************************************************************
return ;
/*******************************************************************************/
int CSmppSock::fDisconnect()
{
if(m_bConnected)
{
closesocket(m_hSocket);
m_hSocket=INVALID_SOCKET;
m_bConnected=FALSE;
m_bAlive=FALSE;
printf("FAILED: socket连接已断开. ");
}
return 1;
}
int CSmppSock::fReceive(BYTE* lpBuf, int nBufLen)
{
int iRet=0;
int nLen;
nLen=sizeof(MESSAGE_HEAD);
struct MESSAGE_HEAD *phead=(struct MESSAGE_HEAD *)lpBuf;
if(recv(m_hSocket,(char*)lpBuf,nLen,0)!=nLen)
{
//fGetSockErr(degTemp); printf(degTemp) ;
puts("FAILED: Receive -FAILED");
return -1;
}
network_head(phead);
lpBuf+=nLen;
nLen=phead->command_length-sizeof(MESSAGE_HEAD);
if(nLen>1000) nLen=0; //added for assert
if(nLen>0)
{
if(recv(m_hSocket,(char*)lpBuf,nLen,0)!=nLen)
{
//fGetSockErr(degTemp); printf(degTemp) ;
puts("FAILED: Receive -FAILED");
return -1;
}
}
return nLen+sizeof(MESSAGE_HEAD);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -