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

📄 newapitest.c

📁 用c/c++实现的一个CMPP API
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "stdio.h"#include "stdlib.h"#include "newapitest.h"//#include "cmppapi.h"#include "cmpplowapi.h"#ifndef WIN32#include "pthread.h"#endif#include "cfgs.h"#include "log.h"static RecConnect     grecConnect[MaxConnectPairs];static int            gnExitAllThread = 0;static int            gnThreadStartFlag = 1;static RecConfig      grecConfig;static RecSubmit      grecSubmit;#ifdef WIN32int pthread_self(){	return GetCurrentThreadId();}int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *pProcAddr,const void *arg){	DWORD	dw;	*thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)pProcAddr, (LPVOID)arg, 0, &dw);	if( *thread != NULL)		return 0;	return -1;}int pthread_join(pthread_t thread,void *value_ptr){	WaitForSingleObject( thread, INFINITE );	CloseHandle(thread);	return 0;}#endifvoid vMarkSign(){#ifndef WIN32	signal(SIGTERM,SIG_IGN); 	signal(SIGHUP,SIG_IGN); 	signal(SIGPIPE,SIG_IGN); 	signal(SIGALRM,SIG_IGN); 	 	signal(SIGURG,SIG_IGN); 	signal(SIGCONT,SIG_IGN);	signal(SIGCHLD,SIG_IGN);	signal(SIGTTIN,SIG_IGN); 	signal(SIGTTOU,SIG_IGN); 	signal(SIGIO,SIG_IGN);#endif}int  InitWSA(){#ifdef WIN32	WORD wVersionRequested;	WSADATA wsaData;	int err;	wVersionRequested = MAKEWORD( 2, 2 );	err = WSAStartup( wVersionRequested, &wsaData );	if ( err != 0 ) {		return -1;	}	if ( LOBYTE( wsaData.wVersion ) != 2 ||			HIBYTE( wsaData.wVersion ) != 2 ) {		WSACleanup( );		return -1; 	}#endif	return 0;}void CleanWSA(){#ifdef WIN32	WSACleanup();#endif}void PkgDisplay(char *p,int nSize){	    unsigned int nChar;	    int i;    for(i = 1;i <= nSize; i++)    {		      nChar = *p & 0xff;		      printf("[0x%02x]",nChar);		      p++;			      if (i % 10 == 0)	printf("\n");    }    printf("\n\n");	    return;}void vPrintReceipt(recCmppReceiptBody rCmppReceiptBody){    printf("\tCMPP RECEIPT CONTENT:\n"            "\t\tuchMsgId     =%16x\n "            "\t\tchStat       =%s\n "            "\t\tSubmitTime   =%s\n "            "\t\tDoneTime     =%s\n "            "\t\tDestTerminalId    =%s\n "            "\t\tSmscSequenceId    =%d\n ",           rCmppReceiptBody.uchMsgId,           rCmppReceiptBody.chStat,           rCmppReceiptBody.chSubmitTime,           rCmppReceiptBody.chDoneTime,           rCmppReceiptBody.chDestTerminalId,           rCmppReceiptBody.unSmscSequence           );           }static void vPrintSubmit(recCmppSubmit rCmppSubmit){		printf("\tCMPP SUBMIT CONTENT:\n"		   "\t\tMsgId         =[%02x %02x %02x %02x %02x %02x %02x %02x]\n"		   "\t\tPk_total      =0x%2x\n"		   "\t\tPk_number     =0x%2x\n"		   "\t\tRegister_Del  =0x%2x\n"		   "\t\tMsg_level     =0x%2x\n"		   "\t\tServId        =%s\n"		   "\t\tFeeUserType   =0x%2x\n"		   "\t\tFeeTermId     =%s\n"		   "\t\tFeeTermIdType=0x%2x\n"		   "\t\tTp_pId        =0x%2x\n"		   "\t\tTp_udhi       =0x%2x\n"		   "\t\tMsgFmt        =0x%2x\n"		   "\t\tMsgSrc        =%s\n"		   "\t\tFeeType       =%s\n"		   "\t\tFeeCode       =%s\n"		   "\t\tValidTime     =%s\n"		   "\t\tAtTime        =%s\n"		   "\t\tSrcId         =%s\n"		   "\t\tDestUsr_tl    =0x%2x\n"		   "\t\tDestTermId    =%s\n"		   "\t\tDestTermIdType =0x%2x\n"		   "\t\tMsgLen        =0x%2x\n"		   "\t\tMsgContent    =%s\n"		   "\t\tLinkId      =%s\n",		   rCmppSubmit.uchMsgId[0],		   rCmppSubmit.uchMsgId[1],		   rCmppSubmit.uchMsgId[2],		   rCmppSubmit.uchMsgId[3],		   rCmppSubmit.uchMsgId[4],   		   rCmppSubmit.uchMsgId[5],   		   rCmppSubmit.uchMsgId[6],   		   rCmppSubmit.uchMsgId[7],		   rCmppSubmit.ucPkTotal,		   rCmppSubmit.ucPkNumber,		   rCmppSubmit.ucRegisterDelivery,		   rCmppSubmit.ucMsgLevel,		   rCmppSubmit.chServiceId,		   rCmppSubmit.ucFeeUserType,		   rCmppSubmit.chFeeTerminateId,		   rCmppSubmit.ucFeeTerminalType,		   rCmppSubmit.ucTpPid,		   rCmppSubmit.ucTpUdhi,		   rCmppSubmit.ucMsgFmt,		   rCmppSubmit.chMsgSrc,		   rCmppSubmit.chFeeType,		   rCmppSubmit.chFeeCode,		   rCmppSubmit.chValidTime,		   rCmppSubmit.chAtTime,		   rCmppSubmit.chSrcId,		   rCmppSubmit.ucDestUsrTl,		   rCmppSubmit.chDstTerminalId,		   rCmppSubmit.ucDstTerminalType,		   rCmppSubmit.ucMsgLength,		   rCmppSubmit.chMsgContent,		   rCmppSubmit.chLinkId);}void vPrintDeliver(recCmppDeliver rCmppDeliver){	printf("\tCMPP Deliver CONTENT:\n"	       "\t\tMsgId         =%s\n"	       "\t\tDestId        =%s\n"	       "\t\tServid        =%s\n"	       "\t\tTpPid         =0x%2x\n"	       "\t\tTpUdhi        =0x%2x\n"	       "\t\tMsgFmt        =0x%2x\n"	       "\t\tSrcTermId     =%s\n"	       "\t\tSrcTermIdType =0x%2x\n"	       "\t\tRegisterDel   =0x%2x\n"	       "\t\tMsg_Len       =0x%2x\n"	       "\t\tMsgContent    =%s\n"	       "\t\tLinkId       =%s\n",	       rCmppDeliver.uchMsgId,	       rCmppDeliver.chDestId,	       rCmppDeliver.chServiceId,	       rCmppDeliver.ucTpPid,	       rCmppDeliver.ucTpUdhi,	       rCmppDeliver.ucMsgFmt,	       rCmppDeliver.chSrcTerminalId,	       rCmppDeliver.ucSrcTerminalType,	       rCmppDeliver.ucRegisterDelivery,	       rCmppDeliver.ucMsgLength,	       rCmppDeliver.chMsgContent,	       rCmppDeliver.chLinkId);	}int nReInitInterface(int nConnNo){    int nRetry;    int nRet;    nRet =0 ;    nRetry = 0;    //Trace("ReInitInterface,ConnectFlag = <%d>\n\n",grecConnect[nConnNo].nConnectFlag);    if(grecConnect[nConnNo].nConnectFlag ==  M_INITING )    {        return 0;    }        if(grecConnect[nConnNo].nConnectFlag != M_EXIT )    {        return 0;    }        grecConnect[nConnNo].nConnectFlag = M_INITING;        while(nRetry < 30  )    {        //Trace("ReInitInterface,retry time <%d>\n\n",nRetry);                if(grecConfig.nHighLevel == 1)        {            nRet = nHInitInterface(grecConnect[nConnNo].sConfigFile);        }        else        {            nRet = nInitInterface(grecConnect[nConnNo].sConfigFile,&grecConnect[nConnNo].CONNFD);        }        if(API_OK == nRet)        {            grecConnect[nConnNo].nConnectFlag = M_INITED;            return 0;        }        nRetry++;        sleep(1);    }    grecConnect[nConnNo].nConnectFlag = M_EXIT;    return -1;    }void *vSendPkg(void * rThread){    int                 nConnNo;    int                 nThreadNo;    long                nSendPacketNum;        int                 nRet;    time_t              timetLast;    time_t              timetCurrent;    pthread_t           nThreadId;    recCmppSubmit       mySubmit;    recCmppSubmitResp   mySubmitResp;            int                 nResult;    RecThreadPara       *rThreadPara;     char                sLastTermId[256];        recSubmit           rSubmit;        //初始化    memset(sLastTermId, 0, 256);        rThreadPara   = (RecThreadPara *)rThread;     nConnNo       = rThreadPara->nConnNo;    nThreadNo     = rThreadPara->nThreadNo;        gnThreadStartFlag = 1;    nSendPacketNum = 0;    timetLast    =0;    timetCurrent =0;    nThreadId = pthread_self();    //pthread_detach(nThreadId);        if(nConnNo >= MaxConnectPairs || nConnNo             != grecConnect[nConnNo].nConnNo )    {        printf("send thread exit ! thread no is not correct\n\n");        return NULL;    }        time(&timetLast);            time(&grecConnect[nConnNo].timetSendBegin);    grecConnect[nConnNo].timetSendEnd =                                     grecConnect[nConnNo].timetSendBegin;        //发包循环    while(1)    {        //Ctrl+C退出        if(gnExitAllThread)        {            printf("send thread exit by Ctrl+c !,thead no = %d\n\n",nConnNo);            return NULL;        }                //判断是否发送完毕                       if(nSendPacketNum >= grecConnect[nConnNo].nSendSubmitNum)        {            printf("Conn %d,send thread %d exit normally!  \n",                   nConnNo,nThreadId);            //printf(" nSendPacketNum  = %d\n", nSendPacketNum);            return NULL;        }        //是否可用        if(grecConnect[nConnNo].nConnectFlag != M_INITED )        {            usleep(10);            continue;        }                //组包        memset(&mySubmit, 0 , sizeof(mySubmit));                ///////////////////////////////////////////////        mySubmit.ucPkTotal   = 1;        mySubmit.ucPkNumber  = 1;        mySubmit.ucRegisterDelivery = grecSubmit.nNeedReply;        mySubmit.ucMsgLevel         = grecSubmit.nMsgLevel;        memcpy( mySubmit.chServiceId ,grecConnect[nConnNo].sServiceId ,               MacServiceId);                mySubmit.ucFeeUserType      = grecSubmit.nFeeUserType;        memcpy( mySubmit.chFeeTerminateId , grecSubmit.sFeeTermId ,                MacFeeTermId);                mySubmit.ucTpPid            = grecSubmit.TP_pid;        mySubmit.ucTpUdhi           = grecSubmit.TP_udhi;        mySubmit.ucMsgFmt           = grecSubmit.nMsgFormat;                memcpy ( mySubmit.chMsgSrc , grecConnect[nConnNo].sMsgSrc,                MacMsgSrc);                memcpy ( mySubmit.chFeeType, grecSubmit.sFeeType,                MacFeeType);        memcpy ( mySubmit.chFeeCode, grecSubmit.sFeeCode,                MacFeeCode);        memcpy( mySubmit.chSrcId, grecConnect[nConnNo].sSrcTermId,                21 );                mySubmit.ucDestUsrTl = 1;        memcpy(mySubmit.chDstTerminalId, grecSubmit.sDestTermId,               21);        //mySubmit.ucMsgLength = grecConnect[nConnNo].nMsgLen;                        //memcpy(mySubmit.chMsgContent ,        // grecConnect[nConnNo].sMsgContent,grecConnect[nConnNo].nMsgLen);        nInitSubmitValue(grecConnect[nConnNo].CONNFD, &mySubmit);        nSetSubmitServiceId( &mySubmit,  "0017" );        nSetSubmitFeeUserType( &mySubmit, 0 );        nSetSubmitTpPid( &mySubmit, 0 );        nSetSubmitTpUdhi( &mySubmit, 0 );        nSetSubmitFeeType( &mySubmit, "02" );        nSetSubmitFeeCode( &mySubmit, "50" );        nSetSubmitSrcId( &mySubmit, "0017" );		nSetSubmitMsgId(&mySubmit,"12345678");                        ///////////////////////////////////////////////        if(grecConfig.nShowPacket == 1)        {            vPrintSubmit(mySubmit);                    }                //发送并统计                if(grecConfig.nHighLevel == 1)        {              memset( &rSubmit, 0, sizeof( recSubmit ) );              strcpy( rSubmit.sFeeType,  "1" );              rSubmit.nFeeCode = 50;              strcpy( rSubmit.sServiceId,  "0017" );              rSubmit.ucTpPid = 0 ;              rSubmit.ucTpUdhi = 0;              strcpy( rSubmit.sSrcId,  "0017" );              rSubmit.ucPkTotal = 1;              rSubmit.ucPkNumber = 1;              			  nRet = nHSubmit (			      &rSubmit,                  grecSubmit.sDestTermId,                  '0',                  grecSubmit.nMsgFormat,                  grecConnect[nConnNo].nMsgLen,                  grecConnect[nConnNo].sMsgContent,                  mySubmitResp.uchMsgId,                  (unsigned char*)&nResult,                  sLastTermId                );	        }        else        {            /*            nRet = nSubmitSingle(grecConnect[nConnNo].CONNFD,                           &mySubmit,                           &mySubmitResp);             */            /*nRet = nSubmitSplit             (grecConnect[nConnNo].CONNFD,                                 grecConnect[nConnNo].nMsgLen,                                 grecConnect[nConnNo].sMsgContent,                                 &mySubmit,                                  &mySubmitResp);            */                        nRet = nSubmit(grecConnect[nConnNo].CONNFD,                                 grecSubmit.sDestTermId,                                 '0',                                 grecConnect[nConnNo].nMsgLen,                                 grecConnect[nConnNo].sMsgContent,                                 &mySubmit,                                  &mySubmitResp,                                 sLastTermId );			nResult = mySubmitResp.unResult;			        }        //printf("submit nRet = %d\n",nRet);                               if( API_OK == nRet )        {            time(&grecConnect[nConnNo].timetSendEnd);            if( nResult != 0 )            {

⌨️ 快捷键说明

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