⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_msg.c

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 C
📖 第 1 页 / 共 4 页
字号:
  {    su_home_t home[1] = { SU_HOME_INIT(home) };    msg_content_type_t *c;        c = msg_content_type_format(home, "%s/%s;%s;%s;%s;%s;%s;%s",				"text", "plain",				"charset=iso-8859-15",				"format=flowed",				"q=0.999",				"msg-size=782572564",				"name-space-url=\"http://www.nokia.com/foo\"",				"foo=bar");    su_home_deinit(home);  }  {    /* Test parameter handling */    su_home_t home[1] = { SU_HOME_INIT(home) };    msg_content_encoding_t *ce;    ce = msg_content_encoding_make(home, "zip, zap, zup, lz, zl, zz, ll");    TEST_1(ce);    TEST_S(msg_header_find_param(ce->k_common, "zz"), "");    TEST_S(msg_header_find_item(ce->k_common, "zz"), "zz");    TEST_P(msg_header_find_param(ce->k_common, "k"), NULL);    TEST(msg_header_add_param(home, ce->k_common, "zip"), 0);    TEST(msg_header_remove_param(ce->k_common, "zip"), 1);    TEST_S(msg_header_find_param(ce->k_common, "zip"), "");    TEST(msg_header_remove_param(ce->k_common, "zip"), 1);    TEST_P(msg_header_find_param(ce->k_common, "zip"), NULL);    TEST(msg_header_remove_param(ce->k_common, "zip"), 0);    TEST(msg_header_replace_param(home, ce->k_common, "zip=zap"), 0);    TEST_S(msg_header_find_param(ce->k_common, "zip=1"), "zap");    TEST(msg_header_replace_param(home, ce->k_common, "zip=zup"), 1);    TEST_S(msg_header_find_param(ce->k_common, "zip"), "zup");    su_home_deinit(home);  }  END();}int hash_test(void){  int i, j, hash = 0;  msg_mclass_t const *mc = msg_test_mclass;  msg_hclass_t *hc;    BEGIN();  for (i = 0; i < mc->mc_hash_size; i++) {    hc = mc->mc_hash[i].hr_class;    if (hc == NULL)      continue;    hash = msg_header_name_hash(hc->hc_name, NULL);    TEST(hash, hc->hc_hash);    /* Cross-check hashes */    for (j = i + 1; j < mc->mc_hash_size; j++) {      if (mc->mc_hash[j].hr_class == NULL)	continue;      if (hc->hc_hash == mc->mc_hash[j].hr_class->hc_hash)	fprintf(stderr, "\t%s and %s have same hash\n",		hc->hc_name, mc->mc_hash[j].hr_class->hc_name);      TEST_1(hc->hc_hash != mc->mc_hash[j].hr_class->hc_hash);    }  }  END();}msg_t *read_msg(char const buffer[]){  return msg_make(msg_test_mclass, MSG_DO_EXTRACT_COPY, buffer, -1);}/**Check if header chain contains any loops.  * * @return * Return 0 if no loop, -1 otherwise. */static int msg_chain_loop(msg_header_t const *h){  msg_header_t const *h2;  if (!h) return 0;  for (h2 = h->sh_succ; h && h2 && h2->sh_succ; h = h->sh_succ) {    if (h == h2 || h == h2->sh_succ)      return 1;    h2 = h2->sh_succ->sh_succ;    if (h == h2)      return 1;  }  return 0;}/** Check header chain consistency.  * * @return * Return 0 if consistent, number of errors otherwise. */staticint msg_chain_errors(msg_header_t const *h){  if (msg_chain_loop(h))    return -1;    for (; h; h = h->sh_succ) {    if (h->sh_succ && h->sh_succ->sh_prev != &h->sh_succ)      return -1;    if (h->sh_prev && h != (*h->sh_prev))      return -1;  }  return 0;}int test_msg_parsing(void){  msg_t *msg, *orig;  su_home_t *home;  msg_test_t *tst, *otst;  msg_request_t *request;  msg_status_t *status;  msg_content_location_t *location;  msg_content_language_t *language;  msg_accept_language_t *se;  msg_separator_t *separator;  msg_payload_t *payload;  BEGIN();  msg = read_msg("GET a-life HTTP/1.1" CRLF		 "Content-Length: 6" CRLF		 "Accept-Language: en;q=0.8, fi, se ; q = 0.6" CRLF		 "Foo: bar" CRLF		 CRLF		 "test" CRLF);  home = msg_home(msg);  tst = msg_test_public(msg);  TEST_1(msg);  TEST_1(home);  TEST_1(tst);  TEST_P(tst->msg_error, NULL);  TEST_1(tst->msg_accept_language);  TEST_1(status = msg_status_make(home, "HTTP/1.1 200 Ok"));  TEST(msg_header_insert(msg, (msg_pub_t *)tst, (msg_header_t *)status), 0);  TEST_P(tst->msg_status, status); TEST_P(tst->msg_request, NULL);  TEST_1(request = msg_request_make(home, "GET a-wife HTTP/1.0"));  TEST(msg_header_insert(msg, (msg_pub_t *)tst, (msg_header_t *)request), 0);  TEST_P(tst->msg_request, request); TEST_P(tst->msg_status, NULL);  TEST_1(separator = msg_separator_make(home, "\r\n"));  TEST(msg_header_insert(msg, (msg_pub_t *)tst, (msg_header_t *)separator), 0);  TEST_P(tst->msg_separator, separator);   TEST_P(separator->sep_common->h_succ, tst->msg_payload);  /* Try to add a new payload */  TEST_1(payload = msg_payload_make(home, "foofaa\r\n"));  TEST(msg_header_insert(msg, (msg_pub_t *)tst, (msg_header_t *)payload), 0);  /* It is appended */  TEST_P(tst->msg_payload->pl_next, payload);   TEST_P(tst->msg_payload->pl_common->h_succ, payload);  {    msg_param_t vs;    int vi = 0;    msg_param_t foo = "foo=bar";    vs = NULL;    MSG_PARAM_MATCH(vs, foo, "foo");     TEST_S(vs, "bar");    vs = NULL;    MSG_PARAM_MATCH(vs, foo, "fo");     TEST_P(vs, NULL);    vi = 0;    MSG_PARAM_MATCH_P(vi, foo, "foo");    TEST(vi, 1);    MSG_PARAM_MATCH_P(vi, foo, "fo");    TEST(vi, 1);    vi = 0;    MSG_PARAM_MATCH_P(vi, foo, "fo");    TEST(vi, 0);  }  msg_destroy(msg);  /* Bug #2624: */  msg = read_msg("GET /replaces HTTP/1.1" CRLF		 "Accept-Encoding: gzip" CRLF		 "Accept-Encoding: bzip2" CRLF		 "Accept-Encoding: deflate" CRLF		 "Accept-Language: en;q=0.8, fi, se ; q = 0.6" CRLF		 );  TEST_1(msg);  tst = msg_test_public(msg);  TEST_1(tst);  {    msg_accept_encoding_t *gzip, *bzip2, *deflate;    msg_accept_encoding_t *lzss;    msg_accept_language_t *en, *fi, *se;    msg_accept_language_t *de, *sv, *sv_fi;    TEST_1(gzip = tst->msg_accept_encoding);    TEST_1(bzip2 = gzip->aa_next);    TEST_1(deflate = bzip2->aa_next);    TEST_1(gzip->aa_common->h_data);    TEST_1(lzss = msg_accept_encoding_make(msg_home(msg), "lzss"));    TEST(msg_header_replace(msg, (msg_pub_t *)tst, (void *)bzip2, (void *)lzss), 0);    TEST_1(gzip->aa_common->h_data);    TEST_1(en = tst->msg_accept_language);    TEST_1(fi = en->aa_next);    TEST_1(se = fi->aa_next);    TEST_S(en->aa_value, "en");    TEST_M(en->aa_common->h_data, 	   "Accept-Language: en;q=0.8, fi, se ; q = 0.6" CRLF,	   en->aa_common->h_len);    TEST_P((char *)en->aa_common->h_data + en->aa_common->h_len, 	   fi->aa_common->h_data);    TEST(fi->aa_common->h_len, 0);    TEST_P((char *)en->aa_common->h_data + en->aa_common->h_len, 	   se->aa_common->h_data);    TEST(se->aa_common->h_len, 0);    TEST_1(de = msg_accept_language_make(msg_home(msg), "de;q=0.3"));    TEST(msg_header_replace(msg, (msg_pub_t *)tst, (void *)se, (void *)de), 0);    TEST_P(en->aa_common->h_data, NULL);    TEST_P(en->aa_next, fi);    TEST_P(fi->aa_next, de);    TEST_P(de->aa_next, NULL);    TEST_P(en->aa_common->h_succ, fi);     TEST_P(en->aa_common->h_prev, &deflate->aa_common->h_succ);    TEST_P(fi->aa_common->h_succ, de);     TEST_P(fi->aa_common->h_prev, &en->aa_common->h_succ);    TEST_P(de->aa_common->h_succ, NULL);    TEST_P(de->aa_common->h_prev, &fi->aa_common->h_succ);    TEST_P(se->aa_next, NULL);    TEST_P(se->aa_common->h_succ, NULL);    TEST_P(se->aa_common->h_prev, NULL);    TEST_1(sv = msg_accept_language_make(msg_home(msg), 					 "sv;q=0.6,sv_FI;q=0.7"));    TEST_1(sv_fi = sv->aa_next);    TEST(msg_header_replace(msg, (msg_pub_t *)tst, (void *)fi, (void *)sv), 0);    TEST_P(en->aa_next, sv);    TEST_P(sv->aa_next->aa_next, de);     TEST_P(de->aa_next, NULL);    TEST_P(en->aa_common->h_succ, sv);     TEST_P(en->aa_common->h_prev, &deflate->aa_common->h_succ);    TEST_P(sv->aa_common->h_succ, sv_fi);     TEST_P(sv->aa_common->h_prev, &en->aa_common->h_succ);    TEST_P(sv_fi->aa_common->h_succ, de);     TEST_P(sv_fi->aa_common->h_prev, &sv->aa_common->h_succ);    TEST_P(de->aa_common->h_succ, NULL);    TEST_P(de->aa_common->h_prev, &sv_fi->aa_common->h_succ);    TEST(msg_serialize(msg, (msg_pub_t *)tst), 0);  }  /* Bug #2429 */  orig = read_msg("GET a-life HTTP/1.1" CRLF		 "Foo: bar" CRLF		 "Content-Length: 6" CRLF		 CRLF		 "test" CRLF 		 "extra stuff" CRLF);  TEST_1(orig);  otst = msg_test_public(orig);  TEST_1(otst);  msg = msg_copy(orig);  tst = msg_test_public(msg);  TEST_1(tst);  home = msg_home(msg);  TEST_1(request = msg_request_make(home, "GET a-wife HTTP/1.1"));  TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)request), 0);  TEST_1(location = 	 msg_content_location_make(home, "http://localhost:8080/wife"));  TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)location), 0);  TEST(msg_serialize(msg, (msg_pub_t *)tst), 0);  TEST_1(msg_prepare(msg) > 0);  TEST_1(language = 	 msg_content_language_make(home, "se-FI, fi-FI, sv-FI"));  TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)language), 0);  TEST_1(se = msg_accept_language_make(home, "se, fi, sv"));  TEST_1(se->aa_next);  TEST_1(se->aa_next->aa_next);  TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)se), 0);    TEST(msg_serialize(msg, (msg_pub_t *)tst), 0);  TEST_1(msg_prepare(msg) > 0);  {    char const encoded[] =      "GET a-wife HTTP/1.1\r\n";    TEST_SIZE(request->rq_common->h_len, strlen(encoded));    TEST_M(request->rq_common->h_data, encoded, request->rq_common->h_len);  }  {    char const encoded[] =      "Content-Location: http://localhost:8080/wife\r\n";    TEST_SIZE(location->g_common->h_len, strlen(encoded));    TEST_M(location->g_common->h_data, encoded, location->g_common->h_len);  }  {    char const encoded[] =      "Content-Language: se-FI, fi-FI, sv-FI\r\n";    TEST_SIZE(language->k_common->h_len, strlen(encoded));    TEST_M(language->k_common->h_data, encoded, language->k_common->h_len);  }  {    char const encoded[] = "Accept-Language: se, fi, sv\r\n";    TEST_SIZE(se->aa_common->h_len, strlen(encoded));    TEST_M(se->aa_common->h_data, encoded, se->aa_common->h_len);    TEST_P((char *)se->aa_common->h_data + se->aa_common->h_len, 	   se->aa_next->aa_common->h_data);    TEST_P((char *)se->aa_common->h_data + se->aa_common->h_len, 	   se->aa_next->aa_next->aa_common->h_data);  }  {    size_t size = SIZE_MAX;    char *s;    char body[66 * 15 + 1];    int i;    msg_payload_t *pl;    /* Bug #1726034 */    for (i = 0; i < 15; i++)      strcpy(body + i * 66, 	     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"	     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r\n");    pl = msg_payload_make(msg_home(msg), body);    TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)pl), 0);    s = msg_as_string(msg_home(msg), msg, NULL, 0, &size);    TEST_S(s, "GET a-wife HTTP/1.1" CRLF"Foo: bar" CRLF"Content-Length: 6" CRLF"Content-Location: http://localhost:8080/wife\r\n""Content-Language: se-FI, fi-FI, sv-FI\r\n""Accept-Language: se, fi, sv\r\n"CRLF"test" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" CRLF);  }  msg_destroy(msg);  END();}static int test_warning(void){  msg_warning_t *w;  su_home_t *home;  char buf[64];  BEGIN();  TEST_1(home = su_home_new(sizeof *home));  TEST_1((w = msg_warning_make(home, 			       "399 host:5060 \"Ok\", "			       "399 [::1]:39999 \"foo\\\" bar\"")));  TEST(w->w_code, 399);  TEST_S(w->w_host, "host");  TEST_S(w->w_port, "5060");  TEST_S(w->w_text, "Ok");  TEST_1(w = w->w_next);  TEST(w->w_code, 399);  TEST_S(w->w_host, "[::1]");  TEST_S(w->w_port, "39999");  TEST_S(w->w_text, "foo\" bar");  TEST_1(w->w_next == NULL);  TEST_1(msg_warning_e(buf, sizeof buf, (msg_header_t *)w, 0) > 0);  TEST_S(buf, "399 [::1]:39999 \"foo\\\" bar\"");  su_home_unref(home);  END();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -