?? apidemo_sgip.c
字號(hào):
#include <stdio.h>#include <stdlib.h>#include <netinet/in.h>#include "proxy_api_sgip.h"extern char* APIVersionFlag;typedef unsigned long ULONG;typedef struct tagPureSgipHead{ ULONG nLen; ULONG nCmdID; ULONG nNodeNum; ULONG nTime; ULONG nSequenceID;}tagPureSgipHead;typedef tagPureSgipHead tagSgipHead;#define SGIP_DELIVER 0x00000004#define SGIP_REPORT 0x00000005main(argc,argv)int argc;char *argv[]; { int ret; int i, j; /* ** 發(fā)送短消息所需要的參數(shù) */ char psSPNumber[22]; char psChargeNumber[22]; unsigned char byUserCount; char psUserNumber[2100]; char psCorpId[6]; char psServiceType[11]; unsigned char byFeeType; char psFeeValue[7]; char psGivenValue[7]; unsigned char byAgentFlag; unsigned char byMTFlag; unsigned char byPriority; char psExpireTime[17]; char psScheduleTime[17]; unsigned char byReportFlag; unsigned char byTPPID; unsigned char byTPUDHI; unsigned char byMsgCoding; unsigned char byMsgType; unsigned int nMsgLen; char psMsgContent[161]; char pReserve[9]; unsigned char *tmpPsz; /* ** 消息發(fā)送的序列號(hào),用于配對(duì)發(fā)送消息以及其應(yīng)答消息, 由應(yīng)用程序保證其唯一 */ unsigned short LID, sLid; /* ** 接收提交消息的應(yīng)答消息所需要的緩沖參數(shù) */ int iStatus; char pSubmitAckReserve[9]; /* ** 接收短消息所需要的緩沖參數(shù) */ /* char psDeliverUserNumber[22]; char psDeliverSPNumber[22]; unsigned char byDeliverTPPID; unsigned char byDeliverTPUDHI; unsigned char byDeliverMsgCoding; unsigned int nDeliverMsgLen; char psDeliverMsgContent[161]; char psDeliverReserve[9]; */ /* ** 用于狀態(tài)報(bào)告的緩沖區(qū) */ unsigned long ulOrgNodeNum; unsigned long ulOrgTimeStamp; unsigned long ulOrgSequence; unsigned char byReportType; char psReportUserNum[22]; unsigned char bystate; unsigned char byErrCode; char psReportReserve[9]; char sMsg[2048]; int nLen; LID = 0; /* ** 連接到短消息代理服務(wù)器上 */ ret = proxy_login(1); if(ret == SUCCESS) { printf("\nLogin Success!"); printf("\nAPI Version: %s", APIVersionFlag);/*打印版本信息*/ } else if(ret == FAILURE) printf("\nLogin Fail!"); else printf("\nFatal Error!"); for(;;) { /****************************************************** ** 提交短消息 *******************************************************/ LID ++; /* 應(yīng)用程序自身的序列號(hào),請(qǐng)自己保證唯一,建議采用++操作 */ strcpy(psSPNumber, "8888"); strcpy(psChargeNumber, "13301001234"); byUserCount = 1; strcpy(psUserNumber, "13301001234"); strcpy(psCorpId, "12345"); strcpy(psServiceType, "TPCQ"); byFeeType = 2; strcpy(psFeeValue, "20"); strcpy(psGivenValue, "0"); byAgentFlag = 0; byMTFlag = 0; byPriority = 0; psExpireTime[0] = 0; psScheduleTime[0] = 0; byReportFlag = 1; byTPPID = 0; byTPUDHI = 0; byMsgCoding = 8; byMsgType = 0; strcpy(psMsgContent, "測(cè)試短消息12345"); nMsgLen = strlen(psMsgContent); /* 保留字段,請(qǐng)?zhí)顬榭?*/ strcpy(pReserve, ""); ret = SGIPSnd( psSPNumber, psChargeNumber, byUserCount, psUserNumber, psCorpId, psServiceType, byFeeType, psFeeValue, psGivenValue, byAgentFlag, byMTFlag, byPriority, psExpireTime, psScheduleTime, byReportFlag, byTPPID, byTPUDHI, byMsgCoding, byMsgType, nMsgLen, psMsgContent, pReserve, LID); if( ret == SUCCESS) printf("\n\nSubmit SM Success!"); else if(ret == FAILURE) { printf("\nSubmit SM Fail!"); getchar(); } else { printf("\nFatal Error!"); getchar(); } /* ** 接收 CMPP 提交消息的應(yīng)答 */ ret = SGIPGetSndAck( &sLid, /*此值為發(fā)送短消息時(shí),應(yīng)用程序填寫(xiě)的序列號(hào)*/ &ulOrgNodeNum, &ulOrgTimeStamp, &ulOrgSequence, &iStatus); /* 此條生消息發(fā)送到短消息中心時(shí)的狀態(tài),0表示成功,其它表示失敗 */ while( ret == SUCCESS ) /* 接收成功 */ { printf("\nrecv submit ack:LID = %d", sLid); printf("\nNodeNum:%u, Time:%u, Sequence:%u\n", ulOrgNodeNum, ulOrgTimeStamp, ulOrgSequence); printf("\nStatus:%d\n", iStatus); /* 看是否還有其這的應(yīng)答消息 */ ret = SGIPGetSndAck( &sLid, &ulOrgNodeNum, &ulOrgTimeStamp, &ulOrgSequence, &iStatus); } /* ** 接收從短消息中心下發(fā)來(lái)的短消息 */ memset(psUserNumber, 0, sizeof(psUserNumber)); memset(psSPNumber, 0, sizeof(psSPNumber)); memset(psMsgContent, 0, sizeof(psMsgContent)); memset(pReserve, 0, sizeof(pReserve)); /*char sMsg[2048];*/ nLen = sizeof(sMsg); ret = SGIPRcv(sMsg, &nLen); while( ret == SUCCESS) { tagSgipHead* pHead = (tagSgipHead*)sMsg; switch (ntohl(pHead->nCmdID)) { case SGIP_DELIVER: getdata_from_sgip_recvsm_frame(sMsg, nLen, psUserNumber, psSPNumber, &byTPPID, &byTPUDHI, &byMsgCoding, &nMsgLen, psMsgContent, pReserve); printf("\n\nRecv deliver sm Success!"); printf("\nUserNumber:%s", psUserNumber); printf("\nSpNumber:%s", psSPNumber); printf("\nTPPID:%d", byTPPID); printf("\nTPUDHI:%d", byTPUDHI); printf("\nMsgCoding:%d", byMsgCoding); printf("\nMsgLen:%d", nMsgLen); printf("\nReserve:%s", pReserve); printf("\nMsgContent(txt):%s", psMsgContent); /* ** 短消息內(nèi)容的16進(jìn)制顯示 */ printf("\nSM Data Content(hex):"); tmpPsz = (unsigned char *)psMsgContent; while(nMsgLen > 0) { if(nMsgLen > 16) j = 16; else j = nMsgLen; for(i = 0; i< j; i++) { printf("%02x_", *(tmpPsz + i)); } printf("\r\n"); nMsgLen -= j; tmpPsz += 16; } break; case SGIP_REPORT: getdata_from_sgip_rptsm_frame(sMsg, nLen, &ulOrgNodeNum, &ulOrgTimeStamp, &ulOrgSequence, &byReportType, psUserNumber, &bystate, &byErrCode, pReserve); printf("\n\nRecv report sm Success!"); printf("\nOrgNodeNum:%u", ulOrgNodeNum); printf("\nOrgTimeStamp:%u", ulOrgTimeStamp); printf("\nOrgSequence:%u", ulOrgSequence); printf("\nReportType:%d", byReportType); printf("\nUserNumber:%s", psUserNumber); printf("\nState:%d", bystate); printf("\nErrCode:%d", byErrCode); printf("\nReserve:%s", pReserve); break; default: printf("\nRecv unknown msg, command id:%d", pHead->nCmdID); break; } /* ** 看是否還有其它的消息 */ memset(psUserNumber, 0, sizeof(psUserNumber)); memset(psSPNumber, 0, sizeof(psSPNumber)); memset(psMsgContent, 0, sizeof(psMsgContent)); memset(pReserve, 0, sizeof(pReserve)); ret = SGIPRcv(sMsg, &nLen); } /* 等待3秒 */ sleep(1); /* i = getchar(); */ }}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -