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 --- orkaudio/audiocaptureplugins/voip/VoIp.cpp | 206 ++++++++++++++++++++++++++++- 1 file changed, 205 insertions(+), 1 deletion(-) (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp') 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); } } -- 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(-) (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp') 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: 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(-) (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp') 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