diff options
author | Gerald Begumisa <ben_g@users.sourceforge.net> | 2008-08-21 20:05:24 +0000 |
---|---|---|
committer | Gerald Begumisa <ben_g@users.sourceforge.net> | 2008-08-21 20:05:24 +0000 |
commit | 758c81485d816de9fbf76889979e6bd853f118dd (patch) | |
tree | ed8fe0011a66d22f9e277992cd7f7f92310e2725 | |
parent | 4d379dedb4894c89d8ce13ccd313e027cb5459a8 (diff) |
Adjusted the CCM5 packet parser to assume that Ccm5CallInfo packets have parties section of variable length.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@556 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.cpp | 9 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h | 2 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIp.cpp | 11 |
3 files changed, 15 insertions, 7 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.cpp b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.cpp index 660fd08..1e25a2a 100644 --- a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.cpp +++ b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.cpp @@ -154,6 +154,7 @@ bool SkinnyValidateCallInfo(SkCallInfoStruct* sci, u_char* packetEnd) bool SkinnyValidateCcm5CallInfo(SkCcm5CallInfoStruct *sci, u_char* packetEnd) { + int partiesLen = 0; bool valid = true; if(((u_char*)sci + sizeof(SkCcm5CallInfoStruct)) > packetEnd) { @@ -163,19 +164,23 @@ bool SkinnyValidateCcm5CallInfo(SkCcm5CallInfoStruct *sci, u_char* packetEnd) { valid = false; } + partiesLen = (int)packetEnd - (int)sci - sizeof(SkCcm5CallInfoStruct); if(valid) { - valid = checkPartyString(sci->parties, SKINNY_CCM5_PARTIES_BLOCK_SIZE); + valid = checkPartyString(sci->parties, partiesLen); } if(valid) { // Find the first null char separating the calling and called parties (at this point, we know there's one) char* nullChar = (char*)&sci->parties; + int skip = 0; while(*nullChar != '\0') { nullChar++; + skip++; } - valid = checkPartyString(nullChar+1, SKINNY_CCM5_PARTIES_BLOCK_SIZE); + skip += 1; + valid = checkPartyString(nullChar+1, (partiesLen - skip)); } return valid; } diff --git a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h index 105940d..ce33534 100644 --- a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h +++ b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h @@ -166,7 +166,7 @@ typedef struct unsigned long callId; unsigned long callType; char unknown2[20]; - char parties[SKINNY_CCM5_PARTIES_BLOCK_SIZE]; + char parties[0]; } SkCcm5CallInfoStruct; bool SkinnyValidateCcm5CallInfo(SkCcm5CallInfoStruct *, u_char* packetEnd); diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index 418b685..1f8620b 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -1917,10 +1917,13 @@ void HandleSkinnyMessage(SkinnyHeaderStruct* skinnyHeader, IpHeaderStruct* ipHea { // Extract Calling and Called number. CStdString callingParty; + int partiesLen = 0; char* parties = (char*)(&ccm5CallInfo->parties); - GrabToken(parties, parties+SKINNY_CCM5_PARTIES_BLOCK_SIZE, callingParty); + + partiesLen = (int)packetEnd - (int)ccm5CallInfo - sizeof(SkCcm5CallInfoStruct); + GrabToken(parties, parties+partiesLen, callingParty); CStdString calledParty; - GrabToken(parties+callingParty.size()+1, parties+SKINNY_CCM5_PARTIES_BLOCK_SIZE, calledParty); + GrabToken(parties+callingParty.size()+1, parties+partiesLen, calledParty); CStdString callingPartyName; if(DLLCONFIG.m_skinnyNameAsLocalParty) @@ -1930,10 +1933,10 @@ void HandleSkinnyMessage(SkinnyHeaderStruct* skinnyHeader, IpHeaderStruct* ipHea char *partiesPtr = NULL; partiesPtr = parties; - while(tokenNr < 9 && partiesPtr < parties+SKINNY_CCM5_PARTIES_BLOCK_SIZE) + while(tokenNr < 9 && partiesPtr < parties+partiesLen) { callingPartyName = ""; - GrabTokenAcceptSpace(partiesPtr, parties+SKINNY_CCM5_PARTIES_BLOCK_SIZE, callingPartyName); + GrabTokenAcceptSpace(partiesPtr, parties+partiesLen, callingPartyName); partiesPtr += callingPartyName.size() + 1; tokenNr += 1; } |