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

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

?? rvwpct.c

?? 基于h323協議的軟phone
?? C
?? 第 1 頁 / 共 4 頁
字號:

#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include "rvtypes.h"
#include "cm.h"
#include "cmintr.h"
#include "pvaltree.h"
#include "psyntree.h"
#include "q931asn1.h"
#include "h245.h"

#include "rvwpt.h"
#include "rvwpct.h"
#include "rasdef.h"
#include <time.h>
/*#include "bepcommon.h"*/

/*#define TRACE(a)  ;
#define wPGetCallIndex(p) 0
#define wpSendMsgToApp(a) ;
*/
int versionNumber;
OutParam AppParam;
/*ttl time, received from gk, for resend full rrq, replace light rrq*/
RvInt globleTTL = 60;
/*get app param for wp*/
void GetOutParam(OutParam TransParam)
{
	strcpy(AppParam.localE164,TransParam.localE164);
	strcpy(AppParam.localShow,TransParam.localShow);
	strcpy(AppParam.localId,TransParam.localId);
	strcpy(AppParam.password,TransParam.password);
	AppParam.gkstatus = TransParam.gkstatus;
}
/********************************************************************************************
 * convertToH450Address
 * purpose : Convert an address represented by a string to an address string that H450
 *           recognizes.
 * input   : inString       - String to convert
 * output  : resultString   - Converted string
 * return  : none
 ********************************************************************************************/
void convertToH450Address(const char* inString, char* resultString)
{
    if (isdigit((int)inString[0]))
    {
        /* If it's a transport address, we'll add the TA: prefix...
           Otherwise, we should add the TEL: prefix... */
        int a, b, c, d, e;
        if (sscanf(inString, "%d.%d.%d.%d:%d", &a, &b, &c, &d, &e) == 5)
        {
			sprintf(resultString, "TA:%s", inString);
        }
		else 
		{
			sprintf(resultString, "TEL:%s", inString);
		}
    }
    else
    {
		strcpy(resultString, inString);
	}
}
extern RvSemaphore* fileSem;
extern FILE* fp;
void wpSendCTorCF(WrapperMsg * msg)
{
	int retVal;
	char destAddr[40];
	HCALL callP = NULL;
/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"wpSendCTorCF()\n");
		ReleaseSemaphore(fileSem,1,NULL);
	}
*/
	if (msg->baseInfo.callIndex > MAX_CONCURRENT_CALL_NUM)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"callIndex in wpSendCallTransfer is %d, out of range\nreturn ...\n", msg->baseInfo.callIndex);
			ReleaseSemaphore(fileSem,1,NULL);
		}*/
		return;
	}

	if (WP_INITIATE_CALL_TRANSFER == msg->msgId)
		convertToH450Address(msg->d.CallTransferInfo.transferToNumber, destAddr);
	else if (WP_SEND_CALL_FORWARD == msg->msgId)
	{
		strncpy(destAddr, msg->d.CallForwardInfo.ForwardToNumber,39);
		destAddr[39]='\0';
	}
	/*convertToH450Address(msg->d.CallTransferInfo.transferToNumber, destAddr);*/
/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"ct or cf destAddr:%s!\n", destAddr);
		ReleaseSemaphore(fileSem,1,NULL);
	}*/
	 /*and go a-go-go 
	sseCallTransfer(Call->hSSECall, NULL, destAddr);*/
	retVal = cmCallForward(wpCallInfo[msg->baseInfo.callIndex].hsCall, destAddr);
	if (retVal < 0)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"cmCallForward in transfer return error!\n");
			ReleaseSemaphore(fileSem,1,NULL);
		}
	*/	
	}
	else
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"cmCallForward in transfer return ok!\n");
			ReleaseSemaphore(fileSem,1,NULL);
		}*/
		if (WP_INITIATE_CALL_TRANSFER == msg->msgId)
		{
			wpCallInfo[msg->baseInfo.callIndex].isTransferring = RV_TRUE;
		}
	}
}

