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

📄 sendsm.cpp

📁 中国移动短信CMPP2.0短信网关协议API函数库,包含了不同操作系统下进行开发所需的函数
💻 CPP
字号:
/*  --------------------------------------------------------------------------
    Name:       SendSM.cpp
    Title:      CMPP API of ISMG for CMPP 1.1
    Package:    Send short message sample code for Asiainfo CMPP 1.1 API

    Written:    2000/12/20  Asiainfo
    Revised:    

    Synopsis:
    Editor:     TAB=4
 -----------------------------------------------------------------------------*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>

#include "CMPPAPI.hpp"

#define SEND_MODE_SINGLE	0
#define SEND_MODE_BATCH		1

typedef struct
{
	int 	nNeedReply;
	int 	nMsgLevel;
	char 	sServiceID[10+1];
	int		nMsgFormat;
	char	sFeeType[2+1];
	char	sFeeCode[6+1];
	char	sValidTime[17+1];
	char	sAtTime[17+1];
	char	sSrcTermID[21+1];
	char	sDestTermID[21+1];
	char	sDestTermIDFile[100];
	char	sMsgFile[100];
	char	sMsgIDFile[100];
}	SMArgument;

void Usage(char *sProgram);
int ReadArgumentFile(char *sFile, SMArgument *pSMArgument, int nOutput);

int main(int argc, char ** argv)
{
	int			nSendMode = SEND_MODE_SINGLE, nOutput = 1;
	char		sArgFile[100] = "";
	SMArgument	theSMArgument;
	char		sMsgID[21+1];
	int			nErrorCode;
	FILE		*pFile;
	int			nMsgLen, n;
	char		sMsgContent[10240];
	char		sFeeTerminalID[22] = "";
	int			nFeeUserType = 0;
	char		*sDestTermIDs = NULL;
	char		*sContent = NULL;

	// get argument
	for(n=1; n<argc; ++n)
	{
		if(strcmp(argv[n], "-B") == 0)
		{
			nSendMode = SEND_MODE_BATCH;
		}
		else if(strcmp(argv[n], "-S") == 0)
		{
			nSendMode = SEND_MODE_SINGLE;
		}
		else if(strcmp(argv[n], "-n") == 0)
		{
			nOutput = 0;
		}
		else if(strcmp(argv[n], "-a") == 0)
		{
			n++;
			strcpy(sArgFile, argv[n]);
		}
		else if(strcmp(argv[n], "-u") == 0)
		{
			n++;
			nFeeUserType = atoi(argv[n]);
		}
		else if(strcmp(argv[n], "-f") == 0)
		{
			n++;
			strcpy(sFeeTerminalID, argv[n]);
		}
		else if(strcmp(argv[n], "-d") == 0)
		{
			n++;
			sDestTermIDs = argv[n];
		}
		else if(strcmp(argv[n], "-m") == 0)
		{
			n++;
			sContent = argv[n];
		}
		else
		{
			if(nOutput == 1)
			{
				Usage(argv[0]);
			}
			exit(1);
		}
	}
	
	if(strlen(sArgFile) == 0)
	{
		if(nOutput == 1)
		{
			printf("No argument file!\n");
		}
		exit(1);	
	}
	
	// read arguments from file
	if(ReadArgumentFile(sArgFile, &theSMArgument, nOutput) != 0)
	{
		if(nOutput == 1)
		{
			printf("Fail to read argument from file %s!\n", sArgFile);
		}
		exit(1);	
	}
	else
	{
		if(nOutput == 1)
		{
			printf("need_reply=%d!\n", theSMArgument.nNeedReply);
			printf("msg_level=%d!\n", theSMArgument.nMsgLevel);
			printf("serviceid=%s!\n", theSMArgument.sServiceID);
			printf("msg_format=%d!\n", theSMArgument.nMsgFormat);
			printf("fee_type=%s!\n", theSMArgument.sFeeType);
			printf("fee_code=%s!\n", theSMArgument.sFeeCode);
			printf("valid_time=%s!\n", theSMArgument.sValidTime);
			printf("at_time=%s!\n", theSMArgument.sAtTime);
			printf("src_termid=%s!\n", theSMArgument.sSrcTermID);
			printf("dest_termid=%s!\n", theSMArgument.sDestTermID);
			printf("dest_termid_file=%s!\n", theSMArgument.sDestTermIDFile);
			printf("msg_file=%s!\n", theSMArgument.sMsgFile);
			printf("msgid_file=%s!\n", theSMArgument.sMsgIDFile);
		}
	}

	// initiate API
	if(InitCMPPAPI() != 0)
	{
		if(nOutput == 1)
		{
			printf("Fail to call InitCMPPAPI!\n");
		}
		exit(1);	
	}

	if(nSendMode == SEND_MODE_SINGLE)
	{
		// get message from file
		struct stat sbuf;

		if(stat(theSMArgument.sMsgFile, &sbuf) != 0 )
		{
			nMsgLen = -1;
		}
		else
		{
			nMsgLen = sbuf.st_size;
		}

		if(nMsgLen <= 0)
		{
			if(nOutput == 1)
			{
				printf("Fail to read message file %s!\n", theSMArgument.sMsgFile);
			}
			exit(1);
		}
		pFile = fopen(theSMArgument.sMsgFile, "rb");
		fread(sMsgContent, nMsgLen, 1, pFile);
		fclose(pFile);

		// remove unseen character at the end of the sMsgContent, no binary format
		if(theSMArgument.nMsgFormat != 4 && theSMArgument.nMsgFormat != 8)
		{
			sMsgContent[nMsgLen] = 0;
			for(n=nMsgLen-1; n>0; --n)
			{
				if((unsigned char)sMsgContent[n] <= '\r')
				{
					sMsgContent[n] = 0;
				}
				else
				{
					break;
				}
			}
			nMsgLen = strlen(sMsgContent);
		}

		if(nOutput == 1)
		{
			printf("msg_len=%d!\n", nMsgLen);
		}

		if(CMPPSendSingle(theSMArgument.nNeedReply, theSMArgument.nMsgLevel,
				theSMArgument.sServiceID, theSMArgument.nMsgFormat,
				theSMArgument.sFeeType, theSMArgument.sFeeCode,
				theSMArgument.sValidTime, theSMArgument.sAtTime,
				theSMArgument.sSrcTermID, theSMArgument.sDestTermID,
				nMsgLen, sMsgContent,
				sMsgID, &nErrorCode,
				(char)nFeeUserType, sFeeTerminalID, 0, 0) != 0)
		{
			if(nOutput == 1)
			{
				printf("Fail to call CMPPSendSingle, error=%d!\n", nErrorCode);
			}
			exit(1);
		}
		// write msgid and error code to file
		else
		{
			pFile =  fopen(theSMArgument.sMsgIDFile, "w");
			if(pFile != NULL)
			{
				fprintf(pFile, "%s\t%d\n", sMsgID, nErrorCode);
				fclose(pFile);
			}
			else
			{
				if(nOutput == 1)
				{
					printf("Fail to open file %s!\n", theSMArgument.sMsgIDFile);
				}
			}
		}
	}
	else
	{
		if(sDestTermIDs != NULL && sContent != NULL)
		{
			if(CMPPSendBatch2(theSMArgument.nNeedReply, theSMArgument.nMsgLevel,
					theSMArgument.sServiceID, theSMArgument.nMsgFormat,
					theSMArgument.sFeeType, theSMArgument.sFeeCode,
					theSMArgument.sValidTime, theSMArgument.sAtTime,
					theSMArgument.sSrcTermID, sDestTermIDs,
					strlen(sContent), sContent, theSMArgument.sMsgIDFile,
					(char)nFeeUserType, sFeeTerminalID, 0, 0) != 0)
			{
				if(nOutput == 1)
				{
					printf("Fail to call CMPPSendBatch!\n");
				}
				exit(1);
			}
		}
		else
		{
			if(CMPPSendBatch(theSMArgument.nNeedReply, theSMArgument.nMsgLevel,
					theSMArgument.sServiceID, theSMArgument.nMsgFormat,
					theSMArgument.sFeeType, theSMArgument.sFeeCode,
					theSMArgument.sValidTime, theSMArgument.sAtTime,
					theSMArgument.sSrcTermID, theSMArgument.sDestTermIDFile,
					theSMArgument.sMsgFile, theSMArgument.sMsgIDFile,
					(char)nFeeUserType, sFeeTerminalID, 0, 0) != 0)
			{
				if(nOutput == 1)
				{
					printf("Fail to call CMPPSendBatch!\n");
				}
				exit(1);
			}
		}
	}
	exit(0);
	return(0);
}

void Usage(char *sProgram)
{
	printf("Usage: %s [-B]|[-S][-n] <-a argument_file> [-u fee_user_type] [-f fee_term_id] [-d dest_term_ids] [-m content]\n", sProgram);
	printf("       -B: send one short message to multiple users\n");
	printf("       -S: send one short message to single user\n");
	printf("       -a: argument file\n");
	printf("       -n: no message output\n");
	printf("       -u: fee_user_type, default is 0\n");
	printf("       -f: fee_terminal_id, default is \"\"\n");
	printf("       -d: dest_terminal_ids, e.g. \"13922000001,13922000002\"\n");
	printf("       -m: message content\n");
	printf("e.g.:  %s -S -a sm.arg  # send single short message defined in file sm.arg\n", sProgram);
	printf("e.g.:  %s -B -a sm.arg  # send batch short message defined in file sm.arg\n", sProgram);
	printf("e.g.:  %s -B -a sm.arg -d \"13922000001,13922000002\" -m \"test\" # send batch short message defined in file sm.arg\n", sProgram);
}

int ReadArgumentFile(char *sFile, SMArgument *pSMArgument, int nOutput)
{
	FILE	*pFile;
	char	sLine[101];
	int		n, nLen, m;
	
	pFile = fopen(sFile, "r");
	if(pFile == NULL)
		return(1);
	
	for(n=0; n<13; ++n)
	{
		if(fgets(sLine, 100, pFile) == NULL)
		{
			if(nOutput == 1)
			{
				printf("Fail to read no.%d parameter in file %s!\n", n+1, sFile);
			}
			fclose(pFile);
			return(1);
		}
		
		// remove '\n' and '\r'
		nLen = strlen(sLine);
		for(m=nLen-1; m>=0; --m)
		{
			if(sLine[m] == '\n' || sLine[m] == '\r')
			{
				sLine[m] = 0;
			}
			break;
		}
		
		switch(n)
		{
			case 0:
				pSMArgument->nNeedReply = atoi(sLine);
			break;
			case 1:
				pSMArgument->nMsgLevel = atoi(sLine);
			break;
			case 2:
				if(strlen(sLine) > 10)
					sLine[10] = 0;
				strcpy(pSMArgument->sServiceID, sLine);
			break;
			case 3:
				pSMArgument->nMsgFormat = atoi(sLine);
			break;
			case 4:
				if(strlen(sLine) > 2)
					sLine[2] = 0;
				strcpy(pSMArgument->sFeeType, sLine);
			break;
			case 5:
				if(strlen(sLine) > 6)
					sLine[6] = 0;
				strcpy(pSMArgument->sFeeCode, sLine);
			break;
			case 6:
				if(strlen(sLine) > 17)
					sLine[17] = 0;
				strcpy(pSMArgument->sValidTime, sLine);
			break;
			case 7:
				if(strlen(sLine) > 17)
					sLine[17] = 0;
				strcpy(pSMArgument->sAtTime, sLine);
			break;
			case 8:
				if(strlen(sLine) > 21)
					sLine[21] = 0;
				strcpy(pSMArgument->sSrcTermID, sLine);
			break;
			case 9:
				if(strlen(sLine) > 21)
					sLine[21] = 0;
				strcpy(pSMArgument->sDestTermID, sLine);
			break;
			case 10:
				if(strlen(sLine) > 100)
					sLine[100] = 0;
				strcpy(pSMArgument->sDestTermIDFile, sLine);
			break;
			case 11:
				if(strlen(sLine) > 100)
					sLine[100] = 0;
				strcpy(pSMArgument->sMsgFile, sLine);
			break;
			case 12:
				if(strlen(sLine) > 100)
					sLine[100] = 0;
				strcpy(pSMArgument->sMsgIDFile, sLine);
			break;
		}
	}
	fclose(pFile);
	return(0);
}

⌨️ 快捷键说明

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