summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins/voip/VoIp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp')
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
index 63fa355..66604dc 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
@@ -119,6 +119,18 @@ void memToHex(unsigned char* input, size_t len, CStdString&output)
}
}
+static char* memFindStr(char* toFind, char* start, char* stop)
+{
+ for(char * ptr = start; (ptr<stop) && (ptr != NULL); ptr = (char *)memchr(ptr+1, toFind[0],(stop-ptr)))
+ {
+ if(strncasecmp(toFind, ptr, (strlen(toFind) > (stop-ptr) ? (stop-ptr) : strlen(toFind))) == 0)
+ {
+ return (ptr);
+ }
+ }
+ return NULL;
+}
+
// find the address that follows the given search string between start and stop pointers - case insensitive
char* memFindAfter(char* toFind, char* start, char* stop)
{
@@ -241,6 +253,45 @@ void GrabSipUriDomain(char* in, char* limit, CStdString& out)
}
}
+void GrabSipName(char* in, char* limit, CStdString& out)
+{
+ char* nameStart = SkipWhitespaces(in, limit);
+ char* nameEnd = memFindStr("<sip:", nameStart, limit);
+
+ if(nameStart >= limit)
+ {
+ return;
+ }
+
+ if(nameEnd == NULL)
+ {
+ return;
+ }
+
+ if(nameEnd <= nameStart)
+ {
+ return;
+ }
+
+ // Get all characters before the <sip:
+ for(char *c = nameStart; c < nameEnd; c = c+1)
+ {
+ if(c == nameStart && *c == '"')
+ {
+ continue;
+ }
+ if(c+2 == nameEnd && *c == '"')
+ {
+ break;
+ }
+ if(c+1 == nameEnd && *c == ' ')
+ {
+ break;
+ }
+ out += *c;
+ }
+}
+
void GrabSipUserAddress(char* in, char* limit, CStdString& out)
{
char* userStart = SkipWhitespaces(in, limit);
@@ -2026,6 +2077,11 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader
char* fromFieldEnd = memFindEOL(fromField, sipEnd);
+ if(DLLCONFIG.m_sipReportNamesAsTags == true)
+ {
+ GrabSipName(fromField, fromFieldEnd, info->m_fromName);
+ }
+
char* sipUser = memFindAfter("sip:", fromField, fromFieldEnd);
if(sipUser)
{
@@ -2058,6 +2114,11 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader
char* toFieldEnd = GrabLine(toField, sipEnd, to);
LOG4CXX_DEBUG(s_sipExtractionLog, "to: " + to);
+ if(DLLCONFIG.m_sipReportNamesAsTags == true)
+ {
+ GrabSipName(toField, toFieldEnd, info->m_toName);
+ }
+
char* sipUser = memFindAfter("sip:", toField, toFieldEnd);
if(sipUser)
{