📄 newapitest.c
字号:
#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 + -