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

📄 cmppapi_test.cpp

📁 中国电信CMPP2.0原代码+程序
💻 CPP
字号:
// CMPPAPI_TEST.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include	"stdio.h"

#include	"cmpp_sock.h"
#include	"cmpp_types.h"
#include	"cmpp_error.h"

#include	"cmpp_proto.h"
#include	"cmpp_api.h"

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "..\\api\\cmppapi.lib")

cmpp_conn	sp_conn;

void sp_com_set_submit(cmppg_submit *cs, char *msisdn, void *sms, int sms_len)
{
	cmpp_submit_sm_init(cs);
	cmpp_submit_sm_set_shortmsg(cs, sms, sms_len);
	cmpp_submit_sm_set_msglevel(cs, 5);	//priority < 9
	cmpp_submit_sm_set_regdelivery(cs, NO_STATUSREPORT);	//no status report
	cmpp_submit_sm_set_protoid (cs, 0, 0);
	cmpp_submit_sm_set_msgformat(cs, MSG_FORMAT_GB);
	cmpp_submit_sm_set_validate(cs, 10);
	cmpp_submit_sm_set_srcaddr(cs, "09876", 5);
	cmpp_submit_sm_set_dstaddr(cs, msisdn, strlen(msisdn));
	cmpp_submit_sm_set_svc_type(cs, "9999", 4);
	
	return;
}

int main(int argc, char* argv[])
{
	cmpp_status_t		stat = 0;			//cmpp_status_t == int
	cmppg_connect		login_pkg;
	cmppg_ismg_packet	cp;
	cmppg_submit		cs;
	int					cp_len;
	int					cp_cmd;
	int					cp_sid;

	ZeroMemory(&login_pkg, sizeof(cmppg_connect));
	ZeroMemory(&cp, sizeof(cmppg_ismg_packet));

	WSADATA	wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);

//	1. Login
	printf("Try to connect...");
	stat = cmpp_connect_to_ismg("127.0.0.1", 7890, &sp_conn);
	if(stat != CMPP_SUCCESS)
	{
		printf("Failed!\n");
		goto finished;
	}
	printf("Connected!\nTry to login...");
	//企业代码或用户名+口令
	cmpp_login_value_set(&login_pkg, "954321", "954321", 0x20);
	stat = cmpp_login(&sp_conn, &login_pkg);
	if(stat != CMPP_SUCCESS)
	{
		printf("Failed!\n");
		goto finished;
	}
	printf("Logined!\n");
//	2.	Submit
	sp_com_set_submit(&cs, "13012345678", "test", strlen("test"));
	stat = cmpp_submit(&sp_conn, &cs);
	if (CMPP_SUCCESS != stat)
	{
		printf("Failed To Submit, stat = [%d]!\n", stat);
		goto finished;
	}
	stat = cmpp_recv(&sp_conn, &cp, 30);
	if (CMPP_SOCKET_RECVTIMEOUT == stat)
	{
		printf("Receive Response Timeout!\n");
		goto finished;
	}
	if (CMPP_SUCCESS != stat)
	{
		printf("Receive Response Failed!\n");
		goto finished;
	}
	
	cp_len	= ntohl( cp.pk_head.nTotalLength ); 
	cp_cmd	= ntohl( cp.pk_head.nCommandId );
	cp_sid	= ntohl( cp.pk_head.nSequenceId );
	
	printf("<ICP_RECV>[Length = 0x%08x][type = 0x%08x][seq = 0x%08x]\n", \
		cp_len, cp_cmd, cp_sid);
	
	if (CMPP_SUBMIT_RESP == cp_cmd)
	{
		printf("Success To Submit!\n");;
	}
//	3.Receive Deliver
	while(1)
	{
		stat = cmpp_recv(&sp_conn, &cp, 30);
		if (CMPP_SOCKET_RECVTIMEOUT == stat)
			return true;
		if (CMPP_SUCCESS != stat)
		{
			printf("cmpp_recv() failed with status = [0x%08x]!\n", stat);
			goto finished;
		}
		cp_len	= ntohl( cp.pk_head.nTotalLength ); 
		cp_cmd	= ntohl( cp.pk_head.nCommandId );
		cp_sid	= ntohl( cp.pk_head.nSequenceId );
		printf("<ICP_RECV>[Length = 0x%08x][type = 0x%08x][seq = 0x%08x]\n", \
			cp_len, cp_cmd, cp_sid);
		
		if ( (CMPP_DELIVER == cp_cmd) || (CMPP_ACTIVE_TEST == cp_cmd) )
		{
			//MO
			if (CMPP_DELIVER == cp_cmd)
			{
				if (1 == cp.pk_data.pk_deliver.cRegisteredDelivery)
				{
					printf("\t<Status-Report>[status = %s][dstaddr = %s]\n", cp.pk_data.pk_deliver.pk_sm.sReport.sStat, \
						cp.pk_data.pk_deliver.pk_sm.sReport.sDestTermId);
					printf("\t[stime = %s]\t[dtime = %s]\n", cp.pk_data.pk_deliver.pk_sm.sReport.sSubmitTime, \
						cp.pk_data.pk_deliver.pk_sm.sReport.sDoneTime);
				}
				else
				{
					printf("\t[shortmsg] = %s\n", cp.pk_data.pk_deliver.pk_sm.sMsgContent);
				}
				//调用cmpp_deliver_resp做回复应答
			}
			if (CMPP_ACTIVE_TEST == cp_cmd)
			{
				//活动测试应答
				stat = cmpp_active_test_resp(&sp_conn, cp_sid);
				if (CMPP_SUCCESS != stat)
				{
					printf("cmpp_active_test_resp() failed with status = [0x%08x]!\n", stat);
					goto finished;
				}
				printf("<SMG>ActiveTest!\n");
			}
		}
		else
		{
			//MT resp
			if (CMPP_SUBMIT_RESP == cp_cmd)
			{
				printf("Receive Submit Resp!\n");
			}
		}
	}

finished:
	cmpp_disconnect_from_ismg(&sp_conn);
	WSACleanup();
	system("pause");
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -