亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sgipapp.cpp

?? 聯通的短信網關平臺。 sp 使用。 如果想自己用vc 開發短信業務
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

/*
 *	SGIPApp.cpp
 */

#include "sgip.h"
#include "SGIPApp.h"
#include "SGIPComm.h"
#include "SGIPPkg.h"
#include <iostream.h>

#define MAX_QUEUE_LEN 1000

//global 
unsigned int g_nSeqNo = 0; //系列號
char g_cSrcID[11] = "";//節點編號
char g_cClientIP[16] = "";
int  g_iLocalPort = 0;
char g_cServerIP[16] = "";
int	 g_iSrvPort = 0;
int	 g_iAcceptNum = 16;
char g_cRUserName[16] = "";
char g_cRUserPwd[16] = "";
char g_cLUserName[16] = "";
char g_cLUserPwd[16] = "";
char g_cSpNum[21] = "";
char g_cCorpID[7] = "";

static bool g_bWingateServerCreate = false;
static pthread_mutex_t g_WGSrvCreate_mutex;
// static int g_nListenfd = -1;

CSGIPApp::CSGIPApp()
{
	tLastSendSubmitTime = 0;
	bTermitnate = false;
	nSubmitTimes = 0;
	m_Listenfd = -1;
	bInitConf = false;

	//add liaomch 2003-08-14
	m_nSendSock = -1;
	bSendFinish = false;

	pthread_mutex_init(&m_DeliverVec_mutex , NULL);
	pthread_mutex_init(&m_ReportVec_mutex , NULL);
	pthread_mutex_init(&m_AcceptSock_mutex , NULL);

	if (!g_bWingateServerCreate)
		pthread_mutex_init(&g_WGSrvCreate_mutex, NULL);

	m_pLog = new CMobilLog();
}

CSGIPApp::~CSGIPApp()
{
	if (m_pLog != NULL)
		delete m_pLog;
	
	if (m_Listenfd != -1)
		close(m_Listenfd);

	vector<SGIP_DELIVER_PACKAGE * > ::iterator it;
	SGIP_DELIVER_PACKAGE * pBody = NULL;
	pthread_mutex_lock(&m_DeliverVec_mutex);
	for(it = m_pDeliver.begin();it != m_pDeliver.end(); it++)
	{
		if((*it) == NULL)
		{
	   		continue;
		}
		pBody = *it;
		delete (char *)pBody;
	}
	m_pDeliver.clear();
	
	pthread_mutex_unlock(&m_DeliverVec_mutex);

	vector<SGIP_REPORT_PACKAGE * > ::iterator it1;
	SGIP_REPORT_PACKAGE * pBody1 = NULL;
	
	pthread_mutex_lock(&m_ReportVec_mutex);
	for(it1 = m_pReport.begin();it1 != m_pReport.end(); it1++)
	{
		if((*it1) == NULL)
		{
	   		continue;
		}
		pBody1 = *it1;
		delete (char *)pBody1;
	}
	m_pReport.clear();
	pthread_mutex_unlock(&m_ReportVec_mutex);
}
 
void  CSGIPApp::GetValByName(const char *pName, char *pBuf, char *pVal)
 {
	if ((pName == NULL) || (pBuf == NULL) || (pVal == NULL))
		return;

	char *pTmp = NULL;
	if ((pTmp = strstr(pBuf, pName)) == NULL)
		return;

	char *p = strstr(pTmp, "=");
	if (p == NULL)
		return;
	p++;
	while ((*p!=' ') && (*p!='\t') && (*p!='\n') && (*p!='\r'))
	{
		*pVal++ = *p++;
	}
	return;
 }

bool CSGIPApp::initConfig(char *pFile = NULL)
 {
	int nHand = 0;
	int nLen = 0;
	char cBuf[1024] = "";
	if (pFile != NULL)
	{
		if ((nHand = open(pFile, O_RDONLY)) == END_FAILED)
			return false;
	}
	else
	{
		if ((nHand = open("./sgipc.ini", O_RDONLY)) == END_FAILED)
		{
			if ((nHand = open("../config/sgipc.ini", O_RDONLY)) == END_FAILED)
				return false;
		}
	}


	//lseek(nHand, 0L, SEEK_SET);
	nLen = lseek(nHand, 0L, SEEK_END);
	lseek(nHand, 0L, SEEK_SET);
	if (nLen != read(nHand, &cBuf, nLen))
	{
		close(nHand);
		return false;
	}
	else
		close(nHand);

	memset(g_cClientIP, 0, sizeof(g_cClientIP));
	memset(g_cServerIP, 0, sizeof(g_cServerIP));
	memset(g_cCorpID, 0, sizeof(g_cCorpID));
	memset(g_cSpNum, 0, sizeof(g_cSpNum));
	memset(g_cRUserName, 0, sizeof(g_cRUserName));
	memset(g_cRUserPwd, 0, sizeof(g_cRUserPwd));

	memset(g_cLUserName, 0, sizeof(g_cLUserName));
	memset(g_cLUserPwd, 0, sizeof(g_cLUserPwd));

	memset(g_cSrcID, 0, sizeof(g_cSrcID));
	GetValByName((const char *)&"ClientIP", (char *)&cBuf, (char *)&g_cClientIP);
	GetValByName((const char *)&"ServerIP", (char *)&cBuf, (char *)&g_cServerIP);
	GetValByName((const char *)&"CorpID", (char *)&cBuf, (char *)&g_cCorpID);
	GetValByName((const char *)&"SpNum", (char *)&cBuf, (char *)&g_cSpNum);
	GetValByName((const char *)&"RUserName", (char *)&cBuf, (char *)&g_cRUserName);
	GetValByName((const char *)&"RUserPwd", (char *)&cBuf, (char *)&g_cRUserPwd);

	GetValByName((const char *)&"LUserName", (char *)&cBuf, (char *)&g_cLUserName);
	GetValByName((const char *)&"LUserPwd", (char *)&cBuf, (char *)&g_cLUserPwd);
	
	GetValByName((const char *)&"SourceID", (char *)&cBuf, (char *)&g_cSrcID);

	char cTmp[8]="";

	memset(&cTmp, 0, sizeof(cTmp));
	GetValByName((const char *)&"ServerPort", (char *)&cBuf, (char *)&cTmp);
	g_iSrvPort = atoi(cTmp);

	memset(&cTmp, 0, sizeof(cTmp));
	GetValByName((const char *)&"LocalPort", (char *)&cBuf, (char *)&cTmp);
	g_iLocalPort = atoi(cTmp);

	bInitConf = true;

	return true;
 }

//封裝的對外接口:
bool CSGIPApp::SGIPInit(char *pConfFile = NULL)
{
	//config:
	if (!bInitConf)
	{
		if (initConfig(pConfFile) != true)
		{
			printf("CSGIPApp::Init(%s) faild!\n", pConfFile);
			bInitConf = false;
			return false;
		}
	}

#ifdef __DEBUG_API__STOP
	printf("g_nSeqNo = %d\n"
		"g_cSrcID = %s\n"
		"g_cClientIP = %s\n"
		"g_iLocalPort = %d\n"
		"g_cServerIP = %s\n"
		"g_iSrvPort = %d\n"
		"g_iAcceptNum = %d\n"
		"g_cRUserName = %s\n"
		"g_cRUserPwd = %s\n"
		"g_cSpNum = %s\n"
		"g_cCorpID = %s\n",		
		g_nSeqNo,
		g_cSrcID,
		g_cClientIP,
		g_iLocalPort,
		g_cServerIP,
		g_iSrvPort,
		g_iAcceptNum,
		g_cRUserName,
		g_cRUserPwd,
		g_cSpNum,
		g_cCorpID);
#endif
	
	//start server:
	pthread_attr_t pAttr;
	pthread_attr_init(&pAttr);
	pthread_attr_setdetachstate(&pAttr,  PTHREAD_CREATE_DETACHED);
	pthread_t iThrRecv = 0;
	int ret = pthread_create(&iThrRecv, &pAttr, (void *(*) (void *))GetAcceptProc, (void *)this);
	if(ret != 0)
	{
		printf("accept succeed but new thread error!\n");
		return false;
	}
	else
		printf("create Listen thread ID:%ld succeed!\n", iThrRecv);

	return true;
}

void CSGIPApp::SGIPFinal(void)
{
	if (m_nSendSock > 0)
	{
		DisConnect(m_nSendSock);
		m_nSendSock = -1;
	}
	return;
}


