⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rvwpct.c

📁 基于h323协议的软phone
💻 C
📖 第 1 页 / 共 4 页
字号:
*/	
	if (status < 0)
	{
		WrapperMsg wpmsg;
		wpmsg.msgId = WP_REC_REGISTER_TIMEOUT;
		wpSendMsgToApp(&wpmsg);
	}
}

#if 0
void wpSendUnRegister(WrapperMsg* msg)
{
	TRACE("start unregister...\n");

	TRACE("unregister return %d!\n", cmUnregister(hApp));
}
#endif

#include "cmautorasintr.h"
#include "Stkutils.h"
int RVCALLCONV wpcmEvAutoRASConfirm(
    IN  HRAS             hsRas)
{
	WrapperMsg msg;
	rasOutTx* tx = (rasOutTx*)hsRas;

/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"wpcmEvAutoRASConfirm()\n");
		ReleaseSemaphore(fileSem,1,NULL);
	}
	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"TransactionType:%d!\n", tx->transactionType);
		ReleaseSemaphore(fileSem,1,NULL);
	}
*/	
	if (tx->transactionType == cmRASRegistration)
	{
		msg.msgId = WP_REC_REGISTER_SUCC;
		msg.d.registr.ttlTime = globleTTL;
		wpSendMsgToApp(&msg);

		/* Get the gatekeeper's protocol version. */
		{
			HAPPRAS haRas = (HAPPRAS)emaGetApplicationHandle((EMAElement)hsRas);
			autorasEndpoint* autoras = (autorasEndpoint *)haRas;
			RvPvtNodeId responseId = cmiRASGetResponse(hsRas);
			RvPvtNodeId messageId;
			int nodeId;
			
			messageId = pvtChild(autoras->hVal, responseId);
			if ((nodeId = pvtGetChild(autoras->hVal,messageId,__q931(protocolIdentifier),NULL)) >= 0)
			{
				char buff[20];
				int object[6];
				int buffLen;
				buffLen=pvtGetString(autoras->hVal, nodeId, sizeof(buff), buff);
				if (utlDecodeOIDInt(buffLen, buff, sizeof(object)/sizeof(*object), object)>=6)
				/*itu-t recomendation h 2250 version (version number)*/
				/*0     1             2 3    4        5              */
				{
					int i;
					
			/*		if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
					{
						fprintf(fp,"remote gk's version string = ");
						ReleaseSemaphore(fileSem,1,NULL);
					}*/
					for (i = 0; i < 5; i++)
					{
					/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
						{
							fprintf(fp,"%d.", object[i]);
							ReleaseSemaphore(fileSem,1,NULL);
						}*/
					}
				/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
					{
						fprintf(fp,"%d\n", object[5]);
						ReleaseSemaphore(fileSem,1,NULL);
					}
					*/
					versionNumber = object[5];
				}
			}
		}
		
	}	
	return 0;
}

int RVCALLCONV wpcmEvAutoRASReject(
    IN  HRAS             hsRas,
    IN  cmRASReason      reason)
{
	WrapperMsg msg;
	rasOutTx* tx = (rasOutTx*)hsRas;
/*	msg.msgId = WP_REC_REGISTER_FAIL;*/
	msg.reason = reason;

/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"wpcmEvAutoRASReject()\n");
		ReleaseSemaphore(fileSem,1,NULL);
	}
*/	
	
	if (tx->transactionType == cmRASRegistration)
	{
		if (!((reason == cmRASReasonResourceUnavailable)
		   || (reason == cmRASReasonInvalidRevision)
		   || (reason == cmRASReasonInvalidCallSignalAddress)
		   || (reason == cmRASReasonInvalidRASAddress)
		   || (reason == cmRASReasonInvalidTerminalType)
		   || (reason == cmRASReasonDiscoveryRequired)
		   || (reason == cmRASReasonDuplicateAlias)
		   || (reason == cmRASReasonTransportNotSupported)
		   || (reason == cmRASReasonUndefined)
		   || (reason == cmRASReasonSecurityDenial)
		   || (reason == cmRASReasonTransportQOSNotSupported)
		   || (reason == cmRASResourceUnavailable)
		   || (reason == cmRASReasonInvalidAlias)
		   || (reason == cmRASReasonFullRegistrationRequired)
		   || (reason == cmRASReasonAdditiveRegistrationNotSupported)
		   || (reason == cmRASReasonInvalidTerminalAliases)
		   || (reason == cmRASReasonGenericData)
		   || (reason == cmRASReasonNeededFeatureNotSupported)))
		{
	/*		if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
			{
				fprintf(fp,"wpcmEvAutoRASReject, not register fail, return...\n");
				ReleaseSemaphore(fileSem,1,NULL);
			}*/
			return 0;
		}
		msg.msgId = WP_REC_REGISTER_FAIL;
		wpSendMsgToApp(&msg);
	}	
	if (tx->transactionType==cmRASAdmission)
	{
		msg.msgId = WP_REC_ARJ;
		wpSendMsgToApp(&msg);
	}
	return 0;
}

int RVCALLCONV wpcmEvAutoRASTimeout(
    IN  HRAS             hsRas)
{
	WrapperMsg msg;
	rasOutTx* tx = (rasOutTx*)hsRas;
/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"wpcmEvAutoRASTimeout()\n");
		fprintf(fp,"TransactionType:%d!\n", tx->transactionType);
	
		ReleaseSemaphore(fileSem,1,NULL);
	}*/
	if (tx->transactionType == cmRASRegistration)
	{
		msg.msgId = WP_REC_REGISTER_TIMEOUT;
		wpSendMsgToApp(&msg);
	}	
	return 0;
}

int wpcmEvRASTimeout(IN HAPPRAS haRas, IN HRAS hsRas)
{
	WrapperMsg msg;
	rasOutTx* tx = (rasOutTx*)hsRas;
/*	msg.msgId = WP_REC_REGISTER_TIMEOUT;*/

/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"wpcmEvRASTimeout()\n");	
		ReleaseSemaphore(fileSem,1,NULL);
	}
*/
	if (tx->transactionType == cmRASRegistration)
	{
		msg.msgId = WP_REC_REGISTER_TIMEOUT;
		wpSendMsgToApp(&msg);
	}	
	return 0;
}

int wpcmEvRASReject(IN HAPPRAS haRas, IN HRAS hsRas, IN cmRASReason reason)
{
	WrapperMsg msg;
	rasOutTx* tx = (rasOutTx*)hsRas;
/*	msg.msgId = WP_REC_REGISTER_FAIL;            */
	msg.reason = reason;

/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"wpcmEvRASReject(), reason:%d\n", reason);
		ReleaseSemaphore(fileSem,1,NULL);
	}
*/

	if (tx->transactionType == cmRASRegistration)
	{
		msg.msgId = WP_REC_REGISTER_FAIL;
		wpSendMsgToApp(&msg);
	}	
	
	return 0;
}

int RVCALLCONV wpcmEvRASConfirm(IN  HAPPRAS haRas, IN  HRAS hsRas)
{
	WrapperMsg msg;
	rasOutTx* tx = (rasOutTx*)hsRas;
/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"wpcmEvRASConfirm()\n");
		fprintf(fp,"TransactionType:%d!\n", tx->transactionType);

		ReleaseSemaphore(fileSem,1,NULL);
	}
*/
	if (tx->transactionType == cmRASRegistration)
	{
		msg.msgId = WP_REC_REGISTER_SUCC;
		msg.d.registr.ttlTime = globleTTL;
		wpSendMsgToApp(&msg);
	}	
	return 0;	
}

RvInt getTTLtime(IN int nodeId)
{
	int status;
	RvPvtNodeId childNodeId;
	int ttlVal=60;
	HPVT hVal = ((cmElem*)hApp)->hVal;
	char * msgName = cmGetProtocolMessageName(hApp,nodeId);
	if (strcmp(msgName, "registrationConfirm") != 0)
	{
		/*TRACE("it is not registrationConfirm, return\n");*/
		return -1;
	}

	status = pvtGetChild(hVal, nodeId, __q931(registrationConfirm), &childNodeId);
	if (status < 0)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"registrationConfirm is not in msg, return %d\n", status);
			ReleaseSemaphore(fileSem,1,NULL);
		}
	*/	
		return -2;
	}

	status = pvtGetChild(hVal, childNodeId, __q931(timeToLive), &childNodeId);
	if (status < 0)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"timeToLive is not in msg, return %d\n", status);
			ReleaseSemaphore(fileSem,1,NULL);
		}
	*/	
		return -3;
	}

	status = pvtGet(hVal, childNodeId, NULL, NULL, &ttlVal, NULL);
	if (status < 0)
	{
	/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"get timeToLive value error, return\n");
			ReleaseSemaphore(fileSem,1,NULL);
		}
	*/	
		return -4;
	}

/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"registrationConfirm:timeToLive is %d\n", ttlVal);
		ReleaseSemaphore(fileSem,1,NULL);
	}
*/

	return ttlVal;
}

/*
void printTime()
{
	struct timespec tpShow;
	struct tm timeBuffer;
	char msg[40];
	
	if (clock_gettime(CLOCK_REALTIME, &tpShow) == OK)
	{
		if(gmtime_r(&(tpShow.tv_sec), &timeBuffer) == OK)
		{
			TRACE(msg, "%04u-%02u-%02u  %02u:%02u:%02u",
				timeBuffer.tm_year + 1900,
				timeBuffer.tm_mon + 1,
				timeBuffer.tm_mday,
				timeBuffer.tm_hour,
				timeBuffer.tm_min,
				timeBuffer.tm_sec);
			TRACE("%s\n", msg);
		}
	}
}
*/
/*extern int getGKStatus();*/
RvBool RVCALLCONV wphookRecvFrom(
    IN      HPROTCONN           hConn,
    IN      int                 nodeId,
    IN      int                 nodeIdFrom,
    IN      RvBool              multicast,
    IN      RvBool              error)
{
    char text[128];
    char* msgPoint;
    int ttl;

    /* format message */
    msgPoint = cmGetProtocolMessageName(hApp,nodeId);
    sprintf(text,"New message recv <- %s on %s",
        msgPoint,
        cmProtocolGetProtocolName(cmProtocolGetProtocol(hApp,nodeId)));
    /* print to log */
/*printTime();*/
/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
	{
		fprintf(fp,"hook receive from {%s}\n", text);
		ReleaseSemaphore(fileSem,1,NULL);
	}
    */

    ttl = getTTLtime(nodeId);
    if (ttl > 0)
        globleTTL = ttl;
    else if (ttl <= -3)
        globleTTL = 60;

    /*if not register GK and receive infoRequest , not send infoRequest*/
    if ((strcmp(msgPoint, "infoRequest") == 0) && !AppParam.gkstatus)
    {
/*		if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0)
		{
			fprintf(fp,"gk is not enable, and no rsp to infoRequest, return \n");
			ReleaseSemaphore(fileSem,1,NULL);
		}
*/		
        	return -1;
    }
    return 0;
}

int msgl = 0;
char* nodetype[] =
{
    "Integer",
    "Null",
    "Boolean",
    "Enumeration",
    "ObjectIdentifier",
    "OctetString",

    "BitString",
    "GeneralString",
    "UniversalString",
    "BMPString",
    "IA5String",
    "VisibleString",
    "NumericString",
    "PrintableString",

    "Choice",
    "Sequence",
    "Set",
    "Of",
    "SequenceOf",
    "SetOf"
} ;

#if 0

extern int isComplexType(pstNodeType type);
void printRASMsg(int nodeId)
{
int status;
int type;
int i,j;
RvBool isString;
RvInt32 value;
RvPstFieldId fieldId;
RvPvtNodeId childNodeId;
int synNodeId;
char nameBuf[64];
RvBool haveChild = 0;
	HPVT hVal = ((cmElem*)hApp)->hVal;
	status = pvtGet(hVal, nodeId, &fieldId, &synNodeId, &value, &isString);
	if (status < 0)
	{
		TRACE("pvtGet node(%d) return Error(%d)!\n", nodeId, status);
		return;
	}
	status = pstGetFieldName(cmGetSynTreeByRootName(hApp, "ras"), fieldId, 64, nameBuf);
	type = pstGetNodeType(cmGetSynTreeByRootName(hApp, "ras"), synNodeId);
	if (status < 0 || type < 0)
	{
		TRACE("pstGetFieldName field(%d) return Error(%d)!\n", fieldId, status);
		return;
	}
	msgl++;
	TRACE("  %2d>", msgl);
	for (i=0; i < msgl; i++)
		TRACE("  ");
	TRACE("%s  %s\n", nameBuf, nodetype[type-1]);

/*	TRACE("type:%d\n", type);*/

	if (isComplexType(type) && msgl < 4)
	{
		for (i=0; i < msgl; i++)
			TRACE("  ");
		TRACE("{\n");
		childNodeId = pvtChild(hVal, nodeId);
		if (childNodeId < 0)
		{
			TRACE("pvtChild node(%d) return error(%d)\n", nodeId, childNodeId);
			return;
		}
		haveChild = 1;
		while (haveChild)
		{
			type = pvtGet(hVal, childNodeId, &fieldId, &synNodeId, &value, &isString);
			if (type < 0)
			{
				TRACE("pvtGet child node(%d) return Error(%d)!\n", nodeId, type);
				return;
			}
			status = pstGetFieldName(cmGetSynTreeByRootName(hApp, "ras"), fieldId, 64, nameBuf);
			type = pstGetNodeType(cmGetSynTreeByRootName(hApp, "ras"), synNodeId);
			if (status < 0 || type < 0)
			{
				TRACE("pstGetFieldName field(%d) return Error(%d)!\n", fieldId, status);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -