📄 torture_sip.c
字号:
s = tls; end = s + strlen(s); TEST_SIZE(sip_transport_d(&s, &result), 0); TEST_P(s, end); TEST_S(result, sip_transport_tls); s = sctp; end = s + strlen(s); TEST_SIZE(sip_transport_d(&s, &result), 0); TEST_P(s, end); TEST_S(result, sip_transport_sctp); s = dtls; end = s + strlen(s); TEST_SIZE(sip_transport_d(&s, &result), 0); TEST_P(s, end); TEST_S(result, "SIP/2.0/TLS-UDP"); s = tls_sctp; end = s + strlen(s); TEST_SIZE(sip_transport_d(&s, &result), 0); TEST_P(s, end); TEST_S(result, "SIP/2.0/TLS-SCTP"); } END();}/* Test <sip_basic.c> functions. */int test_basic(void){ su_home_t *home = su_home_new(sizeof *home); BEGIN(); TEST_1(home); { sip_request_t *rq, *rq1; rq = sip_request_make(home, "INVITE sip:joe@example.com SIP/2.1"); TEST_1(rq); TEST(rq->rq_method, sip_method_invite); TEST_S(rq->rq_method_name, "INVITE"); TEST_1(rq1 = sip_request_dup(home, rq)); su_free(home, rq); su_free(home, rq1); rq = sip_request_make(home, "invite sip:joe@example.com SIP/2.0"); TEST_1(rq); TEST(rq->rq_method, sip_method_unknown); TEST_S(rq->rq_method_name, "invite"); TEST_1(rq1 = sip_request_dup(home, rq)); su_free(home, rq); su_free(home, rq1); TEST_1(!sip_request_create(home, sip_method_unknown, NULL, (void *)"sip:joe@example.com", NULL)); TEST_1(rq = sip_request_create(home, sip_method_unknown, "invite", (void *)"sip:joe@example.com", NULL)); TEST(rq->rq_method, sip_method_unknown); TEST_S(rq->rq_method_name, "invite"); su_free(home, rq); TEST_1(rq = sip_request_create(home, sip_method_unknown, "INVITE", (void *)"sip:joe@example.com", NULL)); TEST(rq->rq_method, sip_method_invite); TEST_S(rq->rq_method_name, "INVITE"); su_free(home, rq); TEST_1(rq = sip_request_create(home, sip_method_invite, "foobar", (void *)"sip:joe@example.com", NULL)); TEST(rq->rq_method, sip_method_invite); TEST_S(rq->rq_method_name, "INVITE"); su_free(home, rq); } { sip_status_t *st; TEST_1(st = sip_status_make(home, "SIP/2.0 200 OK")); su_free(home, st); TEST_1(st = sip_status_make(home, "SIP/2.0 200")); su_free(home, st); TEST_1(!sip_status_make(home, "SIP2.0 200 OK")); TEST_1(!sip_status_create(home, 99, NULL, "SIP/2.1")); TEST_1(!sip_status_create(home, 700, NULL, "SIP/2.1")); TEST_1(st = sip_status_create(home, 200, "Ok", "SIP/2.2")); su_free(home, st); TEST_1(st = sip_status_create(home, 200, NULL, "SIP/2.0")); su_free(home, st); TEST_1(st = sip_status_create(home, 200, NULL, NULL)); su_free(home, st); TEST_1(st = sip_status_create(home, 699, NULL, NULL)); su_free(home, st); } { sip_payload_t *pl; TEST_1(pl = sip_payload_create(home, "foo", 3)); su_free(home, pl); TEST_1(pl = sip_payload_create(home, NULL, 3)); su_free(home, pl); } { sip_separator_t *sep; TEST_1(!sip_separator_make(home, "foo")); TEST_1(sep = sip_separator_create(home)); su_free(home, sep); } /* Test name-addr things */ { su_home_t home[1] = { SU_HOME_INIT(home) }; char const *display; url_t url[1]; msg_param_t const *params; char const *comment; char const na[] = "Raaka Arska <tel:+358501970>;param=1;humppa (test) "; char const na2[] = "tel:+358501970;param=1;humppa (test) "; char *s, buf[sizeof(na)], ebuf[sizeof(na) + 32]; s = strcpy(buf, na); TEST_1(sip_name_addr_d(home, &s, &display, url, ¶ms, &comment) >= 0); TEST_P(s, buf + strlen(na)); TEST_1(display); TEST(url->url_type, url_tel); TEST_1(params); TEST_1(comment); TEST_SIZE(sip_name_addr_e(ebuf, sizeof(ebuf), 0, display, 0, url, params, comment), strlen(na) - 1); TEST_1(strncmp(na, ebuf, strlen(na) - 1) == 0); s = strcpy(buf, na2); TEST_1(sip_name_addr_d(home, &s, &display, url, ¶ms, &comment) >= 0); TEST_S(s, ""); TEST_P(s, buf + strlen(na2)); TEST_1(!display); TEST(url->url_type, url_tel); TEST_1(params); TEST_1(comment); su_home_deinit(home); } { sip_from_t *f; sip_to_t *t, *t2; TEST_1(f = sip_from_create(home, (void *)"sip:joe@bar")); TEST_1(sip_from_add_param(home, f, NULL) == -1); TEST_1(sip_from_add_param(home, f, "tag=tagged") == 0); TEST_S(f->a_tag, "tagged"); TEST_1(sip_from_tag(home, f, "jxahudsf") == -1); while (f->a_params && f->a_params[0]) msg_header_remove_param(f->a_common, f->a_params[0]); TEST_P(f->a_tag, NULL); TEST_1(sip_from_add_param(home, f, "test=1") == 0); TEST_1(sip_from_tag(home, f, "jxahudsf") == 0); TEST_S(f->a_tag, "jxahudsf"); su_free(home, f); TEST_1(!sip_from_create(home, (void *)"sip:joe@[baa")); TEST_1(!sip_from_make(home, (void *)"tester <>;tag=fasjfuios")); TEST_1(f = sip_from_make(home, (void *)"sip:joe@bar (foo)")); su_free(home, f); TEST_1(f = sip_from_make(home, (void *)"<sip:joe@bar;tag=bar> (joe)")); TEST_1(sip_from_tag(home, f, "tag=jxahudsf") == 0); su_free(home, f); TEST_1(f = sip_from_create(home, (void *)"<sip:joe@bar;tag=bar> (joe)")); TEST_1(sip_is_from((sip_header_t*)f)); su_free(home, f); TEST_1(t = sip_to_create(home, (void *)"<sip:joe@bar;tag=bar> (joe)")); TEST_1(sip_is_to((sip_header_t*)t)); TEST_1(sip_to_tag(home, t, "tag=jxahudsf") == 0); TEST_S(t->a_tag, "jxahudsf"); TEST(msg_header_replace_param(home, t->a_common, "tag=bar"), 1); TEST_S(t->a_tag, "bar"); TEST_1(t2 = sip_to_dup(home, t)); TEST_S(t2->a_tag, "bar"); TEST(msg_header_remove_param(t->a_common, "tag"), 1); TEST_P(t->a_tag, NULL); TEST_1(sip_to_add_param(home, t, "tst=1") == 0); TEST_P(t->a_tag, NULL); su_free(home, t); } { sip_call_id_t *i, *i0; TEST_1(i = sip_call_id_create(home, "example.com")); i->i_hash = 0; TEST_1(i0 = sip_call_id_dup(home, i)); su_free(home, i); TEST_1(i = sip_call_id_make(home, i0->i_id)); TEST(i->i_hash, i0->i_hash); su_free(home, i); su_free(home, i0); } { sip_cseq_t *cs, *cs0; TEST_1(cs = sip_cseq_create(home, 123456789, sip_method_invite, "1nvite")); TEST(cs->cs_seq, 123456789); TEST(cs->cs_method, sip_method_invite); TEST_S(cs->cs_method_name, "INVITE"); su_free(home, cs); TEST_1(cs = sip_cseq_create(home, 123456789, sip_method_invite, NULL)); TEST(cs->cs_seq, 123456789); TEST(cs->cs_method, sip_method_invite); TEST_S(cs->cs_method_name, "INVITE"); TEST_1(cs0 = sip_cseq_dup(home, cs)); su_free(home, cs); su_free(home, cs0); TEST_1(!sip_cseq_create(home, 123456789, sip_method_unknown, NULL)); TEST_1(cs = sip_cseq_create(home, 123456789, sip_method_unknown, "invite")); TEST(cs->cs_seq, 123456789); TEST(cs->cs_method, sip_method_unknown); TEST_S(cs->cs_method_name, "invite"); TEST_1(cs0 = sip_cseq_dup(home, cs)); su_free(home, cs); su_free(home, cs0); } { sip_contact_t *m, *m0; TEST_1(!sip_contact_make(home, ",,")); TEST_1(m = sip_contact_create(home, (void *)"sip:joe@bar", "q=0.2", "+message", NULL)); TEST_S(m->m_q, "0.2"); TEST_1(m0 = sip_contact_dup(home, m)); TEST_1(sip_contact_add_param(home, m, "q=0.5") >= 0); TEST_1(sip_contact_add_param(home, m, "video=FALSE") >= 0); TEST_1(sip_contact_add_param(home, m, NULL) == -1); TEST_1(sip_contact_add_param(home, NULL, "video=FALSE") == -1); TEST_1(sip_contact_add_param(home, m, "audio=FALSE") == 0); TEST_1(sip_contact_add_param(home, m, "expires=0") == 0); TEST_S(m->m_q, "0.5"); TEST_S(m->m_expires, "0"); TEST_1(!sip_contact_create(home, (void *)"sip:joe@[baa", "audio", "video", NULL)); TEST_1(sip_header_format(home, sip_contact_class, "*")); su_free(home, m); su_free(home, m0); } { sip_via_t *v; char *s; v = sip_via_make(home, "SIP/2.0/UDP domain.invalid:5060"); TEST_1(v); s = sip_contact_string_from_via(home, v, NULL, v->v_protocol); TEST_S(s, "<sip:domain.invalid;transport=udp>"); su_free(home, v), su_free(home, s); TEST_1(sip_transport_has_tls("SIP/2.0/TLS-SCTP")); TEST_1(sip_transport_has_tls("TLS-UDP")); v = sip_via_make(home, "SIP/2.0/TLS-SCTP domain.invalid"); TEST_1(v); s = sip_contact_string_from_via(home, v, NULL, v->v_protocol); TEST_S(s, "<sips:domain.invalid;transport=tls-sctp>"); su_free(home, v), su_free(home, s); } { sip_expires_t *ex; TEST_1(!sip_expires_make(home, "-12+1")); TEST_1(ex = sip_expires_make(home, "4294967297")); /* XXX */ su_free(home, ex); TEST_1(ex = sip_expires_make(home, "Wed, 25 Mar 2004 14:49:29 GMT")); su_free(home, ex); TEST_1(ex = sip_expires_create(home, 3600)); su_free(home, ex); } { sip_retry_after_t *ra; char const *s; TEST_1(!(ra = sip_retry_after_make(home, "50 (foo"))); TEST_1(ra = sip_retry_after_make(home, "50 (foo) ; duration = 13")); TEST_S(ra->af_duration, "13"); TEST_S(ra->af_comment, "foo"); TEST(msg_header_remove_param(ra->af_common, "duration"), 1); TEST_P(ra->af_duration, NULL); s = sip_header_as_string(home, (void*)ra); TEST_S(s, "50 (foo)"); TEST(msg_header_add_param(home, ra->af_common, "x=z"), 0); s = sip_header_as_string(home, (void*)ra); TEST_S(s, "50 (foo) ;x=z"); su_free(home, ra); } { sip_date_t *d; TEST_1(!(d = sip_date_make(home, "Mon, 30 Feb 1896 23:59:59 GMT"))); su_free(home, d); TEST_1(d = sip_date_create(home, (1<<30))); su_free(home, d); TEST_1(d = sip_date_create(home, 0)); TEST_1(d->d_time != 0); su_free(home, d); } { sip_route_t *r, *r0; TEST_1(!sip_route_make(home, "<sip:foo@[bar:50>;lr")); TEST_1(r = sip_route_make(home, "<sip:foo@[baa::1]:5060>;lr")); TEST_1(r0 = sip_route_dup(home, r)); TEST_1(sip_route_fix(r)); TEST_1(url_has_param(r->r_url, "lr")); su_free(home, r); TEST_1(r = sip_route_create(home, r0->r_url, r0->r_url)); su_free(home, r); su_free(home, r0); } { sip_record_route_t *r, *r0; TEST_1(!sip_record_route_make(home, "<sip:foo@[bar:50>;lr")); TEST_1(!sip_record_route_make(home, "<sip:foo@[baa::1]>;lr bar, sip:foo")); TEST_1(r = sip_record_route_make(home, "<sip:foo@[baa::1]:5060>;lr")); TEST_1(r0 = sip_record_route_dup(home, r)); su_free(home, r); TEST_1(r = sip_route_create(home, r0->r_url, r0->r_url)); su_free(home, r), su_free(home, r0); } { sip_via_t *v, *v0; TEST_1(!sip_via_make(home, ",,")); TEST_1(!sip_via_make(home, "SIP// host:5060 (foo),")); TEST_1(!sip_via_make(home, "SIP/2.0/TCP host:5060 (foo) bar,")); TEST_1(!sip_via_make(home, "SIP/2.0/TCP [3ffe::1:5060 (foo),")); TEST_1(v = sip_via_create(home, "bar.com", "50600", "SIP/2.0/UDP", "hidden", "rport=50601", "comp=sigcomp", "branch=1", "q=0.2", NULL)); TEST_S(v->v_branch, "1"); TEST_S(v->v_rport, "50601"); TEST_S(v->v_comp, "sigcomp"); TEST_1(v = sip_via_make(home, "SIP/2.0/UDP bar.com:50600" " ;hidden;rport=50601;comp=sigcomp;branch=1;ttl=15" " ; maddr=[::227.0.0.1]" " (This is a comment) ")); TEST_S(v->v_ttl, "15"); TEST_S(v->v_maddr, "[::227.0.0.1]"); TEST_S(v->v_branch, "1"); TEST_S(v->v_rport, "50601"); TEST_S(v->v_comp, "sigcomp"); TEST_1(v0 = sip_via_dup(home, v)); TEST(msg_header_add_param(home, v->v_common, "rport"), 0); TEST_S(v->v_rport, ""); TEST(msg_header_remove_param(v->v_common, "comp"), 1); TEST_P(v->v_comp, NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -