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

📄 torture_url.c

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 C
📖 第 1 页 / 共 2 页
字号:
  TEST_1(url_cmp_all(a, b) == 0);  su_home_deinit(home);  END();}int test_fax(void){  /* fax urls */  su_home_t home[1] = { SU_HOME_INIT(home) };  url_t fax[1] = { URL_INIT_AS(fax) };  url_t *u, url[1];  char *tst;  char faxurl[] =     "fax:+12345678"    ";param=1;param=2"    "?From=foo@bar&To=bar@baz#unf";  char fax2[sizeof(faxurl) + 32];  BEGIN();  TEST_S(url_scheme(url_fax), "fax");  fax->url_user = "+12345678";  fax->url_params = "param=1;param=2";  fax->url_headers = "From=foo@bar&To=bar@baz";  fax->url_fragment = "unf";  TEST_1(tst = su_strdup(home, faxurl));  TEST_1(url_d(url, tst) == 0);  TEST_1(url_cmp(fax, url) == 0);  TEST(url->url_type, url_fax);  TEST_1(u = url_hdup(home, url));  TEST(u->url_type, url_fax);  TEST_1(url_cmp(fax, u) == 0);  TEST_SIZE(url_e(fax2, sizeof(fax2), u), strlen(faxurl));  TEST_1(strcmp(fax2, faxurl) == 0);  TEST_SIZE(snprintf(fax2, sizeof(fax2), URL_PRINT_FORMAT, 		     URL_PRINT_ARGS(fax)), strlen(faxurl));  TEST_1(strcmp(fax2, faxurl) == 0);  url_digest(hash1, sizeof(hash1), url, NULL);  url_digest(hash2, sizeof(hash2), (url_t *)faxurl, NULL);  TEST(memcmp(hash1, hash2, sizeof(hash1)), 0);  su_home_deinit(home);  END();}int test_modem(void){  /* modem urls */  su_home_t home[1] = { SU_HOME_INIT(home) };  url_t modem[1] = { URL_INIT_AS(modem) };  url_t *u, url[1];  char *tst;  char modemurl[] =     "modem:+12345678"    ";param=1;param=2"    "?From=foo@bar&To=bar@baz#unf";  char modem2[sizeof(modemurl) + 32];  BEGIN();  TEST_S(url_scheme(url_modem), "modem");  modem->url_user = "+12345678";  modem->url_params = "param=1;param=2";  modem->url_headers = "From=foo@bar&To=bar@baz";  modem->url_fragment = "unf";  TEST_1(tst = su_strdup(home, modemurl));  TEST_1(url_d(url, tst) == 0);  TEST_1(url_cmp(modem, url) == 0);  TEST(url->url_type, url_modem);  TEST_1(u = url_hdup(home, url));  TEST(u->url_type, url_modem);  TEST_1(url_cmp(modem, u) == 0);  TEST_SIZE(url_e(modem2, sizeof(modem2), u), strlen(modemurl));  TEST_1(strcmp(modem2, modemurl) == 0);  TEST_SIZE(snprintf(modem2, sizeof(modem2), URL_PRINT_FORMAT, 		     URL_PRINT_ARGS(modem)), strlen(modemurl));  TEST_1(strcmp(modem2, modemurl) == 0);  url_digest(hash1, sizeof(hash1), url, NULL);  url_digest(hash2, sizeof(hash2), (url_t *)modemurl, NULL);  TEST(memcmp(hash1, hash2, sizeof(hash1)), 0);  su_home_deinit(home);  END();}int test_file(void){  /* Test a url with path like file:/foo/bar  */  char fileurl[] = "file:///foo/bar";  url_t file[1] = { URL_INIT_AS(file) };  su_home_t home[1] = { SU_HOME_INIT(home) };  char *tst;  url_t *u, url[1];  char buf1[sizeof(fileurl) + 32];  char buf2[sizeof(fileurl) + 32];  BEGIN();  TEST_S(url_scheme(url_file), "file");  TEST_1(tst = su_strdup(home, fileurl));  TEST(url_d(url, tst), 0);  TEST_S(url->url_host, "");  file->url_root = '/';  file->url_host = "";  file->url_path = "foo/bar";  TEST(url_cmp(file, url), 0);  TEST(url->url_type, url_file);  TEST_1(u = url_hdup(home, url));  TEST(u->url_type, url_file);  TEST(url_cmp(file, u), 0);  TEST_SIZE(url_e(buf1, sizeof(buf1), u), strlen(fileurl));  TEST_S(buf1, fileurl);  TEST_SIZE(snprintf(buf2, sizeof(buf2), URL_PRINT_FORMAT, URL_PRINT_ARGS(u)), 	    strlen(fileurl));  TEST_S(buf2, fileurl);  url_digest(hash1, sizeof(hash1), url, NULL);  url_digest(hash2, sizeof(hash2), (url_t *)fileurl, NULL);  TEST(memcmp(hash1, hash2, sizeof(hash1)), 0);  su_home_deinit(home);  END();}int test_ldap(void){  /* Test a LDAP url  */  char ldapurl[] = "ldap://cn=Manager,o=nokia:secret@localhost:389/ou=devices,o=nokia";  url_t ldap[1] = { URL_INIT_AS(file) };  su_home_t home[1] = { SU_HOME_INIT(home) };  char *tst;  url_t *u, url[1];  char buf1[sizeof(ldapurl) + 32];  char buf2[sizeof(ldapurl) + 32];  BEGIN();  ldap->url_type = url_unknown;   ldap->url_scheme = "ldap";   /* TEST_S(url_scheme(url_ldap), "ldap"); */  TEST_1(tst = su_strdup(home, ldapurl));  TEST(url_d(url, tst), 0);  TEST_S(url->url_user, "cn=Manager,o=nokia:secret");  /* TEST_S(url->url_password, "secret"); */  TEST_S(url->url_host, "localhost");  TEST_S(url->url_port, "389");  TEST_S(url->url_path, "ou=devices,o=nokia");  ldap->url_user = "cn=Manager,o=nokia";  ldap->url_password = "secret";  ldap->url_user = "cn=Manager,o=nokia:secret", ldap->url_password = NULL;  ldap->url_host = "localhost";  ldap->url_port = "389";  ldap->url_path = "ou=devices,o=nokia";  TEST(url_cmp(ldap, url), 0);  TEST(url->url_type, url_unknown);  TEST_S(url->url_scheme, "ldap");  TEST_1(u = url_hdup(home, url));  TEST(u->url_type, url_unknown);  TEST_S(u->url_scheme, "ldap");  TEST(url_cmp(ldap, u), 0);  TEST_SIZE(url_e(buf1, sizeof(buf1), u), strlen(ldapurl));  TEST_S(buf1, ldapurl);  TEST_SIZE(snprintf(buf2, sizeof(buf2), URL_PRINT_FORMAT, URL_PRINT_ARGS(u)), 	    strlen(ldapurl));  TEST_S(buf2, ldapurl);  url_digest(hash1, sizeof(hash1), url, NULL);  url_digest(hash2, sizeof(hash2), (url_t *)ldapurl, NULL);  TEST(memcmp(hash1, hash2, sizeof(hash1)), 0);  su_home_deinit(home);  END();}int test_rtsp(void){  /* RTSP urls */  su_home_t home[1] = { SU_HOME_INIT(home) };  url_t rtsp[1] = { URL_INIT_AS(rtsp) };  url_t *u, url[1];  char *tst;  char rtspurl[] = "rtsp://example.com:42/barfoo.rm";  char rtspuurl[] = "rtspu://example.com:42/barfoo.rm";  char rtsp2[sizeof(rtspurl) + 32];  BEGIN();  TEST_S(url_scheme(url_rtsp), "rtsp");  TEST_S(url_scheme(url_rtspu), "rtspu");  rtsp->url_root = 1;  rtsp->url_host = "example.com";  rtsp->url_port = "42";  rtsp->url_path = "barfoo.rm";  TEST_1(tst = su_strdup(home, rtspurl));  TEST_1(url_d(url, tst) == 0);  TEST_1(url_cmp(rtsp, url) == 0);  TEST(url->url_type, url_rtsp);  TEST_1(u = url_hdup(home, url));  TEST(u->url_type, url_rtsp);  TEST_1(url_cmp(rtsp, u) == 0);  TEST(url_e(rtsp2, sizeof(rtsp2), u), strlen(rtspurl));  TEST_1(strcmp(rtsp2, rtspurl) == 0);  TEST_SIZE(snprintf(rtsp2, sizeof(rtsp2), URL_PRINT_FORMAT, 		     URL_PRINT_ARGS(rtsp)), strlen(rtspurl));  TEST_1(strcmp(rtsp2, rtspurl) == 0);  url_digest(hash1, sizeof(hash1), url, NULL);  url_digest(hash2, sizeof(hash2), (url_t *)rtspurl, NULL);  TEST(memcmp(hash1, hash2, sizeof(hash1)), 0);  su_home_deinit(home);  rtsp->url_type = url_rtspu, rtsp->url_scheme = "rtspu";  TEST_1(tst = su_strdup(home, rtspuurl));  TEST_1(url_d(url, tst) == 0);  TEST_1(url_cmp(rtsp, url) == 0);  TEST(url->url_type, url_rtspu);  url_digest(hash1, sizeof(hash1), url, NULL);  url_digest(hash2, sizeof(hash2), (url_t *)rtspuurl, NULL);  TEST(memcmp(hash1, hash2, sizeof(hash1)), 0);  su_home_deinit(home);  END();}int test_http(void){  /* http urls */  su_home_t home[1] = { SU_HOME_INIT(home) };  url_t http[1] = { URL_INIT_AS(http) };  url_t *u, url[1];  char *tst;  char httpurl[] =     "http://user:pass@host:32/foo;param=1/bar;param=3"    "?From=foo@bar&To=bar@baz#unf";  char http2[sizeof(httpurl) + 32];  char queryonly[] =     "http://some.host?query";  BEGIN();  TEST_S(url_scheme(url_http), "http");  TEST_S(url_scheme(url_https), "https");  http->url_root = '/';  http->url_user = "user";  http->url_password = "pass";  http->url_host = "host";  http->url_port = "32";  http->url_path = "foo;param=1/bar;param=3";  http->url_headers = "From=foo@bar&To=bar@baz";  http->url_fragment = "unf";  TEST_1(tst = su_strdup(home, httpurl));  TEST_1(url_d(url, tst) == 0);  TEST_1(url_cmp(http, url) == 0);  TEST(url->url_type, url_http);  TEST_1(u = url_hdup(home, url));  TEST(u->url_type, url_http);  TEST_1(url_cmp(http, u) == 0);  TEST_SIZE(url_e(http2, sizeof(http2), u), strlen(httpurl));  TEST_1(strcmp(http2, httpurl) == 0);  TEST_SIZE(snprintf(http2, sizeof(http2), URL_PRINT_FORMAT, 		     URL_PRINT_ARGS(http)), strlen(httpurl));  TEST_1(strcmp(http2, httpurl) == 0);  url_digest(hash1, sizeof(hash1), http, NULL);  url_digest(hash2, sizeof(hash2), (url_t *)httpurl, NULL);  TEST(memcmp(hash1, hash2, sizeof(hash1)), 0);  memset(url, 0, sizeof url);  TEST_1(tst = su_strdup(home, queryonly));  TEST(url_d(url, tst), 0);  TEST_S(url->url_host, "some.host");  TEST_S(url->url_headers, "query");  TEST_S(url->url_params, NULL);  TEST_1(u = url_hdup(home, (void *)"http://[::1]/test;ing?here"));  TEST_S(u->url_host, "[::1]");  TEST_S(u->url_path, "test;ing");  TEST_S(u->url_headers, "here");  url_digest(hash1, sizeof(hash1), u, NULL);  url_digest(hash2, sizeof(hash2), (url_t *)"http://[::1]/test;ing?here", 	     NULL);  TEST(memcmp(hash1, hash2, sizeof(hash1)), 0);      su_home_deinit(home);  END();}int test_sanitizing(void){  url_t url[1];  char www[] = "www.hut.fi";  char ftp[] = "ftp.hut.fi";  char www2[] = "iptel.hut.fi/humppa";  char sip[] = "test.host";  char buf[64];  BEGIN();  TEST_1(url_d(url, www) == 0);  TEST_1(url_sanitize(url) == 0);  TEST(url->url_type, url_http);  snprintf(buf, sizeof(buf), URL_PRINT_FORMAT, URL_PRINT_ARGS(url));  TEST_S(buf, "http://www.hut.fi");  TEST_1(url_d(url, ftp) == 0);  TEST_1(url_sanitize(url) == 0);  TEST(url->url_type, url_ftp);  snprintf(buf, sizeof(buf), URL_PRINT_FORMAT, URL_PRINT_ARGS(url));  TEST_S(buf, "ftp://ftp.hut.fi");  TEST_1(url_d(url, www2) == 0);  TEST_1(url_sanitize(url) == 0);  TEST(url->url_type, url_http);  snprintf(buf, sizeof(buf), URL_PRINT_FORMAT, URL_PRINT_ARGS(url));  TEST_S(buf, "http://iptel.hut.fi/humppa");  TEST_1(url_d(url, sip) == 0);  TEST_1(url_sanitize(url) == 0);  TEST(url->url_type, url_sip);  snprintf(buf, sizeof(buf), URL_PRINT_FORMAT, URL_PRINT_ARGS(url));  TEST_S(buf, "sip:test.host");  END();}int test_tags(void){  url_t u0[1];  url_t *u1 = NULL;  url_t const *u2 = (void *)-1;  url_t const u3[1] = { URL_INIT_AS(sip) };  char c0[] = "http://www.nokia.com";  char const *c1 = "http://goodfeel.nokia.com";  char *c2 = "http://forum.nokia.com";  char const c3[] = "http://www.research.nokia.com";  url_string_t *us0 = NULL;  tagi_t *lst, *dup;    tag_value_t value;  char *s;  su_home_t home[1] = { SU_HOME_INIT(home) };  BEGIN();  TEST(t_scan(urltag_url, home, c0, &value), 0);  TEST_S(s = url_as_string(home, (url_t *)value), c0);  TEST(t_scan(urltag_url, home, c3, &value), 0);  TEST_S(s = url_as_string(home, (url_t *)value), c3);  TEST_1(url_d(u0, c0) == 0);  lst = tl_list(URLTAG_URL(u0),		URLTAG_URL(u1),		URLTAG_URL(u2),		URLTAG_URL(u3),		URLTAG_URL(c0),		URLTAG_URL(c1),		URLTAG_URL(c2),		URLTAG_URL(c3),		URLTAG_URL(us0),		TAG_NULL());  TEST_1(lst);  dup = tl_adup(home, lst);  tl_vfree(lst);  su_free(home, dup);  su_home_deinit(home);  END();}#include <sofia-sip/su_tag_class.h>int test_tag_filter(void){  BEGIN();#undef TAG_NAMESPACE#define TAG_NAMESPACE "test"  tag_typedef_t tag_a = STRTAG_TYPEDEF(a);#define TAG_A(s)      tag_a, tag_str_v((s))  tag_typedef_t tag_b = STRTAG_TYPEDEF(b);#define TAG_B(s)      tag_b, tag_str_v((s))  tagi_t filter[2] = {{ URLTAG_ANY() }, { TAG_END() }};  tagi_t *lst, *result;  lst = tl_list(TAG_A("X"),		TAG_SKIP(2), 		URLTAG_URL((void *)"urn:foo"),		TAG_B("Y"),		URLTAG_URL((void *)"urn:bar"),		TAG_NULL());  TEST_1(lst);  result = tl_afilter(NULL, filter, lst);  TEST_1(result);  TEST_P(result[0].t_tag, urltag_url);  TEST_P(result[1].t_tag, urltag_url);  tl_vfree(lst);  free(result);  END();}#if 0 /* This is just a spike. How we can get  *   register_printf_function('U', printf_url, printf_url_info) * run while initializing? */#include <printf.h>int printf_url(FILE *fp,	       const struct printf_info *info,	       const void * const *args){  url_t const *url = *(url_t **)args[0];  return fprintf(fp, URL_PRINT_FORMAT, URL_PRINT_ARGS(url));}/* This is the appropriate argument information function for `printf_url'.  */int printf_url_info(const struct printf_info *info, 		    size_t n, int *argtypes){  if (n > 0) {    argtypes[0] = PA_POINTER;    return 1;  }  return 0;}#endifint test_print(void){#if 0   url_t u0[1];  url_t *u1 = NULL;  url_t const *u2 = (void *)-1;  url_t const u3[1] = { URL_INIT_AS(sip) };  char c0[] = "http://www.nokia.com/";  char c1[] = "http://goodfeel.nokia.com/test";  char c2[] = "/test2/";  char c3[] = "///file/";  tagi_t *lst;  BEGIN();  TEST(register_printf_function('U', printf_url, printf_url_info), 0);  TEST(url_d(u0, c0), 0);  printf("URL is %U\n", u0);  TEST(url_d(u0, c1), 0);  printf("URL is %U\n", u0);  TEST(url_d(u0, c2), 0);  printf("URL is %U\n", u0);  TEST(url_d(u0, c3), 0);  printf("URL is %U\n", u0);#else  BEGIN();#endif  END();}void usage(int exitcode){  fprintf(stderr, "usage: %s [-v] [-a]\n", name);  exit(exitcode);}int main(int argc, char *argv[]){  int retval = 0;  int i;  for (i = 1; argv[i]; i++) {    if (strcmp(argv[i], "-v") == 0)      tstflags |= tst_verbatim;    else if (strcmp(argv[i], "-a") == 0)      tstflags |= tst_abort;    else      usage(1);  }  #if HAVE_OPEN_C  tstflags |= tst_verbatim;#endif  retval |= test_quote(); fflush(stdout);  retval |= test_any(); fflush(stdout);  retval |= test_sip(); fflush(stdout);  retval |= test_wv(); fflush(stdout);  retval |= test_tel(); fflush(stdout);  retval |= test_fax(); fflush(stdout);  retval |= test_modem(); fflush(stdout);  retval |= test_file(); fflush(stdout);  retval |= test_ldap(); fflush(stdout);  retval |= test_rtsp(); fflush(stdout);  retval |= test_http(); fflush(stdout);  retval |= test_sanitizing(); fflush(stdout);  retval |= test_tags(); fflush(stdout);  retval |= test_print(); fflush(stdout);  retval |= test_tag_filter(); fflush(stdout);  return retval;}

⌨️ 快捷键说明

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