summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp65
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp2
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.h1
3 files changed, 64 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)
diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
index fdad117..89ab57b 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
@@ -41,6 +41,7 @@ VoIpConfig::VoIpConfig()
m_sipOverTcpSupport = false; // Disabled by default
m_sipLogFailedCalls = false;
m_sipUse200OkMediaAddress = false;
+ m_sipReportFullAddress = false;
m_useMacIfNoLocalParty = false; // Uses IP address by default
@@ -86,6 +87,7 @@ void VoIpConfig::Define(Serializer* s)
s->BoolValue("SipOverTcpSupport", m_sipOverTcpSupport);
s->BoolValue("SipLogFailedCalls", m_sipLogFailedCalls);
s->BoolValue("SipUse200OkMediaAddress", m_sipUse200OkMediaAddress);
+ s->BoolValue("SipReportFullAddress", m_sipReportFullAddress);
s->BoolValue("UseMacIfNoLocalParty", m_useMacIfNoLocalParty);
s->BoolValue("SkinnyIgnoreStopMediaTransmission", m_skinnyIgnoreStopMediaTransmission);
diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
index 2771732..c1959a4 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
+++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
@@ -75,6 +75,7 @@ public:
bool m_sipOverTcpSupport;
bool m_sipLogFailedCalls;
bool m_sipUse200OkMediaAddress;
+ bool m_sipReportFullAddress;
bool m_useMacIfNoLocalParty;
bool m_skinnyIgnoreStopMediaTransmission;