doubango/trunk/xcode/iPhoneOS/tinySIGCOMPTest/AppDelegate.m

1139 lines
27 KiB
Objective-C

#import "AppDelegate.h"
#include "tcomp_manager.h" /* TinySIGCOMP API functions. */
#include "tsk_debug.h"
#define TORTURES 0
#if TORTURES
#define STREAM_ID 1983
#define COMPARTMENT_ID "urn:uuid:2e5fdc76-00be-4314-8202-1116fa82a473"
#define OUTPUT_BUFFER_SIZE 2000
#define DECOMPRESSION_MEMORY_SIZE 65530
#define RUN_TEST_LOOP 1
#define RUN_TEST_ALL 1
#define RUN_TEST_NO 68
#include "rfc4465_torture_tests.h"
struct_torture_test tests[] =
{
{ //*** 0***
"A.1.1. Bit Manipulation",
RFC4465_A_1_1__Bit_Manipulation,
170,
"\x01\x50\x00\x00\xfe\xbf\x00\x00",
22
}
,
{ //*** 1***
"A.1.2. Arithmetic",
RFC4465_A_1_2__Arithmetic,
174,
"\x00\x00\x00\x00\x00\x00\x00\x04",
25
}
,
{
//*** 2***
"A.1.3. Sorting",
RFC4465_A_1_3__Sorting,
223,
"\x46\x6f\x72\x64\x2c\x20\x79\x6f\x75\x27\x72\x65\x20\x74\x75\x72\x6e\x69\x6e\x67"
"\x20\x69\x6e\x74\x6f\x20\x61\x20\x70\x65\x6e\x67\x75\x69\x6e\x2e\x20\x53\x74\x6f"
"\x70\x20\x69\x74\x2e",
371
}
,
{
//*** 3**
"A.1.4. SHA-1",
RFC4465_A_1_4__SHA1,
138,
"\xa9\x99\x3e\x36\x47\x06\x81\x6a\xba\x3e\x25\x71\x78\x50\xc2\x6c\x9c\xd0\xd8\x9d"
"\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1"
"\x12\xff\x34\x7b\x4f\x27\xd6\x9e\x1f\x32\x8e\x6f\x4b\x55\x73\xe3\x66\x6e\x12\x2f"
"\x4f\x46\x04\x52\xeb\xb5\x63\x93\x4f\x46\x04\x52\xeb\xb5\x63\x93\x4f\x46\x04\x52",
17176
}
,
{
//*** 4**
"A.1.5. LOAD and MULTILOAD",
RFC4465_A_1_5__LOAD_and_MULTILOAD,
58,
"\x00\x84\x00\x84\x00\x86\x00\x86\x00\x2a\x00\x80\x00\x2a\x00\x2a",
36
}
,
{
//** 5**
"A.1.6. COPY",
RFC4465_A_1_6__COPY,
60,
"\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40"
"\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x41\x41\x41\x41\x41\x41\x41\x41"
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41"
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41"
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41"
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x55\x41"
"\x42\x43\x44\x43\x44",
365
}
,
{
//** 6**
"A.1.7. COPY-LITERAL and COPY-OFFSET",
RFC4465_A_1_7__COPY_LITERAL_and_COPY_OFFSET,
100,
"\x41\x41\x41\x41\x00\x61\x41\x41\x41\x41\x49\x4a\x41\x42\x43\x44\x49\x4a\x41\x42"
"\x00\x4a\x00\x4e\x47\x48\x48\x45\x46\x47\x47\x48\x45\x46",
216
}
,
{
//** 7**
"A.1.8. MEMSET",
RFC4465_A_1_8__MEMSET,
27,
"\x80\x40\x4f\x5e\x6d\x7c\x8b\x9a\xa9\xb8\xc7\xd6\xe5\xf4\x03\x12",
166
}
,
{
//** 8**
"A.1.9. CRC",
RFC4465_A_1_9__CRC,
29,
"",
95
}
,
{
//** 9**
"A.1.10. INPUT-BITS",
RFC4465_A_1_10__INPUT_BITS,
28,
"\x00\x00\x00\x02\x00\x02\x00\x13\x00\x00\x00\x03\x00\x1a\x00\x38",
66
}
,
{
//** 10**
"A.1.11. INPUT-HUFFMAN",
RFC4465_A_1_11__INPUT_HUFFMAN,
39,
"\x00\x00\x00\x03\x00\x08\x04\xd7\x00\x02\x00\x03\x03\x99\x30\xfe",
84
}
,
{
//** 11**
"A.1.12. INPUT-BYTES",
RFC4465_A_1_12__INPUT_BYTES,
72,
"\x00\x00\x93\x2e\x00\x01\xb1\x66\xd8\x6f\xb1\x00\x1a\x2b\x00\x03\x9a\x97\x34\xd8"
"\x00\x07\x00\x01\x33\x87\x4e\x00\x08\xdc\x96\x51\xb5\xdc\x96\x00\x59\x9d\x6a",
130
}
,
{
//** 12**
"A.1.13. Stack Manipulation",
RFC4465_A_1_13__Stack_Manipulation,
324,
"",
40
}
,
{
//** 13**
"A.1.14. Program Flow",
RFC4465_A_1_14__Program_Flow,
66,
"\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x07\x07\x07\x08\x08\x08\x09\x09",
131
}
,
{
//** 14**
"A.1.15. State Creation_1",
RFC4465_A_1_15__State_Creation_1,
152,
"",
23
}
,
{
//** 15**
"A.1.15. State Creation_2",
RFC4465_A_1_15__State_Creation_2,
152,
"",
14
}
,
{
//** 16**
"A.1.15. State Creation_3",
RFC4465_A_1_15__State_Creation_3,
152,
"",
24
}
,
{
//** 17**
"A.1.15. State Creation_4", // FAIL
RFC4465_A_1_15__State_Creation_4,
153,
"",
0
}
,
{
//** 18**
"A.1.15. State Creation_5", // FAIL
RFC4465_A_1_15__State_Creation_5,
153,
"",
0
}
,
{
//** 19**
"A.1.15. State Creation_6",
RFC4465_A_1_15__State_Creation_6,
153,
"",
23
}
,
{
//** 20**
"A.1.15. State Creation_7",
RFC4465_A_1_15__State_Creation_7,
152,
"",
34
}
,
{
//** 21**
"A.1.15. State Creation_8",
RFC4465_A_1_15__State_Creation_8,
153,
"",
46
}
,
{
//** 22**
"A.1.15. State Creation_9",
RFC4465_A_1_15__State_Creation_9,
153,
"",
47
}
,
{
//** 23**
"A.1.15. State Creation_10",
RFC4465_A_1_15__State_Creation_10,
153,
"",
60
}
,
{
//** 24**
"A.1.16. STATE-ACCESS {Set up bytecode}",
RFC4465_A_1_16__STATE_ACCESS__SETUP,
403,
"",
17
}
,
{
//** 25**
"A.1.16. STATE-ACCESS_1",
RFC4465_A_1_16__STATE_ACCESS_1,
408,
"\x74\x65\x73\x74",
26
}
,
{
//** 26**
"A.1.16. STATE-ACCESS_2",
RFC4465_A_1_16__STATE_ACCESS_2,
408,
"\x74\x65\x73\x74",
15
}
,
{
//** 27**
"A.1.16. STATE-ACCESS_3",
RFC4465_A_1_16__STATE_ACCESS_3,
408,
"",
0
}
,
{
//** 28**
"A.1.16. STATE-ACCESS_4",
RFC4465_A_1_16__STATE_ACCESS_4,
408,
"",
0
}
,
{
//** 29**
"A.1.16. STATE-ACCESS_5",
RFC4465_A_1_16__STATE_ACCESS_5,
408,
"",
0
}
,
{
//** 30**
"A.2.1. Useful Values_1",
RFC4465_A_2_1__Useful_Values_1,
99,
"",
968
}
,
{
//** 31**
"A.2.1. Useful Values_2",
RFC4465_A_2_1__Useful_Values_2,
9,
"",
(16 * 1080)
}
,
{
//** 32**
"A.2.1. Useful Values_3",
RFC4465_A_2_1__Useful_Values_3,
9,
"",
0
}
,
{
//** 33**
"A.2.1. Useful Values_4",
RFC4465_A_2_1__Useful_Values_4,
9,
"",
0
}
,
{
//** 34**
"A.2.2. Cycles Checking",
RFC4465_A_2_2__Cycles_Checking,
29,
"",
0
}
,
{
//** 35**
"A.2.3. Message-based Transport_1",
RFC4465_A_2_3_Message_based_Transport_1,
1,
"MESSAGE_TOO_SHORT",
0
}
,
{
//** 36**
"A.2.3. Message-based Transport_2",
RFC4465_A_2_3_Message_based_Transport_2,
2,
"MESSAGE_TOO_SHORT",
0
}
,
{
//** 37**
"A.2.3. Message-based Transport_3",
RFC4465_A_2_3_Message_based_Transport_3,
17,
"decompression_memory_size",
5
}
,
{
//** 38**
"A.2.3. Message-based Transport_4",
RFC4465_A_2_3_Message_based_Transport_4,
17,
"MESSAGE_TOO_SHORT",
0
}
,
{
//** 39**
"A.2.3. Message-based Transport_5",
RFC4465_A_2_3_Message_based_Transport_5,
17,
"INVALID_CODE_LOCATION",
0
}
,
{
//** 40**
"A.2.3. Message-based Transport_6",
RFC4465_A_2_3_Message_based_Transport_6,
17,
"decompression_memory_size",
5
}
,
{
//** 41**
"A.2.4. Stream-based Transport_1",
RFC4465_A_2_4_Stream_based_Transport_1,
67,
"decompression_memory_size",
11,
1
}
,
{
//** 42**
"A.2.4. Stream-based Transport_2",
RFC4465_A_2_4_Stream_based_Transport_2,
67,
"decompression_memory_size",
11,
1,
0
}
,
{
//** 43**
"A.2.4. Stream-based Transport_3",
RFC4465_A_2_4_Stream_based_Transport_3,
3,
"MESSAGE_TOO_SHORT",
0,
1,
1
}
,
{
//** 44**
"A.2.4. Stream-based Transport_4",
RFC4465_A_2_4_Stream_based_Transport_4,
4,
"MESSAGE_TOO_SHORT",
0,
1,
1
}
,
{
//** 45**
"A.2.4. Stream-based Transport_5",
RFC4465_A_2_4_Stream_based_Transport_5,
30,
"MESSAGE_TOO_SHORT",
0,
1,
0
}
,
{
//** 46**
"A.2.4. Stream-based Transport_6",
RFC4465_A_2_4_Stream_based_Transport_6,
29,
"INVALID_CODE_LOCATION",
0,
1,
0
}
,
{
//** 47**
"A.2.5. Input Past the End of a Message_1",
RFC4465_A_2_5__Input_Past_the_End_of_a_Message_1,
59,
"\x68\x69\x21",
23,
0,
0
}
,
{
//** 48**
"A.2.5. Input Past the End of a Message_2",
RFC4465_A_2_5__Input_Past_the_End_of_a_Message_2,
58,
"USER_REQUESTED",
0,
0,
1
}
,
{
//** 49**
"A.3.1. SigComp Feedback Mechanism_1",
RFC4465_A_3_1__SigComp_Feedback_Mechanism_1,
84,
"",
52,
0,
0
}
,
{
//** 50**
"A.3.1. SigComp Feedback Mechanism_2",
RFC4465_A_3_1__SigComp_Feedback_Mechanism_2,
84,
"",
179
}
,
{
//** 51**
"A.3.2. State Memory Management_1",
RFC4465_A_3_2__State_Memory_Management_1,
446,
"",
811
}
,
{
//** 52**
"A.3.2. State Memory Management_2",
RFC4465_A_3_2__State_Memory_Management_2,
446,
"",
2603
}
,
{
//** 53**
"A.3.2. State Memory Management_3",
RFC4465_A_3_2__State_Memory_Management_3,
446,
"",
811
}
,
{
//** 54**
"A.3.2. State Memory Management_4",
RFC4465_A_3_2__State_Memory_Management_4,
446,
"",
1805
}
,
{
//** 55**
"A.3.2. State Memory Management_5",
RFC4465_A_3_2__State_Memory_Management_5,
446,
"STATE_NOT_FOUND",
0
}
,
{
//** 56**
"A.3.2. State Memory Management_6",
RFC4465_A_3_2__State_Memory_Management_6,
446,
"",
2057
}
,
{
//** 57**
"A.3.2. State Memory Management_7",
RFC4465_A_3_2__State_Memory_Management_7,
446,
"",
1993
}
,
{
//** 58**
"A.3.3. Multiple Compartments_1",
RFC4465_A_3_3__Multiple_Compartments_1,
437,
"",
1809
}
,
{
//** 59**
"A.3.3. Multiple Compartments_2",
RFC4465_A_3_3__Multiple_Compartments_2,
437,
"",
1809
}
,
{
//** 60**
"A.3.3. Multiple Compartments_3",
RFC4465_A_3_3__Multiple_Compartments_3,
437,
"",
1809
}
,
{
//** 61**
"A.3.3. Multiple Compartments_4",
RFC4465_A_3_3__Multiple_Compartments_4,
437,
"",
1993
}
,
{
//** 62**
"A.3.3. Multiple Compartments_5",
RFC4465_A_3_3__Multiple_Compartments_5,
437,
"",
1994
}
,
{
//** 63**
"A.3.3. Multiple Compartments_6",
RFC4465_A_3_3__Multiple_Compartments_6,
437,
"",
1804
}
,
{
//** 64**
"A.3.3. Multiple Compartments_7",
RFC4465_A_3_3__Multiple_Compartments_7,
437,
"STATE_NOT_FOUND",
0
}
,
{
//** 65**
"A.3.3. Multiple Compartments_8",
RFC4465_A_3_3__Multiple_Compartments_8,
437,
"STATE_NOT_FOUND",
0
}
,
{
//** 66**
"A.3.3. Multiple Compartments_9",
RFC4465_A_3_3__Multiple_Compartments_9,
437,
"STATE_NOT_FOUND",
0
}
,
{
//** 67**
"A.3.4. Accessing RFC 3485 State",
RFC4465_A_3_4__Accessing_RFC_3485_State,
61,
"\x53\x49\x50",
11
}
,
{
//** 68**
"A.3.5. Bytecode State Creation_1",
RFC4465_A_3_5__Bytecode_State_Creation_1,
74,
"\x4f\x4b",
66
}
,
{
//** 69**
"A.3.5. Bytecode State Creation_2",
RFC4465_A_3_5__Bytecode_State_Creation_2,
8,
"\x4f\x4b\x31",
7
}
,
{
//** 70**
"A.3.5. Bytecode State Creation_3",
RFC4465_A_3_5__Bytecode_State_Creation_3,
13,
"\x4f\x4b\x32",
5
}
,
{
//** 71**
"A.3.5. Bytecode State Creation_4",
RFC4465_A_3_5__Bytecode_State_Creation_4,
7,
"\x00\x00\x32",
5
}
,
{
//** 72**
"A.3.5. Bytecode State Creation_5",
RFC4465_A_3_5__Bytecode_State_Creation_5,
7,
"STATE_NOT_FOUND",
0,
0,
1
}
};
int startsWith(const char* buffer1, size_t size1, const char* buffer2, size_t size2)
{
size_t i;
if(size1 < size2) return 0;
for(i = 0; i< size2; i++)
{
if(buffer1[i] != buffer2[i])
{
return 0;
}
}
return 1;
}
#else /* !TORTURES */
#define COMPARTMENT_ID1 "urn:uuid:2e5fdc76-00be-4314-8202-1116fa82a474" // My first compartment id
#define COMPARTMENT_ID2 "urn:uuid:2e5fdc76-00be-4314-8202-1116fa82a475" // My second compartment id
#define IS_STREAM 0 // Using reliable transport
#define STREAM_ID 678 // stream identifier
#define MAX_BUFFER_SIZE 0xfff0
#define LOOP_COUNT 100
#define DECOMP_NACK_4_TEST 0
// messages to use for tests
const char* messages[] =
{
//{
"REGISTER sip:ims-network.com SIP/2.0\r\n"
"Via: SIP/2.0/UDP [::]:1988;comp=sigcomp;rport;branch=z9hG4bK1245420841406\r\n"
"From: <sip:mamadou@ims-network.com>;tag=29358\r\n"
"To: <sip:mamadou@ims-network.com>\r\n"
"Call-ID: M-fa53180346f7f55ceb8d8670f9223dbb\r\n"
"CSeq: 201 REGISTER\r\n"
"Max-Forwards: 70\r\n"
"Allow: INVITE, ACK, CANCEL, BYE, MESSAGE, OPTIONS, NOTIFY, PRACK, UPDATE, REFER\r\n"
"Contact: <sip:mamadou@[::]:1988;comp=sigcomp;transport=udp>;expires=600000;+deviceID=\"3ca50bcb-7a67-44f1-afd0-994a55f930f4\";mobility=\"fixed\";+g.3gpp.cs-voice;+g.3gpp.app%5fref=\"urn%3Aurnxxx%3A3gpp-application.ims.iari.gsmais\";+g.oma.sip-im.large-message;+g.oma.sip-im\r\n"
"User-Agent: IM-client/OMA1.0 doubango/v4.0.1390.0\r\n"
"Require: pref\r\n"
"P-Preferred-Identity: <sip:mamadou@ims-network.com>\r\n"
"Supported: path\r\n"
"P-Access-Network-Info: 3GPP-UTRAN-TDD;utran-cell-id-3gpp=00000000\r\n"
"Privacy: none\r\n"
"Supported: timer\r\n"
"Content-Length: 0\r\n"
"\r\n"
//}
,
//{
"SIP/2.0 401 Unauthorized - Challenging the UE\r\n"
"Via: SIP/2.0/UDP [::]:1988;comp=sigcomp;received=2001:5C0:1502:1800:1D41:BF77:F1BF:BB49;rport=1988;branch=z9hG4bK1245420841406\r\n"
"From: <sip:mamadou@ims-network.com>;tag=29358\r\n"
"To: <sip:mamadou@ims-network.com>;tag=3241f316c9eb68efd2c34668c4fbf834-eaa0\r\n"
"Call-ID: M-fa53180346f7f55ceb8d8670f9223dbb\r\n"
"CSeq: 201 REGISTER\r\n"
"Path: <sip:term@pcscf.ims-network.com:4060;lr>\r\n"
"Service-Route: <sip:orig@scscf.ims-network.com:6060;lr>"
"Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, PUBLISH, MESSAGE, INFO\r\n"
"Server: Sip EXpress router (2.1.0-dev1 OpenIMSCore (i386/linux))\r\n"
"Content-Length: 0\r\n"
"Warning: 392 2001:5C0:1502:1800:0:0:0:226:6060 \"Noisy feedback tells: pid=24454 req_src_ip=2001:5C0:1502:1800:0:0:0:226 req_src_port=5060 in_uri=sip:scscf.ims-network.com:6060 out_uri=sip:scscf.ims-network.com:6060 via_cnt==3\"\r\n"
"WWW-Authenticate: Digest realm=\"ims-network.com\", nonce=\"xFBhTyFaQ0/lBgboH2ZqDe3BDmFXDwAA2Peq/bxtLQs=\", algorithm=AKAv1-MD5, qop=\"auth,auth-int\"\r\n"
"\r\n"
//}
,
//{
"REGISTER sip:ims-network.com SIP/2.0\r\n"
"Via: SIP/2.0/UDP [::]:1988;comp=sigcomp;rport;branch=z9hG4bK1245420841407\r\n"
"From: <sip:mamadou@ims-network.com>;tag=29358\r\n"
"To: <sip:mamadou@ims-network.com>\r\n"
"Call-ID: M-fa53180346f7f55ceb8d8670f9223dbb\r\n"
"CSeq: 202 REGISTER\r\n"
"Max-Forwards: 70\r\n"
"Allow: INVITE, ACK, CANCEL, BYE, MESSAGE, OPTIONS, NOTIFY, PRACK, UPDATE, REFER\r\n"
"Contact: <sip:mamadou@[::]:1988;comp=sigcomp;transport=udp>;expires=600000;+deviceID=\"3ca50bcb-7a67-44f1-afd0-994a55f930f4\";mobility=\"fixed\";+g.3gpp.cs-voice;+g.3gpp.app%5fref=\"urn%3Aurnxxx%3A3gpp-application.ims.iari.gsmais\";+g.oma.sip-im.large-message;+g.oma.sip-im\r\n"
"User-Agent: IM-client/OMA1.0 doubango/v4.0.1390.0\r\n"
"Authorization: Digest algorithm=AKAv1-MD5,username=\"mamadou@ims-network.com\",realm=\"ims-network.com\",nonce=\"xFBhTyFaQ0/lBgboH2ZqDe3BDmFXDwAA2Peq/bxtLQs=\",uri=\"sip:ims-network.com\",response=\"c499a6b49693d5b29c431786cff32ca4\",qop=auth-int,cnonce=\"9fcc19edace2d1beaa6122b86dd11256\",nc=00000001\r\n"
"Require: pref\r\n"
"P-Preferred-Identity: <sip:mamadou@ims-network.com>\r\n"
"Supported: path\r\n"
"P-Access-Network-Info: 3GPP-UTRAN-TDD;utran-cell-id-3gpp=00000000\r\n"
"Privacy: none\r\n"
"Supported: timer\r\n"
"Content-Length: 0\r\n"
"\r\n"
//}
,
//{
"SIP/2.0 200 OK - SAR succesful and registrar saved\r\n"
"Via: SIP/2.0/UDP [::]:1988;comp=sigcomp;received=2001:5C0:1502:1800:1D41:BF77:F1BF:BB49;rport=1988;branch=z9hG4bK1245420841407\r\n"
"From: <sip:mamadou@ims-network.com>;tag=29358\r\n"
"To: <sip:mamadou@ims-network.com>;tag=3241f316c9eb68efd2c34668c4fbf834-1b36\r\n"
"Call-ID: M-fa53180346f7f55ceb8d8670f9223dbb\r\n"
"CSeq: 202 REGISTER\r\n"
"P-Associated-URI: <sip:mamadou@ims-network.com>\r\n"
"Contact: <sip:mamadou@[::]:1988;comp=sigcomp;transport=udp>;expires=600000\r\n"
"Path: <sip:term@pcscf.ims-network.com:4060;lr>\r\n"
"Service-Route: <sip:orig@scscf.ims-network.com:6060;lr>"
"Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, PUBLISH, MESSAGE, INFO\r\n"
"P-Charging-Function-Addresses: ccf=pri_ccf_address\r\n"
"Server: Sip EXpress router (2.1.0-dev1 OpenIMSCore (i386/linux))\r\n"
"Content-Length: 0\r\n"
"Warning: 392 2001:5C0:1502:1800:0:0:0:226:6060 \"Noisy feedback tells: pid=24452 req_src_ip=2001:5C0:1502:1800:0:0:0:226 req_src_port=5060 in_uri=sip:scscf.ims-network.com:6060 out_uri=sip:scscf.ims-network.com:6060 via_cnt==3\"\r\n"
"\r\n"
//}
,
//{
"SUBSCRIBE sip:mamadou@ims-network.com SIP/2.0\r\n"
"Via: SIP/2.0/UDP [::]:1988;comp=sigcomp;rport;branch=z9hG4bK1245420841408\r\n"
"From: <sip:mamadou@ims-network.com>;tag=5705\r\n"
"To: <sip:mamadou@ims-network.com>\r\n"
"Call-ID: M-dd6e227ce416f853ca7bca49ad5b676d\r\n"
"CSeq: 301 SUBSCRIBE\r\n"
"Max-Forwards: 70\r\n"
"Allow: INVITE, ACK, CANCEL, BYE, MESSAGE, OPTIONS, NOTIFY, PRACK, UPDATE, REFER\r\n"
"Contact: <sip:mamadou@[::]:1988;comp=sigcomp;transport=udp>;+g.oma.sip-im\r\n"
"User-Agent: IM-client/OMA1.0 doubango/v4.0.1390.0\r\n"
"Expires: 600000\r\n"
"Event: reg\r\n"
"Accept: application/reginfo+xml\r\n"
"Route: <sip:[2001:5c0:1502:1800::226]:4060;lr=true;transport=udp>,<sip:orig@scscf.ims-network.com:6060;lr>\r\n"
"P-Access-Network-Info: 3GPP-UTRAN-TDD;utran-cell-id-3gpp=00000000\r\n"
"Privacy: none\r\n"
"Supported: timer\r\n"
"Allow-Events: presence, presence.winfo, conference\r\n"
"Content-Length: 0\r\n"
"\r\n"
//}
,
//{
"SIP/2.0 200 Subscription to REG saved\r\n"
"Record-Route: <sip:mo@pcscf.ims-network.com:4060;lr>\r\n"
"Via: SIP/2.0/UDP [::]:1988;comp=sigcomp;received=2001:5C0:1502:1800:1D41:BF77:F1BF:BB49;rport=1988;branch=z9hG4bK1245420841408\r\n"
"From: <sip:mamadou@ims-network.com>;tag=5705\r\n"
"To: <sip:mamadou@ims-network.com>;tag=3241f316c9eb68efd2c34668c4fbf834-5cce\r\n"
"Call-ID: M-dd6e227ce416f853ca7bca49ad5b676d\r\n"
"CSeq: 301 SUBSCRIBE\r\n"
"Expires: 600000\r\n"
"Contact: <sip:mamadou@ims-network.com;comp=sigcomp;>\r\n"
"Server: Sip EXpress router (2.1.0-dev1 OpenIMSCore (i386/linux))\r\n"
"Content-Length: 0\r\n"
"Warning: 392 2001:5C0:1502:1800:0:0:0:226:6060 \"Noisy feedback tells: pid=24454 req_src_ip=2001:5C0:1502:1800:0:0:0:226 req_src_port=4060 in_uri=sip:mamadou@ims-network.com out_uri=sip:mamadou@ims-network.com via_cnt==2\"\r\n"
"\r\n"
//}
,
//{
"NOTIFY sip:mamadou@[::]:1988;transport=udp SIP/2.0\r\n"
"Via: SIP/2.0/UDP [2001:5C0:1502:1800:0:0:0:226]:4060;comp=sigcomp;branch=z9hG4bK2b3f.38818b91.0\r\n"
"Via: SIP/2.0/UDP [2001:5C0:1502:1800:0:0:0:226]:6060;received=2001:5C0:1502:1800:0:0:0:226;rport=6060;branch=z9hG4bK2b3f.6db77cf1.0\r\n"
"To: <sip:mamadou@ims-network.com>;tag=5705\r\n"
"From: <sip:mamadou@ims-network.com>;tag=3241f316c9eb68efd2c34668c4fbf834-5cce\r\n"
"CSeq: 10 NOTIFY\r\n"
"Call-ID: M-dd6e227ce416f853ca7bca49ad5b676d\r\n"
"Content-Length: 379\r\n"
"User-Agent: Sip EXpress router(2.1.0-dev1 OpenIMSCore (i386/linux))\r\n"
"Contact: <sip:mamadou@ims-network.com; comp=sigcomp;>\r\n"
"Event: reg\r\n"
"Max-Forwards: 16\r\n"
"Subscription-State: active;expires=600030\r\n"
"Content-Type: application/reginfo+xml\r\n"
"\r\n"
"<?xml version=\"1.0\"?>\r\n"
"<reginfo xmlns=\"urn:ietf:params:xml:ns:reginfo\" version=\"0\" state=\"full\">\r\n"
"<registration aor=\"sip:mamadou@ims-network.com\" id=\"0xb5d91fcc\" state=\"active\">\r\n"
"<contact id=\"0xb5d8fb98\" state=\"active\" event=\"registered\" expires=\"600000\">\r\n"
"<uri>sip:mamadou@[::]:1988;transport=udp</uri>\r\n"
"</contact>\r\n"
"</registration>\r\n"
"</reginfo>\r\n"
//}
,
//{
"SIP/2.0 200 OK\r\n"
"Max-Forwards: 70\r\n"
"User-Agent: IM-client/OMA1.0 doubango/v4.0.1390.0\r\n"
"Via: SIP/2.0/UDP [2001:5C0:1502:1800:0:0:0:226]:4060;comp=sigcomp;branch=z9hG4bK2b3f.38818b91.0;received=2001:5c0:1502:1800::226\r\n"
"Via: SIP/2.0/UDP [2001:5C0:1502:1800:0:0:0:226]:6060;received=2001:5C0:1502:1800:0:0:0:226;rport=6060;branch=z9hG4bK2b3f.6db77cf1.0\r\n"
"To: <sip:mamadou@ims-network.com>;tag=5705\r\n"
"From: <sip:mamadou@ims-network.com>;tag=3241f316c9eb68efd2c34668c4fbf834-5cce\r\n"
"CSeq: 10 NOTIFY\r\n"
"Call-ID: M-dd6e227ce416f853ca7bca49ad5b676d\r\n"
"Content-Length: 0\r\n"
"\r\n"
//}
};
#endif /* TORTURES */
@implementation AppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after application launch
[window makeKeyAndVisible];
}
- (void)dealloc {
[window release];
[super dealloc];
}
- (IBAction)start:(id)sender {
#if TORTURES
size_t i, start, end;
size_t res_size = 0;
char buffer[OUTPUT_BUFFER_SIZE];
tcomp_manager_handle_t *manager = TCOMP_MANAGER_CREATE();
tcomp_result_t *result = TCOMP_RESULT_CREATE();
/* Add SIP dictionary. */
tcomp_manager_addSipSdpDictionary(manager);
/* Add Presence dictionary. */
tcomp_manager_addPresenceDictionary(manager);
/* Set decompression size. */
tcomp_manager_setDecompression_Memory_Size(manager, DECOMPRESSION_MEMORY_SIZE);
#if RUN_TEST_LOOP
for(;;)
#endif
{
#if RUN_TEST_ALL
start = 0, end = 72;
#else
start = RUN_TEST_NO, end = RUN_TEST_NO + 1;
#endif
for(i=start; i<end; i++)
{
printf("=== Testing %s ===\n\n", tests[i].section_name);
if(tests[i].stream)
{
tcomp_result_setOutputTCPBuffer(result, buffer, OUTPUT_BUFFER_SIZE, STREAM_ID);
}
else
{
tcomp_result_setOutputUDPBuffer(result, buffer, OUTPUT_BUFFER_SIZE);
}
/* Performs decompression */
res_size = tcomp_manager_decompress(manager, tests[i].bytecode, tests[i].bytecode_size, result);
if(result->isNack)
{
printf("\n==WE GOT A NACK\n\n");
//sendto(tcomp_buffer_getBuffer(result->nack_info), tcomp_buffer_getSize(result->nack_info));
}
else
{
tcomp_result_setCompartmentId(result, COMPARTMENT_ID, strlen(COMPARTMENT_ID));
tcomp_manager_provideCompartmentId(manager, result);
}
/* == Stream
*/
if(tests[i].stream && (res_size || result->isNack))
{
for(;;)
{
res_size = tcomp_manager_getNextStreamMessage(manager, result);
if(!res_size && !result->isNack)
{
break;
}
else if(res_size)
{
tcomp_result_setCompartmentId(result, COMPARTMENT_ID, strlen(COMPARTMENT_ID));
tcomp_manager_provideCompartmentId(manager, result);
}
else
{
printf("\n==WE GOT A NACK\n\n");
//sendto(tcomp_buffer_getBuffer(result->nack_info), tcomp_buffer_getSize(result->nack_info));
}
}
}
printf("xoutpout: %s\n", startsWith(buffer, OUTPUT_BUFFER_SIZE, tests[i].xoutput, strlen(tests[i].xoutput)) ? "YES" : "NO");
printf("xcycles: %s\n", (result->consumed_cycles == tests[i].xcycles) ? "YES" : "NO");
printf("output size: %u\n", res_size);
}
}/* LOOP */
/* Free previously allocated resources. */
TCOMP_RESULT_SAFE_FREE(result);
TCOMP_MANAGER_SAFE_FREE(manager);
#else
int i = 0;
size_t outLen = 0;
tcomp_manager_handle_t *manager1 = 0, *manager2 = 0;
tcomp_result_t *result1 = 0, *result2 = 0;
/* temporary buffers --> will hold compression/decompression results */
char buff1[MAX_BUFFER_SIZE];
char buff2[MAX_BUFFER_SIZE];
/* Managers */
manager1 = TCOMP_MANAGER_CREATE();
manager2 = TCOMP_MANAGER_CREATE();
/* Add SIP/Presence dictionnaries */
tcomp_manager_addSipSdpDictionary(manager1);
tcomp_manager_addPresenceDictionary(manager1);
tcomp_manager_addSipSdpDictionary(manager2);
tcomp_manager_addPresenceDictionary(manager2);
/* Results --> it is recomanded to use one result struct for each manager */
result1 = TCOMP_RESULT_CREATE();
result2 = TCOMP_RESULT_CREATE();
/* Sets compartment Ids */
tcomp_result_setCompartmentId(result1, COMPARTMENT_ID1, strlen(COMPARTMENT_ID1));
tcomp_result_setCompartmentId(result2, COMPARTMENT_ID2, strlen(COMPARTMENT_ID2));
/* Set DMS and SMS */
tcomp_manager_setDecompression_Memory_Size(manager1, 8192);
tcomp_manager_setDecompression_Memory_Size(manager2, 8192);
tcomp_manager_setCycles_Per_Bit(manager1, 64);
tcomp_manager_setCycles_Per_Bit(manager2, 64);
tcomp_manager_setState_Memory_Size(manager1, 8192);
tcomp_manager_setState_Memory_Size(manager2, 8192);
for(i = 0; i< (8*LOOP_COUNT); i++)
{
memset(buff1, '\0', MAX_BUFFER_SIZE);
memset(buff2, '\0', MAX_BUFFER_SIZE);
//
// Compression using manager I
//
outLen = tcomp_manager_compress(manager1, COMPARTMENT_ID1, strlen(COMPARTMENT_ID1), messages[i%8], strlen(messages[i%8]), buff1, MAX_BUFFER_SIZE, IS_STREAM);
if(outLen)
{
//* TODO: sendto(SendSocket, buff1, outLen, 0, (SOCKADDR *) &SenderAddr, sizeof(SenderAddr));
/*
* Decompress the compressed message using manager II
*/
tcomp_result_setOutputBuffer(result2, buff2, MAX_BUFFER_SIZE, IS_STREAM, STREAM_ID); // set the output buffer where to copy decompressed message
outLen = tcomp_manager_decompress(manager2, buff1, outLen, result2);
if(outLen) // OK
{
// buff2 contains the result and outLen is result length
TSK_DEBUG_INFO("%s\n\n", buff2);
// provide the compartment id --> save temp states
tcomp_manager_provideCompartmentId(manager2, result2);
}
else // NOK
{
TSK_DEBUG_ERROR("ERROR (1)");
//--assert(tcomp_result_getIsNack(result2));
#if DECOMP_NACK_4_TEST
manager1->decompress(result2.getNackInfo()->getBuffer(), result2.getNackInfo()->getSize(), &result1);
#endif
// Decompression failed --> handle NACK (done by remote party)
// NACK will be retourned only if SigCompVersion >= 2
// NACK must be sent to the remote party (SIP/IMS use-case) over the network
//* TODO: sendto(SendSocket, result2.getNackInfo()->getBuffer(), result2.getNackInfo()->getSize(), 0, (SOCKADDR *) &SenderAddr, sizeof(SenderAddr));
}
}
else
{
//std::cout<< "ERROR (2)" << std::endl;
//--assert(0); // MUST never happen
}
//
// Compression using manager II
//
outLen = tcomp_manager_compress(manager2, COMPARTMENT_ID2, strlen(COMPARTMENT_ID2), messages[i%8], strlen(messages[i%8]), buff2, MAX_BUFFER_SIZE, IS_STREAM);
if(outLen)
{
tcomp_result_setOutputBuffer(result1, buff1, MAX_BUFFER_SIZE, IS_STREAM, STREAM_ID); // set the output buffer where to copy decompressed message
outLen = tcomp_manager_decompress(manager1, buff2, outLen, result1);
if(outLen)
{
TSK_DEBUG_INFO("%s\n\n", buff1);
tcomp_manager_provideCompartmentId(manager1, result1);
}
else
{
TSK_DEBUG_ERROR("ERROR (3)");
//--assert(tcomp_result_getIsNack(result2));
#if DECOMP_NACK_4_TEST
manager2->decompress(result1.getNackInfo()->getBuffer(), result1.getNackInfo()->getSize(), &result2);
#endif
}
}
else
{
TSK_DEBUG_ERROR("ERROR (4)");
//--assert(0);
}
}
// Close compartments
tcomp_manager_closeCompartment(manager1, COMPARTMENT_ID1, strlen(COMPARTMENT_ID1));
tcomp_manager_closeCompartment(manager2, COMPARTMENT_ID2, strlen(COMPARTMENT_ID2));
// Delete Results
TSK_OBJECT_SAFE_FREE(result1);
TSK_OBJECT_SAFE_FREE(result2);
// Delete managers
TSK_OBJECT_SAFE_FREE(manager1);
TSK_OBJECT_SAFE_FREE(manager2);
#endif
}
@end