diff options
author | Henri Herscher <henri@oreka.org> | 2007-08-16 16:16:43 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2007-08-16 16:16:43 +0000 |
commit | 7e2208db162e8b8100cc20efce1fb16cb9caec40 (patch) | |
tree | 0ff05812c04551d5a8cab5c4ec61bb2a103bfe3d /orkaudio/audiocaptureplugins/voip/VoIp.cpp | |
parent | bbf71ad0d6ec0795bbeb38dd8ec9dc5e5d00792a (diff) |
Character '#' is now allowed as part of a SIP URI username.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@466 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp')
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIp.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index b4ecff7..863cb6c 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -186,6 +186,31 @@ void GrabAlphaNumTokenSkipLeadingWhitespaces(char* in, char* limit, CStdString& GrabAlphaNumToken(c, limit, out); } +char* SkipWhitespaces(char* in, char* limit) +{ + char* c = in; + while(*c == 0x20 && (*c != '\0' && *c != 0x0D && *c != 0x0A) && c < limit) + { + c = c+1; + } + return c; +} + +void GrabSipUriUser(char* in, char* limit, CStdString& out) +{ + char* userStart = SkipWhitespaces(in, limit); + if(userStart>=limit) + { + return; + } + // What stops a SIP URI user is a ':' (separating user from pwd) or an '@' (separating user from hostname) + // but no need to test for these as we only allow alphanums and '#' + for(char* c = userStart; (ACE_OS::ace_isalnum(*c) || *c == '#') && c < limit ; c = c+1) + { + out += *c; + } +} + void GrabString(char* start, char* stop, CStdString& out) { @@ -1374,11 +1399,11 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader char* sipUser = memFindAfter("sip:", fromField, fromFieldEnd); if(sipUser) { - GrabAlphaNumTokenSkipLeadingWhitespaces(sipUser, fromFieldEnd, info->m_from); + GrabSipUriUser(sipUser, fromFieldEnd, info->m_from); } else { - GrabAlphaNumTokenSkipLeadingWhitespaces(fromField, fromFieldEnd, info->m_from); + GrabSipUriUser(fromField, fromFieldEnd, info->m_from); } } if(toField) @@ -1390,11 +1415,11 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader char* sipUser = memFindAfter("sip:", toField, toFieldEnd); if(sipUser) { - GrabAlphaNumTokenSkipLeadingWhitespaces(sipUser, toFieldEnd, info->m_to); + GrabSipUriUser(sipUser, toFieldEnd, info->m_to); } else { - GrabAlphaNumTokenSkipLeadingWhitespaces(toField, toFieldEnd, info->m_to); + GrabSipUriUser(toField, toFieldEnd, info->m_to); } } if(callIdField) @@ -2313,3 +2338,4 @@ void __CDECL__ StopCapture(CStdString& party) ; } + |