void wpSendTransferSetup(WrapperMsg* msg)
{
	CallInfo*	Call;
	int		retVal;
	HCALL	hsCall;
	char		dstAddr[128], srcAddr[128];

/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"wpSendQuery()\n");
		ReleaseSemaphore(fileSem,1,NULL);
	}*/	
	Call = (CallInfo*)malloc(sizeof(CallInfo));
	memset(Call, 0, sizeof(CallInfo));
	/* Create new call */
	retVal = cmCallNew(hApp,(HAPPCALL) Call, &hsCall);
	if (retVal < 0)
	{
		free(Call);
		return;
	}

	if (IPADDR_TYPE == msg->d.CallTransferInfo.transferToAddrType)
	{
		sprintf(dstAddr, "TA:%s:%d", (char *)msg->d.CallTransferInfo.transferToNumber, H245_SEND_PORT);
	}
	else
	{
		sprintf(dstAddr, "TEL:%s", (char *)msg->d.CallTransferInfo.transferToNumber);
	}
	if (msg->baseInfo.localE164Num[0] != '\0')
	{
		sprintf(srcAddr, "TEL:%s", msg->baseInfo.localE164Num);		
	}
	else
	{
		srcAddr[0] = '\0';
	}
	if ((retVal = cmCallMake(hsCall, 
			BANDWIDTH, 
			0, 
			dstAddr, 
			srcAddr, 
			(char *)msg->baseInfo.display, 
			0, 
			0)) >= 0)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"Make the call successd\n");
			ReleaseSemaphore(fileSem,1,NULL);
		}*/	
	}
	else
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"Make the call failed\n");
			ReleaseSemaphore(fileSem,1,NULL);
		}*/
	}
}


wpForwardCycleFun wpForwardCycleFunc;

void wpSetForwardCycleCallback(wpForwardCycleFun callbackFun)
{
	wpForwardCycleFunc = callbackFun;
}

OutParam AppParam;
/*extern char localDisplay[MAX_DISPLAY_LENGTH+1];	*/	/* Terminal's display string */
/*extern char localE164Num[MAX_E164NUM_LENGTH+1];	*//* Terminal's E.164 number */

static void processForwarding(int callIndex, int ipAddr, char *e164, int type)
{
	HCALL hsCall;
	WrapperMsg	wpmsg;
		
/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"processForwarding()\n");
		ReleaseSemaphore(fileSem,1,NULL);
	}
*/
	wpCallInfo[callIndex].isForwarded = RV_TRUE;
	
	memset(&wpmsg, 0 ,sizeof(WrapperMsg));

	wpmsg.baseInfo.callIndex = callIndex;
	hsCall = wpCallInfo[callIndex].hsCall;
	cmCallSetParam(hsCall, cmParamReleaseCompleteReason, 0, cmReasonTypeFacilityCallDeflection, NULL);
	wpSendTerm(&wpmsg);
/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"Forwarded: send query to third party, ip = %x, e164 = %s\n",ipAddr, e164);
		ReleaseSemaphore(fileSem,1,NULL);
	}*/
	memset(&wpmsg, 0 ,sizeof(WrapperMsg));
	wpmsg.baseInfo.callIndex = callIndex;
	if (type == REROUTE_TYPE_IPADDR)
	{
		unsigned char  ip[4];
		ip[0] = ipAddr >> 24;
		ip[1] = (ipAddr >> 16) & 0xFF;
		ip[2] = (ipAddr >> 8) & 0xFF;
		ip[3] = ipAddr & 0xFF;
		wpmsg.baseInfo.remoteIpAddr = ip[0] + ip[1]*0x100 + ip[2]*0x10000 + ip[3]*0x1000000;
	}
	else
	{
		strncpy(wpmsg.baseInfo.remoteE164Num, e164, MAX_E164NUM_LENGTH);
		wpmsg.baseInfo.remoteE164Num[MAX_E164NUM_LENGTH] = '\0';		
		strncpy(wpmsg.baseInfo.localE164Num, AppParam.localE164, MAX_E164NUM_LENGTH);
		wpmsg.baseInfo.localE164Num[MAX_E164NUM_LENGTH] = '\0';
	}	
	strncpy(wpmsg.baseInfo.display, AppParam.localShow, MAX_DISPLAY_LENGTH);
	wpmsg.baseInfo.display[MAX_DISPLAY_LENGTH] = '\0';
	wpSendQuery(&wpmsg);
}


