1 #include "fct.h"
2 
3 #include "log.h"
4 
5 #include "AmSipHeaders.h"
6 #include "AmSipMsg.h"
7 #include "AmUtils.h"
8 
FCTMF_SUITE_BGN(test_headers)9 FCTMF_SUITE_BGN(test_headers) {
10 
11     FCT_TEST_BGN(getHeader_simple) {
12         fct_chk( getHeader("P-My-Test: myval" CRLF, "P-My-Test") == "myval");
13     } FCT_TEST_END();
14 
15     FCT_TEST_BGN(getHeader_multi) {
16       fct_chk( getHeader("P-My-Test: myval" CRLF "P-My-Test: myval2" CRLF , "P-My-Test", true) == "myval" );
17       fct_chk( getHeader("P-My-Test: myval" CRLF "P-My-Test: myval2" CRLF , "P-My-Test", false) == "myval, myval2" );
18       fct_chk( getHeader("P-My-Test: myval" CRLF "P-My-Otherheader: myval2" CRLF "P-My-Test: myval2" CRLF , "P-My-Test", false) == "myval, myval2" );
19     } FCT_TEST_END();
20 
21     FCT_TEST_BGN(getHeader_atend) {
22 
23       fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval" ,
24 			"P-My-Test", true) == "mykey=myval;myotherkey=myval");
25       fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval\n" ,
26 			"P-My-Test", true) == "mykey=myval;myotherkey=myval");
27       fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval\r" ,
28 			"P-My-Test", true) == "mykey=myval;myotherkey=myval");
29       fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval\r\n" ,
30 			"P-My-Test", true) == "mykey=myval;myotherkey=myval");
31       fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval\r\nP-anotherheader:xy" ,
32 			"P-My-Test", true) == "mykey=myval;myotherkey=myval");
33 
34     } FCT_TEST_END();
35 
36     FCT_TEST_BGN(getHeader_keyvalue) {
37       fct_chk(get_header_keyvalue("mykey=myval;myotherkey=myotherval", "mykey") == "myval");
38       fct_chk(get_header_keyvalue("mykey=myval1;myotherkey=myval", "myotherkey") == "myval");
39       fct_chk(get_header_keyvalue("mykey=myval;myotherkey=", "myotherkey") == "");
40       fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval;myotherfunkykey=myval" CRLF, "P-My-Test", true), "mykey") == "myval" );
41 
42       fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval;myotherfunkykey=myval", "P-My-Test", true), "mykey") == "myval" );
43 
44       fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval;myotherfunkykey=myval;andsomemore", "P-My-Test", true), "mykey") == "myval" );
45 
46       fct_chk(get_header_keyvalue(getHeader("P-App-Param: product_id=1;productid=1;bla=blub ", "P-App-Param"), "product_id") == "1");
47       fct_chk(get_header_keyvalue(getHeader("P-App-Param: product_id=11;productid=1;bla=blub ", "P-App-Param"), "product_id") == "11");
48       fct_chk(get_header_keyvalue(getHeader("P-App-Param: ;u=user;d=domain", "P-App-Param"), "u") == "user");
49       fct_chk(get_header_keyvalue(getHeader("P-App-Param: ;u=user", "P-App-Param"), "u") == "user");
50 
51 
52       fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey=myval;andsomemore", "P-My-Test", true), "mykey") == "myval" );
53       fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey= myval;andsomemore", "P-My-Test", true), "myotherfunkykey") == "myval" );
54       fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey= \"myval\";andsomemore", "P-My-Test", true), "myotherfunkykey") == "myval" );
55 
56       fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey='myval';andsomemore", "P-My-Test", true), "myotherfunkykey") == "myval" );
57       fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey= '';andsomemore", "P-My-Test", true), "myotherfunkykey") == "");
58 
59       fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey= 'test \\' escaped';andsomemore", "P-My-Test", true), "test \\' escaped") == "");
60       fct_chk(get_header_keyvalue("u=sayer;d=iptel.org;p=abcdef", "u") == "sayer");
61       fct_chk(get_header_keyvalue("u=sayer;d=iptel.org;p=abcdef", "d") == "iptel.org");
62 
63       fct_chk(get_header_keyvalue("prefixmykey=myprefixval;mykey=myval", "mykey") == "myval");
64       fct_chk(get_header_keyvalue("some=other;prefixmykey=myprefixval;mykey=myval", "mykey") == "myval");
65       fct_chk(get_header_keyvalue("some=\"mykey\";prefixmykey=myprefixval;mykey=myval", "mykey") == "myval");
66       fct_chk(get_header_keyvalue("some=\"mykey=valx\";prefixmykey=myprefixval;mykey=myval", "mykey") == "myval");
67 
68    } FCT_TEST_END();
69 
70 
71     FCT_TEST_BGN(getHeader_allow) {
72       fct_chk(getHeader("Subject: Performance Test\n"
73 			"Allow: INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH", "Allow") == "INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH");
74     } FCT_TEST_END();
75 
76     FCT_TEST_BGN(getHeader_allow_substr) {
77       fct_chk(getHeader("Subject: Performance Test\n"
78 			"Allow-Events: telephone-event,refer\n"
79 			"Allow: INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH", "Allow") == "INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH");
80     } FCT_TEST_END();
81 
82     FCT_TEST_BGN(getHeader_allow3) {
83       fct_chk(getHeader("Subject: Performance Test\n"
84 			"Allow  : INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH", "Allow") == "INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH");
85     } FCT_TEST_END();
86 
87     FCT_TEST_BGN(getHeader_allow4) {
88       fct_chk(getHeader("Subject: Performance Test\n"
89 			"Allow-Events : telephone-event,refer\n"
90 			"Allow  : INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH", "Allow") == "INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH");
91     } FCT_TEST_END();
92 
93     FCT_TEST_BGN(addOptionTag) {
94       string hdrs =
95 	"Supported: timer" CRLF
96 	"Session-Expires: 110;refresher=uas" CRLF
97 	"Supported: timer" CRLF;
98 
99       string hdrs1;
100       addOptionTag(hdrs1, "Supported", "blub");
101       // DBG("hdrs1 '%s'\n", hdrs1.c_str());
102       fct_chk(hdrs1.find("Supported: blub") != string::npos);
103 
104       hdrs1 = hdrs;
105       addOptionTag(hdrs1, "Supported", "something");
106       // DBG("hdrs1 '%s'\n", hdrs1.c_str());
107       fct_chk(hdrs1.find("something") != string::npos);
108 
109       hdrs1 = hdrs;
110       addOptionTag(hdrs1, "Supported", "timer");
111       // DBG("hdrs1 '%s'\n", hdrs1.c_str());
112       fct_chk(hdrs1 == hdrs);
113 
114     } FCT_TEST_END();
115 
116     FCT_TEST_BGN(removeOptionTag) {
117       string hdrs =
118 	"Supported: timer" CRLF;
119 
120       string hdrs1 = hdrs;
121       removeOptionTag(hdrs1, "Supported", "notexisting");
122       // DBG("hdrs1 = '%s'\n", hdrs1.c_str());
123       fct_chk(hdrs1 == hdrs); // dont touch
124 
125       hdrs1 = hdrs;
126       removeOptionTag(hdrs1, "Supported", "timer");
127       // DBG("hdrs1 = '%s'\n", hdrs1.c_str());
128       fct_chk(hdrs1.empty() == true); // last one
129 
130       hdrs1 = hdrs + "Supported: timer" CRLF;
131       removeOptionTag(hdrs1, "Supported", "timer");
132       // DBG("hdrs1 = '%s'\n", hdrs1.c_str());
133       fct_chk(hdrs1.empty()== true); // last one
134 
135     } FCT_TEST_END();
136 } FCTMF_SUITE_END();
137