From 33dbcc41662db4f46e7fb5da020c54d62cf19866 Mon Sep 17 00:00:00 2001 From: beg_g Date: Mon, 19 Oct 2009 13:09:07 +0000 Subject: Corrected parameter from 'type' to 'mediatype' in the 'init' message git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@645 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkbasecxx/messages/InitMsg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orkbasecxx/messages/InitMsg.h b/orkbasecxx/messages/InitMsg.h index f0e1584..5127df3 100644 --- a/orkbasecxx/messages/InitMsg.h +++ b/orkbasecxx/messages/InitMsg.h @@ -15,7 +15,7 @@ #define INIT_MESSAGE_NAME "init" #define NAME_PARAM "name" #define HOSTNAME_PARAM "hostname" -#define TYPE_PARAM "type" +#define TYPE_PARAM "mediatype" #define TCP_PORT_PARAM "tcpport" #define PROTOCOL_PARAM "protocol" #define FILE_SERVE_PORT_PARAM "fileserveport" -- cgit v1.2.3 From 5c384d7eb82121e418aa62f97af247c30756d529 Mon Sep 17 00:00:00 2001 From: beg_g Date: Mon, 19 Oct 2009 13:10:06 +0000 Subject: Changed parameter 'mediatype' to 'servicetype' in 'init' message git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@646 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkbasecxx/messages/InitMsg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orkbasecxx/messages/InitMsg.h b/orkbasecxx/messages/InitMsg.h index 5127df3..27e3ed3 100644 --- a/orkbasecxx/messages/InitMsg.h +++ b/orkbasecxx/messages/InitMsg.h @@ -15,7 +15,7 @@ #define INIT_MESSAGE_NAME "init" #define NAME_PARAM "name" #define HOSTNAME_PARAM "hostname" -#define TYPE_PARAM "mediatype" +#define TYPE_PARAM "servicetype" #define TCP_PORT_PARAM "tcpport" #define PROTOCOL_PARAM "protocol" #define FILE_SERVE_PORT_PARAM "fileserveport" -- cgit v1.2.3 From 747f19b5e2f1777639398d42a05812834d2c648f Mon Sep 17 00:00:00 2001 From: beg_g Date: Mon, 19 Oct 2009 14:55:46 +0000 Subject: Added support for the SIP response "302 Moved Temporarily". The way this works is that the "Contact" header is mapped to the "To" header such that a subsequent INVITE based on the "302 Moved Temporarily" response shall have the correct remote party parameter. This functionality is by default enabled and can be disabled by setting the parameter Sip302MovedTemporarilySupport to 'false'. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@647 09dcff7a-b715-0410-9601-b79a96267cd0 --- .../audiocaptureplugins/voip/PacketHeaderDefs.h | 2 + orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 89 +++++++-- orkaudio/audiocaptureplugins/voip/RtpSession.h | 22 +++ orkaudio/audiocaptureplugins/voip/VoIp.cpp | 206 ++++++++++++++++++++- orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 2 + orkaudio/audiocaptureplugins/voip/VoIpConfig.h | 1 + 6 files changed, 305 insertions(+), 17 deletions(-) diff --git a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h index fbc547e..5ea6f45 100644 --- a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h +++ b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h @@ -391,12 +391,14 @@ struct Iax2MetaTrunkEntryTs { #define SIP_METHOD_BYE_SIZE 3 #define SIP_RESPONSE_200_OK_SIZE 11 #define SIP_RESPONSE_SESSION_PROGRESS_SIZE 28 +#define SIP_RESPONSE_302_MOVED_TEMPORARILY_SIZE 29 #define SIP_METHOD_INVITE "INVITE" #define SIP_METHOD_ACK "ACK" #define SIP_METHOD_BYE "BYE" #define SIP_METHOD_200_OK "200 OK" #define SIP_RESPONSE_200_OK "SIP/2.0 200" #define SIP_RESPONSE_SESSION_PROGRESS "SIP/2.0 183 Session Progress" +#define SIP_RESPONSE_302_MOVED_TEMPORARILY "SIP/2.0 302 Moved Temporarily" #endif diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index f571212..654a6e6 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -107,6 +107,9 @@ void RtpSession::ReportRtcpSrcDescription(RtcpSrcDescriptionPacketInfoRef& rtcpI } m_localParty.Format("%s@%s", rtcpInfo->m_cnameUsername, realm); + CStdString lp; + lp = m_localParty; + m_localParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(lp); } else { @@ -155,11 +158,12 @@ void RtpSession::ReportRtcpSrcDescription(RtcpSrcDescriptionPacketInfoRef& rtcpI if(DLLCONFIG.m_inInMode == true) { - m_remoteParty = testParty; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(testParty); } else { - m_remoteParty = rtcpInfo->m_cnameUsername; + CStdString rp = rtcpInfo->m_cnameUsername; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(rp); } LOG4CXX_INFO(m_log, "[" + m_trackingId + "] Set remote party to RTCP CNAME:" + m_remoteParty); @@ -264,7 +268,8 @@ void RtpSession::ProcessMetadataRawRtp(RtpPacketInfoRef& rtpPacket) } if(!m_rtcpRemoteParty) { - m_remoteParty = szDestIp; + CStdString rp(szDestIp); + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(rp); } m_localIp = rtpPacket->m_sourceIp; @@ -290,7 +295,8 @@ void RtpSession::ProcessMetadataRawRtp(RtpPacketInfoRef& rtpPacket) } if(!m_rtcpRemoteParty) { - m_remoteParty = szSourceIp; + CStdString rp(szSourceIp); + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(rp); } m_localIp = rtpPacket->m_destIp; @@ -334,13 +340,13 @@ void RtpSession::ProcessMetadataSipIncoming() if((DLLCONFIG.m_sipRequestUriAsLocalParty == true) && (m_invite->m_requestUri.CompareNoCase(m_invite->m_to) != 0)) { m_localParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_requestUri); - m_remoteParty = m_invite->m_from; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_from); m_direction = CaptureEvent::DirIn; m_localEntryPoint = m_invite->m_to; } else { - m_remoteParty = m_invite->m_from; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_from); m_localParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_to); m_direction = CaptureEvent::DirIn; } @@ -369,13 +375,13 @@ void RtpSession::ProcessMetadataSipOutgoing() if((DLLCONFIG.m_sipRequestUriAsLocalParty == true) && (m_invite->m_requestUri.CompareNoCase(m_invite->m_to) != 0)) { m_localParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_requestUri); - m_remoteParty = m_invite->m_from; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_from); m_direction = CaptureEvent::DirIn; m_localEntryPoint = m_invite->m_to; } else { - m_remoteParty = m_invite->m_to; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_to); m_localParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_from); m_direction = CaptureEvent::DirOut; } @@ -463,13 +469,13 @@ void RtpSession::UpdateMetadataSip(RtpPacketInfoRef& rtpPacket, bool sourceRtpAd if((DLLCONFIG.m_sipRequestUriAsLocalParty == true) && (m_invite->m_requestUri.CompareNoCase(m_invite->m_to) != 0)) { m_localParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_requestUri); - m_remoteParty = m_invite->m_from; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(m_invite->m_from); m_direction = CaptureEvent::DirIn; m_localEntryPoint = m_invite->m_to; } else { - m_remoteParty = invite->m_from; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(invite->m_from); m_localParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(invite->m_to); } @@ -1184,13 +1190,13 @@ void RtpSession::ReportSipBye(SipByeInfoRef& bye) if(m_localParty.CompareNoCase(translatedTo) != 0) { // localparty is set to m_from - m_remoteParty = bye->m_to; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(bye->m_to); logMsg.Format("[%s] dahdiIntercept: reset remoteparty:%s from BYE:%s", m_trackingId, m_remoteParty, byeString); } else { // localparty is set to m_to - m_remoteParty = bye->m_from; + m_remoteParty = RtpSessionsSingleton::instance()->GetLocalPartyMap(bye->m_from); logMsg.Format("[%s] dahdiIntercept: reset remoteparty:%s from BYE:%s", m_trackingId, m_remoteParty, byeString); } @@ -1561,6 +1567,34 @@ void RtpSessions::ReportSipSessionProgress(SipSessionProgressInfoRef& info) } } +void RtpSessions::ReportSip302MovedTemporarily(Sip302MovedTemporarilyInfoRef& info) +{ + CStdString m_trackingId; + + // Contact: is mapped to the To: + SaveLocalPartyMap(info->m_contact, info->m_to); + + // If there is already a session, log that information + std::map::iterator pair; + + pair = m_byCallId.find(info->m_callId); + if (pair != m_byCallId.end()) + { + RtpSessionRef session = pair->second; + + m_trackingId = session->m_trackingId; + } + + if(m_trackingId.size()) + { + LOG4CXX_INFO(m_log, "[" + m_trackingId + "] " + info->m_contact + " mapped to " + info->m_to + " by SIP 302 Moved Temporarily"); + } + else + { + LOG4CXX_INFO(m_log, info->m_contact + " mapped to " + info->m_to + " by SIP 302 Moved Temporarily (session unknown)"); + } +} + void RtpSessions::ReportSip200Ok(Sip200OkInfoRef info) { std::map::iterator pair; @@ -1652,6 +1686,7 @@ void RtpSessions::UpdateSessionWithCallInfo(SkCallInfoStruct* callInfo, RtpSessi { session->m_skinnyLineInstance = callInfo->lineInstance; CStdString lp; + CStdString rp; CStdString logMsg; char szEndPointIp[16]; @@ -1662,12 +1697,14 @@ void RtpSessions::UpdateSessionWithCallInfo(SkCallInfoStruct* callInfo, RtpSessi { case SKINNY_CALL_TYPE_INBOUND: lp = callInfo->calledParty; + rp = callInfo->callingParty; session->m_localParty = GetLocalPartyMap(lp); - session->m_remoteParty = callInfo->callingParty; + session->m_remoteParty = GetLocalPartyMap(rp); session->m_direction = CaptureEvent::DirIn; break; case SKINNY_CALL_TYPE_FORWARD: lp = callInfo->calledParty; + rp = callInfo->callingParty; if(endpoint.get() && ((endpoint->m_extension).size() > 0)) { session->m_localParty = GetLocalPartyMap(endpoint->m_extension); @@ -1675,19 +1712,21 @@ void RtpSessions::UpdateSessionWithCallInfo(SkCallInfoStruct* callInfo, RtpSessi logMsg.Format("[%s] callType is FORWARD: set localparty:%s (obtained from endpoint:%s)", session->m_trackingId, session->m_localParty, szEndPointIp); LOG4CXX_DEBUG(m_log, logMsg); } - session->m_remoteParty = callInfo->callingParty; + session->m_remoteParty = GetLocalPartyMap(rp); session->m_direction = CaptureEvent::DirIn; break; case SKINNY_CALL_TYPE_OUTBOUND: lp = callInfo->callingParty; + rp = callInfo->calledParty; session->m_localParty = GetLocalPartyMap(lp); - session->m_remoteParty = callInfo->calledParty; + session->m_remoteParty = GetLocalPartyMap(rp); session->m_direction = CaptureEvent::DirOut; break; default: lp = callInfo->calledParty; + rp = callInfo->callingParty; session->m_localParty = GetLocalPartyMap(lp); - session->m_remoteParty = callInfo->callingParty; + session->m_remoteParty = GetLocalPartyMap(rp); } } @@ -3102,6 +3141,24 @@ void SipInviteInfo::ToString(CStdString& string) string.Format("sender:%s from:%s@%s RTP:%s,%s to:%s@%s rcvr:%s callid:%s smac:%s rmac:%s fromname:%s toname:%s ua:%s", senderIp, m_from, m_fromDomain, fromRtpIp, m_fromRtpPort, m_to, m_toDomain, receiverIp, m_callId, senderMac, receiverMac, m_fromName, m_toName, m_userAgent); } +//========================================================== +Sip302MovedTemporarilyInfo::Sip302MovedTemporarilyInfo() +{ + m_senderIp.s_addr = 0; + m_receiverIp.s_addr = 0; +} + +void Sip302MovedTemporarilyInfo::ToString(CStdString& string) +{ + char senderIp[16]; + char receiverIp[16]; + + ACE_OS::inet_ntop(AF_INET, (void*)&m_senderIp, senderIp, sizeof(senderIp)); + ACE_OS::inet_ntop(AF_INET, (void*)&m_receiverIp, receiverIp, sizeof(receiverIp)); + + string.Format("sender:%s rcvr:%s from:%s@%s to:%s@%s contact:%s@%s fromname:%s toname:%s contactname:%s callid:%s", senderIp, receiverIp, m_from, m_fromDomain, m_to, m_toDomain, m_contact, m_contactDomain, m_fromName, m_toName, m_contactName, m_callId); +} + //========================================================== SipFailureMessageInfo::SipFailureMessageInfo() { diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.h b/orkaudio/audiocaptureplugins/voip/RtpSession.h index a205e63..ec14d1e 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.h +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.h @@ -24,6 +24,27 @@ using namespace log4cxx; +class Sip302MovedTemporarilyInfo +{ +public: + Sip302MovedTemporarilyInfo(); + void ToString(CStdString& string); + + struct in_addr m_senderIp; + struct in_addr m_receiverIp; + CStdString m_from; + CStdString m_to; + CStdString m_contact; + CStdString m_callId; + CStdString m_fromDomain; + CStdString m_toDomain; + CStdString m_contactDomain; + CStdString m_fromName; + CStdString m_toName; + CStdString m_contactName; +}; +typedef boost::shared_ptr Sip302MovedTemporarilyInfoRef; + class SipInviteInfo { public: @@ -273,6 +294,7 @@ public: void ReportSipErrorPacket(SipFailureMessageInfoRef& sipError); void ReportSip200Ok(Sip200OkInfoRef info); void ReportSipSessionProgress(SipSessionProgressInfoRef& info); + void ReportSip302MovedTemporarily(Sip302MovedTemporarilyInfoRef& info); void Hoover(time_t now); EndpointInfoRef GetEndpointInfo(struct in_addr endpointIp); CStdString StartCapture(CStdString& party); diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index 9faab82..d36b0bc 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -2142,6 +2142,203 @@ bool TrySip200Ok(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, return result; } +bool TrySip302MovedTemporarily(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, UdpHeaderStruct* udpHeader, u_char* udpPayload, u_char* packetEnd) +{ + bool result = false; + bool drop = false; + + if(DLLCONFIG.m_sip302MovedTemporarilySupport == false) + { + return false; + } + + int sipLength = ntohs(udpHeader->len) - sizeof(UdpHeaderStruct); + char* sipEnd = (char*)udpPayload + sipLength; + CStdString sipMethod = "302 Moved Temporarily"; + + if(sipLength < SIP_RESPONSE_302_MOVED_TEMPORARILY_SIZE || sipEnd > (char*)packetEnd) + { + drop = true; // packet too short + } + else if(memcmp(SIP_RESPONSE_302_MOVED_TEMPORARILY, (void*)udpPayload, SIP_RESPONSE_302_MOVED_TEMPORARILY_SIZE) != 0) + { + drop = true; + } + + if(drop == false) + { + result = true; + + Sip302MovedTemporarilyInfoRef info(new Sip302MovedTemporarilyInfo()); + + char* fromField = memFindAfter("From:", (char*)udpPayload, sipEnd); + if(!fromField) + { + fromField = memFindAfter("\nf:", (char*)udpPayload, sipEnd); + } + char* toField = memFindAfter("To:", (char*)udpPayload, sipEnd); + if(!toField) + { + toField = memFindAfter("\nt:", (char*)udpPayload, sipEnd); + } + char* callIdField = memFindAfter("Call-ID:", (char*)udpPayload, sipEnd); + if(!callIdField) + { + callIdField = memFindAfter("\ni:", (char*)udpPayload, sipEnd); + } + char* contactField = memFindAfter("Contact:", (char*)udpPayload, sipEnd); + if(!contactField) + { + contactField = memFindAfter("\nc:", (char*)udpPayload, sipEnd); + } + + if(fromField) + { + if(s_sipExtractionLog->isDebugEnabled()) + { + CStdString from; + GrabLine(fromField, sipEnd, from); + LOG4CXX_DEBUG(s_sipExtractionLog, "from: " + from); + } + + char* fromFieldEnd = memFindEOL(fromField, sipEnd); + + GrabSipName(fromField, fromFieldEnd, info->m_fromName); + + char* sipUser = memFindAfter("sip:", fromField, fromFieldEnd); + if(sipUser) + { + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(sipUser, fromFieldEnd, info->m_from); + } + else + { + GrabSipUriUser(sipUser, fromFieldEnd, info->m_from); + } + GrabSipUriDomain(sipUser, fromFieldEnd, info->m_fromDomain); + } + else + { + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(fromField, fromFieldEnd, info->m_from); + } + else + { + GrabSipUriUser(fromField, fromFieldEnd, info->m_from); + } + GrabSipUriDomain(fromField, fromFieldEnd, info->m_fromDomain); + } + } + if(toField) + { + CStdString to; + char* toFieldEnd = GrabLine(toField, sipEnd, to); + LOG4CXX_DEBUG(s_sipExtractionLog, "to: " + to); + + GrabSipName(toField, toFieldEnd, info->m_toName); + + char* sipUser = memFindAfter("sip:", toField, toFieldEnd); + if(sipUser) + { + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(sipUser, toFieldEnd, info->m_to); + } + else + { + GrabSipUriUser(sipUser, toFieldEnd, info->m_to); + } + GrabSipUriDomain(sipUser, toFieldEnd, info->m_toDomain); + } + else + { + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(toField, toFieldEnd, info->m_to); + } + else + { + GrabSipUriUser(toField, toFieldEnd, info->m_to); + } + GrabSipUriDomain(toField, toFieldEnd, info->m_toDomain); + } + } + if(contactField) + { + CStdString contact; + char* contactFieldEnd = GrabLine(contactField, sipEnd, contact); + LOG4CXX_DEBUG(s_sipExtractionLog, "contact: " + contact); + + GrabSipName(contactField, contactFieldEnd, info->m_contactName); + + char* sipUser = memFindAfter("sip:", contactField, contactFieldEnd); + if(sipUser) + { + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(sipUser, contactFieldEnd, info->m_contact); + } + else + { + GrabSipUriUser(sipUser, contactFieldEnd, info->m_contact); + } + GrabSipUriDomain(sipUser, contactFieldEnd, info->m_contactDomain); + } + else + { + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(contactField, contactFieldEnd, info->m_contact); + } + else + { + GrabSipUriUser(contactField, contactFieldEnd, info->m_contact); + } + GrabSipUriDomain(contactField, contactFieldEnd, info->m_contactDomain); + } + + } + if(callIdField) + { + GrabTokenSkipLeadingWhitespaces(callIdField, sipEnd, info->m_callId); + } + + info->m_senderIp = ipHeader->ip_src; + info->m_receiverIp = ipHeader->ip_dest; + + if(!info->m_callId.size()) + { + drop = true; + } + if(!info->m_contact) + { + drop = true; + } + + CStdString logMsg; + info->ToString(logMsg); + logMsg = sipMethod + ": " + logMsg; + LOG4CXX_INFO(s_sipPacketLog, logMsg); + + if(drop == false) + { + RtpSessionsSingleton::instance()->ReportSip302MovedTemporarily(info); + } + else + { + CStdString packetInfo; + + info->ToString(packetInfo); + logMsg.Format("Dropped this %s: %s", sipMethod, packetInfo); + LOG4CXX_INFO(s_sipPacketLog, logMsg); + } + } + + return result; +} + bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, UdpHeaderStruct* udpHeader, u_char* udpPayload, u_char* packetEnd) { bool result = false; @@ -2960,7 +3157,14 @@ void HandlePacket(u_char *param, const struct pcap_pkthdr *header, const u_char if(!detectedUsefulPacket) { if(DLLCONFIG.m_sipDetectSessionProgress == true) { - TrySipSessionProgress(ethernetHeader, ipHeader, udpHeader, udpPayload, ipPacketEnd); + detectedUsefulPacket = TrySipSessionProgress(ethernetHeader, ipHeader, udpHeader, udpPayload, ipPacketEnd); + } + } + + if(!detectedUsefulPacket) { + if(DLLCONFIG.m_sip302MovedTemporarilySupport == true) + { + detectedUsefulPacket = TrySip302MovedTemporarily(ethernetHeader, ipHeader, udpHeader, udpPayload, ipPacketEnd); } } diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp index 69d51d7..216302e 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp @@ -52,6 +52,7 @@ VoIpConfig::VoIpConfig() m_sipRequestUriAsLocalParty = true; m_sipTreat200OkAsInvite = false; m_sipAllowMultipleMediaAddresses = false; + m_sip302MovedTemporarilySupport = true; m_rtcpDetect = false; m_inInMode = false; @@ -131,6 +132,7 @@ void VoIpConfig::Define(Serializer* s) s->BoolValue("SipRequestUriAsLocalParty", m_sipRequestUriAsLocalParty); s->BoolValue("SipTreat200OkAsInvite", m_sipTreat200OkAsInvite); s->BoolValue("SipAllowMultipleMediaAddresses", m_sipAllowMultipleMediaAddresses); + s->BoolValue("Sip302MovedTemporarilySupport", m_sip302MovedTemporarilySupport); s->BoolValue("RtcpDetect", m_rtcpDetect); s->BoolValue("InInMode", m_inInMode); diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h index d853b85..5bdadca 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h @@ -89,6 +89,7 @@ public: bool m_sipRequestUriAsLocalParty; bool m_sipTreat200OkAsInvite; bool m_sipAllowMultipleMediaAddresses; + bool m_sip302MovedTemporarilySupport; bool m_rtcpDetect; bool m_inInMode; -- cgit v1.2.3 From 870ec66dd107c077d85e12917ccf17ae3c511548 Mon Sep 17 00:00:00 2001 From: beg_g Date: Wed, 21 Oct 2009 15:40:10 +0000 Subject: Fixed orkaudio to load init class git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@648 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/OrkAudio.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/orkaudio/OrkAudio.cpp b/orkaudio/OrkAudio.cpp index 6b497d0..0866f37 100644 --- a/orkaudio/OrkAudio.cpp +++ b/orkaudio/OrkAudio.cpp @@ -27,6 +27,7 @@ #include "messages/CaptureMsg.h" #include "messages/TestMsg.h" #include "messages/RecordMsg.h" +#include "messages/InitMsg.h" #include "Config.h" #include "LogManager.h" #include "ImmediateProcessing.h" @@ -221,6 +222,8 @@ void MainThread() ObjectFactory::GetSingleton()->RegisterObject(objRef); objRef.reset(new StopMsg); ObjectFactory::GetSingleton()->RegisterObject(objRef); + objRef.reset(new InitMsg); + ObjectFactory::GetSingleton()->RegisterObject(objRef); //objRef.reset(new TestMsg); //ObjectFactory::GetSingleton()->RegisterObject(objRef); -- cgit v1.2.3 From 431b8771bce2f011e570f32c6d21642394e356a2 Mon Sep 17 00:00:00 2001 From: beg_g Date: Thu, 22 Oct 2009 18:36:21 +0000 Subject: Multiple corrections to code to suppress gcc warnings - identified by Tzafrir Cohen. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@649 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/OrkAudio.cpp | 2 +- orkaudio/audiocaptureplugins/voip/Iax2Session.cpp | 2 +- orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 3 -- orkaudio/audiocaptureplugins/voip/SipTcp.cpp | 8 ++-- orkaudio/audiocaptureplugins/voip/VoIp.cpp | 48 +++++++++++------------ orkaudio/filters/rtpmixer/RtpMixer.cpp | 4 +- orkbasecxx/AudioCapture.cpp | 1 - orkbasecxx/BatchProcessing.cpp | 2 +- orkbasecxx/ConfigManager.cpp | 8 ++-- orkbasecxx/LogManager.cpp | 8 ++-- orkbasecxx/MemUtils.cpp | 2 +- orkbasecxx/MultiThreadedServer.cpp | 1 - orkbasecxx/Utils.cpp | 2 +- orkbasecxx/audiofile/AudioFile.h | 2 +- orkbasecxx/audiofile/MediaChunkFile.cpp | 6 +-- orkbasecxx/audiofile/PcmFile.cpp | 2 +- orkbasecxx/serializers/Serializer.cpp | 10 ++--- orkbasecxx/serializers/SingleLineSerializer.cpp | 6 +-- orkbasecxx/serializers/UrlSerializer.cpp | 6 +-- 19 files changed, 56 insertions(+), 67 deletions(-) diff --git a/orkaudio/OrkAudio.cpp b/orkaudio/OrkAudio.cpp index 0866f37..46ec9ac 100644 --- a/orkaudio/OrkAudio.cpp +++ b/orkaudio/OrkAudio.cpp @@ -92,7 +92,7 @@ void LoadPlugins(std::list& pluginDlls) else { dirent* dirEntry = NULL; - while(dirEntry = ACE_OS::readdir(dir)) + while((dirEntry = ACE_OS::readdir(dir))) { CStdString dirEntryFilename = dirEntry->d_name; int extensionPos = dirEntryFilename.Find(pluginExtension); diff --git a/orkaudio/audiocaptureplugins/voip/Iax2Session.cpp b/orkaudio/audiocaptureplugins/voip/Iax2Session.cpp index 6216f71..5df6011 100644 --- a/orkaudio/audiocaptureplugins/voip/Iax2Session.cpp +++ b/orkaudio/audiocaptureplugins/voip/Iax2Session.cpp @@ -313,7 +313,7 @@ void Iax2Session::ReportMetadata() g_captureEventCallBack(event, m_capturePort); } -static char *iax2_state_to_str(int iax2state) +static const char *iax2_state_to_str(int iax2state) { switch(iax2state) { case IAX2_STATE_WAITING: diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index 654a6e6..4e2303c 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -2032,9 +2032,6 @@ void RtpSessions::MapOtherMediaAddress(RtpSessionRef& session, CStdString& ipAnd origOrkUid = session->GetOrkUid(); if(session2->OrkUidMatches(origOrkUid)) { - CStdString logMsg; - char szEndPointIp[16]; - if(m_log->isInfoEnabled()) { CStdString logMsg; diff --git a/orkaudio/audiocaptureplugins/voip/SipTcp.cpp b/orkaudio/audiocaptureplugins/voip/SipTcp.cpp index 8b02838..35e2774 100644 --- a/orkaudio/audiocaptureplugins/voip/SipTcp.cpp +++ b/orkaudio/audiocaptureplugins/voip/SipTcp.cpp @@ -99,7 +99,7 @@ u_char *SafeBuffer::GetBuffer() // ============================================================ -static char* memFindAfter(char* toFind, char* start, char* stop) +static char* memFindAfter(const char* toFind, char* start, char* stop) { for(char * ptr = start; (ptrSize(); char *contentLengthHeader = memFindStr("Content-Length: ", pBufStart, pBufEnd); char *contentLength = memFindAfter("Content-Length: ", pBufStart, pBufEnd); - int cLength = 0; + unsigned int cLength = 0; if(!contentLength || !contentLengthHeader) return false; diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index d36b0bc..55a5443 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -119,7 +119,7 @@ typedef ACE_Singleton VoIpSingleton; void memToHex(unsigned char* input, size_t len, CStdString&output) { char byteAsHex[10]; - for(int i=0; i (stop-ptr) ? (stop-ptr) : strlen(toFind))) == 0) + if(ACE_OS::strncasecmp(toFind, ptr, ((int)strlen(toFind) > (stop-ptr) ? (stop-ptr) : strlen(toFind))) == 0) { return (ptr); } @@ -155,7 +155,7 @@ static char* memFindStr(char* toFind, char* start, char* stop) } // find the address that follows the given search string between start and stop pointers - case insensitive -char* memFindAfter(char* toFind, char* start, char* stop) +char* memFindAfter(const char* toFind, char* start, char* stop) { for(char * ptr = start; (ptrlen)-sizeof(UdpHeaderStruct)); - if(udp_act_payload_len < sizeof(*fh)) + if(udp_act_payload_len < (int)sizeof(*fh)) return false; /* Frame too small */ if(!(ntohs(fh->scallno) & 0x8000)) @@ -685,10 +685,10 @@ bool TryIax2New(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, * callee (Called Number) */ if(!ies.caller) { - ies.caller = "WITHELD"; + ies.caller = (char*)"WITHELD"; } else { if(!strlen(ies.caller)) { - ies.caller = "WITHELD"; + ies.caller = (char*)"WITHELD"; } } @@ -721,7 +721,7 @@ bool TryIax2Accept(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeade memset(&ies, 0, sizeof(ies)); udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct)); - if(udp_act_payload_len < sizeof(*fh)) + if(udp_act_payload_len < (int)sizeof(*fh)) return false; /* Frame too small */ if(!(ntohs(fh->scallno) & 0x8000)) @@ -771,7 +771,7 @@ bool TryIax2Authreq(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHead memset(&ies, 0, sizeof(ies)); udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct)); - if(udp_act_payload_len < sizeof(*fh)) + if(udp_act_payload_len < (int)sizeof(*fh)) return false; /* Frame too small */ if(!(ntohs(fh->scallno) & 0x8000)) @@ -838,7 +838,7 @@ bool TryIax2Hangup(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeade memset(&ies, 0, sizeof(ies)); udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct)); - if(udp_act_payload_len < sizeof(*fh)) + if(udp_act_payload_len < (int)sizeof(*fh)) return false; /* Frame too small */ if(!(ntohs(fh->scallno) & 0x8000)) @@ -884,7 +884,7 @@ bool TryIax2ControlHangup(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* return false; udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct)); - if(udp_act_payload_len < sizeof(*fh)) + if(udp_act_payload_len < (int)sizeof(*fh)) return false; /* Frame too small */ if(!(ntohs(fh->scallno) & 0x8000)) @@ -924,7 +924,7 @@ bool TryIax2Reject(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeade memset(&ies, 0, sizeof(ies)); udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct)); - if(udp_act_payload_len < sizeof(*fh)) + if(udp_act_payload_len < (int)sizeof(*fh)) return false; /* Frame too small */ if(!(ntohs(fh->scallno) & 0x8000)) @@ -969,7 +969,7 @@ bool TryIax2FullVoiceFrame(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* return false; udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct)); - if(udp_act_payload_len < sizeof(*fh)) + if(udp_act_payload_len < (int)sizeof(*fh)) return false; /* Frame too small */ if(!(ntohs(fh->scallno) & 0x8000)) @@ -1021,8 +1021,7 @@ bool TryIax2MetaTrunkFrame(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* struct Iax2MetaTrunkEntry *supermini = NULL; struct Iax2MetaTrunkEntryTs *mini = NULL; int content_type = 0; /* 0 means mini frames, 1 means super mini (no timestampes) */ - int frame_ts = 0; /* Timestamp of frame */ - int data_len = 0; + unsigned int data_len = 0; int entries = 0, udp_act_payload_len = 0; Iax2PacketInfoRef info(new Iax2PacketInfo()); @@ -1030,7 +1029,7 @@ bool TryIax2MetaTrunkFrame(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* return false; udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct)); - if(udp_act_payload_len < sizeof(*mh)) + if(udp_act_payload_len < (int)sizeof(*mh)) return false; /* Frame too small */ if(mh->meta != 0) @@ -1140,7 +1139,7 @@ bool TryIax2MiniVoiceFrame(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* return false; udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct)); - if(udp_act_payload_len < sizeof(*mini)) + if(udp_act_payload_len < (int)sizeof(*mini)) return false; /* Frame too small */ if((ntohs(mini->scallno) & 0x8000)) @@ -1210,7 +1209,7 @@ bool TryRtcp(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, Udp unsigned short mv = 0; r = (RtcpCommonHeaderStruct*)((unsigned int *)r + ntohs(r->length) + 1); - while(r < rtcpEnd && ((rtcpEnd - r) >= sizeof(RtcpCommonHeaderStruct))) + while(r < rtcpEnd && ((rtcpEnd - r) >= (int)sizeof(RtcpCommonHeaderStruct))) { mv = (r->vpc & 0x00c0) >> 6; if(mv != 2) @@ -1241,7 +1240,7 @@ bool TryRtcp(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, Udp memset(cname, 0, sizeof(cname)); r = (RtcpCommonHeaderStruct*)((unsigned int *)r + ntohs(r->length) + 1); - while(r < rtcpEnd && ((rtcpEnd - r) >= sizeof(RtcpCommonHeaderStruct))) + while(r < rtcpEnd && ((rtcpEnd - r) >= (int)sizeof(RtcpCommonHeaderStruct))) { version = (r->vpc & 0x00c0) >> 6; p = (r->vpc & 0x0020) >> 5; @@ -1375,9 +1374,7 @@ bool TryRtp(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, UdpH if (rtpHeader->version == 2) { - u_short source = ntohs(udpHeader->source); - u_short dest = ntohs(udpHeader->dest); - if(!(ntohs(udpHeader->source)%2) && !(ntohs(udpHeader->dest)%2) || DLLCONFIG.m_rtpDetectOnOddPorts) // udp ports usually even + if((!(ntohs(udpHeader->source)%2) && !(ntohs(udpHeader->dest)%2)) || DLLCONFIG.m_rtpDetectOnOddPorts) // udp ports usually even { if((rtpHeader->pt <= 34 && rtpHeader->pt != 13) || (rtpHeader->pt >= 97 && rtpHeader->pt < 127) ) // pt=13 is CN (Comfort Noise) @@ -1457,7 +1454,7 @@ bool TrySipBye(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, U int sipLength = ntohs(udpHeader->len) - sizeof(UdpHeaderStruct); char* sipEnd = (char*)udpPayload + sipLength; - if(sipLength < sizeof(SIP_METHOD_BYE) || sipEnd > (char*)packetEnd) + if(sipLength < (int)sizeof(SIP_METHOD_BYE) || sipEnd > (char*)packetEnd) { return false; } @@ -2786,7 +2783,7 @@ void HandleSkinnyMessage(SkinnyHeaderStruct* skinnyHeader, IpHeaderStruct* ipHea // Extract Calling and Called number. char* parties = (char*)(&ccm5CallInfo->parties); char* partiesPtr = parties; - long partiesLen = partiesLen = (long)packetEnd - (long)ccm5CallInfo - sizeof(SkCcm5CallInfoStruct); + long partiesLen = (long)packetEnd - (long)ccm5CallInfo - sizeof(SkCcm5CallInfoStruct); CStdString callingParty; CStdString calledParty; @@ -3411,7 +3408,7 @@ void VoIp::OpenPcapDirectory(CStdString& path) else { dirent* dirEntry = NULL; - while(dirEntry = ACE_OS::readdir(dir)) + while((dirEntry = ACE_OS::readdir(dir))) { CStdString dirEntryFilename = dirEntry->d_name; CStdString pcapExtension = ".pcap"; @@ -3733,7 +3730,6 @@ void VoIp::LoadPartyMaps() { FILE *maps = NULL; char buf[1024]; - int i = 0; int ln = 0; CStdString logMsg; diff --git a/orkaudio/filters/rtpmixer/RtpMixer.cpp b/orkaudio/filters/rtpmixer/RtpMixer.cpp index c2ce98b..f3e4216 100644 --- a/orkaudio/filters/rtpmixer/RtpMixer.cpp +++ b/orkaudio/filters/rtpmixer/RtpMixer.cpp @@ -610,7 +610,7 @@ void RtpMixer::StoreRtpPacket(AudioChunkRef& audioChunk, unsigned int correctedT unsigned int endRtpTimestamp = correctedTimestamp + audioChunk->GetNumSamples(); if (endRtpTimestamp > m_writeTimestamp) { - for(int i=0; i<(endRtpTimestamp - m_writeTimestamp); i++) + for(unsigned int i=0; i<(endRtpTimestamp - m_writeTimestamp); i++) { *m_writePtr = 0; @@ -761,7 +761,7 @@ void RtpMixer::HandleMixedOutput(AudioChunkRef &chunk, AudioChunkDetails& detail chanNo = i+1; chanIdx = i; - for(int j = 0; j < (details.m_numBytes/2); j++) + for(unsigned int j = 0; j < (details.m_numBytes/2); j++) { int sample; int saveIdx = 0; diff --git a/orkbasecxx/AudioCapture.cpp b/orkbasecxx/AudioCapture.cpp index 77b9e95..1cb5ca6 100644 --- a/orkbasecxx/AudioCapture.cpp +++ b/orkbasecxx/AudioCapture.cpp @@ -207,7 +207,6 @@ int AudioChunk::GetNumSamples() double AudioChunk::GetDurationSec() { - int i = 0; return ((double)GetNumSamples())/((double)m_details.m_sampleRate); } diff --git a/orkbasecxx/BatchProcessing.cpp b/orkbasecxx/BatchProcessing.cpp index 560ac3e..81746af 100644 --- a/orkbasecxx/BatchProcessing.cpp +++ b/orkbasecxx/BatchProcessing.cpp @@ -320,7 +320,7 @@ void BatchProcessing::ThreadHandler(void *args) if(CONFIG.m_transcodingSleepEveryNumFrames > 0 && CONFIG.m_transcodingSleepUs > 0) { - if(frameSleepCounter >= CONFIG.m_transcodingSleepEveryNumFrames) + if(frameSleepCounter >= (unsigned int)CONFIG.m_transcodingSleepEveryNumFrames) { frameSleepCounter = 0; struct timespec ts; diff --git a/orkbasecxx/ConfigManager.cpp b/orkbasecxx/ConfigManager.cpp index 85ad41e..1dff7d8 100644 --- a/orkbasecxx/ConfigManager.cpp +++ b/orkbasecxx/ConfigManager.cpp @@ -48,7 +48,7 @@ void ConfigManager::Initialize() try { - char* cfgFilename = ""; + char* cfgFilename = NULL; char* cfgEnvPath = ""; int cfgAlloc = 0; @@ -69,19 +69,19 @@ void ConfigManager::Initialize() } } - if(!cfgFilename || !strlen(cfgFilename)) { + if(!cfgFilename) { FILE* file = ACE_OS::fopen(CONFIG_FILE_NAME, "r"); if(file) { // config.xml exists in the current directory - cfgFilename = CONFIG_FILE_NAME; + cfgFilename = (char*)CONFIG_FILE_NAME; fclose(file); } else { // config.xml could not be found in the current // directory, try to find it in system configuration directory - cfgFilename = ETC_CONFIG_FILE_NAME; + cfgFilename = (char*)ETC_CONFIG_FILE_NAME; } } diff --git a/orkbasecxx/LogManager.cpp b/orkbasecxx/LogManager.cpp index 6259a70..f058429 100644 --- a/orkbasecxx/LogManager.cpp +++ b/orkbasecxx/LogManager.cpp @@ -30,7 +30,7 @@ void OrkLogManager::Initialize() { BasicConfigurator::configure(); - char* logCfgFilename = ""; + char* logCfgFilename = NULL; char* cfgEnvPath = ""; int cfgAlloc = 0; @@ -51,19 +51,19 @@ void OrkLogManager::Initialize() } } - if(!logCfgFilename || !strlen(logCfgFilename)) { + if(!logCfgFilename) { FILE* file = ACE_OS::fopen("logging.properties", "r"); if(file) { // logging.properties exists in the current directory - logCfgFilename = "logging.properties"; + logCfgFilename = (char*)"logging.properties"; fclose(file); } else { // logging.properties could not be found in the current // directory, try to find it in system configuration directory - logCfgFilename = "/etc/orkaudio/logging.properties"; + logCfgFilename = (char*)"/etc/orkaudio/logging.properties"; } } diff --git a/orkbasecxx/MemUtils.cpp b/orkbasecxx/MemUtils.cpp index 5fd8994..6b7740e 100644 --- a/orkbasecxx/MemUtils.cpp +++ b/orkbasecxx/MemUtils.cpp @@ -22,7 +22,7 @@ void MemToHex(unsigned char* input, size_t len, CStdString&output) { char byteAsHex[10]; - for(int i=0; iGetNewSessionId() + " -"; logMsg.Format("%s Event streaming start", sessionId); diff --git a/orkbasecxx/Utils.cpp b/orkbasecxx/Utils.cpp index f06d673..656a3ce 100644 --- a/orkbasecxx/Utils.cpp +++ b/orkbasecxx/Utils.cpp @@ -234,7 +234,7 @@ void FileEscapeName(CStdString& in, CStdString& out) // Translates all the characters that are not in file_ok_chars string into %xx sequences // %xx specifies the character ascii code in hexadecimal out = ""; - for (int i = 0 ; iGetDetails(), sizeof(AudioChunkDetails), 1, m_stream); + int numWritten = ACE_OS::fwrite(tmpChunk->GetDetails(), sizeof(AudioChunkDetails), 1, m_stream); if(numWritten != 1) { writeError = true; @@ -97,7 +96,7 @@ void MediaChunkFile::WriteChunk(AudioChunkRef chunkRef) m_chunkQueueDataSize += pChunk->GetNumBytes(); m_chunkQueue.push(chunkRef); - if(m_chunkQueueDataSize > (CONFIG.m_captureFileBatchSizeKByte*1024)) + if(m_chunkQueueDataSize > (unsigned int)(CONFIG.m_captureFileBatchSizeKByte*1024)) { if (m_stream) { @@ -117,7 +116,6 @@ void MediaChunkFile::WriteChunk(AudioChunkRef chunkRef) int MediaChunkFile::ReadChunkMono(AudioChunkRef& chunkRef) { unsigned int numRead = 0; - bool readError = false; if (m_stream) { diff --git a/orkbasecxx/audiofile/PcmFile.cpp b/orkbasecxx/audiofile/PcmFile.cpp index 85f49e3..c6ba65c 100644 --- a/orkbasecxx/audiofile/PcmFile.cpp +++ b/orkbasecxx/audiofile/PcmFile.cpp @@ -59,7 +59,7 @@ void PcmFile::WriteChunk(AudioChunkRef chunkRef) throw(CStdString("Write attempt on unopened file:")+ m_filename); } - if (numWritten != chunkRef->GetNumSamples()) + if (numWritten != (unsigned int)chunkRef->GetNumSamples()) { throw(CStdString("Could not write to file:")+ m_filename); } diff --git a/orkbasecxx/serializers/Serializer.cpp b/orkbasecxx/serializers/Serializer.cpp index 3318833..df066b0 100644 --- a/orkbasecxx/serializers/Serializer.cpp +++ b/orkbasecxx/serializers/Serializer.cpp @@ -318,7 +318,7 @@ void Serializer::GetCsv(const char* key, std::list& value, bool req CStdString element; bool first = true; GetString(key, stringValue, required); - for(int i=0; i Date: Tue, 27 Oct 2009 09:50:35 +0000 Subject: Modified the VoIP plugin to support the cases where Skinny CallInfo is sent without corresponding StartMediaTransmission or OpenReceiveChannelAck messages. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@650 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 130 ++++++++++++++++++++++- orkaudio/audiocaptureplugins/voip/RtpSession.h | 6 +- 2 files changed, 130 insertions(+), 6 deletions(-) diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index 4e2303c..bf19956 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -88,6 +88,11 @@ void RtpSession::Stop() } } +bool RtpSession::Stopped() +{ + return m_stopped; +} + void RtpSession::ReportRtcpSrcDescription(RtcpSrcDescriptionPacketInfoRef& rtcpInfo) { if(!m_rtcpLocalParty) @@ -1664,19 +1669,20 @@ void RtpSessions::ReportSipBye(SipByeInfoRef& bye) void RtpSessions::UpdateEndpointWithCallInfo(SkCallInfoStruct* callInfo, IpHeaderStruct* ipHeader) { CStdString extension; + CStdString callId = GenerateSkinnyCallId(ipHeader->ip_dest, callInfo->callId); switch(callInfo->callType) { case SKINNY_CALL_TYPE_INBOUND: { extension = callInfo->calledParty; - SetEndpointExtension(extension, &ipHeader->ip_dest); + SetEndpointExtension(extension, &ipHeader->ip_dest, callId); break; } case SKINNY_CALL_TYPE_OUTBOUND: { extension = callInfo->callingParty; - SetEndpointExtension(extension, &ipHeader->ip_dest); + SetEndpointExtension(extension, &ipHeader->ip_dest, callId); break; } } @@ -1730,6 +1736,72 @@ void RtpSessions::UpdateSessionWithCallInfo(SkCallInfoStruct* callInfo, RtpSessi } } +bool RtpSessions::TrySkinnySession(RtpPacketInfoRef& rtpPacket, EndpointInfoRef& endpoint) +{ + std::map::iterator pair; + std::map::iterator sessionpair; + RtpSessionRef session; + bool srcmatch = false; + CStdString logMsg; + + pair = m_endpoints.find((unsigned int)(rtpPacket->m_sourceIp.s_addr)); + if(pair != m_endpoints.end()) + { + endpoint = pair->second; + srcmatch = true; + } + else + { + pair = m_endpoints.find((unsigned int)(rtpPacket->m_destIp.s_addr)); + if(pair == m_endpoints.end()) + { + return false; + } + + endpoint = pair->second; + } + + if(!(endpoint->m_latestCallId).size()) + { + return false; + } + + sessionpair = m_byCallId.find(endpoint->m_latestCallId); + if(sessionpair == m_byCallId.end()) + { + return false; + } + + session = sessionpair->second; + if(session->Stopped()) + { + return false; + } + + char szEndPointIp[16]; + char szRtpSrcIp[16]; + char szRtpDstIp[16]; + + ACE_OS::inet_ntop(AF_INET, (void*)&rtpPacket->m_sourceIp, szRtpSrcIp, sizeof(szRtpSrcIp)); + ACE_OS::inet_ntop(AF_INET, (void*)&rtpPacket->m_destIp, szRtpDstIp, sizeof(szRtpDstIp)); + + if(srcmatch == true) + { + SetMediaAddress(session, rtpPacket->m_sourceIp, rtpPacket->m_sourcePort); + ACE_OS::inet_ntop(AF_INET, (void*)&rtpPacket->m_sourceIp, szEndPointIp, sizeof(szEndPointIp)); + } + else + { + SetMediaAddress(session, rtpPacket->m_destIp, rtpPacket->m_destPort); + ACE_OS::inet_ntop(AF_INET, (void*)&rtpPacket->m_destIp, szEndPointIp, sizeof(szEndPointIp)); + } + + logMsg.Format("[%s] RTP stream detected on endpoint:%s extension:%s RTP:%s,%d %s,%d callid:%s", session->m_trackingId, szEndPointIp, endpoint->m_extension, szRtpSrcIp, rtpPacket->m_sourcePort, szRtpDstIp, rtpPacket->m_destPort, endpoint->m_latestCallId); + LOG4CXX_INFO(m_log, logMsg); + + return true; +} + void RtpSessions::ReportSkinnyCallInfo(SkCallInfoStruct* callInfo, IpHeaderStruct* ipHeader) { CStdString callId = GenerateSkinnyCallId(ipHeader->ip_dest, callInfo->callId); @@ -2315,7 +2387,7 @@ void RtpSessions::ReportSkinnyStopMediaTransmission(SkStopMediaTransmissionStruc } } -void RtpSessions::SetEndpointExtension(CStdString& extension, struct in_addr* endpointIp) +void RtpSessions::SetEndpointExtension(CStdString& extension, struct in_addr* endpointIp, CStdString& callId) { std::map::iterator pair; EndpointInfoRef endpoint; @@ -2326,12 +2398,21 @@ void RtpSessions::SetEndpointExtension(CStdString& extension, struct in_addr* en // Update the existing endpoint info endpoint = pair->second; endpoint->m_extension = extension; + if(callId.size()) + { + endpoint->m_latestCallId = callId; + } } else { // Create endpoint info for the new endpoint endpoint.reset(new EndpointInfo()); endpoint->m_extension = extension; + ACE_OS::memcpy(&endpoint->m_ip, endpointIp, sizeof(endpoint->m_ip)); + if(callId.size()) + { + endpoint->m_latestCallId = callId; + } m_endpoints.insert(std::make_pair((unsigned int)(endpointIp->s_addr), endpoint)); } if(endpoint.get()) @@ -2340,19 +2421,21 @@ void RtpSessions::SetEndpointExtension(CStdString& extension, struct in_addr* en char szEndpointIp[16]; ACE_OS::inet_ntop(AF_INET, (void*)endpointIp, szEndpointIp, sizeof(szEndpointIp)); - logMsg.Format("Extension:%s is on endpoint:%s", endpoint->m_extension, szEndpointIp); + logMsg.Format("Extension:%s callId:%s is on endpoint:%s", endpoint->m_extension, endpoint->m_latestCallId, szEndpointIp); LOG4CXX_INFO(m_log, logMsg); } } void RtpSessions::ReportSkinnyLineStat(SkLineStatStruct* lineStat, IpHeaderStruct* ipHeader) { + CStdString callId = ""; + if(strlen(lineStat->lineDirNumber) > 1) { CStdString extension; extension = lineStat->lineDirNumber; - SetEndpointExtension(extension, &ipHeader->ip_dest); + SetEndpointExtension(extension, &ipHeader->ip_dest, callId); } } @@ -2651,6 +2734,14 @@ void RtpSessions::ReportRtpPacket(RtpPacketInfoRef& rtpPacket) } else if((numSessionsFound == 0) && (CONFIG.m_lookBackRecording == true)) { + EndpointInfoRef endpoint; + + // Check if this is a Skinny session + if(TrySkinnySession(rtpPacket, endpoint) == true) + { + return; + } + // create new Raw RTP session and insert into IP+Port map CStdString trackingId = m_alphaCounter.GetNext(); RtpSessionRef session(new RtpSession(trackingId)); @@ -2688,6 +2779,35 @@ void RtpSessions::ReportRtpPacket(RtpPacketInfoRef& rtpPacket) LOG4CXX_DEBUG(m_log, CStdString("ByIpAndPort: ") + numSessions); LOG4CXX_INFO(m_log, "[" + trackingId + "] created by RTP packet"); + + if(endpoint.get()) + { + // Skinny endpoint was got but no RTP session or existing + // RTP session is already stopped + char szEndpointIp[16]; + char szRtpSrcIp[16]; + char szRtpDstIp[16]; + CStdString logMsg; + + ACE_OS::inet_ntop(AF_INET, (void*)&endpoint->m_ip, szEndpointIp, sizeof(szEndpointIp)); + ACE_OS::inet_ntop(AF_INET, (void*)&rtpPacket->m_sourceIp, szRtpSrcIp, sizeof(szRtpSrcIp)); + ACE_OS::inet_ntop(AF_INET, (void*)&rtpPacket->m_destIp, szRtpDstIp, sizeof(szRtpDstIp)); + + session->m_localParty = endpoint->m_extension; + if(endpoint->m_ip.s_addr == rtpPacket->m_sourceIp.s_addr) + { + session->m_remoteParty = szRtpDstIp; + } + else + { + session->m_remoteParty = szRtpSrcIp; + } + + logMsg.Format("[%s] RTP stream detected on endpoint:%s extension:%s RTP:%s,%d %s,%d", session->m_trackingId, szEndpointIp, endpoint->m_extension, szRtpSrcIp, rtpPacket->m_sourcePort, szRtpDstIp, rtpPacket->m_destPort); + LOG4CXX_INFO(m_log, logMsg); + + return; + } } } diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.h b/orkaudio/audiocaptureplugins/voip/RtpSession.h index ec14d1e..2dd7f15 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.h +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.h @@ -154,6 +154,8 @@ class EndpointInfo { public: CStdString m_extension; + CStdString m_latestCallId; + struct in_addr m_ip; }; typedef boost::shared_ptr EndpointInfoRef; @@ -186,6 +188,7 @@ public: void ReportSkinnyCallInfo(SkCallInfoStruct*, IpHeaderStruct* ipHeader); CStdString GetOrkUid(); void MarkAsOnDemand(); + bool Stopped(); CStdString m_capturePort; CStdString m_trackingId; @@ -285,7 +288,7 @@ public: void ReportSkinnyStartMediaTransmission(SkStartMediaTransmissionStruct*, IpHeaderStruct* ipHeader); void ReportSkinnyStopMediaTransmission(SkStopMediaTransmissionStruct*, IpHeaderStruct* ipHeader); void ReportSkinnyOpenReceiveChannelAck(SkOpenReceiveChannelAckStruct*); - void SetEndpointExtension(CStdString& extension, struct in_addr* endpointIp); + void SetEndpointExtension(CStdString& extension, struct in_addr* endpointIp, CStdString& callId); void ReportSkinnyLineStat(SkLineStatStruct*, IpHeaderStruct* ipHeader); void ReportSkinnySoftKeyHold(SkSoftKeyEventMessageStruct* skEvent, IpHeaderStruct* ipHeader); void ReportSkinnySoftKeyResume(SkSoftKeyEventMessageStruct* skEvent, IpHeaderStruct* ipHeader); @@ -322,6 +325,7 @@ private: CStdString GenerateSkinnyCallId(struct in_addr endpointIp, unsigned int callId); void UpdateEndpointWithCallInfo(SkCallInfoStruct* callInfo, IpHeaderStruct* ipHeader); void UpdateSessionWithCallInfo(SkCallInfoStruct*, RtpSessionRef&); + bool TrySkinnySession(RtpPacketInfoRef& rtpPacket, EndpointInfoRef&); std::map m_byIpAndPort; std::map m_byCallId; -- cgit v1.2.3 From 3d979dd4fe75b4e4309dd6bf815e040706b6242d Mon Sep 17 00:00:00 2001 From: henrih Date: Fri, 6 Nov 2009 21:46:16 +0000 Subject: Fixed garbled or missing audio when multiple RTP streams are seen in a single session. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@651 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 15 ++++++++++----- orkaudio/audiocaptureplugins/voip/RtpSession.h | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index bf19956..5fdca67 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -70,6 +70,7 @@ RtpSession::RtpSession(CStdString& trackingId) m_rtpIp.s_addr = 0; m_skinnyLineInstance = 0; m_onDemand = false; + m_newRtpStream = true; } void RtpSession::Stop() @@ -1017,9 +1018,12 @@ bool RtpSession::AddRtpPacket(RtpPacketInfoRef& rtpPacket) else { // Comparing destination IP address and port to find out if side1, see (1) - if((unsigned int)rtpPacket->m_destIp.s_addr == (unsigned int)m_lastRtpPacketSide1->m_destIp.s_addr && - rtpPacket->m_destPort == m_lastRtpPacketSide1->m_destPort) + if( m_newRtpStream == true || + ( (unsigned int)rtpPacket->m_destIp.s_addr == (unsigned int)m_lastRtpPacketSide1->m_destIp.s_addr && + rtpPacket->m_destPort == m_lastRtpPacketSide1->m_destPort ) ) { + m_newRtpStream = false; + if(rtpPacket->m_timestamp == m_lastRtpPacketSide1->m_timestamp) { m_hasDuplicateRtp = true; @@ -1102,9 +1106,10 @@ bool RtpSession::AddRtpPacket(RtpPacketInfoRef& rtpPacket) bool hasDestAddress = m_rtpAddressList.HasAddressOrAdd(rtpPacket->m_destIp, rtpPacket->m_destPort); if( hasSourceAddress == false || hasDestAddress == false ) { + m_newRtpStream = true; rtpPacket->ToString(logMsg); - logMsg.Format("[%s] new RTP stream s%d: %s", - m_trackingId, channel, logMsg); + logMsg.Format("[%s] new RTP stream: %s", + m_trackingId, logMsg); LOG4CXX_INFO(m_log, logMsg); if(m_protocol == ProtSip && m_started) // make sure this only happens if ReportMetadata() already been called for the session @@ -2408,7 +2413,7 @@ void RtpSessions::SetEndpointExtension(CStdString& extension, struct in_addr* en // Create endpoint info for the new endpoint endpoint.reset(new EndpointInfo()); endpoint->m_extension = extension; - ACE_OS::memcpy(&endpoint->m_ip, endpointIp, sizeof(endpoint->m_ip)); + memcpy(&endpoint->m_ip, endpointIp, sizeof(endpoint->m_ip)); if(callId.size()) { endpoint->m_latestCallId = callId; diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.h b/orkaudio/audiocaptureplugins/voip/RtpSession.h index 2dd7f15..843ce57 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.h +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.h @@ -220,6 +220,7 @@ public: bool m_nonLookBackSessionStarted; bool m_onDemand; std::list m_otherIpAndPortMappings; + bool m_newRtpStream; private: void ProcessMetadataSip(RtpPacketInfoRef&); -- cgit v1.2.3 From 883488af414b51b547661b427aa377a1c505498f Mon Sep 17 00:00:00 2001 From: beg_g Date: Fri, 20 Nov 2009 16:31:36 +0000 Subject: Fixed bug where m_skinnyLastCallInfoTime is not set when the session is first created in ReportSkinnyCallInfo git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@652 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index 5fdca67..35846dc 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -1891,6 +1891,7 @@ void RtpSessions::ReportSkinnyCallInfo(SkCallInfoStruct* callInfo, IpHeaderStruc session->m_callId = callId; session->m_endPointIp = ipHeader->ip_dest; // CallInfo message always goes from CM to endpoint session->m_protocol = RtpSession::ProtSkinny; + session->m_skinnyLastCallInfoTime = ACE_OS::gettimeofday(); UpdateSessionWithCallInfo(callInfo, session); session->ReportSkinnyCallInfo(callInfo, ipHeader); -- cgit v1.2.3 From 455e0e4f8b8a9139b253eccc12e84732721abfc2 Mon Sep 17 00:00:00 2001 From: henrih Date: Tue, 24 Nov 2009 16:40:30 +0000 Subject: When SetMediaAddress() takes a media address from an older session, let the older session go into timeout rather than stop is straight away. This is useful for skinny internal calls where media address back and forth must not kill sessions with the best metadata. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@653 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index 35846dc..891a4b1 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -2182,7 +2182,7 @@ void RtpSessions::SetMediaAddress(RtpSessionRef& session, struct in_addr mediaIp logMsg.Format("[%s] on %s replaces [%s]", session->m_trackingId, mediaAddress, oldSession->m_trackingId); LOG4CXX_INFO(m_log, logMsg); - Stop(oldSession); + //Stop(oldSession); // Let the session go into timeout rather than stop is straight away, useful for skinny internal calls where media address back and forth must not kill sessions with the best metadata. } else { -- cgit v1.2.3 From a09aff6c20c932a0dfe5cbdf09fae4a0695b0a66 Mon Sep 17 00:00:00 2001 From: henrih Date: Tue, 24 Nov 2009 21:08:15 +0000 Subject: Added SkinnyCucm7Mode synonym for Cucm7_1Mode configuration parameter. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@654 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp index 216302e..447fc39 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp @@ -153,6 +153,7 @@ void VoIpConfig::Define(Serializer* s) s->BoolValue("SkinnyCallInfoStopsPrevious", m_skinnyCallInfoStopsPrevious); s->CsvValue("SkinnyReportTags", m_skinnyReportTags); s->BoolValue("Cucm7-1Mode", m_cucm7_1Mode); + s->BoolValue("SkinnyCucm7Mode", m_cucm7_1Mode); // synonym to the preceding line (Cucm7-1Mode) s->IntValue("SangomaRxTcpPortStart", m_sangomaRxTcpPortStart); s->IntValue("SangomaTxTcpPortStart", m_sangomaTxTcpPortStart); -- cgit v1.2.3 From bf511fd69435522beec7a19e2d74f565317006f7 Mon Sep 17 00:00:00 2001 From: henrih Date: Tue, 24 Nov 2009 21:42:38 +0000 Subject: Added SkinnyAllowMediaAddressTransfer configuration parameter. Default is false. When set, any new Skinny session can take the media address from an old session, even if the old session already has received RTP. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@655 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 8 +++++++- orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 2 ++ orkaudio/audiocaptureplugins/voip/VoIpConfig.h | 3 ++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index 891a4b1..ceda5f7 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -2177,13 +2177,19 @@ void RtpSessions::SetMediaAddress(RtpSessionRef& session, struct in_addr mediaIp if(oldSession.get()) { // A session exists on the same IP+port - if(oldSession->m_protocol == RtpSession::ProtRawRtp || oldSession->m_numRtpPackets == 0) + if(oldSession->m_protocol == RtpSession::ProtRawRtp || oldSession->m_numRtpPackets == 0 || + (session->m_protocol == RtpSession::ProtSkinny && DLLCONFIG.m_skinnyAllowMediaAddressTransfer) ) { logMsg.Format("[%s] on %s replaces [%s]", session->m_trackingId, mediaAddress, oldSession->m_trackingId); LOG4CXX_INFO(m_log, logMsg); //Stop(oldSession); // Let the session go into timeout rather than stop is straight away, useful for skinny internal calls where media address back and forth must not kill sessions with the best metadata. } + else if(oldSession->m_trackingId.Equals(session->m_trackingId)) + { + // Old and new are the same session, do nothing + doChangeMediaAddress = false; + } else { doChangeMediaAddress = false; diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp index 447fc39..6263660 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp @@ -71,6 +71,7 @@ VoIpConfig::VoIpConfig() m_skinnyNameAsLocalParty = false; m_skinnyCallInfoStopsPrevious = false; m_cucm7_1Mode = false; + m_skinnyAllowMediaAddressTransfer = false; m_sangomaEnable = false; m_sangomaRxTcpPortStart = 0; @@ -154,6 +155,7 @@ void VoIpConfig::Define(Serializer* s) s->CsvValue("SkinnyReportTags", m_skinnyReportTags); s->BoolValue("Cucm7-1Mode", m_cucm7_1Mode); s->BoolValue("SkinnyCucm7Mode", m_cucm7_1Mode); // synonym to the preceding line (Cucm7-1Mode) + s->BoolValue("SkinnyAllowMediaAddressTransfer", m_skinnyAllowMediaAddressTransfer); s->IntValue("SangomaRxTcpPortStart", m_sangomaRxTcpPortStart); s->IntValue("SangomaTxTcpPortStart", m_sangomaTxTcpPortStart); diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h index 5bdadca..ade0ff7 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h @@ -102,13 +102,14 @@ public: bool m_skinnyIgnoreStopMediaTransmission; bool m_skinnyIgnoreOpenReceiveChannelAck; - bool m_skinnyDynamicMediaAddress; + bool m_skinnyDynamicMediaAddress; // Controls whether a single session can have a changing media address bool m_skinnyAllowCallInfoUpdate; bool m_skinnyAllowLateCallInfo; bool m_skinnyNameAsLocalParty; bool m_skinnyCallInfoStopsPrevious; bool m_cucm7_1Mode; std::list m_skinnyReportTags; + bool m_skinnyAllowMediaAddressTransfer; // Controls whether a new session (new CallInfo) can take a media address away from an existing session that has already received RTP. std::list m_dnisNumbers; std::list m_sipExtractFields; -- cgit v1.2.3 From ccc632e59adaa4bdb44905a7291dbecae45dd33e Mon Sep 17 00:00:00 2001 From: henrih Date: Fri, 27 Nov 2009 17:34:40 +0000 Subject: Removed "local" parameter from the InitMsg, since we do not yet implement a proper mechanism for determining it. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@656 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkbasecxx/messages/InitMsg.cpp | 2 -- orkbasecxx/messages/InitMsg.h | 2 -- 2 files changed, 4 deletions(-) diff --git a/orkbasecxx/messages/InitMsg.cpp b/orkbasecxx/messages/InitMsg.cpp index 35a03be..f5de4a5 100644 --- a/orkbasecxx/messages/InitMsg.cpp +++ b/orkbasecxx/messages/InitMsg.cpp @@ -18,7 +18,6 @@ InitMsg::InitMsg() m_tcpPort = 59140; m_fileServePort = 8080; m_streamingPort = 59120; - m_local = false; m_sshPort = 22; } @@ -37,7 +36,6 @@ void InitMsg::Define(Serializer* s) s->StringValue(SERVE_PATH_PARAM, m_servePath); s->StringValue(ABSOLUTE_PATH_PARAM, m_absolutePath); s->IntValue(STREAMING_PORT_PARAM, m_streamingPort); - s->BoolValue(LOCAL_PARAM, m_local); s->StringValue(USERNAME_PARAM, m_username); s->StringValue(PASSWORD_PARAM, m_password); s->IntValue(SSH_PORT_PARAM, m_sshPort); diff --git a/orkbasecxx/messages/InitMsg.h b/orkbasecxx/messages/InitMsg.h index 27e3ed3..f594829 100644 --- a/orkbasecxx/messages/InitMsg.h +++ b/orkbasecxx/messages/InitMsg.h @@ -23,7 +23,6 @@ #define SERVE_PATH_PARAM "servepath" #define ABSOLUTE_PATH_PARAM "absolutepath" #define STREAMING_PORT_PARAM "streamingport" -#define LOCAL_PARAM "local" #define USERNAME_PARAM "username" #define PASSWORD_PARAM "password" #define SSH_PORT_PARAM "sshport" @@ -50,7 +49,6 @@ public: CStdString m_servePath; CStdString m_absolutePath; int m_streamingPort; - bool m_local; CStdString m_username; CStdString m_password; int m_sshPort; -- cgit v1.2.3 From 9f7eba0fec07b1c23bb40f3d5e82ccebbca11c55 Mon Sep 17 00:00:00 2001 From: henrih Date: Fri, 27 Nov 2009 18:07:45 +0000 Subject: Increased the amount of log history retained by default. orkaudio.log.x now has 30 files and messages.log.x now has 10 files. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@657 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/logging-linux-template.properties | 21 +++++++++++---------- orkaudio/logging-template.properties | 21 +++++++++++---------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/orkaudio/logging-linux-template.properties b/orkaudio/logging-linux-template.properties index f57ef38..a0b50ad 100644 --- a/orkaudio/logging-linux-template.properties +++ b/orkaudio/logging-linux-template.properties @@ -13,7 +13,7 @@ log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n log4j.appender.main=org.apache.log4j.RollingFileAppender log4j.appender.main.File=/var/log/orkaudio/orkaudio.log log4j.appender.main.MaxFileSize=5000KB -log4j.appender.main.MaxBackupIndex=10 +log4j.appender.main.MaxBackupIndex=30 log4j.appender.main.layout=org.apache.log4j.PatternLayout log4j.appender.main.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n @@ -21,7 +21,7 @@ log4j.appender.main.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n log4j.appender.messages=org.apache.log4j.RollingFileAppender log4j.appender.messages.File=/var/log/orkaudio/messages.log log4j.appender.messages.MaxFileSize=5000KB -log4j.appender.messages.MaxBackupIndex=2 +log4j.appender.messages.MaxBackupIndex=10 log4j.appender.messages.layout=org.apache.log4j.PatternLayout log4j.appender.messages.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n @@ -37,11 +37,12 @@ log4j.appender.tapelist.layout.ConversionPattern=%m%n log4j.rootLogger=INFO, main, stdout log4j.logger.reporting=INFO, messages log4j.logger.tapelist=INFO, tapelist -log4j.logger.rtpringbuffer=INFO -log4j.logger.packet=INFO -log4j.logger.packet.rtp=INFO -log4j.logger.packet.skinny=INFO -log4j.logger.packet.sip=INFO -log4j.logger.rtpsessions=INFO -log4j.logger.rtpsession=INFO -log4j.logger.sipextraction=INFO +# Uncomment one or more of the following to get more detailed logging +#log4j.logger.rtpringbuffer=DEBUG +#log4j.logger.packet=DEBUG +#log4j.logger.packet.rtp=DEBUG +#log4j.logger.packet.skinny=DEBUG +#log4j.logger.packet.sip=DEBUG +#log4j.logger.rtpsessions=DEBUG +#log4j.logger.rtpsession=DEBUG +#log4j.logger.sipextraction=DEBUG diff --git a/orkaudio/logging-template.properties b/orkaudio/logging-template.properties index a950bd1..2a9b8f7 100644 --- a/orkaudio/logging-template.properties +++ b/orkaudio/logging-template.properties @@ -13,7 +13,7 @@ log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n log4j.appender.main=org.apache.log4j.RollingFileAppender log4j.appender.main.File=orkaudio.log log4j.appender.main.MaxFileSize=5000KB -log4j.appender.main.MaxBackupIndex=10 +log4j.appender.main.MaxBackupIndex=30 log4j.appender.main.layout=org.apache.log4j.PatternLayout log4j.appender.main.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n @@ -21,7 +21,7 @@ log4j.appender.main.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n log4j.appender.messages=org.apache.log4j.RollingFileAppender log4j.appender.messages.File=messages.log log4j.appender.messages.MaxFileSize=5000KB -log4j.appender.messages.MaxBackupIndex=2 +log4j.appender.messages.MaxBackupIndex=10 log4j.appender.messages.layout=org.apache.log4j.PatternLayout log4j.appender.messages.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n @@ -37,11 +37,12 @@ log4j.appender.tapelist.layout.ConversionPattern=%m%n log4j.rootLogger=INFO, main, stdout log4j.logger.reporting=INFO, messages log4j.logger.tapelist=INFO, tapelist -log4j.logger.rtpringbuffer=INFO -log4j.logger.packet=INFO -log4j.logger.packet.rtp=INFO -log4j.logger.packet.skinny=INFO -log4j.logger.packet.sip=INFO -log4j.logger.rtpsessions=INFO -log4j.logger.rtpsession=INFO -log4j.logger.sipextraction=INFO +# Uncomment one or more of the following to get more detailed logging +#log4j.logger.rtpringbuffer=DEBUG +#log4j.logger.packet=DEBUG +#log4j.logger.packet.rtp=DEBUG +#log4j.logger.packet.skinny=DEBUG +#log4j.logger.packet.sip=DEBUG +#log4j.logger.rtpsessions=DEBUG +#log4j.logger.rtpsession=DEBUG +#log4j.logger.sipextraction=DEBUG -- cgit v1.2.3 From e727d533a411c5625d6c1361f3b5ee4bb514cb89 Mon Sep 17 00:00:00 2001 From: beg_g Date: Fri, 27 Nov 2009 19:15:20 +0000 Subject: Added support for captured packets of with 802.1Q Virtual LAN headers git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@658 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h | 2 +- orkaudio/audiocaptureplugins/voip/VoIp.cpp | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h index 5ea6f45..cf88d90 100644 --- a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h +++ b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h @@ -26,7 +26,7 @@ typedef struct { unsigned char destinationMac[6]; unsigned char sourceMac[6]; - unsigned short length; + unsigned short type; } EthernetHeaderStruct; diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index 55a5443..2ee0b95 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -3046,7 +3046,17 @@ void HandlePacket(u_char *param, const struct pcap_pkthdr *header, const u_char } EthernetHeaderStruct* ethernetHeader = (EthernetHeaderStruct *)pkt_data; - IpHeaderStruct* ipHeader = (IpHeaderStruct*)((char*)ethernetHeader + sizeof(EthernetHeaderStruct)); + IpHeaderStruct* ipHeader = NULL; + + if(ntohs(ethernetHeader->type) == 0x8100) + { + ipHeader = (IpHeaderStruct*)((char*)ethernetHeader + sizeof(EthernetHeaderStruct) + 4); + } + else + { + ipHeader = (IpHeaderStruct*)((char*)ethernetHeader + sizeof(EthernetHeaderStruct)); + } + if(ipHeader->ip_v != 4) // sanity check, is it an IP packet v4 { // If not, the IP packet might have been captured from multiple interfaces using the tcpdump -i switch -- cgit v1.2.3