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/audiocaptureplugins/voip/VoIp.cpp | |
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/audiocaptureplugins/voip/VoIp.cpp')
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIp.cpp | 65 |
1 files changed, 61 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) |