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

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

?? cngp.c

?? 增值業務的sngp協議。
?? C
?? 第 1 頁 / 共 5 頁
字號:
				}
				else if(Is_Report == 1)
				{
					char err[4]="";
					int status =0;
					
					parse_msgid (Msg_Content + 3, msgid);
					
					//memset( msgid ,0, sizeof(msgid));				       
				        //strncpy( msgid,Msg_Content+3,20);
				       
				       err[0] = *(Msg_Content + 93);	//93 err code
				       err[1] = *(Msg_Content + 94);	//93 err code
				       err[2] = *(Msg_Content + 95);	//93 err code
				       err[3] = '\0';
				       
				       INFO("Msg_Content=%s\n", Msg_Content );	// 14 = strlen("id:") + msgid length+ space
				       INFO("Msg_msgid=%s\n", msgid );	
				       				      
				       INFO("err = %s\n", err);	
				       
				       if (Command_Status != 0)
						status = 2;
				       sprintf (query_string, "insert into %s.report_q (rq_id, rq_sequence,rq_mobile, rq_state, rq_code, rq_date, rq_provider, rq_flag) values(NULL,'%s','%s','%d','%s',now(),'0')", send_q_db, msgid, Src_Term_ID, status, err);	//Src_Term_ID is send cellphone code,
				       INFO("[INFO-RECVMO:%u] Receive report sql: %s\n",query_string,threadsnum);
				       ii = mysql_real_query (&fsql_mo, query_string, strlen (query_string)); 
					if(ii !=0)
					{
						INFO("[INFO-RECVMO:%u] ERROR:mysql_real_query :%s\n",threadsnum , mysql_error(&fsql_mo));
					}
					else
						INFO("[INFO-RECVMO:%u] INSERT:mysql_affected_rows:%d\n", threadsnum, mysql_affected_rows(&fsql_mo) );
				}
				else{
					 // wrong type 
					 INFO("[INFO-RECVMO:%u] Error Command_ID=>Command_ID=%8x\n", threadsnum, Command_ID);
				}
			}
			else
			{
				// other data
				INFO("[INFO-RECVMO:%u] Recv unknown data, Command_ID:%08x ,Body_Length :%d \n", threadsnum, Command_ID, Body_Length);
				if(Body_Length >0)
				{	
					buffersize -= Body_Length;
					memmove( socketbuffer, socketbuffer + Body_Length , buffersize );
				}
			}
		}
		
	    	while( loginstatus == 0 )
	    	{
	    		Rsocket_fd = ConnectISMG(CNGP_IP, recvmoport, LOGIN_NAME, LOGIN_PASSWORD, Sequence_Num, recvmomode, recvmoversion, threadsnum);
			INFO("[INFO-RECVMO:%u] ConnectISMG socket :%d\n", threadsnum, Rsocket_fd);
			if( Rsocket_fd > 0 )
			{
				loginstatus = 0;
			}
			else
			{
		  		recvmotime.tv_sec  =  time(NULL)+5;
		              recvmotime.tv_nsec  =  0;
				pthread_mutex_lock(&recvmolock);
				ret  =  pthread_cond_timedwait( &recvmocond,  &recvmolock, (const  struct  timespec  *)&recvmotime );
		 		if(ret !=0 )
				{
					INFO("[INFO-RECVMO:%u]: Connect ISMG failed , wait 5 sec  .\n", threadsnum);
					pthread_mutex_unlock(&recvmolock);
				}
			}
	    	}

		timeend = time(NULL);
		if( loginstatus == 2 && (timeend-times) >= active_time)
		{
			if( Sequence_Num == 0xffffffff)
				Sequence_Num = 1;
			else
				Sequence_Num ++;
			ret= CNGP_Active_Test(Rsocket_fd, Sequence_Num);
			INFO("[INFO-RECVMO:%u] Active test send %d\n", threadsnum, ret);
			times = time(NULL);
		}
	}
}

void *Recv_Res(int *argu)
{
	int n=0,ii=0;
    	int ret = 0;
    	int datatmp=0;
    	int Rsocket_fd=0, recv_len= 0; 
    	unsigned long Command_ID=0;
    	pthread_t threadsnum=0;
    	unsigned long Body_Length=0;
    	int cn= 0;
    	struct timespec recvtime;
	pthread_mutex_t recvlock = PTHREAD_MUTEX_INITIALIZER;
   	pthread_cond_t  recvcond = PTHREAD_COND_INITIALIZER;
	char *socketbuffer = NULL;
	int buffersize=0;
	RES_Q resqtmp;
    	struct tm *tp;
    	time_t timep;
    	time_t lastLoginTime;
    	time_t nowTime;
    	
    	unsigned long icount=0;
	int resqnum =0;
	int recvport =0, recvversion =0;
	unsigned long  Sequence_Num=1;
	unsigned long SUB_Sequence_Num=0;
	int return_id =0;
	char Msg_Content[500]="", query_string[1024],sqlbuf[1024];
	char Version;
	MYSQL fsql_res;
	
	int recvmode = 0;
	unsigned long Command_Status =0;
	char Msg_ID[30]="", Recv_Time[25] ="",Src_Term_ID[32] ="", Dest_Term_ID[32] ="", tmp[500]="";
	char ContentPackType[20]="",IsmpPackType[20]="",msgid[30]="";
	int Is_Report=0,Msg_Length=0;
	TLV Congestion_State = { 0x0428, 1, 35 };
	char RerverseId[30]="",ErrorCode[32]="";

	
    	threadsnum = pthread_self();
    	pthread_detach(threadsnum);
	mysql_thread_init();
	
    	recvport = argu[0]; // Port 
    	cn = argu[1]; // 連接號
    	recvversion = argu[2]; // Version
    	recvmode = argu[3]; // mode 
	INFO("[INFO-RECV:%u] RECV Thread START\n", threadsnum);

	if(!mysql_init(&fsql_res))
	{
		INFO("[-ERR:RECV:%u] init error \n", threadsnum);
		exit(EXIT_FAILURE);
    	}
    	if (!mysql_real_connect(&fsql_res, send_q_host, send_q_user, send_q_pass, send_q_db, send_q_port, NULL, 0) ) 
	{
        	INFO("[-ERR:RECV:%u] RECV MO sql_connect: %s\n", threadsnum, mysql_error(&fsql_res));
        	exit(EXIT_FAILURE);
    	}

	socketbuffer = malloc(socketbuffersize);
	if(socketbuffer == NULL)
	{
		INFO("[INFO-RECV:%u] malloc error .\n", threadsnum);
		socketbuffer = malloc(socketbuffersize);
	}
	buffersize = 0;
    	INFO("[INFO-RECV:%u]: Recv thread start!\n", threadsnum);
	while(Rsocket_fd <=0)
	{       
		if ( threads[cn][0] >0 )
		{
		    close(threads[cn][0]);
		    INFO("[INFO-RECV:%u]: sleep5 ready reconnect....\n", threadsnum);
		    sleep(5);		    
		}
		
		Rsocket_fd = ConnectISMG(CNGP_IP, recvport, LOGIN_NAME, LOGIN_PASSWORD, Sequence_Num, recvmode, recvversion, threadsnum);
		
		if(Rsocket_fd > 0)
		{
			time(&lastLoginTime); //保存上次登錄的時間.
			
			pthread_mutex_lock(&cnum_lock[cn]);
			threads[cn][0] = Rsocket_fd;
			pthread_mutex_unlock(&cnum_lock[cn]);
			INFO("[INFO-RECV:%u] ConnectISMG socket :%d\n", threadsnum, Rsocket_fd);
		}
		else{
	  		recvtime.tv_sec  =  time(NULL)+5;
	                recvtime.tv_nsec  =  0;
			pthread_mutex_lock(&recvlock);
			ret  =  pthread_cond_timedwait(&recvcond,  &recvlock, (const  struct  timespec  *)&recvtime);
	 		if(ret !=0 )
			{
				INFO("[INFO-RECV:%u]:  Connect to ISMG Error , wait 5 Sec  .\n", threadsnum);
				pthread_mutex_unlock(&recvlock);
			}
		}
	}
	
	icount=0;
    	while(1)
	{
		icount++;
		if( HaveDataTimeout(Rsocket_fd, timeoutu) > 0 )
		{
			//INFO("[INFO-RECV:%u] ----RecvHaveData--- \n",threadsnum);
			// have data to receive
		    	if( buffersize < socketbuffersize)
		    	{
				recv_len = recv(Rsocket_fd, socketbuffer+buffersize, socketbuffersize-buffersize-1, 0);
				if(recv_len < 0)  // <= 0)
				{
					int fdtmp=0;
					// reconnect
					INFO("[INFO-RECV:%u] recv thread cannot receive data from socket, reconnect. recv_len:%d\n",threadsnum, recv_len);
					INFO("[INFO-RECV:%u] Reset login status lock\n", threadsnum);
					
					fdtmp =threads[cn][0];
					pthread_mutex_lock(&cnum_lock[cn]);
					threads[cn][1] = 0; // login status 
					threads[cn][2] = 0; // need submit resp
					threads[cn][0] = 0; // socket
					pthread_mutex_unlock(&cnum_lock[cn]);
					INFO("[INFO-RECV:%u] Reset login status unlock\n", threadsnum);
					CNGP_Exit(Rsocket_fd, SUB_Sequence_Num);
					close(Rsocket_fd);
					close(datatmp);
					sleep(5);
					
					INFO("[INFO-RECV:%u] Buffersize == %d\n", threadsnum, buffersize);
					if( 0 == buffersize )
					{
						INFO("[INFO-RECV:%u] Buffersize ==0 , reconnect\n", threadsnum);
						Sequence_Num =1;
						Rsocket_fd = ConnectISMG(CNGP_IP, recvport, LOGIN_NAME, LOGIN_PASSWORD, Sequence_Num, recvmode, recvversion, threadsnum);
						if(Rsocket_fd > 0)
						{
							time(&lastLoginTime);
							pthread_mutex_lock(&cnum_lock[cn]);
							threads[cn][0] = Rsocket_fd;
							pthread_mutex_unlock(&cnum_lock[cn]);
						}
						//模擬 response
						INFO("[INFO-RECV:%u] simulate resp lock\n", threadsnum );
						pthread_mutex_lock(&sendq_lock[cn]);
						pthread_mutex_lock(&resq_lock[cn]);
						n = simulateres(SENDQ[cn], RESQ[cn]);
						pthread_mutex_unlock(&resq_lock[cn]);
						pthread_mutex_unlock(&sendq_lock[cn]);
						INFO("[INFO-RECV:%u] simulate resp unlock simulate:%d\n", threadsnum ,n);
						//修改等待resp數量
						INFO("[INFO-RECV:%u] change need sub resp num lock\n", threadsnum);
						pthread_mutex_lock(&cnum_lock[cn]);
						threads[cn][2] -= n;
						pthread_mutex_unlock(&cnum_lock[cn]);
						INFO("[INFO-RECV:%u] change need sub resp num lock\n", threadsnum);
					}
				}
				else
				{
					if( 0== recv_len )
					{
					    if( icount%7==0 )
					        INFO("[INFO-RECV:%u] RECV DATA %d\n", threadsnum, recv_len);
					}else
					{
					     INFO("[INFO-RECV:%u] RECV DATA %d\n", threadsnum, recv_len);						
					}    
					    
					buffersize += recv_len;
				}
		    	}
		}

		resqnum = checkresqnum(RESQ[cn]);
		while( (buffersize >= LEN_CNGP_HEADER) && (resqnum >0))
		{
			n = CNGP_HEADER_Recv_mem(socketbuffer, &Body_Length, &Command_ID, &Command_Status, &SUB_Sequence_Num);
			buffersize = buffersize - LEN_CNGP_HEADER;
			INFO("[INFO-RECV:%u] buffsersize:%d Command_ID:%08x Body_Length:%d SUB_Sequence_Num:%u\n", threadsnum, buffersize, Command_ID, Body_Length, SUB_Sequence_Num);
			memmove(socketbuffer , socketbuffer+LEN_CNGP_HEADER, buffersize);
			if( (buffersize < Body_Length) && (threads[cn][1] ==2) )
			{
				recv_len = recv(Rsocket_fd, socketbuffer+buffersize, socketbuffersize-buffersize-1, 0);
				if(recv_len> 0){
					buffersize += recv_len; 
				}
			}

			if(Command_ID == ID_CNGP_ACTIVE_TEST_RESP)
			{
				// ACTIVE_TEST_RESP 
				INFO("[INFO-RECV:%u] Receive Active_Test_Resp .\n", threadsnum);
			}
			else if(Command_ID == ID_CNGP_ACTIVE_TEST)
			{
				// ACTIVE_TEST
				INFO("[INFO-RECV:%u] Receive Active_Test .\n", threadsnum);
				CNGP_Active_TestRes(Rsocket_fd, SUB_Sequence_Num);
				INFO("[INFO-RECV:%u] Send Active_Test_Resp.\n", threadsnum);
			}
			else if( Command_ID == ID_CNGP_LOGIN_RESP)
			{
				CNGP_Receive_LoginRes_mem(socketbuffer, Body_Length, &Version);
				buffersize = buffersize - Body_Length;
				memmove(socketbuffer, socketbuffer+Body_Length, buffersize);
				if( 0 == Command_Status)
				{
					pthread_mutex_lock(&cnum_lock[cn]);
					threads[cn][1] = 2; // login status
					threads[cn][2] = 0; // need submit resp
					pthread_mutex_unlock(&cnum_lock[cn]);
					Rsocket_fd = threads[cn][0];
					INFO("[INFO-RECV:%u] connect resp Recv OK,chang login status .\n", threadsnum );
				}
				else
				{	
					INFO("[INFO-RECV:%u] connect resp Recv ,Status :%d login err .lock\n", threadsnum, Command_Status);
					
					if( threads[cn][0]>0)
					     close(threads[cn][0]);
					close(Rsocket_fd);
					buffersize=0;
																				
					pthread_mutex_lock(&cnum_lock[cn]);
					threads[cn][0] = 0; // socket
					threads[cn][1] = 0; // not login 
					threads[cn][2] = 0; // reset need submit resp 
					pthread_mutex_unlock(&cnum_lock[cn]);
					INFO("[INFO-RECV:%u] connect resp Recv ,login err .  unlock\n", threadsnum );
				        sleep(5);
				}
			}
			else if(Command_ID == ID_CNGP_DELIVER)
			{
				memset (Msg_ID, 0, 10);
				memset (Recv_Time, 0, 20);
				memset (Src_Term_ID, 0, 21);
				memset (Dest_Term_ID, 0, 21);
				memset (Msg_Content, 0, sizeof(Msg_Content) );
				memset (tmp, 0, 500);
				memset (ContentPackType,0,16);
				memset (IsmpPackType,0,16);
				
				CNGP_Receive_Deliver_mem( socketbuffer, Body_Length, Msg_ID, &Is_Report, Recv_Time, Src_Term_ID, Dest_Term_ID, &Msg_Length, Msg_Content);
				
				//buffersize = buffersize - Body_Length;
												
				if( buffersize < Body_Length)
				{
					int ki=0;
					for(ki=0;ki<5;ki++)
					{
					     recv_len = recv(Rsocket_fd, socketbuffer+buffersize, socketbuffersize-buffersize-1, 0);
				             if( recv_len >0 )
				                ki=99;
				             else
				                usleep(200*1000);				                				                
				        }
				        
					if( recv_len > 0)
					{
						buffersize += recv_len;
						CNGP_Receive_Deliver_mem( socketbuffer, Body_Length, Msg_ID, &Is_Report, Recv_Time, Src_Term_ID, Dest_Term_ID, &Msg_Length, Msg_Content);				
					}
					else{
					        #if 1
					        INFO("[INFO-RECV:%u] Deliver error packet.\n",threadsnum);
						//INFO("[INFO-RECV:%u] error packet content:%s\n",threadsnum,socketbuffer);
						memset( socketbuffer,0,socketbuffersize );
						buffersize=0;
						INFO("[INFO-RECV:%u] not handle error packet.\n",threadsnum);
						
						INFO("[INFO-RECV:%u] simulate resp lock\n", threadsnum );
						pthread_mutex_lock(&sendq_lock[cn]);
						pthread_mutex_lock(&resq_lock[cn]);
						n = simulateres(SENDQ[cn], RESQ[cn]);
						pthread_mutex_unlock(&resq_lock[cn]);
						pthread_mutex_unlock(&sendq_lock[cn]);
						INFO("[INFO-RECV:%u] simulate resp u

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产日韩在线观看| 青青草国产成人av片免费| 亚洲日穴在线视频| 男人操女人的视频在线观看欧美| 波多野结衣一区二区三区| 欧美一个色资源| 亚洲精品中文在线| 国产ts人妖一区二区| 欧美一激情一区二区三区| 亚洲精品美国一| 成人激情免费网站| 精品久久久久香蕉网| 亚洲国产精品一区二区尤物区| 国产综合成人久久大片91| 欧美精品久久99| 一区二区成人在线| 91亚洲国产成人精品一区二区三 | 夜夜揉揉日日人人青青一国产精品 | 亚洲与欧洲av电影| 丁香网亚洲国际| 精品国产乱码久久久久久免费 | 久久电影网站中文字幕| 欧美日韩一区二区三区视频| 亚洲视频免费观看| 99久久精品国产一区二区三区 | 精品国产乱子伦一区| 日韩国产精品久久久久久亚洲| 欧美在线色视频| 亚洲国产裸拍裸体视频在线观看乱了| 波多野结衣一区二区三区| 欧美高清在线视频| 国产河南妇女毛片精品久久久| 亚洲精品在线免费观看视频| 老司机午夜精品99久久| 日韩欧美久久久| 国产在线看一区| 国产视频一区在线观看| 国产69精品久久99不卡| 国产精品嫩草99a| 99v久久综合狠狠综合久久| 成人免费在线观看入口| 色94色欧美sute亚洲线路一久 | 视频一区二区国产| 欧美精品久久一区二区三区| 日本v片在线高清不卡在线观看| 欧美一区二区久久| 激情综合网激情| 国产日韩欧美一区二区三区综合 | 国产午夜一区二区三区| 国产高清久久久久| 亚洲欧洲无码一区二区三区| 色综合久久综合| 视频一区二区欧美| 久久亚洲春色中文字幕久久久| 国产盗摄精品一区二区三区在线| 国产精品久久久久久久久免费樱桃 | 亚洲欧洲一区二区三区| 欧美伊人久久久久久久久影院| 亚洲r级在线视频| 亚洲精品一区在线观看| 99久久婷婷国产综合精品| 亚洲一区二区三区四区的| 欧美一区二区三区成人| 国产高清不卡一区二区| 夜夜夜精品看看| xvideos.蜜桃一区二区| 91麻豆精品在线观看| 日韩激情av在线| 国产精品免费久久久久| 欧美日韩你懂的| 国产乱对白刺激视频不卡| 亚洲裸体xxx| 精品捆绑美女sm三区| 一本到不卡精品视频在线观看| 免费人成黄页网站在线一区二区| 欧美激情一区二区在线| 7777精品伊人久久久大香线蕉| 国产激情91久久精品导航 | 国产丝袜欧美中文另类| 欧美日韩成人在线| 风间由美性色一区二区三区| 视频一区视频二区中文字幕| 国产精品久久久久久久岛一牛影视 | 一区二区欧美视频| 久久久久国产精品麻豆ai换脸 | 2欧美一区二区三区在线观看视频| 色婷婷精品大在线视频| 国产精品亚洲一区二区三区在线| 亚洲午夜在线视频| 国产精品色在线| 26uuuu精品一区二区| 欧美一区二区免费| 欧美在线观看禁18| 成人一区二区三区| 国产精品主播直播| 久久精品国产亚洲高清剧情介绍| 夜夜嗨av一区二区三区中文字幕 | 亚洲精品少妇30p| 国产欧美日韩不卡| 久久免费视频色| 日韩欧美在线网站| 7777精品伊人久久久大香线蕉超级流畅 | 男人的天堂亚洲一区| 亚洲观看高清完整版在线观看| 国产精品无码永久免费888| 日韩精品一区二区三区中文不卡 | 欧美成va人片在线观看| 欧美另类高清zo欧美| 色欧美88888久久久久久影院| www.av亚洲| 国产大陆a不卡| 国产电影精品久久禁18| 亚洲天堂精品在线观看| 国产精品高潮久久久久无| 日本一区二区在线不卡| 国产清纯白嫩初高生在线观看91 | 日韩三级在线观看| 欧美二区乱c少妇| 欧美久久久久久久久久| 51久久夜色精品国产麻豆| 欧美二区乱c少妇| 日韩精品一区二区三区三区免费| 7777女厕盗摄久久久| 欧美一级理论片| 精品成人免费观看| 久久精品视频一区二区三区| 国产精品午夜电影| 亚洲欧美精品午睡沙发| 亚洲一卡二卡三卡四卡无卡久久| 亚洲成av人片在线观看无码| 美国欧美日韩国产在线播放| 极品少妇xxxx精品少妇偷拍| 国产馆精品极品| 91视频在线看| 欧美二区三区的天堂| 久久亚洲免费视频| 国产精品久久久久久久蜜臀| 一区二区三区日韩精品| 日韩不卡一区二区三区 | 91精品国产aⅴ一区二区| 欧美日韩精品欧美日韩精品| 日韩一区二区不卡| 国产日韩欧美精品综合| 亚洲欧美日韩在线不卡| 三级一区在线视频先锋| 国产精品自在在线| 色8久久精品久久久久久蜜| 91精品国产91久久久久久最新毛片 | 国产精品区一区二区三区| 亚洲愉拍自拍另类高清精品| 久久国内精品视频| av电影天堂一区二区在线观看| 欧美亚洲综合一区| 久久午夜电影网| 亚洲自拍欧美精品| 激情欧美日韩一区二区| 色综合天天综合给合国产| 日韩午夜在线影院| 亚洲日本va午夜在线影院| 欧美a一区二区| 91麻豆免费看| 欧美精品一区二区久久久| 一区二区三区免费在线观看| 久久精品国产澳门| 欧美在线你懂得| 中文字幕免费观看一区| 日韩在线一区二区| 91麻豆免费在线观看| 欧美精品一区男女天堂| 午夜电影久久久| av一区二区三区四区| 久久在线观看免费| 天天综合网 天天综合色| 91蝌蚪porny| 久久精品人人做人人综合| 日韩精品视频网站| 色老汉一区二区三区| 国产精品色噜噜| 精品一区二区在线免费观看| 欧美视频在线播放| 亚洲欧洲精品天堂一级| 国产精品亚洲综合一区在线观看| 91精品国产黑色紧身裤美女| 亚洲一区二区三区四区不卡| thepron国产精品| 国产午夜亚洲精品不卡| 极品美女销魂一区二区三区| 日韩视频在线你懂得| 婷婷久久综合九色国产成人| 色琪琪一区二区三区亚洲区| 中文字幕一区二区5566日韩| 成人午夜视频免费看| 久久久久久99精品| 国产美女在线观看一区| 日韩一区二区精品| 美女www一区二区| 日韩午夜中文字幕| 精品一区免费av| 精品日韩av一区二区| 麻豆高清免费国产一区|