📄 ylfdrcmppsock.cpp
字号:
// ylfDRCMPPSock.cpp: implementation of the ylfDRCMPPSock class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SmsSend.h"
#include "ylfDRCMPPSock.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ylfDRCMPPSock::ylfDRCMPPSock()
{
BeginThread();
}
ylfDRCMPPSock::~ylfDRCMPPSock()
{
}
int ylfDRCMPPSock::fDisconnect()
{
if(m_bConnected)
{
if(m_bAlive)cmpp_logout(&conn);
cmpp_disconnect_from_ismg(&conn);
m_hSocket=INVALID_SOCKET;
m_bConnected=FALSE;
m_bAlive=FALSE;
TRACE("FAILED: cmpp 连接已断开. ");
}
return 1;
}
int ylfDRCMPPSock::fConnect(char* host,unsigned int port)
{
int ret=1;
if( (!host)||(port<1) )
{
error.Format("FAILED: host or port is unexpect.");
return -1;
}
if(m_bConnected)
{
fDisconnect(); Sleep(1000);
}
m_bConnected=m_bAlive=FALSE;
system_init();
memset(&conn,0,sizeof(conn));
stat = cmpp_connect_to_ismg(host,port,&conn);
if(stat != DPL_SUCCESS){
error.Format("<ICP-TEST> connect error[stat=%d]",stat);
return stat;
}
error="连接成功";
m_bConnected=TRUE;
return 1;
}
int ylfDRCMPPSock::fAliveTst(BOOL bResp)
{
stat = cmpp_active_test(&conn);
if(stat != DPL_SUCCESS){
error.Format("<ICP-TEST> connect error[stat=%d]",stat);
return stat;
}
return 1;
}
int ylfDRCMPPSock::fLogout(bool bResp)
{
if(m_bAlive)
{
cmpp_logout(&conn);
m_bAlive=FALSE;
}
return 1;
}
int ylfDRCMPPSock::fLogin(char* usrname,char* passwd)
{
if(m_bAlive) {error.Format("已登录."); return 0;}
if(!m_bConnected){error.Format("FAILED:socket连接尚未建立."); return -2;}
if(!usrname) {error.Format("FAILED:用户名为空.") ; return -1;}
strcpy(icp_id,usrname);
strcpy(icp_ps,passwd);
memset(&cl,0,sizeof(cmppe_login));
login_value_set(&cl);
stat = cmpp_login(&conn,&cl);
if(stat != DPL_SUCCESS){
error.Format("<ICP-TEST> send login request error[stat=%d]\n",stat);
return stat;
}
m_bAlive=TRUE;
return 1;
}
int ylfDRCMPPSock::fSendSM(char* destaddr,char* srcaddr,char* sendmsg,bool bResp)
{
if(!m_bConnected)
{
return 0xFF;
}
if(!m_bAlive)
{
return 0xFF;
}
if(destaddr[0]==0 || sendmsg[0]==0 )
{
error.Format("FAILED: Submit , destadd or sendmsg is NULL") ;
return -1;
}
memset(&cs,0,sizeof(cmppe_submit));
strcpy(msg,sendmsg);
strcpy(src_usr,srcaddr);
strcpy(dst_usr,destaddr);
strcpy(fee_usr,destaddr);
submit_value_set(&cs);
#ifdef UPGRADE
stat = cmpp_submit(&conn,&cs,&user_seq);
#else
stat = cmpp_submit(&conn,&cs);
#endif
if(stat != DPL_SUCCESS)
{
error.Format("XXX : err ! [stat=%d]\n",stat);
return stat;
}
return 1;
}
void ylfDRCMPPSock::ReadConfig(char *file, char* title, char* token, char* value)
{
char buffer[1024];
char *readpoint,*ptr;
char tempstr[256];
FILE *fp;
int i;
int length;
memset(tempstr,0,256);
memset(buffer, 0,1024);
if((fp=fopen(file,"r"))==NULL){
printf("无法打开客户的配置文件,程序终止!");
exit(1);
}
fseek(fp,0l,SEEK_SET);
i=fread(buffer,1024,1,fp);
ptr = buffer;
readpoint=(char*)strstr((const char *)ptr,title);
ptr = readpoint + strlen(title);
readpoint=(char*)strstr((const char *)ptr,token);
length=strlen(token);
for(i=0;i<256;i++){
if (*(readpoint+length+i)!='\n'){
tempstr[i]=*(readpoint+length+i);
}else{
tempstr[i]='\0';
break;
}
}
strcpy(value,tempstr);
fclose(fp);
return;
}
void ylfDRCMPPSock::system_init()
{
char buf[32];
ReadConfig("drcmpp.conf", "[HOST DESC]", "HOST=",host);
memset(buf,0,sizeof(buf));
ReadConfig("drcmpp.conf", "[HOST DESC]", "PORT=",buf);
port = atoi(buf);
ReadConfig("drcmpp.conf", "[ICP DESC]", "ICP_ID=",icp_id);
ReadConfig("drcmpp.conf", "[ICP DESC]", "ICP_PS=",icp_ps);
memset(src_usr,0,sizeof(src_usr));
ReadConfig("drcmpp.conf", "[MT DESC]","SRC_USR=",src_usr);
printf("src_usr=%s\n",src_usr);
memset(dst_usr,0,sizeof(dst_usr));
ReadConfig("drcmpp.conf", "[MT DESC]","DST_USR=",dst_usr);
printf("dst_usr=%s\n",dst_usr);
memset(fee_usr,0,sizeof(fee_usr));
ReadConfig("drcmpp.conf", "[MT DESC]","FEE_USR=",fee_usr);
printf("fee_usr=%s\n",fee_usr);
memset(msg,0,sizeof(msg));
ReadConfig("drcmpp.conf", "[MT DESC]","MSG=",msg);
printf("msg=%s\n",msg);
memset(buf,0,sizeof(buf));
ReadConfig("drcmpp.conf", "[MT DESC]","MSG_MODE=",buf);
msg_mode = atoi(buf);
printf("msg_mode=%d\n",msg_mode);
memset(buf,0,sizeof(buf));
ReadConfig("drcmpp.conf", "[MT DESC]","DCS=",buf);
dcs = atoi(buf);
printf("dcs=%d\n",dcs);
memset(svc_type,0,sizeof(svc_type));
ReadConfig("drcmpp.conf", "[MT DESC]","SVC_TYPE=",svc_type);
printf("svc_type=%s\n",svc_type);
memset(buf,0,sizeof(buf));
ReadConfig("drcmpp.conf", "[MT DESC]","FEE_TYPE=",buf);
fee_type = atoi(buf);
printf("fee_type=%d\n",fee_type);
memset(buf,0,sizeof(buf));
ReadConfig("drcmpp.conf", "[MT DESC]","INFO_FEE=",buf);
info_fee = atoi(buf);
printf("info_fee=%d\n",info_fee);
memset(buf,0,sizeof(buf));
ReadConfig("drcmpp.conf", "[MT DESC]","FEE_UTYPE=",buf);
fee_utype = atoi(buf);
printf("fee_utype=%d\n",fee_utype);
return;
}
dpl_status_t ylfDRCMPPSock::login_value_set(cmppe_login *cl)
{
time_t timestamp;
time(×tamp);
strcpy(cl->icp_id,icp_id);
strcpy(cl->icp_auth,icp_ps);
cl->icp_bind_type = 0;
cl->if_version = 0x12;
//printf("timestamp = %d\n",timestamp);
cl->icp_timestamp = timestamp;
return DPL_SUCCESS;
}
dpl_status_t ylfDRCMPPSock::submit_value_set(cmppe_submit *cs)
{
cmppe_submit_sm_init(cs);
cmppe_submit_sm_set_shortmsg(cs, msg, (dpl_uint8_t)strlen(msg));
cmppe_submit_sm_set_priority(cs, 9);
cmppe_submit_sm_set_msgmode (cs, msg_mode);
cmppe_submit_sm_set_protoid (cs, 1);
cmppe_submit_sm_set_dcs (cs, dcs);
cmppe_submit_sm_set_schedule(cs, "");
cmppe_submit_sm_set_validate(cs, "");
cmppe_submit_sm_set_src_addr(cs, src_usr);
cmppe_submit_sm_add_dst_addr(cs, dst_usr);
cmppe_submit_sm_set_icp_id (cs, icp_id);
cmppe_submit_sm_set_svc_type(cs, "");
cmppe_submit_sm_set_fee_type(cs, fee_type);
cmppe_submit_sm_set_info_fee(cs, info_fee);
cmppe_submit_sm_set_fee_user(cs, fee_utype, fee_usr);
return DPL_SUCCESS;
}
void ylfDRCMPPSock::ReadClearBuf()
{
if(!m_bConnected)
{
return ;
}
if(!m_bAlive)
{
return ;
}
int status;
int type;
int result;
int seq;
cmppe_packet cp;
dpl_uint32_t user_seq;
for(int i=0;i<100;i++)
{
#ifdef UPGRADE
stat = cmpp_recv(&conn,&cp,0,&user_seq);
#else
stat = cmpp_recv(&conn,&cp,0);
#endif
if(stat != DPL_SUCCESS){
break;
}
type = cp.pk_head.pk_cmd;
status = cp.pk_head.pk_stat;
result = cp.result;
seq = cp.pk_head.pk_seq;
TRACE("<ICP-TEST>[type=%08x][status=%03x][seq=%08x][result=%02x]\n",\
type,status,seq,result);
if(result!=0)
{
this->fDisconnect();
}
}
}
bool ylfDRCMPPSock::BeginThread()
{
CWinThread* pt=AfxBeginThread(ServerThreadProc,this);
TRACE("\r\n ylfSqlSave Thread Begin,ThreadID:%x\r\n",pt->m_nThreadID);
return true;
}
UINT ylfDRCMPPSock::ServerThreadProc(LPVOID pParam)
{
ylfDRCMPPSock* pcmpp=(ylfDRCMPPSock*)pParam;
int loop=0;
// while(!bEventMainOver)
while(1)
{
pcmpp->ReadClearBuf();
Sleep(1000);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -