diff options
-rw-r--r-- | channels/chan_sip.c | 61 | ||||
-rw-r--r-- | channels/sip/include/reqresp_parser.h | 4 | ||||
-rw-r--r-- | channels/sip/include/sip.h | 2 | ||||
-rw-r--r-- | channels/sip/reqresp_parser.c | 186 |
4 files changed, 139 insertions, 114 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 17a843407..ef97d9173 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -13915,9 +13915,9 @@ static int parse_ok_contact(struct sip_pvt *pvt, struct sip_request *req) } /*! \brief parse uri in a way that allows semicolon stripping if legacy mode is enabled */ -static int parse_uri_legacy_check(char *uri, const char *scheme, char **user, char **pass, char **domain, char **transport) +static int parse_uri_legacy_check(char *uri, const char *scheme, char **user, char **pass, char **hostport, char **transport) { - int ret = parse_uri(uri, scheme, user, pass, domain, transport); + int ret = parse_uri(uri, scheme, user, pass, hostport, transport); if (sip_cfg.legacy_useroption_parsing) { /* if legacy mode is active, strip semis from the user field */ char *p; if ((p = strchr(uri, (int)';'))) { @@ -13929,7 +13929,7 @@ static int parse_uri_legacy_check(char *uri, const char *scheme, char **user, ch static int __set_address_from_contact(const char *fullcontact, struct ast_sockaddr *addr, int tcp) { - char *domain, *transport; + char *hostport, *transport; char contact_buf[256]; char *contact; @@ -13944,7 +13944,7 @@ static int __set_address_from_contact(const char *fullcontact, struct ast_sockad * We still need to be able to send to the remote agent through the proxy. */ - if (parse_uri_legacy_check(contact, "sip:,sips:", &contact, NULL, &domain, + if (parse_uri_legacy_check(contact, "sip:,sips:", &contact, NULL, &hostport, &transport)) { ast_log(LOG_WARNING, "Invalid contact uri %s (missing sip: or sips:), attempting to use anyway\n", fullcontact); } @@ -13953,19 +13953,19 @@ static int __set_address_from_contact(const char *fullcontact, struct ast_sockad /* We should only do this if it's a name, not an IP */ /* \todo - if there's no PORT number in contact - we are required to check NAPTR/SRV records to find transport, port address and hostname. If there's a port number, we have to - assume that the domain part is a host name and only look for an A/AAAA record in DNS. + assume that the hostport part is a host name and only look for an A/AAAA record in DNS. */ - /* If we took in an invalid URI, domain may not have been initialized */ - /* ast_sockaddr_resolve requires an initialized domain string. */ - if (ast_strlen_zero(domain)) { - ast_log(LOG_WARNING, "Invalid URI: parse_uri failed to acquire domain\n"); + /* If we took in an invalid URI, hostport may not have been initialized */ + /* ast_sockaddr_resolve requires an initialized hostport string. */ + if (ast_strlen_zero(hostport)) { + ast_log(LOG_WARNING, "Invalid URI: parse_uri failed to acquire hostport\n"); return -1; } - if (ast_sockaddr_resolve_first(addr, domain, 0)) { + if (ast_sockaddr_resolve_first(addr, hostport, 0)) { ast_log(LOG_WARNING, "Invalid host name in Contact: (can't " - "resolve in DNS) : '%s'\n", domain); + "resolve in DNS) : '%s'\n", hostport); return -1; } @@ -14002,7 +14002,7 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st char data[SIPBUFSIZE]; const char *expires = sip_get_header(req, "Expires"); int expire = atoi(expires); - char *curi = NULL, *domain = NULL, *transport = NULL; + char *curi = NULL, *hostport = NULL, *transport = NULL; int transport_type; const char *useragent; struct ast_sockaddr oldsin, testsa; @@ -14080,7 +14080,7 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st ast_string_field_build(pvt, our_contact, "<%s>", curi); /* Make sure it's a SIP URL */ - if (ast_strlen_zero(curi) || parse_uri_legacy_check(curi, "sip:,sips:", &curi, NULL, &domain, &transport)) { + if (ast_strlen_zero(curi) || parse_uri_legacy_check(curi, "sip:,sips:", &curi, NULL, &hostport, &transport)) { ast_log(LOG_NOTICE, "Not a valid SIP contact (missing sip:/sips:) trying to use anyway\n"); } @@ -14108,15 +14108,15 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st ast_debug(1, "Store REGISTER's Contact header for call routing.\n"); /* XXX This could block for a long time XXX */ /*! \todo Check NAPTR/SRV if we have not got a port in the URI */ - if (ast_sockaddr_resolve_first(&testsa, domain, 0)) { - ast_log(LOG_WARNING, "Invalid domain '%s'\n", domain); + if (ast_sockaddr_resolve_first(&testsa, hostport, 0)) { + ast_log(LOG_WARNING, "Invalid hostport '%s'\n", hostport); ast_string_field_set(peer, fullcontact, ""); ast_string_field_set(pvt, our_contact, ""); return PARSE_REGISTER_FAILED; } /* If we have a port number in the given URI, make sure we do remember to not check for NAPTR/SRV records. - The domain part is actually a host. */ + The hostport part is actually a host. */ peer->portinuri = ast_sockaddr_port(&testsa) ? TRUE : FALSE; if (!ast_sockaddr_port(&testsa)) { @@ -14136,7 +14136,7 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st /* Check that they're allowed to register at this IP */ if (ast_apply_ha(sip_cfg.contact_ha, &peer->addr) != AST_SENSE_ALLOW || ast_apply_ha(peer->contactha, &peer->addr) != AST_SENSE_ALLOW) { - ast_log(LOG_WARNING, "Domain '%s' disallowed by contact ACL (violating IP %s)\n", domain, + ast_log(LOG_WARNING, "Domain '%s' disallowed by contact ACL (violating IP %s)\n", hostport, ast_sockaddr_stringify_addr(&testsa)); ast_string_field_set(peer, fullcontact, ""); ast_string_field_set(pvt, our_contact, ""); @@ -14758,6 +14758,18 @@ static char *terminate_uri(char *uri) return uri; } +/*! \brief Terminate a host:port at the ':' + * \param hostport The address of the hostport string + * + * \note In the case of a bracket-enclosed IPv6 address, the hostport variable + * will contain the non-bracketed host as a result of calling this function. + */ +static void extract_host_from_hostport(char **hostport) +{ + char *dont_care; + ast_sockaddr_split_hostport(*hostport, hostport, &dont_care, PARSE_PORT_IGNORE); +} + /*! \brief Verify registration of user - Registration is done in several steps, first a REGISTER without auth to get a challenge (nonce) then a second one with auth @@ -14787,6 +14799,8 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock SIP_PEDANTIC_DECODE(name); SIP_PEDANTIC_DECODE(domain); + extract_host_from_hostport(&domain); + /*! \todo XXX here too we interpret a missing @domain as a name-only * URI, whereas the RFC says this is a domain-only uri. */ @@ -15351,6 +15365,9 @@ static enum sip_get_dest_result get_destination(struct sip_pvt *p, struct sip_re SIP_PEDANTIC_DECODE(domain); SIP_PEDANTIC_DECODE(uri); + + extract_host_from_hostport(&domain); + if (ast_strlen_zero(uri)) { /* * Either there really was no extension found or the request @@ -15377,6 +15394,8 @@ static enum sip_get_dest_result get_destination(struct sip_pvt *p, struct sip_re SIP_PEDANTIC_DECODE(from); SIP_PEDANTIC_DECODE(domain); + extract_host_from_hostport(&domain); + ast_string_field_set(p, fromdomain, domain); } @@ -16178,6 +16197,8 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ * For backward compatibility, we keep this block, but it is * really a mistake and should go away. */ + + extract_host_from_hostport(&domain); of = domain; } else { char *tmp = ast_strdupa(of); @@ -24227,6 +24248,9 @@ static int sip_msg_send(const struct ast_msg *msg, const char *to, const char *f ast_string_field_set(pvt, fromname, name); if (strchr(location, ':')) { /* Must be a URI */ parse_uri(location, "sip:,sips:", &user, NULL, &domain, NULL); + SIP_PEDANTIC_DECODE(user); + SIP_PEDANTIC_DECODE(domain); + extract_host_from_hostport(&domain); ast_string_field_set(pvt, fromuser, user); ast_string_field_set(pvt, fromdomain, domain); } else { /* Treat it as an exten/user */ @@ -27234,8 +27258,9 @@ static int check_sip_domain(const char *domain, char *context, size_t len) AST_LIST_LOCK(&domain_list); AST_LIST_TRAVERSE(&domain_list, d, list) { - if (strcasecmp(d->domain, domain)) + if (strcasecmp(d->domain, domain)) { continue; + } if (len && !ast_strlen_zero(d->context)) ast_copy_string(context, d->context, len); diff --git a/channels/sip/include/reqresp_parser.h b/channels/sip/include/reqresp_parser.h index bb1831431..f0ab86e38 100644 --- a/channels/sip/include/reqresp_parser.h +++ b/channels/sip/include/reqresp_parser.h @@ -43,7 +43,7 @@ * \endverbatim */ int parse_uri(char *uri, const char *scheme, char **ret_name, char **pass, - char **domain, char **transport); + char **hostport, char **transport); /*! * \brief parses a URI in to all of its components and any trailing residue @@ -53,7 +53,7 @@ int parse_uri(char *uri, const char *scheme, char **ret_name, char **pass, * */ int parse_uri_full(char *uri, const char *scheme, char **user, char **pass, - char **domain, struct uriparams *params, char **headers, + char **hostport, struct uriparams *params, char **headers, char **residue); /*! diff --git a/channels/sip/include/sip.h b/channels/sip/include/sip.h index 0a776ad8a..c3c7a98d5 100644 --- a/channels/sip/include/sip.h +++ b/channels/sip/include/sip.h @@ -1761,7 +1761,7 @@ struct contact { char *name; char *user; char *pass; - char *domain; + char *hostport; struct uriparams params; char *headers; char *expires; diff --git a/channels/sip/reqresp_parser.c b/channels/sip/reqresp_parser.c index 37d77d418..ecce4bd57 100644 --- a/channels/sip/reqresp_parser.c +++ b/channels/sip/reqresp_parser.c @@ -33,7 +33,7 @@ locale_t c_locale; /*! \brief * parses a URI in its components.*/ int parse_uri_full(char *uri, const char *scheme, char **user, char **pass, - char **domain, struct uriparams *params, char **headers, + char **hostport, struct uriparams *params, char **headers, char **residue) { char *userinfo = NULL; @@ -53,8 +53,8 @@ int parse_uri_full(char *uri, const char *scheme, char **user, char **pass, if (pass) { *pass = ""; } - if (domain) { - *domain = ""; + if (hostport) { + *hostport = ""; } if (headers) { *headers = ""; @@ -85,8 +85,8 @@ int parse_uri_full(char *uri, const char *scheme, char **user, char **pass, } } - if (!domain) { - /* if we don't want to split around domain, keep everything as a + if (!hostport) { + /* if we don't want to split around hostport, keep everything as a * userinfo - cos thats how old parse_uri operated*/ userinfo = uri; } else { @@ -102,7 +102,7 @@ int parse_uri_full(char *uri, const char *scheme, char **user, char **pass, userinfo = ""; } - *domain = dom; + *hostport = dom; } if (pass && (c = strchr(userinfo, ':'))) { /* user:password */ @@ -221,7 +221,7 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) { int res = AST_TEST_PASS; char uri[1024]; - char *user, *pass, *domain, *headers, *residue; + char *user, *pass, *hostport, *headers, *residue; struct uriparams params; struct testdata { @@ -229,13 +229,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) char *uri; char **userptr; char **passptr; - char **domainptr; + char **hostportptr; char **headersptr; char **residueptr; struct uriparams *paramsptr; char *user; char *pass; - char *domain; + char *hostport; char *headers; char *residue; struct uriparams params; @@ -252,13 +252,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:user:secret@host:5060;param=discard;transport=tcp;param2=residue", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "", .residue = "param2=residue", .params.transport = "tcp", @@ -271,13 +271,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:user:secret@host:5060;param=discard;transport=tcp;param2=discard2?header=blah&header2=blah2;param3=residue", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "header=blah&header2=blah2", .residue = "param3=residue", .params.transport = "tcp", @@ -290,13 +290,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:-_.!~*'()&=+$,;?/:secret@host:5060;transport=tcp", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "-_.!~*'()&=+$,;?/", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "", .residue = "", .params.transport = "tcp", @@ -309,13 +309,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:user:-_.!~*'()&=+$,@host:5060;transport=tcp", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "user", .pass = "-_.!~*'()&=+$,", - .domain = "host:5060", + .hostport = "host:5060", .headers = "", .residue = "", .params.transport = "tcp", @@ -328,13 +328,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:user:secret@1-1.a-1.:5060;transport=tcp", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "user", .pass = "secret", - .domain = "1-1.a-1.:5060", + .hostport = "1-1.a-1.:5060", .headers = "", .residue = "", .params.transport = "tcp", @@ -347,13 +347,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:user:secret@host:5060;-_.!~*'()[]/:&+$=-_.!~*'()[]/:&+$;transport=tcp", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "", .residue = "", .params.transport = "tcp", @@ -366,13 +366,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:user:secret@host:5060;-_.!~*'()[]/:&+$=-_.!~*'()[]/:&+$?header=blah&header2=blah2;-_.!~*'()[]/:&+$=residue", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "header=blah&header2=blah2", .residue = "-_.!~*'()[]/:&+$=residue", .params.transport = "", @@ -385,13 +385,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:user:secret@host:5060;param=discard;lr?header=blah", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "header=blah", .residue = "", .params.transport = "", @@ -404,13 +404,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:user:secret@host:5060;param=discard;lr=yes?header=blah", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "header=blah", .residue = "", .params.transport = "", @@ -423,13 +423,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) .uri = "sip:user:secret@host:5060;paramlr=lr;lr=no;lr=off;lr=0;lr=;=lr;lrextra;lrparam2=lr?header=blah", .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "header=blah", .residue = "", .params.transport = "", @@ -464,19 +464,19 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) } AST_LIST_TRAVERSE(&testdatalist, testdataptr, list) { - user = pass = domain = headers = residue = NULL; + user = pass = hostport = headers = residue = NULL; params.transport = params.user = params.method = params.ttl = params.maddr = NULL; params.lr = 0; ast_copy_string(uri,testdataptr->uri,sizeof(uri)); if (parse_uri_full(uri, "sip:,sips:", testdataptr->userptr, - testdataptr->passptr, testdataptr->domainptr, + testdataptr->passptr, testdataptr->hostportptr, testdataptr->paramsptr, testdataptr->headersptr, testdataptr->residueptr) || ((testdataptr->userptr) && strcmp(testdataptr->user, user)) || ((testdataptr->passptr) && strcmp(testdataptr->pass, pass)) || - ((testdataptr->domainptr) && strcmp(testdataptr->domain, domain)) || + ((testdataptr->hostportptr) && strcmp(testdataptr->hostport, hostport)) || ((testdataptr->headersptr) && strcmp(testdataptr->headers, headers)) || ((testdataptr->residueptr) && strcmp(testdataptr->residue, residue)) || ((testdataptr->paramsptr) && strcmp(testdataptr->params.transport,params.transport)) || @@ -494,13 +494,13 @@ AST_TEST_DEFINE(sip_parse_uri_fully_test) int parse_uri(char *uri, const char *scheme, char **user, char **pass, - char **domain, char **transport) { + char **hostport, char **transport) { int ret; char *headers; struct uriparams params; headers = NULL; - ret = parse_uri_full(uri, scheme, user, pass, domain, ¶ms, &headers, NULL); + ret = parse_uri_full(uri, scheme, user, pass, hostport, ¶ms, &headers, NULL); if (transport) { *transport=params.transport; } @@ -510,7 +510,7 @@ int parse_uri(char *uri, const char *scheme, char **user, char **pass, AST_TEST_DEFINE(sip_parse_uri_test) { int res = AST_TEST_PASS; - char *name, *pass, *domain, *transport; + char *name, *pass, *hostport, *transport; char uri1[] = "sip:name@host"; char uri2[] = "sip:name@host;transport=tcp"; char uri3[] = "sip:name:secret@host;transport=tcp"; @@ -537,114 +537,114 @@ AST_TEST_DEFINE(sip_parse_uri_test) } /* Test 1, simple URI */ - name = pass = domain = transport = NULL; - if (parse_uri(uri1, "sip:,sips:", &name, &pass, &domain, &transport) || + name = pass = hostport = transport = NULL; + if (parse_uri(uri1, "sip:,sips:", &name, &pass, &hostport, &transport) || strcmp(name, "name") || !ast_strlen_zero(pass) || - strcmp(domain, "host") || + strcmp(hostport, "host") || !ast_strlen_zero(transport)) { ast_test_status_update(test, "Test 1: simple uri failed. \n"); res = AST_TEST_FAIL; } /* Test 2, add tcp transport */ - name = pass = domain = transport = NULL; - if (parse_uri(uri2, "sip:,sips:", &name, &pass, &domain, &transport) || + name = pass = hostport = transport = NULL; + if (parse_uri(uri2, "sip:,sips:", &name, &pass, &hostport, &transport) || strcmp(name, "name") || !ast_strlen_zero(pass) || - strcmp(domain, "host") || + strcmp(hostport, "host") || strcmp(transport, "tcp")) { ast_test_status_update(test, "Test 2: uri with addtion of tcp transport failed. \n"); res = AST_TEST_FAIL; } /* Test 3, add secret */ - name = pass = domain = transport = NULL; - if (parse_uri(uri3, "sip:,sips:", &name, &pass, &domain, &transport) || + name = pass = hostport = transport = NULL; + if (parse_uri(uri3, "sip:,sips:", &name, &pass, &hostport, &transport) || strcmp(name, "name") || strcmp(pass, "secret") || - strcmp(domain, "host") || + strcmp(hostport, "host") || strcmp(transport, "tcp")) { ast_test_status_update(test, "Test 3: uri with addition of secret failed.\n"); res = AST_TEST_FAIL; } /* Test 4, add port and unparsed header field*/ - name = pass = domain = transport = NULL; - if (parse_uri(uri4, "sip:,sips:", &name, &pass, &domain, &transport) || + name = pass = hostport = transport = NULL; + if (parse_uri(uri4, "sip:,sips:", &name, &pass, &hostport, &transport) || strcmp(name, "name") || strcmp(pass, "secret") || - strcmp(domain, "host:port") || + strcmp(hostport, "host:port") || strcmp(transport, "tcp")) { ast_test_status_update(test, "Test 4: add port and unparsed header field failed.\n"); res = AST_TEST_FAIL; } /* Test 5, verify parse_uri does not crash when given a NULL uri */ - name = pass = domain = transport = NULL; - if (!parse_uri(NULL, "sip:,sips:", &name, &pass, &domain, &transport)) { + name = pass = hostport = transport = NULL; + if (!parse_uri(NULL, "sip:,sips:", &name, &pass, &hostport, &transport)) { ast_test_status_update(test, "Test 5: passing a NULL uri failed.\n"); res = AST_TEST_FAIL; } /* Test 6, verify parse_uri does not crash when given a NULL output parameters */ - name = pass = domain = transport = NULL; + name = pass = hostport = transport = NULL; if (parse_uri(uri6, "sip:,sips:", NULL, NULL, NULL, NULL)) { ast_test_status_update(test, "Test 6: passing NULL output parameters failed.\n"); res = AST_TEST_FAIL; } - /* Test 7, verify parse_uri returns user:secret and domain when no port or secret output parameters are supplied. */ - name = pass = domain = transport = NULL; - if (parse_uri(uri7, "sip:,sips:", &name, NULL, &domain, NULL) || + /* Test 7, verify parse_uri returns user:secret and hostport when no port or secret output parameters are supplied. */ + name = pass = hostport = transport = NULL; + if (parse_uri(uri7, "sip:,sips:", &name, NULL, &hostport, NULL) || strcmp(name, "name:secret") || - strcmp(domain, "host:port")) { + strcmp(hostport, "host:port")) { ast_test_status_update(test, "Test 7: providing no port and secret output parameters failed.\n"); res = AST_TEST_FAIL; } - /* Test 8, verify parse_uri can handle a domain only uri */ - name = pass = domain = transport = NULL; - if (parse_uri(uri8, "sip:,sips:", &name, &pass, &domain, &transport) || - strcmp(domain, "host") || + /* Test 8, verify parse_uri can handle a hostport only uri */ + name = pass = hostport = transport = NULL; + if (parse_uri(uri8, "sip:,sips:", &name, &pass, &hostport, &transport) || + strcmp(hostport, "host") || !ast_strlen_zero(name)) { ast_test_status_update(test, "Test 8: add port and unparsed header field failed.\n"); res = AST_TEST_FAIL; } - /* Test 9, add port and unparsed header field with domain only uri*/ - name = pass = domain = transport = NULL; - if (parse_uri(uri9, "sip:,sips:", &name, &pass, &domain, &transport) || + /* Test 9, add port and unparsed header field with hostport only uri*/ + name = pass = hostport = transport = NULL; + if (parse_uri(uri9, "sip:,sips:", &name, &pass, &hostport, &transport) || !ast_strlen_zero(name) || !ast_strlen_zero(pass) || - strcmp(domain, "host:port") || + strcmp(hostport, "host:port") || strcmp(transport, "tcp")) { - ast_test_status_update(test, "Test 9: domain only uri failed \n"); + ast_test_status_update(test, "Test 9: hostport only uri failed \n"); res = AST_TEST_FAIL; } /* Test 10, handle invalid/missing "sip:,sips:" scheme * we expect parse_uri to return an error, but still parse * the results correctly here */ - name = pass = domain = transport = NULL; - if (!parse_uri(uri10, "sip:,sips:", &name, &pass, &domain, &transport) || + name = pass = hostport = transport = NULL; + if (!parse_uri(uri10, "sip:,sips:", &name, &pass, &hostport, &transport) || !ast_strlen_zero(name) || !ast_strlen_zero(pass) || - strcmp(domain, "host:port") || + strcmp(hostport, "host:port") || strcmp(transport, "tcp")) { ast_test_status_update(test, "Test 10: missing \"sip:sips:\" scheme failed\n"); res = AST_TEST_FAIL; } - /* Test 11, simple domain only URI with missing scheme + /* Test 11, simple hostport only URI with missing scheme * we expect parse_uri to return an error, but still parse * the results correctly here */ - name = pass = domain = transport = NULL; - if (!parse_uri(uri11, "sip:,sips:", &name, &pass, &domain, &transport) || + name = pass = hostport = transport = NULL; + if (!parse_uri(uri11, "sip:,sips:", &name, &pass, &hostport, &transport) || !ast_strlen_zero(name) || !ast_strlen_zero(pass) || - strcmp(domain, "host") || + strcmp(hostport, "host") || !ast_strlen_zero(transport)) { ast_test_status_update(test, "Test 11: simple uri with missing scheme failed. \n"); res = AST_TEST_FAIL; @@ -848,7 +848,7 @@ int get_name_and_number(const char *hdr, char **name, char **number) char header[256]; char tmp_name[50] = { 0, }; char *tmp_number = NULL; - char *domain = NULL; + char *hostport = NULL; char *dummy = NULL; if (!name || !number || ast_strlen_zero(hdr)) { @@ -866,7 +866,7 @@ int get_name_and_number(const char *hdr, char **name, char **number) tmp_number = get_in_brackets(header); /* parse out the number here */ - if (parse_uri(tmp_number, "sip:,sips:", &tmp_number, &dummy, &domain, NULL) || ast_strlen_zero(tmp_number)) { + if (parse_uri(tmp_number, "sip:,sips:", &tmp_number, &dummy, &hostport, NULL) || ast_strlen_zero(tmp_number)) { ast_log(LOG_ERROR, "can not parse name and number from sip header.\n"); return -1; } @@ -1153,7 +1153,7 @@ AST_TEST_DEFINE(get_in_brackets_test) int parse_name_andor_addr(char *uri, const char *scheme, char **name, - char **user, char **pass, char **domain, + char **user, char **pass, char **hostport, struct uriparams *params, char **headers, char **residue) { @@ -1170,7 +1170,7 @@ int parse_name_andor_addr(char *uri, const char *scheme, char **name, residue2 = NULL; } - return parse_uri_full(uri, scheme, user, pass, domain, params, headers, + return parse_uri_full(uri, scheme, user, pass, hostport, params, headers, residue2); } @@ -1178,7 +1178,7 @@ AST_TEST_DEFINE(parse_name_andor_addr_test) { int res = AST_TEST_PASS; char uri[1024]; - char *name, *user, *pass, *domain, *headers, *residue; + char *name, *user, *pass, *hostport, *headers, *residue; struct uriparams params; struct testdata { @@ -1187,14 +1187,14 @@ AST_TEST_DEFINE(parse_name_andor_addr_test) char **nameptr; char **userptr; char **passptr; - char **domainptr; + char **hostportptr; char **headersptr; char **residueptr; struct uriparams *paramsptr; char *name; char *user; char *pass; - char *domain; + char *hostport; char *headers; char *residue; struct uriparams params; @@ -1211,14 +1211,14 @@ AST_TEST_DEFINE(parse_name_andor_addr_test) .nameptr = &name, .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .name = "name :@ ", .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "", .residue = "tag=tag", .params.transport = "tcp", @@ -1232,14 +1232,14 @@ AST_TEST_DEFINE(parse_name_andor_addr_test) .nameptr = &name, .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .name = "givenname familyname", .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "", .residue = "expires=3600", .params.transport = "tcp", @@ -1253,14 +1253,14 @@ AST_TEST_DEFINE(parse_name_andor_addr_test) .nameptr = &name, .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .name = "", .user = "user", .pass = "secret", - .domain = "host:5060", + .hostport = "host:5060", .headers = "", .residue = "q=1", .params.transport = "tcp", @@ -1274,14 +1274,14 @@ AST_TEST_DEFINE(parse_name_andor_addr_test) .nameptr = &name, .userptr = &user, .passptr = &pass, - .domainptr = &domain, + .hostportptr = &hostport, .headersptr = &headers, .residueptr = &residue, .paramsptr = ¶ms, .name = "", .user = "", .pass = "", - .domain = "host", + .hostport = "host", .headers = "", .residue = "", .params.transport = "", @@ -1310,7 +1310,7 @@ AST_TEST_DEFINE(parse_name_andor_addr_test) } AST_LIST_TRAVERSE(&testdatalist, testdataptr, list) { - name = user = pass = domain = headers = residue = NULL; + name = user = pass = hostport = headers = residue = NULL; params.transport = params.user = params.method = params.ttl = params.maddr = NULL; params.lr = 0; ast_copy_string(uri,testdataptr->uri,sizeof(uri)); @@ -1318,14 +1318,14 @@ AST_TEST_DEFINE(parse_name_andor_addr_test) testdataptr->nameptr, testdataptr->userptr, testdataptr->passptr, - testdataptr->domainptr, + testdataptr->hostportptr, testdataptr->paramsptr, testdataptr->headersptr, testdataptr->residueptr) || ((testdataptr->nameptr) && strcmp(testdataptr->name, name)) || ((testdataptr->userptr) && strcmp(testdataptr->user, user)) || ((testdataptr->passptr) && strcmp(testdataptr->pass, pass)) || - ((testdataptr->domainptr) && strcmp(testdataptr->domain, domain)) || + ((testdataptr->hostportptr) && strcmp(testdataptr->hostport, hostport)) || ((testdataptr->headersptr) && strcmp(testdataptr->headers, headers)) || ((testdataptr->residueptr) && strcmp(testdataptr->residue, residue)) || ((testdataptr->paramsptr) && strcmp(testdataptr->params.transport,params.transport)) || @@ -1396,7 +1396,7 @@ int parse_contact_header(char *contactheader, struct contactliststruct *contactl res = parse_name_andor_addr(contactheader, "sip:,sips:", &contact->name, &contact->user, - &contact->pass, &contact->domain, + &contact->pass, &contact->hostport, &contact->params, &contact->headers, &residue); if (res == -1) { @@ -1469,7 +1469,7 @@ AST_TEST_DEFINE(parse_contact_header_test) .name = "name :@;?&,", .user = "user", .pass = "secret", - .domain = "host:5082", + .hostport = "host:5082", .params.transport = "tcp", .params.ttl = "", .params.lr = 0, @@ -1488,7 +1488,7 @@ AST_TEST_DEFINE(parse_contact_header_test) .name = "", .user = ",user1,", .pass = ",secret1,", - .domain = "host1", + .hostport = "host1", .params.transport = "", .params.ttl = "7", .params.lr = 0, @@ -1500,7 +1500,7 @@ AST_TEST_DEFINE(parse_contact_header_test) .name = "", .user = "", .pass = "", - .domain = "host2", + .hostport = "host2", .params.transport = "", .params.ttl = "", .params.lr = 0, @@ -1556,7 +1556,7 @@ AST_TEST_DEFINE(parse_contact_header_test) strcmp(tdcontactptr->name, contactptr->name) || strcmp(tdcontactptr->user, contactptr->user) || strcmp(tdcontactptr->pass, contactptr->pass) || - strcmp(tdcontactptr->domain, contactptr->domain) || + strcmp(tdcontactptr->hostport, contactptr->hostport) || strcmp(tdcontactptr->headers, contactptr->headers) || strcmp(tdcontactptr->expires, contactptr->expires) || strcmp(tdcontactptr->q, contactptr->q) || |