/***********************************************************************************
 * Routine Name: wpcmEvCallFacility
 * Description : Notify the application when the a new facility message is received.
 *               The applcation should check for parameters Param and Display that
 *               they are not NULL.
 * Input : haCall - Application handle to the call.
 *         hsCall  - CM handle to the call.
 *         handle - node ID of the message.
 * Output: proceed - if set to true, the stack will process the message. o.w,
 *                   the app will
 * Return: none
 ***********************************************************************************/
int RVCALLCONV wpcmEvCallFacility(IN      HAPPCALL haCall,
                                IN      HCALL    hsCall,
                                IN      int      handle,
                                INOUT   RvBool*  proceed)
{

	int status;
	cmAlias altalias;
	cmTransportAddress altaddr;
	int size = sizeof(cmTransportAddress);

	int callIndex;
	WrapperMsg msg;
	int facRea = -1;

	status = cmCallGetParam(hsCall, cmParamFacilityReason, 0,
						(RvInt32 *) &facRea, NULL);
	if (status < 0)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"in wpcmEvCallFacility,get parm facrea: %d!\n", status);
			ReleaseSemaphore(fileSem,1,NULL);
		}*/
		return -1;
	}

	if (facRea != cmReasonTypeCallForwarded
		&& facRea != cmReasonTypeTransportedInformation)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"facility reason:%d\n", facRea);
			ReleaseSemaphore(fileSem,1,NULL);
		}*/
		return 0;
	}

	*proceed = RV_FALSE;
	status = cmCallGetParam(hsCall, cmParamAlternativeAddress, 0,
							(RvInt32 *) &size, (char *) &altaddr);
	
	altalias.string = (char *) malloc(sizeof(char)*250);
	if(status < 0)
	{		
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"Get alt ip address error, try to get the alias\n");
			ReleaseSemaphore(fileSem,1,NULL);
		}
*/
		size = sizeof(cmAlias);
		status = cmCallGetParam(hsCall, cmParamAlternativeAliasAddress, 0,
								(RvInt32 *) &size, (char *) &altalias);
	}
	/* Make sure the application processes this facility message,
	only if it has an alternate address or alias in it. */
	if (status < 0)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"in wpcmEvCallFacility,get parm error: %d!\n", status);
			ReleaseSemaphore(fileSem,1,NULL);
		}
	*/	
		free(altalias.string);
		return -1;
	}

	callIndex = wPGetCallIndex(hsCall);
	if (callIndex == -1)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"in wpcmEvCallFacility,get call Index error: %x!\n", hsCall);
			ReleaseSemaphore(fileSem,1,NULL);
		}
	*/
		free(altalias.string);
		return -1;
	}


	if (cmReasonTypeCallForwarded == facRea) /* Recevied forward/transfer request */
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"Call forward message recevied\n");
			ReleaseSemaphore(fileSem,1,NULL);
		}
	*/	
		msg.msgId = WP_CALL_FORWARD_RCVD;
		msg.baseInfo.callIndex = callIndex;
		if (size == sizeof(cmAlias))
		{
	/*		if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
			{
				fprintf(fp,"Forward address type: E.164\n");
				ReleaseSemaphore(fileSem,1,NULL);
			}
	*/	
			strncpy(msg.d.CallForwardInfo.ForwardToNumber, altalias.string,39);
			msg.d.CallForwardInfo.ForwardToNumber[39]='\0';
			msg.d.CallForwardInfo.ForwardToAddrType = REROUTE_TYPE_E164;
			/*msg.d.CallForwardInfo.ForwardToAddrType = altalias.type;*/
			msg.d.CallForwardInfo.ForwardToAddrLen = altalias.length;
		}
		else if (size == sizeof(cmTransportAddress))
		{
			unsigned char  ip[4];

	/*		if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
			{
				fprintf(fp,"Forward address type: IPv4\n");
				ReleaseSemaphore(fileSem,1,NULL);
			}
		*/
			
			ip[0] = altaddr.ip >> 24;
			ip[1] = (altaddr.ip >> 16) & 0xFF;
			ip[2] = (altaddr.ip >> 8) & 0xFF;
			ip[3] = altaddr.ip & 0xFF;

			sprintf(msg.d.CallForwardInfo.ForwardToNumber,
				"%u.%u.%u.%u", ip[3], ip[2], ip[1], ip[0]);
			msg.d.CallForwardInfo.ForwardToAddrType = REROUTE_TYPE_IPADDR;
		}
		else
		{
	/*		if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
			{
				fprintf(fp,"remote addr size error, return!\n");
				ReleaseSemaphore(fileSem,1,NULL);
			}
	*/		
			free(altalias.string);
			return -1;
		}
	}
	else
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"in wpcmEvCallFacility, FacilityReason:%d!\n", facRea);
			ReleaseSemaphore(fileSem,1,NULL);
		}
	*/
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"add embranchment if you want to process!\n");
			ReleaseSemaphore(fileSem,1,NULL);
		}
	*/	
		free(altalias.string);
		return 0;
	}

	(*wpForwardCycleFunc)(callIndex, msg.d.CallForwardInfo.ForwardToNumber, 
		&msg.d.CallForwardInfo.hasCycle);
	if (msg.d.CallForwardInfo.hasCycle == RV_FALSE)
	{
		/* We do the forward processing */
		processForwarding(callIndex, altaddr.ip, altalias.string,
			msg.d.CallForwardInfo.ForwardToAddrType);
	}
	
	free(altalias.string);
	wpSendMsgToApp(&msg);
	return 0;
}

