summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-12-03 22:06:59 +0200
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-12-03 22:06:59 +0200
commit62bd277292494772b3b92ff9bd76dc64f80795db (patch)
treebedd48a44464d91f85f03782e52da34a2af2cd17
parentc40d8adf40f048e3a435fdc7c32f2cef42c5ea7c (diff)
parente727d533a411c5625d6c1361f3b5ee4bb514cb89 (diff)
Merge branch 'master' into autotoolsautotools
* Re-fixing build issues * add messages/InitMsg.h to be installed as well.
-rw-r--r--orkaudio/OrkAudio.cpp3
-rw-r--r--orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h4
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp243
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.h29
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp221
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp5
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.h4
-rw-r--r--orkaudio/logging-linux-template.properties21
-rw-r--r--orkaudio/logging-template.properties21
-rw-r--r--orkbasecxx/ConfigManager.cpp2
-rw-r--r--orkbasecxx/Makefile.am2
-rw-r--r--orkbasecxx/messages/InitMsg.cpp2
-rw-r--r--orkbasecxx/messages/InitMsg.h4
13 files changed, 499 insertions, 62 deletions
diff --git a/orkaudio/OrkAudio.cpp b/orkaudio/OrkAudio.cpp
index a272fd4..46ec9ac 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);
diff --git a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h
index b32e681..24043bb 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;
@@ -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 0d64a7a..4a9c39e 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()
@@ -88,6 +89,11 @@ void RtpSession::Stop()
}
}
+bool RtpSession::Stopped()
+{
+ return m_stopped;
+}
+
void RtpSession::ReportRtcpSrcDescription(RtcpSrcDescriptionPacketInfoRef& rtcpInfo)
{
if(!m_rtcpLocalParty)
@@ -107,6 +113,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 +164,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 +274,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 +301,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 +346,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 +381,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 +475,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);
}
@@ -1006,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;
@@ -1091,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
@@ -1184,13 +1200,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 +1577,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<CStdString, RtpSessionRef>::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<CStdString, RtpSessionRef>::iterator pair;
@@ -1630,19 +1674,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;
}
}
@@ -1652,6 +1697,7 @@ void RtpSessions::UpdateSessionWithCallInfo(SkCallInfoStruct* callInfo, RtpSessi
{
session->m_skinnyLineInstance = callInfo->lineInstance;
CStdString lp;
+ CStdString rp;
CStdString logMsg;
char szEndPointIp[16];
@@ -1662,12 +1708,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,22 +1723,90 @@ 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);
}
}
+bool RtpSessions::TrySkinnySession(RtpPacketInfoRef& rtpPacket, EndpointInfoRef& endpoint)
+{
+ std::map<unsigned int, EndpointInfoRef>::iterator pair;
+ std::map<CStdString, RtpSessionRef>::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);
@@ -1775,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);
@@ -2060,12 +2177,18 @@ 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);
+ //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
{
@@ -2276,7 +2399,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<unsigned int, EndpointInfoRef>::iterator pair;
EndpointInfoRef endpoint;
@@ -2287,12 +2410,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;
+ 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())
@@ -2301,19 +2433,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);
}
}
@@ -2612,6 +2746,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));
@@ -2649,6 +2791,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;
+ }
}
}
@@ -3100,6 +3271,24 @@ void SipInviteInfo::ToString(CStdString& string)
}
//==========================================================
+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()
{
m_senderIp.s_addr = 0;
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.h b/orkaudio/audiocaptureplugins/voip/RtpSession.h
index a205e63..843ce57 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<Sip302MovedTemporarilyInfo> Sip302MovedTemporarilyInfoRef;
+
class SipInviteInfo
{
public:
@@ -133,6 +154,8 @@ class EndpointInfo
{
public:
CStdString m_extension;
+ CStdString m_latestCallId;
+ struct in_addr m_ip;
};
typedef boost::shared_ptr<EndpointInfo> EndpointInfoRef;
@@ -165,6 +188,7 @@ public:
void ReportSkinnyCallInfo(SkCallInfoStruct*, IpHeaderStruct* ipHeader);
CStdString GetOrkUid();
void MarkAsOnDemand();
+ bool Stopped();
CStdString m_capturePort;
CStdString m_trackingId;
@@ -196,6 +220,7 @@ public:
bool m_nonLookBackSessionStarted;
bool m_onDemand;
std::list<CStdString> m_otherIpAndPortMappings;
+ bool m_newRtpStream;
private:
void ProcessMetadataSip(RtpPacketInfoRef&);
@@ -264,7 +289,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);
@@ -273,6 +298,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);
@@ -300,6 +326,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<CStdString, RtpSessionRef> m_byIpAndPort;
std::map<CStdString, RtpSessionRef> m_byCallId;
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
index e78955b..ae174dc 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
@@ -685,7 +685,6 @@ bool TryIax2New(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader,
* callee (Called Number) */
if(!ies.caller) {
- /* Explicit casts to avoid compiler warnings: */
ies.caller = (char*)"WITHELD";
} else {
if(!strlen(ies.caller)) {
@@ -1375,8 +1374,6 @@ 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((rtpHeader->pt <= 34 && rtpHeader->pt != 13) || (rtpHeader->pt >= 97 && rtpHeader->pt < 127) )
@@ -2142,6 +2139,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;
@@ -2852,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
@@ -2960,7 +3164,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..6263660 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;
@@ -70,6 +71,7 @@ VoIpConfig::VoIpConfig()
m_skinnyNameAsLocalParty = false;
m_skinnyCallInfoStopsPrevious = false;
m_cucm7_1Mode = false;
+ m_skinnyAllowMediaAddressTransfer = false;
m_sangomaEnable = false;
m_sangomaRxTcpPortStart = 0;
@@ -131,6 +133,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);
@@ -151,6 +154,8 @@ 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->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 d853b85..ade0ff7 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;
@@ -101,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<CStdString> 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<CStdString> m_dnisNumbers;
std::list<CStdString> m_sipExtractFields;
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
diff --git a/orkbasecxx/ConfigManager.cpp b/orkbasecxx/ConfigManager.cpp
index 1ae39fc..4793058 100644
--- a/orkbasecxx/ConfigManager.cpp
+++ b/orkbasecxx/ConfigManager.cpp
@@ -48,7 +48,7 @@ void ConfigManager::Initialize()
try
{
- char* cfgFilename = NULL;
+ char* cfgFilename = NULL;
const char* cfgEnvPath = "";
int cfgAlloc = 0;
diff --git a/orkbasecxx/Makefile.am b/orkbasecxx/Makefile.am
index 670a88c..4a6d8e9 100644
--- a/orkbasecxx/Makefile.am
+++ b/orkbasecxx/Makefile.am
@@ -36,7 +36,7 @@ nobase_pkginclude_HEADERS = \
messages/TapeMsg.h messages/PingMsg.h messages/DeleteTapeMsg.h \
messages/CaptureMsg.h messages/TestMsg.h messages/RecordMsg.h \
messages/SyncMessage.h messages/AsyncMessage.h \
- messages/Message.h \
+ messages/Message.h messages/InitMsg.h \
serializers/Serializer.h
pkginclude_HEADERS = \
AudioCapture.h Config.h MultiThreadedServer.h Object.h OrkBase.h \
diff --git a/orkbasecxx/messages/InitMsg.cpp b/orkbasecxx/messages/InitMsg.cpp
index 21ce7ef..9137192 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 f0e1584..f594829 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 "servicetype"
#define TCP_PORT_PARAM "tcpport"
#define PROTOCOL_PARAM "protocol"
#define FILE_SERVE_PORT_PARAM "fileserveport"
@@ -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;