diff options
author | Gerald Begumisa <ben_g@users.sourceforge.net> | 2007-09-24 16:31:21 +0000 |
---|---|---|
committer | Gerald Begumisa <ben_g@users.sourceforge.net> | 2007-09-24 16:31:21 +0000 |
commit | 08cedb1557df91c1758d4708e9da047e05fca452 (patch) | |
tree | 67f9328dde29b39eb92e3e84fa09ba2225016b89 /orkaudio | |
parent | 5a418de8f295d76e16873a0f1a8314e2a9fa6745 (diff) |
Added support for option 'SipReportFullAddress', which defaults to false in config.xml. When set to true, this results in the full SIP addresses ('user@hostname') being reported as opposed to just 'user'.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@495 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio')
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIp.cpp | 65 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 2 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIpConfig.h | 1 |
3 files changed, 64 insertions, 4 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index 2d3faba..1b99504 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -196,6 +196,35 @@ char* SkipWhitespaces(char* in, char* limit) return c; } +void GrabSipUserAddress(char* in, char* limit, CStdString& out) +{ + char* userStart = SkipWhitespaces(in, limit); + bool passedUserPart = false; + + if(userStart >= limit) + { + return; + } + + /* Taken from RFC 1035, section 2.3.1 recommendation for + * domain names, we will add checks for '.' and '@' to allow + * the host part */ + for(char* c = userStart; (ACE_OS::ace_isalnum(*c) || *c == '#' || *c == '@' || *c == '.' || *c == '-' || *c == ':') && c < limit ; c = c+1) + { + if(*c == '@' && !passedUserPart) + { + passedUserPart = true; + } + + if(*c == ':' && passedUserPart) + { + break; + } + + out += *c; + } +} + void GrabSipUriUser(char* in, char* limit, CStdString& out) { char* userStart = SkipWhitespaces(in, limit); @@ -1486,11 +1515,25 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader char* sipUser = memFindAfter("sip:", fromField, fromFieldEnd); if(sipUser) { - GrabSipUriUser(sipUser, fromFieldEnd, info->m_from); + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(sipUser, fromFieldEnd, info->m_from); + } + else + { + GrabSipUriUser(sipUser, fromFieldEnd, info->m_from); + } } else { - GrabSipUriUser(fromField, fromFieldEnd, info->m_from); + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(fromField, fromFieldEnd, info->m_from); + } + else + { + GrabSipUriUser(fromField, fromFieldEnd, info->m_from); + } } } if(toField) @@ -1502,11 +1545,25 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader char* sipUser = memFindAfter("sip:", toField, toFieldEnd); if(sipUser) { - GrabSipUriUser(sipUser, toFieldEnd, info->m_to); + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(sipUser, toFieldEnd, info->m_to); + } + else + { + GrabSipUriUser(sipUser, toFieldEnd, info->m_to); + } } else { - GrabSipUriUser(toField, toFieldEnd, info->m_to); + if(DLLCONFIG.m_sipReportFullAddress) + { + GrabSipUserAddress(toField, toFieldEnd, info->m_to); + } + else + { + GrabSipUriUser(toField, toFieldEnd, info->m_to); + } } } if(callIdField) diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp index fdad117..89ab57b 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp @@ -41,6 +41,7 @@ VoIpConfig::VoIpConfig() m_sipOverTcpSupport = false; // Disabled by default m_sipLogFailedCalls = false; m_sipUse200OkMediaAddress = false; + m_sipReportFullAddress = false; m_useMacIfNoLocalParty = false; // Uses IP address by default @@ -86,6 +87,7 @@ void VoIpConfig::Define(Serializer* s) s->BoolValue("SipOverTcpSupport", m_sipOverTcpSupport); s->BoolValue("SipLogFailedCalls", m_sipLogFailedCalls); s->BoolValue("SipUse200OkMediaAddress", m_sipUse200OkMediaAddress); + s->BoolValue("SipReportFullAddress", m_sipReportFullAddress); s->BoolValue("UseMacIfNoLocalParty", m_useMacIfNoLocalParty); s->BoolValue("SkinnyIgnoreStopMediaTransmission", m_skinnyIgnoreStopMediaTransmission); diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h index 2771732..c1959a4 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h @@ -75,6 +75,7 @@ public: bool m_sipOverTcpSupport; bool m_sipLogFailedCalls; bool m_sipUse200OkMediaAddress; + bool m_sipReportFullAddress; bool m_useMacIfNoLocalParty; bool m_skinnyIgnoreStopMediaTransmission; |