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

📄 rvwp_api.c

📁 基于h323协议的软phone
💻 C
📖 第 1 页 / 共 3 页
字号:
/*************************************************************************
 * Name :		rvwp_api.c
 *
 * Type :			C source file
 *
 * Description :	Wrapper API functions.
 *
 * Date : 			2004-03-22
 *
 *************************************************************************/

#include <stdio.h>
#include "rvwpt.h"
#include "Msg.h"
#include "cm.h"
#include "ci.h"
#include "cmintr.h"
#include "seli.h"
#include "psyntree.h"
#include "psyntreeDef.h"
#include "rvh323timer.h"
#include "rvwpconfig.h"

#include "rvrtcp.h"

HWND hSWnd;
#ifdef INCLUDE_RV_RTP
#include "payload.h"

typedef struct
{
	int  freq1;
	int  freq2;
	char digit;
} freqEntry;

#ifdef INCLUDE_RV_RTP
extern RvUint32 rtp_start_time;
#endif
/* Telephony Tones frequency table */
static freqEntry FrequencyTable[16] = 
{
	{697,1209,'1'},{697,1336,'2'},{697,1447,'3'},{697,1663,'A'},
	{770,1209,'4'},{770,1336,'5'},{770,1447,'6'},{770,1663,'B'},
	{852,1209,'7'},{852,1336,'8'},{852,1447,'9'},{825,1663,'C'},
	{941,1209,'*'},{941,1336,'0'},{941,1447,'#'},{941,1663,'D'} 
};
#endif /* INCLUDE_RV_RTP */
/*delete by mxd 2005.1.18 for windows*/
//extern int rvwpSend(WrapperMsg *msg);

/*************************************************************************
 * Function:		WpSendMessage
 *
 * Description:	This function sends a message from Application to Wrapper.
 *
 * Return:		Index of the call, -1 if call buffer overflow or message id is wrong.
 *
 * Notes:			Called by the application
 *
 *************************************************************************/
HAPP    hApp;
extern int RVCALLCONV wpcmEvAutoRASConfirm(IN  HRAS  hsRas);
extern int RVCALLCONV wpcmEvAutoRASReject(IN  HRAS  hsRas,IN  cmRASReason reason);
extern int RVCALLCONV wpcmEvAutoRASTimeout(IN  HRAS  hsRas);
extern RvSemaphore* fileSem;
extern FILE* fp;
RVAPI int RVCALLCONV InitStack(void)
{
	int status;
	SCMEVENT                        cmEvent;
	SCMCALLEVENT                    cmCallEvent;
	SCMCHANEVENT                    cmChanEvent;
	SCMCONTROLEVENT                 cmControlEvent;
	SCMPROTOCOLEVENT                cmProtocolEvent;
	SCMRASEVENT                     cmRasEvent;
	SCMAUTORASEVENT                 cmAutoRasEvent;
	
	status = cmStartUp();
	if (status != RV_OK)
		return status;
/*taskDelay(10*100);*/
/*	configRv();*/
	wpInit();

	msFile((char*)&status);

	/*printf("begin to log...\n");*/
	msOpen();

/*	LogInit();*/
/*	 Initialize the stack */
	status = cmInitialize("Config.val",&hApp);
	if (status < 0)
	{
		switch (status)
		{
			case -2:
			/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0) 
				{ 
					fprintf(fp,"Resource problem");
					ReleaseSemaphore(fileSem,1,NULL);
				}*/
				break;
			case -10: 
			/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0) 
				{ 
					fprintf(fp,"Memory problem");
					ReleaseSemaphore(fileSem,1,NULL);
				}*/
				break;
			case -11:
			/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0) 
				{ 
					fprintf(fp,"Configuration problem");
					ReleaseSemaphore(fileSem,1,NULL);
				}*/
				break;
			case -13:
			/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0) 
				{ 
					fprintf(fp,"Network problem");
					ReleaseSemaphore(fileSem,1,NULL);
				}*/
				break;
		}
		return status;
	}

/*	logtest();*/

/*	endConfig();*/

#ifdef INCLUDE_RV_RTP
	status = rtpInit();
	if (status < 0)
	{
	/*	TRACE("rtpInit error:%d\n", status);*/
		return status;
	}
	status = rtcpInit();
	if (status < 0)
	{
	/*	TRACE("rtcpInit error:%d\n", status);*/
		return status;
	}

	/*rtp_start_time = timerGetTimeInSeconds();*/
