summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins/voip/VoIp.cpp
diff options
context:
space:
mode:
authorGerald Begumisa <ben_g@users.sourceforge.net>2007-09-24 16:31:21 +0000
committerGerald Begumisa <ben_g@users.sourceforge.net>2007-09-24 16:31:21 +0000
commit08cedb1557df91c1758d4708e9da047e05fca452 (patch)
tree67f9328dde29b39eb92e3e84fa09ba2225016b89 /orkaudio/audiocaptureplugins/voip/VoIp.cpp
parent5a418de8f295d76e16873a0f1a8314e2a9fa6745 (diff)
Added support for option 'SipReportFullAddress', which defaults to false in config.xml. When set to true, this results in the full SIP addresses ('user@hostname') being reported as opposed to just 'user'.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@495 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp')
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp65
1 files changed, 61 insertions, 4 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
index 2d3faba..1b99504 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
@@ -196,6 +196,35 @@ char* SkipWhitespaces(char* in, char* limit)
return c;
}
+void GrabSipUserAddress(char* in, char* limit, CStdString& out)
+{
+ char* userStart = SkipWhitespaces(in, limit);
+ bool passedUserPart = false;
+
+ if(userStart >= limit)
+ {
+ return;
+ }
+
+ /* Taken from RFC 1035, section 2.3.1 recommendation for
+ * domain names, we will add checks for '.' and '@' to allow
+ * the host part */
+ for(char* c = userStart; (ACE_OS::ace_isalnum(*c) || *c == '#' || *c == '@' || *c == '.' || *c == '-' || *c == ':') && c < limit ; c = c+1)
+ {
+ if(*c == '@' && !passedUserPart)
+ {
+ passedUserPart = true;
+ }
+
+ if(*c == ':' && passedUserPart)
+ {
+ break;
+ }
+
+ out += *c;
+ }
+}
+
void GrabSipUriUser(char* in, char* limit, CStdString& out)
{
char* userStart = SkipWhitespaces(in, limit);
@@ -1486,11 +1515,25 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader
char* sipUser = memFindAfter("sip:", fromField, fromFieldEnd);
if(sipUser)
{
- GrabSipUriUser(sipUser, fromFieldEnd, info->m_from);
+ if(DLLCONFIG.m_sipReportFullAddress)
+ {
+ GrabSipUserAddress(sipUser, fromFieldEnd, info->m_from);
+ }
+ else
+ {
+ GrabSipUriUser(sipUser, fromFieldEnd, info->m_from);
+ }
}
else
{
- GrabSipUriUser(fromField, fromFieldEnd, info->m_from);
+ if(DLLCONFIG.m_sipReportFullAddress)
+ {
+ GrabSipUserAddress(fromField, fromFieldEnd, info->m_from);
+ }
+ else
+ {
+ GrabSipUriUser(fromField, fromFieldEnd, info->m_from);
+ }
}
}
if(toField)
@@ -1502,11 +1545,25 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader
char* sipUser = memFindAfter("sip:", toField, toFieldEnd);
if(sipUser)
{
- GrabSipUriUser(sipUser, toFieldEnd, info->m_to);
+ if(DLLCONFIG.m_sipReportFullAddress)
+ {
+ GrabSipUserAddress(sipUser, toFieldEnd, info->m_to);
+ }
+ else
+ {
+ GrabSipUriUser(sipUser, toFieldEnd, info->m_to);
+ }
}
else
{
- GrabSipUriUser(toField, toFieldEnd, info->m_to);
+ if(DLLCONFIG.m_sipReportFullAddress)
+ {
+ GrabSipUserAddress(toField, toFieldEnd, info->m_to);
+ }
+ else
+ {
+ GrabSipUriUser(toField, toFieldEnd, info->m_to);
+ }
}
}
if(callIdField)