void wpSendRegister(WrapperMsg* msg)
{
	int status;
	
/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"start register...\n");
		ReleaseSemaphore(fileSem,1,NULL);
	}
*/	
	status = cmRegister(hApp);
/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"register return %d!\n", status);
		ReleaseSemaphore(fileSem,1,NULL);
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国视频一区二区| 福利电影一区二区三区| 国内精品久久久久影院色| 91丨九色丨蝌蚪富婆spa| 欧美午夜精品一区二区蜜桃| 在线观看成人小视频| 激情六月婷婷久久| 欧洲生活片亚洲生活在线观看| 欧美男男青年gay1069videost| 国产精品乱人伦| 久久电影国产免费久久电影| 91激情五月电影| 中文字幕精品一区二区精品绿巨人| 国内外精品视频| 日本高清免费不卡视频| 中文字幕精品在线不卡| 国产原创一区二区三区| 日韩一区国产二区欧美三区| 亚洲永久免费av| 91麻豆免费观看| 国产丝袜美腿一区二区三区| 久久国产欧美日韩精品| 91精品国产入口| 亚洲一区二区在线免费观看视频| 成人av电影在线| 中文字幕日韩一区二区| 亚洲一区二区三区国产| av亚洲精华国产精华| 国产人妖乱国产精品人妖| 精彩视频一区二区| 精品久久久久99| 久久99国产乱子伦精品免费| 7777精品伊人久久久大香线蕉经典版下载 | 欧美中文字幕一区二区三区| 中文字幕一区免费在线观看| 国产电影精品久久禁18| 国产亚洲一区二区三区| 国产精品538一区二区在线| 久久噜噜亚洲综合| 国产成人精品亚洲日本在线桃色| 亚洲国产精品二十页| 97久久精品人人爽人人爽蜜臀| 中文字幕不卡在线观看| k8久久久一区二区三区| 亚洲一区二区中文在线| 色偷偷88欧美精品久久久| 亚洲人成7777| 欧美视频中文字幕| 蜜臀av一区二区在线免费观看| 欧美一二三四在线| 国产精品白丝jk黑袜喷水| 亚洲永久免费av| 欧美精品在线视频| 精品一区二区国语对白| 国产精品人人做人人爽人人添| 色综合一区二区三区| 午夜免费久久看| 精品久久久久久久人人人人传媒| 国产成人精品免费在线| 一区二区三区成人在线视频| 欧美精品在线观看播放| 国内成人精品2018免费看| 中文字幕一区二区三区不卡| 欧美日韩国产色站一区二区三区| 麻豆精品视频在线观看视频| 国产精品麻豆99久久久久久| 欧美日韩一区在线| 韩日精品视频一区| 亚洲欧美色一区| 精品国产电影一区二区| 色综合中文字幕国产| 亚洲国产日日夜夜| 久久丝袜美腿综合| 欧美午夜精品电影| 国产美女精品在线| 亚洲无人区一区| 久久蜜臀精品av| 欧美日韩一卡二卡三卡| 国产成人在线影院| 青青草一区二区三区| 亚洲色图清纯唯美| 精品处破学生在线二十三| 日本道免费精品一区二区三区| 精东粉嫩av免费一区二区三区| 亚洲女爱视频在线| 国产欧美精品在线观看| 欧美日韩一二三区| 韩国三级电影一区二区| 亚洲人妖av一区二区| 久久久久久麻豆| 欧美日本韩国一区| 日本电影欧美片| 成人激情午夜影院| 久久国产精品色| 亚洲bt欧美bt精品777| 亚洲视频网在线直播| 国产亚洲精品aa| 欧美成人性福生活免费看| 精品视频资源站| 色偷偷久久人人79超碰人人澡| 国内精品久久久久影院一蜜桃| 亚洲成a人v欧美综合天堂下载| 亚洲欧美日韩综合aⅴ视频| 国产精品乱码一区二三区小蝌蚪| 久久综合九色综合久久久精品综合| 欧美日韩高清在线播放| 欧美在线免费播放| 欧美最猛黑人xxxxx猛交| 91在线一区二区| 99久久99久久精品免费观看| 成人免费毛片app| 成人午夜精品一区二区三区| 国产永久精品大片wwwapp| 激情久久五月天| 国产一区欧美一区| 国产成人在线色| 处破女av一区二区| 欧美色网一区二区| 色先锋aa成人| 欧美影院午夜播放| 欧美日韩成人在线一区| 4hu四虎永久在线影院成人| 欧美久久一区二区| 91精品国产欧美一区二区18| 日韩一区二区三区高清免费看看| 欧美一区二区三区在线看| 欧美一区二区私人影院日本| 日韩三级在线观看| 久久久久久免费毛片精品| 国产精品美女一区二区| 亚洲精品中文字幕在线观看| 一区二区三区鲁丝不卡| 日韩黄色在线观看| 国产一区二区精品久久91| 国产91精品一区二区麻豆网站 | 一区二区三区四区亚洲| 洋洋成人永久网站入口| 日本亚洲免费观看| 国产成人丝袜美腿| 91美女片黄在线| 欧美精品在线一区二区三区| 日韩欧美一区二区视频| 欧美激情一区二区三区四区| 尤物av一区二区| 奇米888四色在线精品| 懂色av一区二区三区蜜臀| 一本色道**综合亚洲精品蜜桃冫| 欧美日韩一区三区四区| 久久精品视频免费| 亚洲一区二区三区四区中文字幕| 卡一卡二国产精品| av亚洲精华国产精华精华| 欧美日韩卡一卡二| 国产成人亚洲综合a∨猫咪| 国产传媒日韩欧美成人| 91免费国产视频网站| 欧美一区二区视频免费观看| 欧美经典三级视频一区二区三区| 亚洲欧美区自拍先锋| 美国十次了思思久久精品导航| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 一区二区三区在线免费视频| 六月丁香婷婷色狠狠久久| 成人精品小蝌蚪| 欧美大片在线观看一区二区| 国产精品久久久久久久久图文区| 轻轻草成人在线| 色狠狠色狠狠综合| 久久久久久久综合日本| 亚洲一区二区四区蜜桃| 国产麻豆午夜三级精品| 91国产丝袜在线播放| 亚洲成人免费视频| 成人免费va视频| 精品国产一二三| 日精品一区二区| 欧美中文字幕一区| 亚洲欧美日韩中文字幕一区二区三区 | 久久久蜜桃精品| 亚洲成a人片综合在线| 91蜜桃在线观看| 中文字幕精品一区二区精品绿巨人 | 国产成人精品三级| 精品国产三级电影在线观看| 天天免费综合色| 在线观看欧美黄色| 亚洲人精品午夜| 北岛玲一区二区三区四区| 久久综合久久综合久久| 蜜桃一区二区三区在线| 在线播放/欧美激情| 视频一区中文字幕国产| 欧美精选一区二区| 日日夜夜精品免费视频| 欧美视频在线播放| 亚洲成人一区在线| 欧美剧情片在线观看| 午夜私人影院久久久久| 欧美日韩精品一区视频| 午夜精品在线看|