#endif

    /* Initialize supserv (does nothing if not h450 enabled) 
    status = H450_init((char *)CONFIG_FILE,hApp);
    if (status < 0) return status*/;

    /* Initialize OSP (does nothing if not OSP enabled)
    status = OSP_TestInit(hApp);
    if (status < 0) return status */;

    /* Initialize rtp/rtcp (does nothing if not enabled) 
    RTP_TestInit()*/;

    /* Initialize security (does nothing if not security enabled)
    SEC_init(hApp); */

    /* Initialize MIB support 
    SNMP_init();*/
 
    memset(&cmEvent, 0, sizeof(SCMEVENT));
    cmEvent.cmEvNewCall     = cmEvNewCall;
    UNUSED_HANDLE(cmEvent.cmEvRegEvent);
    cmSetGenEventHandler(hApp,&cmEvent,sizeof(SCMEVENT));

    memset (&cmCallEvent,0,sizeof(SCMCALLEVENT));
    cmCallEvent.cmCallNonStandardParam      = NULL; /*Obsolete. Stack never calls it */
    UNUSED_HANDLE(cmCallEvent.cmEvCallAdditionalAddress);
    cmCallEvent.cmEvCallFacility            = wpcmEvCallFacility;
    UNUSED_HANDLE(cmCallEvent.cmEvCallFastStart);
    /*cmCallEvent.cmEvCallFastStartSetup      = cmEvCallFastStartSetup;*/
/*#ifdef USE_H450
    cmCallEvent.cmEvCallH450SupplServ       = cmEvCallH450SupplServ;
#endif*/
    UNUSED_HANDLE(cmCallEvent.cmEvCallIncompleteAddress);
    /*cmCallEvent.cmEvCallInfo                = cmEvCallInfo;*/
    UNUSED_HANDLE(cmCallEvent.cmEvCallNewAnnexLMessage);
    UNUSED_HANDLE(cmCallEvent.cmEvCallNewAnnexMMessage);
    UNUSED_HANDLE(cmCallEvent.cmEvCallNewRate);
    /*cmCallEvent.cmEvCallNotify              = cmEvCallNotify;*/
    cmCallEvent.cmEvCallProgress            = cmEvCallProgress;
    cmCallEvent.cmEvCallRecvMessage         = cmEvCallRecvMessage;
    cmCallEvent.cmEvCallSendMessage         = cmEvCallSendMessage;
    cmCallEvent.cmEvCallStateChanged        = cmEvCallStateChanged;
   /* cmCallEvent.cmEvCallStatus              = cmEvCallStatus;
    cmCallEvent.cmEvCallTunnNewMessage      = cmEvCallTunnNewMessage;*/
    cmCallEvent.cmEvCallFastStart		= cmEvCallFastStart;
/*    cmCallEvent.cmEvCallUserInfo            = cmEvCallUserInfo;*/
    cmSetCallEventHandler(hApp,&cmCallEvent,sizeof(SCMCALLEVENT));

    memset (&cmChanEvent,0,sizeof(SCMCHANEVENT));
    cmChanEvent.cmEvChannelStateChanged             = cmEvChannelStateChanged;
	cmChanEvent.cmEvChannelSetAddress               = cmEvChannelSetAddress;
	cmChanEvent.cmEvChannelParameters               = cmEvChannelParameters;
/*	cmChanEvent.cmEvChannelReplace                  = cmEvChannelReplace;
    cmChanEvent.cmEvChannelStateChanged             = cmEvChannelStateChanged;
    cmChanEvent.cmEvChannelNewRate                  = cmEvChannelNewRate;
    cmChanEvent.cmEvChannelMaxSkew                  = cmEvChannelMaxSkew;
    cmChanEvent.cmEvChannelSetAddress               = cmEvChannelSetAddress;
    cmChanEvent.cmEvChannelSetRTCPAddress           = cmEvChannelSetRTCPAddress;
    cmChanEvent.cmEvChannelParameters               = cmEvChannelParameters;
    cmChanEvent.cmEvChannelRTPDynamicPayloadType    = cmEvChannelRTPDynamicPayloadType;
    cmChanEvent.cmEvChannelVideoFastUpdatePicture   = cmEvChannelVideoFastUpdatePicture;
    cmChanEvent.cmEvChannelVideoFastUpdateGOB       = cmEvChannelVideoFastUpdateGOB;
    cmChanEvent.cmEvChannelVideoFastUpdateMB        = cmEvChannelVideoFastUpdateMB;
    cmChanEvent.cmEvChannelHandle                   = cmEvChannelHandle;
    cmChanEvent.cmEvChannelGetRTCPAddress           = cmEvChannelGetRTCPAddress;
    cmChanEvent.cmEvChannelRequestCloseStatus       = cmEvChannelRequestCloseStatus;
    cmChanEvent.cmEvChannelTSTO                     = cmEvChannelTSTO;
    cmChanEvent.cmEvChannelMediaLoopStatus          = cmEvChannelMediaLoopStatus;
    cmChanEvent.cmEvChannelReplace                  = cmEvChannelReplace;
    cmChanEvent.cmEvChannelFlowControlToZero        = cmEvChannelFlowControlToZero;
    cmChanEvent.cmEvChannelMiscCommand              = cmEvChannelMiscCommand;
    cmChanEvent.cmEvChannelTransportCapInd          = cmEvChannelTransportCapInd;
    cmChanEvent.cmEvChannelSetNSAPAddress           = cmEvChannelSetNSAPAddress;
    cmChanEvent.cmEvChannelSetATMVC                 = cmEvChannelSetATMVC;*/
    cmSetChannelEventHandler(hApp,&cmChanEvent,sizeof(SCMCHANEVENT));

    memset (&cmControlEvent,0,sizeof(SCMCONTROLEVENT));
    cmControlEvent.cmEvCallNewChannel               = cmEvCallNewChannel;
    /*cmControlEvent.cmEvCallUserInput                = cmEvCallUserInput;*/
    cmControlEvent.cmEvCallCapabilities             = cmEvCallCapabilities;
/*    cmControlEvent.cmEvCallCapabilities             = cmEvCallCapabilities;
    cmControlEvent.cmEvCallCapabilitiesExt          = cmEvCallCapabilitiesExt;
    cmControlEvent.cmEvCallNewChannel               = cmEvCallNewChannel;
    cmControlEvent.cmEvCallCapabilitiesResponse     = cmEvCallCapabilitiesResponse;
    cmControlEvent.cmEvCallMasterSlaveStatus        = cmEvCallMasterSlaveStatus;
    cmControlEvent.cmEvCallRoundTripDelay           = cmEvCallRoundTripDelay;
    cmControlEvent.cmEvCallUserInput                = cmEvCallUserInput;
    cmControlEvent.cmEvCallRequestMode              = cmEvCallRequestMode;
    cmControlEvent.cmEvCallMiscStatus               = cmEvCallMiscStatus;
    cmControlEvent.cmEvCallControlStateChanged      = cmEvCallControlStateChanged;
    cmControlEvent.cmEvCallMasterSlave              = cmEvCallMasterSlave;
    cmControlEvent.cmEvCallControlMessage           = cmEvCallControlMessage;*/
    cmSetControlEventHandler(hApp,&cmControlEvent,sizeof(SCMCONTROLEVENT));

    memset (&cmProtocolEvent,0,sizeof(SCMPROTOCOLEVENT));
    cmProtocolEvent.hookRecvFrom    = wphookRecvFrom;
    cmProtocolEvent.hookSendTo      = wphookSendTo;
    cmSetProtocolEventHandler(hApp,&cmProtocolEvent,sizeof(SCMPROTOCOLEVENT));

    memset(&cmRasEvent, 0, sizeof(SCMRASEVENT));
    UNUSED_HANDLE(cmRasEvent.cmEvRASConfirm);
    UNUSED_HANDLE(cmRasEvent.cmEvRASReject);
    UNUSED_HANDLE(cmRasEvent.cmEvRASRequest);
    UNUSED_HANDLE(cmRasEvent.cmEvRASTimeout);
    cmRASSetEventHandler(hApp, &cmRasEvent, sizeof(SCMRASEVENT));

    memset(&cmAutoRasEvent, 0, sizeof(SCMAUTORASEVENT));
    UNUSED_HANDLE(cmAutoRasEvent.cmEvAutoRASRequest);
    cmAutoRasEvent.cmEvAutoRASConfirm   = wpcmEvAutoRASConfirm;
    cmAutoRasEvent.cmEvAutoRASReject    = wpcmEvAutoRASReject;
    cmAutoRasEvent.cmEvAutoRASTimeout   = wpcmEvAutoRASTimeout;
    cmAutoRASSetEventHandler(hApp, &cmAutoRasEvent, sizeof(SCMAUTORASEVENT));
/*
    status = cmStart(hApp);
	if (status < 0) return status;
*/

/*    if (interp != NULL)
        TclExecute("test:SetStackStatus Running");

    /* Used for host color randomization */
/*    srand(time(NULL));

	seliInit();
*/
/*    Initrvwp();*/
    return 0;

}

RVAPI int RVCALLCONV reinitStack(void)
{
	int status;
	SCMEVENT                        cmEvent;
	SCMCALLEVENT                    cmCallEvent;
	SCMCHANEVENT                    cmChanEvent;
	SCMCONTROLEVENT                 cmControlEvent;
	SCMPROTOCOLEVENT                cmProtocolEvent;
	SCMRASEVENT                     cmRasEvent;
	SCMAUTORASEVENT                 cmAutoRasEvent;
	cmElem* app = (cmElem*)hApp;
	
/*	configRv();*/
	/* Initialize the stack */
	status = cmInitialize("Config.val",&hApp);
	 /* Start with the configuration */
	if (status < 0)
	{
		switch (status)
		{
			case -2:
		/*		if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0) 
				{ 
					fprintf(fp,"Resource problem\n");
					ReleaseSemaphore(fileSem,1,NULL);
				}*/
				break;
			case -10: 
		/*		if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0) 
				{ 
					fprintf(fp,"Memory problem\n");
					ReleaseSemaphore(fileSem,1,NULL);
				}*/
				break;
			case -11: 
			/*	if(WaitForSingleObject(fileSem,INFINITE) == WAIT_OBJECT_0) 

⌨️ 快捷键说明

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