⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ylfdrcmppsock.cpp

📁 移动
💻 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(&timestamp);
        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 + -