summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins/voip/VoIp.cpp
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2007-08-16 16:16:43 +0000
committerHenri Herscher <henri@oreka.org>2007-08-16 16:16:43 +0000
commit7e2208db162e8b8100cc20efce1fb16cb9caec40 (patch)
tree0ff05812c04551d5a8cab5c4ec61bb2a103bfe3d /orkaudio/audiocaptureplugins/voip/VoIp.cpp
parentbbf71ad0d6ec0795bbeb38dd8ec9dc5e5d00792a (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.cpp34
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)
;
}
+