📄 rvwp_api.c
字号:
/*************************************************************************
* 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 + -