int CSGIPApp::SGIPDeliver(SGIP_DELIVER_BODY &sDeliver, char *pMsgid, int nTimeOut)
{
	time_t tBase = time(NULL);
	vector<SGIP_DELIVER_PACKAGE * > ::iterator it;

	SGIP_DELIVER_PACKAGE * pBody = NULL;

	while (!HadTimeOut(tBase, nTimeOut))
	{
		if (m_pDeliver.size() != 0)
		{
#ifdef __DEBUG_API__
			cout << "deliver list total: " << m_pDeliver.size() << endl;
#endif
			pthread_mutex_lock(&m_DeliverVec_mutex);

			for(it = m_pDeliver.begin();it != m_pDeliver.end(); it++)
			{
				if((*it) == NULL)
				{
					m_pDeliver.erase(it);
					it--;
	   				continue;
				}
				pBody = *it;
				memcpy(&sDeliver, &pBody->Body, sizeof(SGIP_DELIVER_BODY));
				memcpy(pMsgid, pBody->cMsgid, sizeof(pBody->cMsgid));
				m_pDeliver.erase(it);
				delete (char *)pBody;
				break;
			}
			pthread_mutex_unlock(&m_DeliverVec_mutex);

			char cLogBuf[50] = "";
			memset(cLogBuf, 0, sizeof(cLogBuf));
			sprintf(cLogBuf, "MO-DELIVER:%s\n", pMsgid);
			m_pLog->add(cLogBuf);

			return END_SUCCEED;
		}
		else
			usleep(10);
	}

	return END_FAILED;
}

int CSGIPApp::SGIPReport(SGIP_REPORT_BODY &sReport, char *pMsgid, int nTimeOut)
{
	time_t tBase = time(NULL);
	vector<SGIP_REPORT_PACKAGE * > ::iterator it;

	SGIP_REPORT_PACKAGE *pBody = NULL;

	while (!HadTimeOut(tBase, nTimeOut))
	{
		if (m_pReport.size() != 0)
		{
#ifdef __DEBUG_API__
			cout << "Report list total: " << m_pReport.size() << endl;
#endif
			
			CMobilLog m_log;
			pthread_mutex_lock(&m_ReportVec_mutex);

			for(it = m_pReport.begin();it != m_pReport.end(); it++)
			{
				if((*it) == NULL)
				{
					m_pReport.erase(it);
					it--;
	   				continue;
				}
				pBody = *it;
				memcpy(&sReport, &pBody->Body, sizeof(SGIP_REPORT_BODY));
				memcpy(pMsgid, &pBody->cMsgid, sizeof(pBody->cMsgid));
				m_pReport.erase(it);
				delete (char *)pBody;
				break;
			}
			pthread_mutex_unlock(&m_ReportVec_mutex);

			char cLogBuf[50] = "";
			memset(cLogBuf, 0, sizeof(cLogBuf));
			sprintf(cLogBuf, "MO-REPORT:%s\n", pMsgid);
			m_pLog->add(cLogBuf);

			return END_SUCCEED;
		}
		else
			usleep(10);
	}

	return END_FAILED;
}

int CSGIPApp::SGIPSingleSend(SGIP_SUBMIT_BODY &sSubmit, char *pMsgid)
{
	char cBuf[5120] = "";
	//int nSockfd = -1;

	if (m_nSendSock < 0)
	{
		if ((m_nSendSock = DoConnect((char *)g_cServerIP, g_iSrvPort)) == END_FAILED)
		{
			printf("SingleSend DoConnect faild!\n");
			m_nSendSock = -1;
			return END_FAILED;
		}
		else
		{
			printf("SingleSend DoConnect succeed!\n");
		}
	}

	//發送
	nSubmitTimes = 0;//同一個Submit已發送的次數
	while (nSubmitTimes < 3)//nSubmitRetry)
	{
		nSubmitTimes++;
		memset(&cBuf, 0, sizeof(cBuf));
		int nBufLen = 0;
		m_pkg->DeComposePackage(SGIP_SUBMIT, (SGIP_MSG_BODY &)sSubmit, (char *)cBuf, &nBufLen);

		SGIP_HEAD *pMsgHead = (SGIP_HEAD *)cBuf;
		sprintf(pMsgid, "%u%010d%d",
			ntohl(pMsgHead->sSeqNo.iSrcID),
			ntohl(pMsgHead->sSeqNo.iDate),
			ntohl(pMsgHead->sSeqNo.iSeqno));

		char cLogBuf[50] = "";
		memset(cLogBuf, 0, sizeof(cLogBuf));
		sprintf(cLogBuf, "MT-SUBMIT:%s\t", pMsgid);
		m_pLog->add(cLogBuf);

		while (m_nSendSock < 0)
		{
			m_nSendSock = DoConnect((char *)g_cServerIP, g_iSrvPort);
			if (m_nSendSock < 0)
			{
				printf("====reconnect to the remote host error!=====\n");
				usleep(1000);
			}
		}

		int nRecvLen = 0;
		if ( !SendToSMC(m_nSendSock, (const char *)&cBuf, (nBufLen)) ) 
		{
			//send err, socket error! 
			close(m_nSendSock);
			m_nSendSock = -1;
			usleep(1000);
			m_pLog->add("... socket error!\n");
			continue;
		}
		else
		{
			//end
			printf("Submit  %d times send succeed! recv response... ...\n", nSubmitTimes);
			while (true)
			{
				nRecvLen = sizeof(cBuf);
				if ((RecvFromSMC(m_nSendSock, (char *)cBuf, &nRecvLen, 60)) == END_SUCCEED)
				{
					unsigned int iMsgType = 0;
					if ((iMsgType = m_pkg->GetPackageType((const char *)cBuf)) == SGIP_SUBMIT_RESP)
						//
					{
						//recv the submit resp:
						int iRespType = -1;
						SGIP_SUBMITRESP_MSG *pMsg = (SGIP_SUBMITRESP_MSG *)cBuf;
						iRespType = pMsg->Body.cResult;
						//here must add the compress the MSGID
						//between send submit and recv response
						//....

						if (iRespType == 0)
						{	
							if (bSendFinish)
							{
								DisConnect(m_nSendSock);
								m_nSendSock = -1;
							}

							m_pLog->add("...succeed!\n");

							return END_SUCCEED;
						}
						else 
						{
							printf("submit package error! error code = %d\n", iRespType);
							//continue;
							//break;
							//send submit succeed, but recv resp error
							if (bSendFinish)
							{
								DisConnect(m_nSendSock);
								m_nSendSock = -1;
							}
							m_pLog->add("...resp error!\n");
							
							return iRespType;
						}
					}
					else if (iMsgType == SGIP_REPORT)
					{						
						printf("recv a report package!\n");
						SGIP_REPORT_PACKAGE *pBody = (SGIP_REPORT_PACKAGE *)new char[sizeof(SGIP_REPORT_PACKAGE)];	
						SGIP_REPORT_MSG *pMsg = NULL;
						pMsg = (SGIP_REPORT_MSG *)cBuf;
						SGIP_REPORT_MSG stReport;
						memset(&stReport, 0, sizeof(stReport));
						m_pkg->ComposePackage(SGIP_REPORT, (SGIP_MSG &)stReport, (const char *)cBuf);
						memcpy(&pBody->Body, &stReport.Body, sizeof(stReport.Body));
						sprintf(pBody->cMsgid, "%u%010d%d",
								ntohl(stReport.Head.sSeqNo.iSrcID),
								ntohl(stReport.Head.sSeqNo.iDate),
								ntohl(stReport.Head.sSeqNo.iSeqno)
								);

						pthread_mutex_lock(&m_ReportVec_mutex);
						int nTmpResult = -1;
						if ((m_pReport.size() < MAX_QUEUE_LEN) &&
							(m_pReport.size() < m_pReport.max_size()))
						{
							m_pReport.push_back(pBody);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国偷自产一区二区开放时间| 久久99这里只有精品| 91亚洲国产成人精品一区二区三| 久久精品亚洲乱码伦伦中文| 粉嫩av亚洲一区二区图片| 国产农村妇女毛片精品久久麻豆 | 国产精品一区二区男女羞羞无遮挡| 精品久久99ma| 成人性色生活片| 亚洲精品国产视频| 欧美人与z0zoxxxx视频| 紧缚捆绑精品一区二区| 中文字幕av在线一区二区三区| 91老师国产黑色丝袜在线| 亚洲v中文字幕| 欧美精品一区二区三区在线| 成人网页在线观看| 亚洲黄一区二区三区| 日韩欧美一级在线播放| www.日本不卡| 午夜精品在线看| 国产午夜精品久久久久久免费视| 92国产精品观看| 奇米精品一区二区三区四区| 26uuu精品一区二区三区四区在线| 成人爽a毛片一区二区免费| 一区二区成人在线视频| 日韩色在线观看| 99re免费视频精品全部| 日韩和欧美一区二区| 国产日产欧产精品推荐色| 欧美日韩精品一区二区在线播放| 国产精品综合一区二区三区| 亚洲一区二区不卡免费| 国产亚洲短视频| 欧美精品一二三| 成人免费视频视频| 久久精品二区亚洲w码| 一区二区三区加勒比av| 久久精品亚洲国产奇米99| 欧美视频在线不卡| caoporn国产一区二区| 久久精工是国产品牌吗| 亚洲一区二区三区四区五区中文 | 日韩精品亚洲专区| 国产欧美一区二区三区网站| 欧美日韩国产免费| 一道本成人在线| 国产成人午夜高潮毛片| 视频一区免费在线观看| 亚洲青青青在线视频| 精品欧美乱码久久久久久| 欧美在线观看视频在线| 国产亚洲综合性久久久影院| 一区二区高清在线| 在线播放亚洲一区| 欧美性猛片aaaaaaa做受| 国产高清一区日本| 精品一区二区三区免费视频| 亚洲国产一区二区在线播放| 亚洲精品免费视频| 国产精品国产三级国产aⅴ原创| 欧美videos中文字幕| 欧美精品精品一区| 欧美片网站yy| 欧美日韩精品免费| 欧美日韩一区二区在线观看| 色综合久久久网| 91丨九色porny丨蝌蚪| 99v久久综合狠狠综合久久| 成人亚洲精品久久久久软件| 国产99久久久国产精品潘金网站| 美脚の诱脚舐め脚责91| 久久99精品国产麻豆婷婷| 日本不卡中文字幕| 美女在线观看视频一区二区| 久久精品久久精品| 激情图区综合网| 国产精品123区| 成人黄动漫网站免费app| 成人av在线资源网| 91首页免费视频| 色噜噜久久综合| 欧美日韩一区三区四区| 538prom精品视频线放| 91精品国产高清一区二区三区蜜臀 | 99久久国产免费看| 成人毛片老司机大片| 不卡的av电影在线观看| 99re热视频精品| 在线观看av不卡| 欧美一区二区精品| 日韩亚洲欧美中文三级| 欧美不卡视频一区| 国产精品久久久久久一区二区三区 | 亚洲天天做日日做天天谢日日欢| 中文字幕一区二区三区乱码在线| 亚洲图片另类小说| 午夜精品久久久久久久久久久| 免费成人在线观看| 国产成人精品亚洲777人妖| 99久久精品免费看国产免费软件| 欧美综合色免费| 2020国产成人综合网| 一色桃子久久精品亚洲| 亚洲午夜电影网| 黄一区二区三区| 色网综合在线观看| 日韩免费视频线观看| 国产精品福利一区二区三区| 亚洲一区二区免费视频| 激情综合一区二区三区| 99久久99久久免费精品蜜臀| 91精品久久久久久久99蜜桃| 国产人久久人人人人爽| 午夜精品久久久久久久| 国产一二三精品| 在线看不卡av| 国产婷婷精品av在线| 亚洲高清免费在线| 成人中文字幕电影| 91麻豆精品国产91久久久久久久久| 国产欧美日本一区二区三区| 婷婷综合另类小说色区| 99久久国产综合精品色伊| 欧美成人aa大片| 亚洲成人免费在线观看| 不卡的av在线| 欧美精品一区二区三区一线天视频| 一区二区成人在线视频| 成人免费视频视频在线观看免费 | 成人免费不卡视频| 91精品在线一区二区| 1024国产精品| 国产福利一区二区三区在线视频| 91黄色激情网站| 国产精品午夜电影| 国产一区高清在线| 欧美一区二区三区在线观看| 一区二区三区精品在线观看| 成人av电影在线观看| 国产性天天综合网| 久久成人免费电影| 日韩一区和二区| 亚洲成在人线免费| 欧美亚洲尤物久久| 亚洲欧美另类在线| 91在线观看污| 国产精品免费aⅴ片在线观看| 国产综合久久久久久久久久久久| 欧美一区二区三区播放老司机 | 日本一不卡视频| 欧美日韩美女一区二区| 亚洲综合色视频| 在线视频国产一区| 亚洲色图视频网| 91麻豆国产在线观看| 国产精品久久久久影院| 风间由美一区二区三区在线观看 | 亚洲综合在线观看视频| 91在线免费看| 亚洲精品水蜜桃| 99re视频精品| 亚洲一区二区三区四区五区黄| 91精品福利视频| 亚洲超碰精品一区二区| 欧美日韩电影一区| 日日夜夜一区二区| 欧美大片在线观看一区二区| 久久激情综合网| 国产欧美一区二区精品性色超碰 | 亚洲一线二线三线久久久| 色www精品视频在线观看| 亚洲图片欧美一区| 9191久久久久久久久久久| 日本v片在线高清不卡在线观看| 欧美二区在线观看| 精品一区二区三区视频| 国产精品女主播av| 色综合天天做天天爱| 亚洲图片欧美视频| 日韩欧美一二区| 国产成人在线看| 亚洲三级小视频| 欧美美女一区二区| 精品一区二区三区蜜桃| 中文字幕免费观看一区| 日本伦理一区二区| 免费成人在线观看视频| 亚洲国产精品t66y| 欧美性受极品xxxx喷水| 蜜臀av性久久久久蜜臀aⅴ四虎 | 免费高清在线一区| 国产色产综合色产在线视频| 99精品国产一区二区三区不卡| 亚洲美女视频一区| 欧美一区二区高清| 不卡的av网站| 日本午夜精品视频在线观看| 欧美国产日本韩|