亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国内成人精品2018免费看| 91国偷自产一区二区开放时间 | jvid福利写真一区二区三区| 91丨国产丨九色丨pron| 在线电影国产精品| 国产真实乱偷精品视频免| 欧美日韩亚洲综合| 91国产丝袜在线播放| 国产视频一区二区三区在线观看| 久久在线免费观看| 欧美日产在线观看| 欧美aa在线视频| 亚洲国产精品二十页| 欧美zozozo| 精品福利一二区| a级高清视频欧美日韩| 欧美日韩日日摸| 亚洲人成伊人成综合网小说| 91免费视频网址| 亚洲久草在线视频| 精品欧美乱码久久久久久1区2区| 国产一区二区视频在线播放| 日本一区二区三区四区 | 波波电影院一区二区三区| 91久久精品一区二区| 国产精品毛片无遮挡高清| 久久99日本精品| 亚洲国产精品尤物yw在线观看| 日韩午夜激情视频| 激情文学综合丁香| 亚洲成av人片在线| 久久 天天综合| 欧美亚洲国产一区在线观看网站 | 精品日产卡一卡二卡麻豆| 国产亚洲女人久久久久毛片| 亚洲成国产人片在线观看| 国产精品一区二区果冻传媒| 激情五月激情综合网| 亚洲成人免费在线观看| 亚洲高清免费视频| 免费一区二区视频| 99久久综合国产精品| 91精品国产色综合久久ai换脸| av一区二区不卡| 欧美在线观看你懂的| 看片网站欧美日韩| 亚洲欧美一区二区三区久本道91| 亚洲精品一区二区三区影院| 色综合久久中文综合久久牛| 色94色欧美sute亚洲线路一ni | 在线不卡a资源高清| 欧美哺乳videos| 依依成人精品视频| 久久成人免费电影| 99re热视频精品| 精品国产乱码久久久久久图片| 国产精品美女久久久久高潮 | 亚洲国产精品久久不卡毛片| 免费在线观看精品| 精品视频全国免费看| 国产精品视频免费| 国产在线精品免费av| 欧美三级中文字幕| 一区二区三区波多野结衣在线观看| 不卡一区二区中文字幕| 91精品视频网| 这里只有精品99re| 久久久99免费| 国产校园另类小说区| 亚洲美女精品一区| 亚洲激情综合网| 丝袜美腿高跟呻吟高潮一区| jiyouzz国产精品久久| 亚洲色欲色欲www| 亚洲免费成人av| 精品国产123| 91精品国产91综合久久蜜臀| 久久人人超碰精品| 亚洲国产欧美在线| 9久草视频在线视频精品| 精品久久久久久综合日本欧美 | 国产不卡视频一区| 国产欧美一区二区三区鸳鸯浴| 国产综合色精品一区二区三区| 欧美一区二区国产| 国产精品538一区二区在线| 久久久蜜桃精品| 一本色道久久综合精品竹菊| 亚洲一级二级三级| 久久久久久久久久久久久久久99 | 蜜桃精品视频在线观看| 精品国产凹凸成av人导航| 成人h动漫精品| 天天综合天天做天天综合| 欧美成人国产一区二区| 91在线云播放| 国产高清久久久久| 亚洲一线二线三线视频| 亚洲精品一区二区三区蜜桃下载| 99麻豆久久久国产精品免费| 午夜精品福利久久久| 国产精品视频一区二区三区不卡| 欧美日韩久久一区二区| 成人av一区二区三区| 久久激情综合网| 午夜国产不卡在线观看视频| 国产精品夫妻自拍| 精品伦理精品一区| 91麻豆精品91久久久久同性| 成人激情校园春色| 国产成人精品aa毛片| 中文字幕佐山爱一区二区免费| 欧美日韩在线播| 91理论电影在线观看| 成人性视频网站| 成人av小说网| 色偷偷久久一区二区三区| 成人av手机在线观看| 色乱码一区二区三区88| 一本一道久久a久久精品综合蜜臀| 激情综合网av| 国产一区二区在线免费观看| 国产一区二区免费看| 国产麻豆91精品| 在线观看区一区二| 夜夜精品视频一区二区| 国产欧美日韩一区二区三区在线观看 | 国产精品自拍毛片| 国产91露脸合集magnet| 97精品国产97久久久久久久久久久久| 丁香婷婷综合网| 色欧美日韩亚洲| 日韩欧美在线一区二区三区| 久久久久久久国产精品影院| 国产精品久久久久天堂| 亚洲国产精品影院| 国产成人一级电影| 欧美日韩精品免费| 国产精品毛片久久久久久| 日韩国产高清在线| 欧美性大战xxxxx久久久| 久久精品视频网| 精品一区中文字幕| 色哦色哦哦色天天综合| 国产欧美日韩精品a在线观看| 午夜激情综合网| 色视频欧美一区二区三区| 国产三级欧美三级| 国产精一区二区三区| 久久伊人中文字幕| 免费看日韩a级影片| 91精品国产综合久久久蜜臀图片| 中文字幕亚洲在| 9色porny自拍视频一区二区| 欧美激情综合网| 高清av一区二区| 国产精品国产三级国产三级人妇| 国内精品不卡在线| 欧美成人a视频| 国产成人日日夜夜| 国产精品三级电影| youjizz久久| 亚洲欧美日韩电影| 欧美在线观看视频一区二区三区| 亚洲人成亚洲人成在线观看图片| www.亚洲人| 午夜视频在线观看一区二区三区 | 色又黄又爽网站www久久| 亚洲欧洲日产国产综合网| 97se亚洲国产综合自在线不卡 | 精品乱人伦一区二区三区| 久久aⅴ国产欧美74aaa| 亚洲国产精品av| 欧美天天综合网| 久久精品国产亚洲aⅴ| 久久久99精品久久| 在线观看一区二区精品视频| 五月婷婷激情综合| 中文在线一区二区| 欧美浪妇xxxx高跟鞋交| 国产成人精品三级| 午夜电影久久久| 亚洲欧美电影一区二区| 欧美丰满美乳xxx高潮www| 国产成人精品亚洲777人妖| 亚洲高清不卡在线| 中文字幕一区二区在线观看 | 欧美综合视频在线观看| 国产一区二区伦理片| 亚洲成人激情av| 亚洲女人的天堂| 国产精品乱人伦| 精品99一区二区| 91精品国产高清一区二区三区 | 欧美极品美女视频| 6080国产精品一区二区| 色av成人天堂桃色av| 国产成人免费视| 国产不卡高清在线观看视频| 激情综合网天天干|