summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins/voip/VoIp.cpp
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2007-03-13 02:13:45 +0000
committerHenri Herscher <henri@oreka.org>2007-03-13 02:13:45 +0000
commitf78cc4927fd5f075ac9785f06c1dd7deb40b9703 (patch)
tree54ca1527f915cbdc3a5ae6dc0538910e03ecef40 /orkaudio/audiocaptureplugins/voip/VoIp.cpp
parent08aa4bfb634b5fcfb0343f72b7778e04c905198b (diff)
x-Local-Extension SIP field is used for local party if present in outgoing SIP INVITE.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@430 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp')
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp33
1 files changed, 21 insertions, 12 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
index fd09335..4148e16 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
@@ -1046,12 +1046,12 @@ bool TryRtp(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, UdpH
bool TrySipBye(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, UdpHeaderStruct* udpHeader, u_char* udpPayload)
{
bool result = false;
- int udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct));
- /* Judgine from the memcmp() below, we need the UDP payload
- * length to be at least 3 bytes. -- Gerald */
- if(udp_act_payload_len < 3)
- return false; /* Frame too small */
+ int udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct));
+ if(udp_act_payload_len < 3)
+ {
+ return false; // Frame too small
+ }
if (memcmp("BYE", (void*)udpPayload, 3) == 0)
{
@@ -1077,13 +1077,12 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader
{
bool result = false;
bool drop = false;
- int udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct));
-
- /* Judgine from the memcmp() below, we need the UDP payload
- * length to be at least 3 bytes. -- Gerald */
- if(udp_act_payload_len < 6)
- return false; /* Frame too small */
-
+
+ int udp_act_payload_len = (ntohs(udpHeader->len)-sizeof(UdpHeaderStruct));
+ if(udp_act_payload_len < 6)
+ {
+ return false; // Frame too small
+ }
if (memcmp("INVITE", (void*)udpPayload, 6) == 0)
{
result = true;
@@ -1096,6 +1095,7 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader
char* fromField = memFindAfter("From:", (char*)udpPayload, sipEnd);
char* toField = memFindAfter("To:", (char*)udpPayload, sipEnd);
char* callIdField = memFindAfter("Call-ID:", (char*)udpPayload, sipEnd);
+ char* localExtensionField = memFindAfter("x-Local-Extension:", (char*)udpPayload, sipEnd);
char* audioField = NULL;
char* connectionAddressField = NULL;
@@ -1142,6 +1142,15 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader
audioField = memFindAfter("m=audio ", callIdField, sipEnd);
connectionAddressField = memFindAfter("c=IN IP4 ", callIdField, sipEnd);
}
+ if(localExtensionField)
+ {
+ CStdString localExtension;
+ GrabTokenSkipLeadingWhitespaces(localExtensionField, sipEnd, localExtension);
+ if(localExtension.size() > 0)
+ {
+ info->m_from = localExtension;
+ }
+ }
if(audioField)
{
GrabToken(audioField, sipEnd, info->m_fromRtpPort);