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

📄 tlphevent.c

📁 h.248源代码
💻 C
字号:
/******************************************************************** * * File:        tlphevent.c * * Description: *         Functions needed to implement to support RFC2833 (Nuera) * * Revisions: *   04-may-01    J.H and S.J.M        initial version. * * Copyright 2003 Netergy Microelectronics, Inc. All rights reserved. * ********************************************************************/#include "h248app.h"/* OOB Telephone Events */BOOL g_bOOBTelephoneEvents = FALSE;BOOL g_bDropVoiceDuringEvents = FALSE;BOOL g_bSquelchDTMF = FALSE;DWORD g_dwTeleventPayload = DEFAULT_TELEPHONE_EVENT_PAYLOAD;/************************************************************************** * _ProcessMismatchingRTPPacket *   Process any RTP packets that do not belong to the audio codec *     pConn - connection on which mismatching packet arrived *     pxPacketRx - the packet **************************************************************************/void _ProcessMismatchingRTPPacket(CONNECTION *pConn,                                  RTP_CBKDATA_PACKETRX *pxPacketRx){#if 0   if (pxPacketRx->oPayload == g_dwTeleventPayload) {    /* Possibly a telephone event */    // DWORD dwEvent = htonl(*(DWORD *)(pxPacketRx->poData));    DWORD dwEvent = htonl(*(DWORD *)(pxPacketRx->poData));    printf("Possible Telephone Event=%ld, e=%ld, volume=%ld, duration=%ld\n",           dwEvent >> 24,           (dwEvent >> 23) & 1,           (dwEvent >> 16) & 0x3f,           dwEvent & 0xffff);        /* We are only interested in the ABCD signalling events to      * control the handset ringer (for now) */    switch(dwEvent >> 24) {    case TELEPHONE_EVENT_ABCD_RING_ON:      /* Turn the handset ringer on */      HandsetGenerateTone( pConn->pEndPoint->wChannel, AUDIO_RINGTONE,ON);      break;    case TELEPHONE_EVENT_ABCD_RING_OFF:      /* Turn the handset ringer on */      HandsetGenerateTone( pConn->pEndPoint->wChannel, AUDIO_RINGTONE,OFF);      break;    }      }#endif   }/************************************************************************** * _SendRTPTelephoneEvent *   Sends a telephone event over RTP using RFC2833 *     dwEventType - the MGCP event code *     bStatus - 1=start sending, 0=stop sending **************************************************************************/void _SendRTPTelephoneEvent(END_POINT *pEndPoint,                            E_H248_EVENTTYPE eEvent, BOOL bStatus){#if 0  /* Send out RTP DTMF info on all active connections */  /* USE DYNAMIC RTP PAYLOAD TYPE */  if(!g_bOOBTelephoneEvents)    return;    pthread_mutex_lock(&(pEndPoint->mMutex));  {    CONNECTION *pConn = ConnFindEndpoint(pEndPoint);        if (pConn != NULL) {            TELEPHONE_EVENT_CODE eRTPEvent = 0;            /* Get the RFC2833 event code from the event type */      switch(eEvent) {      case H248_EVENT_L_DTMF_0:        eRTPEvent = TELEPHONE_EVENT_DTMF_0;        break;      case H248_EVENT_L_DTMF_1:        eRTPEvent = TELEPHONE_EVENT_DTMF_1;        break;      case H248_EVENT_L_DTMF_2:        eRTPEvent = TELEPHONE_EVENT_DTMF_2;        break;      case H248_EVENT_L_DTMF_3:        eRTPEvent = TELEPHONE_EVENT_DTMF_3;        break;      case H248_EVENT_L_DTMF_4:        eRTPEvent = TELEPHONE_EVENT_DTMF_4;        break;      case H248_EVENT_L_DTMF_5:        eRTPEvent = TELEPHONE_EVENT_DTMF_5;        break;      case H248_EVENT_L_DTMF_6:        eRTPEvent = TELEPHONE_EVENT_DTMF_6;        break;      case H248_EVENT_L_DTMF_7:        eRTPEvent = TELEPHONE_EVENT_DTMF_7;        break;      case H248_EVENT_L_DTMF_8:        eRTPEvent = TELEPHONE_EVENT_DTMF_8;        break;      case H248_EVENT_L_DTMF_9:        eRTPEvent = TELEPHONE_EVENT_DTMF_9;        break;      case H248_EVENT_L_DTMF_STAR:        eRTPEvent = TELEPHONE_EVENT_DTMF_star;        break;      case H248_EVENT_L_DTMF_POUND:        eRTPEvent = TELEPHONE_EVENT_DTMF_hash;        break;      case H248_EVENT_L_DTMF_A:        eRTPEvent = TELEPHONE_EVENT_DTMF_a;        break;      case H248_EVENT_L_DTMF_B:        eRTPEvent = TELEPHONE_EVENT_DTMF_b;        break;      case H248_EVENT_L_DTMF_C:        eRTPEvent = TELEPHONE_EVENT_DTMF_c;        break;      case H248_EVENT_L_DTMF_D:        eRTPEvent = TELEPHONE_EVENT_DTMF_d;        break;      case H248_EVENT_L_HF:        eRTPEvent = TELEPHONE_EVENT_DTMF_flash;        break;      case H248_EVENT_L_HD:        eRTPEvent = TELEPHONE_EVENT_ABCD_OFF_HOOK;        break;      case H248_EVENT_L_HU:        eRTPEvent = TELEPHONE_EVENT_ABCD_ON_HOOK;        break;      default: 	/* RTP event code not known ? */	pthread_mutex_unlock(&(pEndPoint->mMutex));	return;      }      if (bStatus) {	LONG lEventDuration;	if ((eRTPEvent <= TELEPHONE_EVENT_ABCD_OFF_HOOK 	     && eRTPEvent >= TELEPHONE_EVENT_ABCD_ON_HOOK) ||	    (eRTPEvent == TELEPHONE_EVENT_DTMF_flash)) {	  lEventDuration = ONE_TIME_TRIPLE_REDUNDANCY;	}        else { 	  lEventDuration = 100;       /* 100ms */	}		RTPInstanceStartTelephoneEvent(pConn->hRtpTxInstance,				       g_dwTeleventPayload,				       eRTPEvent,				       lEventDuration,				       g_bDropVoiceDuringEvents,				       TRUE);  /* synchronise with voice */      }      else {	RTPInstanceStopTelephoneEvent(pConn->hRtpTxInstance,				      g_dwTeleventPayload,				      eRTPEvent);      }          }  }  pthread_mutex_unlock(&(pEndPoint->mMutex));#endif} 

⌨️ 快捷键说明

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