summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)
;
}
+