📄 torture_sip.c
字号:
TEST(dup != NULL, 1); TEST_SIZE(tl_len(dup), 5 * sizeof(tagi_t)); TEST_SIZE(tl_xtra(dup, 0), xtra); if (tstflags & tst_verbatim) tl_print(stdout, "dup:\n", dup); su_free(NULL, dup); tl_vfree(lst); TEST_1(t_scan(siptag_request, home, "INVITE sip:example.org SIP/2.0", &v)); TEST_1(request = (void *)v); TEST_1(request->rq_common->h_class == sip_request_class); TEST_S(request->rq_method_name, "INVITE"); TEST_S(request->rq_version, "SIP/2.0"); TEST_1(t_scan(siptag_to, home, "Example <sip:example.org>;tag=foo", &v)); TEST_1(to = (void *)v); TEST_1(to->a_common->h_class == sip_to_class); TEST_S(to->a_display, "Example"); TEST_S(to->a_tag, "foo"); su_home_check(home); su_home_zap(home); END();}/** Test advanced tag features */static int parser_tag_test(void){ tagi_t *lst, *dup, *filter1, *filter2, *filter3, *filter4; tagi_t *b1, *b2, *b3, *b4; msg_t *msg; sip_t *sip; su_home_t *home; size_t xtra; BEGIN(); home = su_home_new(sizeof *home); msg = read_message(MSG_DO_EXTRACT_COPY, "SIP/2.0 401 Unauthorized\r\n""Via: SIP/2.0/UDP srlab.sr.ntc.nokia.com:5060;maddr=192.168.102.5\r\n""Via: SIP/2.0/UDP 172.21.9.155\r\n""Record-Route: <sip:garage.sr.ntc.nokia.com:5060;maddr=srlab.sr.ntc.nokia.com>\r\n""From: sip:digest@garage.sr.ntc.nokia.com\r\n""To: sip:digest@garage.sr.ntc.nokia.com\r\n""Call-ID: 982773899-reg@172.21.9.155\r\n""CSeq: 1 REGISTER\r\n""WWW-Authenticate: Digest realm=\"garage.sr.ntc.nokia.com\",\r\n"" nonce=\"MjAwMS0wMS0yMSAxNTowODo1OA==\", algorithm=MD5, qop=\"auth\"\r\n""Proxy-Authenticate: Digest realm=\"IndigoSw\", domain=\"sip:indigosw.com\", ""nonce=\"V2VkIEF1ZyAxNSAxODoxMzozMiBCU1QgMjAwMVtCQDJkYjE5ZA==\", ""opaque=\"NzA3ZjJhYzU4MGY3MzU0MQ==\", stale=false, ""algorithm=md5, algorithm=sha1, qop=\"auth\"\r\n" /* , qop=\"auth, auth-int\"\r */"\r\n"); sip = sip_object(msg); TEST_1(home && msg && sip); TEST_1(sip->sip_size >= sizeof *sip); TEST_1(sip_is_status((sip_header_t *)sip->sip_status)); TEST_1(sip_is_via((sip_header_t *)sip->sip_via)); TEST_1(sip_is_via((sip_header_t *)sip->sip_via->v_next)); TEST_1(sip_is_record_route((sip_header_t *)sip->sip_record_route)); TEST_1(sip_is_from((sip_header_t *)sip->sip_from)); TEST_1(sip_is_to((sip_header_t *)sip->sip_to)); TEST_1(sip_is_call_id((sip_header_t *)sip->sip_call_id)); TEST_1(sip_is_cseq((sip_header_t *)sip->sip_cseq)); TEST_1(sip_is_www_authenticate( (sip_header_t *)sip->sip_www_authenticate)); TEST_1(sip_complete_message(msg) == 0); TEST_1(sip_is_content_length((sip_header_t *)sip->sip_content_length)); TEST_P(sip->sip_content_length->l_common->h_succ, sip->sip_separator); lst = tl_list(SIPTAG_VIA(sip->sip_via), SIPTAG_RECORD_ROUTE(sip->sip_record_route), TAG_SKIP(2), SIPTAG_CSEQ(sip->sip_cseq), SIPTAG_PAYLOAD(sip->sip_payload), TAG_NULL()); filter1 = tl_list(SIPTAG_VIA(0), TAG_NULL()); filter2 = tl_list(SIPTAG_CALL_ID(0), SIPTAG_FROM(0), SIPTAG_ROUTE(0), SIPTAG_CSEQ(0), TAG_NULL()); filter3 = tl_list(SIPTAG_CSEQ(0), SIPTAG_CONTENT_LENGTH(0), TAG_NULL()); filter4 = tl_list(SIPTAG_STATUS(0), SIPTAG_VIA(0), SIPTAG_RECORD_ROUTE(0), SIPTAG_FROM(0), SIPTAG_TO(0), SIPTAG_CALL_ID(0), SIPTAG_CSEQ(0), SIPTAG_WWW_AUTHENTICATE(0), SIPTAG_PROXY_AUTHENTICATE(0), SIPTAG_CONTENT_LENGTH(0), TAG_NULL()); TEST_1(lst && filter1 && filter2 && filter3 && filter4); b1 = tl_afilter(home, filter1, lst); TEST_SIZE(tl_len(b1), 2 * sizeof(tagi_t)); TEST_1(((sip_via_t *)b1->t_value)->v_next); xtra = sip_header_size((sip_header_t *)sip->sip_via); xtra += SU_ALIGN(xtra); xtra += sip_header_size((sip_header_t *)sip->sip_via->v_next); TEST_SIZE(tl_xtra(b1, 0), xtra); dup = tl_adup(home, lst); TEST_SIZE(tl_len(dup), tl_len(lst)); TEST_SIZE(tl_xtra(dup, 0), tl_xtra(lst, 0)); tl_vfree(lst); lst = tl_list(SIPTAG_SIP(sip), TAG_NULL()); b2 = tl_afilter(home, filter2, lst); TEST_SIZE(tl_len(b2), 4 * sizeof(tagi_t)); xtra = 0; xtra += XTRA(xtra, sip->sip_call_id); xtra += XTRA(xtra, sip->sip_from); xtra += XTRA(xtra, sip->sip_cseq); TEST_SIZE(tl_xtra(b2, 0), xtra); b3 = tl_afilter(home, filter3, lst); TEST_SIZE(tl_len(b3), 3 * sizeof(tagi_t)); TEST_SIZE(tl_xtra(b3, 0), sizeof(sip_content_length_t) + sizeof(sip_cseq_t)); b4 = tl_afilter(home, filter4, lst); TEST_SIZE(tl_len(b4), 11 * sizeof(tagi_t)); xtra = 0; xtra += XTRA(xtra, sip->sip_status); xtra += XTRA(xtra, sip->sip_via); xtra += XTRA(xtra, sip->sip_via->v_next); xtra += XTRA(xtra, sip->sip_record_route); xtra += XTRA(xtra, sip->sip_from); xtra += XTRA(xtra, sip->sip_to); xtra += XTRA(xtra, sip->sip_call_id); xtra += XTRA(xtra, sip->sip_cseq); xtra += XTRA(xtra, sip->sip_www_authenticate); xtra += XTRA(xtra, sip->sip_proxy_authenticate); xtra += XTRA(xtra, sip->sip_content_length); TEST_SIZE(tl_xtra(b4, 0), xtra); tl_vfree(filter1); tl_vfree(filter2); tl_vfree(filter3); tl_vfree(filter4); tl_vfree(lst); su_home_check(home); su_free(home, b4); su_free(home, b3); su_free(home, b2); su_free(home, dup); su_free(home, b1); su_home_check(home); su_home_unref(home); msg_destroy(msg); END();}/** Test error messages */static int response_phrase_test(void){ BEGIN(); { struct { int status; char const *phrase; } const errors[] = { { SIP_100_TRYING }, { SIP_180_RINGING }, { SIP_181_CALL_IS_BEING_FORWARDED }, { SIP_182_QUEUED }, { SIP_183_SESSION_PROGRESS }, { SIP_200_OK }, { SIP_202_ACCEPTED }, { SIP_300_MULTIPLE_CHOICES }, { SIP_301_MOVED_PERMANENTLY }, { SIP_302_MOVED_TEMPORARILY }, { SIP_305_USE_PROXY }, { SIP_380_ALTERNATIVE_SERVICE }, { SIP_400_BAD_REQUEST }, { SIP_401_UNAUTHORIZED }, { SIP_402_PAYMENT_REQUIRED }, { SIP_403_FORBIDDEN }, { SIP_404_NOT_FOUND }, { SIP_405_METHOD_NOT_ALLOWED }, { SIP_406_NOT_ACCEPTABLE }, { SIP_407_PROXY_AUTH_REQUIRED }, { SIP_408_REQUEST_TIMEOUT }, { SIP_409_CONFLICT }, { SIP_410_GONE }, { SIP_411_LENGTH_REQUIRED }, { SIP_413_REQUEST_TOO_LARGE }, { SIP_414_REQUEST_URI_TOO_LONG }, { SIP_415_UNSUPPORTED_MEDIA }, { SIP_416_UNSUPPORTED_URI }, { SIP_420_BAD_EXTENSION }, { SIP_421_EXTENSION_REQUIRED }, { SIP_422_SESSION_TIMER_TOO_SMALL }, { SIP_423_INTERVAL_TOO_BRIEF }, { SIP_423_REGISTRATION_TOO_BRIEF }, { SIP_480_TEMPORARILY_UNAVAILABLE }, { SIP_481_NO_TRANSACTION }, { SIP_481_NO_CALL }, { SIP_482_LOOP_DETECTED }, { SIP_483_TOO_MANY_HOPS }, { SIP_484_ADDRESS_INCOMPLETE }, { SIP_485_AMBIGUOUS }, { SIP_486_BUSY_HERE }, { SIP_487_REQUEST_TERMINATED }, { SIP_487_REQUEST_CANCELLED }, { SIP_488_NOT_ACCEPTABLE }, { SIP_489_BAD_EVENT }, { SIP_491_REQUEST_PENDING }, { SIP_493_UNDECIPHERABLE }, { SIP_500_INTERNAL_SERVER_ERROR }, { SIP_501_NOT_IMPLEMENTED }, { SIP_502_BAD_GATEWAY }, { SIP_503_SERVICE_UNAVAILABLE }, { SIP_504_GATEWAY_TIME_OUT }, { SIP_505_VERSION_NOT_SUPPORTED }, { SIP_513_MESSAGE_TOO_LARGE }, { SIP_600_BUSY_EVERYWHERE }, { SIP_603_DECLINE }, { SIP_604_DOES_NOT_EXIST_ANYWHERE }, { SIP_606_NOT_ACCEPTABLE }, { 0, NULL } }; int i; for (i = 0; errors[i].status; i++) TEST_S(errors[i].phrase, sip_status_phrase(errors[i].status)); } END();}/** Test parser and header manipulation */static int parser_test(void){ msg_t *msg; sip_t *sip; su_home_t *home; sip_route_t *r; sip_request_t sip_request[1] = { SIP_REQUEST_INIT() }; sip_status_t sip_status[1] = { SIP_STATUS_INIT() }; sip_header_t sip_unknown[1] = { SIP_UNKNOWN_INIT() }; sip_separator_t sip_separator[1] = { SIP_SEPARATOR_INIT() }; sip_payload_t sip_payload[1] = { SIP_PAYLOAD_INIT() }; sip_via_t sip_via[1] = { SIP_VIA_INIT() }; sip_route_t sip_route[1] = { SIP_ROUTE_INIT() }; sip_record_route_t sip_record_route[1] = { SIP_RECORD_ROUTE_INIT() }; sip_max_forwards_t sip_max_forwards[1] = { SIP_MAX_FORWARDS_INIT() }; sip_from_t sip_from[1] = { SIP_FROM_INIT() }; sip_to_t sip_to[1] = { SIP_TO_INIT() }; sip_call_id_t sip_call_id[1] = { SIP_CALL_ID_INIT() }; sip_cseq_t sip_cseq[1] = { SIP_CSEQ_INIT() }; sip_contact_t sip_contact[1] = { SIP_CONTACT_INIT() }; sip_expires_t sip_expires[1] = { SIP_EXPIRES_INIT() }; sip_date_t sip_date[1] = { SIP_DATE_INIT() }; sip_retry_after_t sip_retry_after[1] = { SIP_RETRY_AFTER_INIT() }; sip_timestamp_t sip_timestamp[1] = { SIP_TIMESTAMP_INIT() }; sip_subject_t sip_subject[1] = { SIP_SUBJECT_INIT() }; sip_priority_t sip_priority[1] = { SIP_PRIORITY_INIT() }; sip_call_info_t sip_call_info[1] = { SIP_CALL_INFO_INIT() }; sip_organization_t sip_organization[1] = { SIP_ORGANIZATION_INIT() }; sip_server_t sip_server[1] = { SIP_SERVER_INIT() }; sip_user_agent_t sip_user_agent[1] = { SIP_USER_AGENT_INIT() }; sip_in_reply_to_t sip_in_reply_to[1] = { SIP_IN_REPLY_TO_INIT() }; sip_accept_t sip_accept[1] = { SIP_ACCEPT_INIT() }; sip_accept_encoding_t sip_accept_encoding[1] = { SIP_ACCEPT_ENCODING_INIT() }; sip_accept_language_t sip_accept_language[1] = { SIP_ACCEPT_LANGUAGE_INIT() }; sip_session_expires_t sip_session_expires[1] = { SIP_SESSION_EXPIRES_INIT() }; sip_min_se_t sip_min_se[1] = { SIP_MIN_SE_INIT() }; sip_allow_t sip_allow[1] = { SIP_ALLOW_INIT() }; sip_require_t sip_require[1] = { SIP_REQUIRE_INIT() }; sip_proxy_require_t sip_proxy_require[1] = { SIP_PROXY_REQUIRE_INIT() }; sip_supported_t sip_supported[1] = { SIP_SUPPORTED_INIT() }; sip_unsupported_t sip_unsupported[1] = { SIP_UNSUPPORTED_INIT() };#if SIP_HAVE_ENCRYPTION sip_encryption_t sip_encryption[1] = { SIP_ENCRYPTION_INIT() };#endif#if SIP_HAVE_RESPONSE_KEY sip_response_key_t sip_response_key[1] = { SIP_RESPONSE_KEY_INIT() };#endif sip_proxy_authenticate_t sip_proxy_authenticate[1] = { SIP_PROXY_AUTHENTICATE_INIT() }; sip_proxy_authorization_t sip_proxy_authorization[1] = { SIP_PROXY_AUTHORIZATION_INIT() }; sip_authorization_t sip_authorization[1] = { SIP_AUTHORIZATION_INIT() }; sip_www_authenticate_t sip_www_authenticate[1] = { SIP_WWW_AUTHENTICATE_INIT() }; sip_error_info_t sip_error_info[1] = { SIP_ERROR_INFO_INIT() }; sip_warning_t sip_warning[1] = { SIP_WARNING_INIT() }; sip_mime_version_t sip_mime_version[1] = { SIP_MIME_VERSION_INIT() }; sip_content_type_t sip_content_type[1] = { SIP_CONTENT_TYPE_INIT() }; sip_content_encoding_t sip_content_encoding[1] = { SIP_CONTENT_ENCODING_INIT() }; sip_content_disposition_t sip_content_disposition[1] = { SIP_CONTENT_DISPOSITION_INIT() }; sip_content_length_t sip_content_length[1] = { SIP_CONTENT_LENGTH_INIT() }; BEGIN(); home = su_home_new(sizeof *home); msg = read_message(MSG_DO_EXTRACT_COPY, "INVITE sip:John_Smith@tct.hut.fi SIP/2.0\r\n" "To: John Smith <sip:John_Smith@tct.hut.fi:5066;user=ip;maddr=131.228.16.2>\r\n" " ; tag = deadbeef\r\n" "From: http://www.cs.columbia.edu\r\n" "Call-ID: 0ha0isndaksdj@10.1.2.3\r\n" "CSeq : 8 INVITE\r\n" "Via: SIP/2.0/UDP 135.180.130.133\r\n" "Route: <sip:1@a;lr>, sip:2@b;lr=2, <sip:3@c;lr=3>\r\n" "Route: <sip:1@d;lr=4>\r\n" "Route: sip:2@e;lr=5, <sip:3@f;lr=6>\r\n" "Route: <sip:1@g;lr=7>, <sip:2@h>;lr=8\r\n" "Content-Type: application/sdp\r\n" "Contact: Joe Bob Briggs <urn:ipaddr:122.1.2.3> ; bar=\"foo baa\", sip:kuik@foo.invalid\r\n" "Via: SIP/2.0/UDP [aa:bb::1]:5061\r\n" "\r\n" "v=0\r\n" "o=mhandley 29739 7272939 IN IP4 126.5.4.3\r\n" "c=IN IP4 135.180.130.88\r\n" "m=audio 492170 RTP/AVP 0 12\r\n" "m=video 3227 RTP/AVP 31\r\n" "a=rtpmap:31 LPC\r\n"); sip = sip_object(msg); TEST_1(home && msg && sip); TEST_1(sip_is_request((sip_header_t *)sip->sip_request)); TEST_1(sip->sip_via); TEST_1(sip->sip_via->v_next); TEST_1(sip->sip_via->v_next->v_next == NULL); TEST_1(sip_sanity_check(sip) == 0); TEST_1(r = sip->sip_route); TEST_1(r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); TEST_1(!r->r_next); TEST_1(r = sip_route_fix(sip->sip_route)); TEST_1(!r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); TEST_1(!r->r_next); /* Quiet lots of warnings */ #define _msg_header_offset msg_header_offset #define msg_header_offset(msg, sip, h) \ _msg_header_offset(msg, (msg_pub_t *)sip, (msg_header_t *)h) TEST_P(msg_header_offset(msg, sip, sip_request), &sip->sip_request); TEST_P(msg_header_offset(msg, sip, sip_status), &sip->sip_status); TEST_P(msg_header_offset(msg, sip, sip_unknown), &sip->sip_unknown); TEST_P(msg_header_offset(msg, sip, sip_separator), &sip->sip_separator); TEST_P(msg_header_offset(msg, sip, sip_payload), &sip->sip_payload); TEST_P(msg_header_offset(msg, sip, sip_via), &sip->sip_via); TEST_P(msg_header_offset(msg, sip, sip_route), &sip->sip_route); TEST_P(msg_header_offset(msg, sip, sip_record_route), &sip->sip_record_route); TEST_P(msg_header_offset(msg, sip, sip_max_forwards), &sip->sip_max_forwards); TEST_P(msg_header_offset(msg, sip, sip_from), &sip->sip_from); TEST_P(msg_header_offset(msg, sip, sip_to), &sip->sip_to); TEST_P(msg_header_offset(msg, sip, sip_call_id), &sip->sip_call_id); TEST_P(msg_header_offset(msg, sip, sip_cseq), &sip->sip_cseq); TEST_P(msg_header_offset(msg, sip, sip_contact), &sip->sip_contact); TEST_P(msg_header_offset(msg, sip, sip_expires), &sip->sip_expires); TEST_P(msg_header_offset(msg, sip, sip_date), &sip->sip_date); TEST_P(msg_header_offset(msg, sip, sip_retry_after), &sip->sip_retry_after); TEST_P(msg_header_offset(msg, sip, sip_timestamp), &sip->sip_timestamp); TEST_P(msg_header_offset(msg, sip, sip_subject), &sip->sip_subject); TEST_P(msg_header_offset(msg, sip, sip_priority), &sip->sip_priority); TEST_P(msg_header_offset(msg, sip, sip_call_info), &sip->sip_call_info); TEST_P(msg_header_offset(msg, sip, sip_organization), &sip->sip_organization); TEST_P(msg_header_offset(msg, sip, sip_server), &sip->sip_server); TEST_P(msg_header_offset(msg, sip, sip_user_agent), &sip->sip_user_agent);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -