diff options
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp')
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIp.cpp | 61 |
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) { |