diff options
author | Henri Herscher <henri@oreka.org> | 2006-08-01 14:50:46 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2006-08-01 14:50:46 +0000 |
commit | 7eb2bf35a3e972fa4cfdad4560945296b86f2550 (patch) | |
tree | 42414e69183527ab5b2ec7d98c617a4f425a3f21 /orkaudio/audiocaptureplugins/voip/VoIp.cpp | |
parent | 39167cd30dfe4e787fb22a5d54c4db40f239cd77 (diff) |
Applying changeset 304 from 0.5 to trunk:
Added support for Cisco CallManager 5.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@323 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp')
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIp.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index 77a9dc6..802aa04 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -117,6 +117,7 @@ char* memFindEOL(char* start, char* limit) return start; } +// Grabs a string in memory until encountering null char, a space a CR or LF chars void GrabToken(char* in, CStdString& out) { for(char* c = in; *c != '\0' && *c != 0x20 && *c != 0x0D && *c != 0x0A; c = c+1) @@ -367,6 +368,7 @@ void HandleSkinnyMessage(SkinnyHeaderStruct* skinnyHeader, IpHeaderStruct* ipHea SkCallInfoStruct* callInfo; SkOpenReceiveChannelAckStruct* openReceiveAck; SkLineStatStruct* lineStat; + SkCcm5CallInfoStruct* ccm5CallInfo; char szEndpointIp[16]; struct in_addr endpointIp = ipHeader->ip_dest; // most of the interesting skinny messages are CCM -> phone @@ -417,6 +419,33 @@ void HandleSkinnyMessage(SkinnyHeaderStruct* skinnyHeader, IpHeaderStruct* ipHea LOG4CXX_WARN(s_skinnyPacketLog, "Invalid CallInfoMessage."); } break; + case SkCcm5CallInfoMessage: + ccm5CallInfo = (SkCcm5CallInfoStruct*)skinnyHeader; + if(SkinnyValidateCcm5CallInfo(ccm5CallInfo)) + { + // Extract Calling and Called number. + CStdString callingParty; + char* parties = (char*)(&ccm5CallInfo->parties); + GrabToken(parties, callingParty); + CStdString calledParty; + GrabToken(parties+callingParty.size()+1, calledParty); + + // Emulate a regular CCM CallInfo message + SkCallInfoStruct callInfo; + strcpy(callInfo.calledParty, (PCSTR)calledParty); + strcpy(callInfo.callingParty, (PCSTR)callingParty); + callInfo.callId = ccm5CallInfo->callId; + callInfo.callType = ccm5CallInfo->callType; + callInfo.lineInstance = 0; + callInfo.calledPartyName[0] = '\0'; + callInfo.callingPartyName[0] = '\0'; + if(s_skinnyPacketLog->isInfoEnabled()) + { + logMsg.Format(" CallId:%u calling:%s called:%s", callInfo.callId, callInfo.callingParty, callInfo.calledParty); + } + RtpSessionsSingleton::instance()->ReportSkinnyCallInfo(&callInfo, ipHeader); + } + break; case SkOpenReceiveChannelAck: openReceiveAck = (SkOpenReceiveChannelAckStruct*)skinnyHeader; if(SkinnyValidateOpenReceiveChannelAck(openReceiveAck)) |