Merged revisions 281687 via svnmerge from
[asterisk/asterisk.git] / channels / sip / config_parser.c
index c925d30..0ab9ed7 100644 (file)
@@ -32,9 +32,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
  * \retval 0 on success
  * \retval -1 on failure
  */
-int sip_parse_register_line(struct sip_registry *reg, const char *value, int lineno)
+int sip_parse_register_line(struct sip_registry *reg, int default_expiry, const char *value, int lineno)
 {
        int portnum = 0;
+       int domainport = 0;
        enum sip_transport transport = SIP_TRANSPORT_UDP;
        char buf[256] = "";
        char *userpart = NULL, *hostpart = NULL;
@@ -53,6 +54,14 @@ int sip_parse_register_line(struct sip_registry *reg, const char *value, int lin
                AST_APP_ARG(secret);
                AST_APP_ARG(authuser);
        );
+       AST_DECLARE_APP_ARGS(user2,
+               AST_APP_ARG(user);
+               AST_APP_ARG(domain);
+       );
+       AST_DECLARE_APP_ARGS(user3,
+               AST_APP_ARG(authuser);
+               AST_APP_ARG(domainport);
+       );
        AST_DECLARE_APP_ARGS(host1,
                AST_APP_ARG(hostpart);
                AST_APP_ARG(expiry);
@@ -166,11 +175,54 @@ int sip_parse_register_line(struct sip_registry *reg, const char *value, int lin
         */
        AST_NONSTANDARD_RAW_ARGS(host3, host2.hostpart, ':');
 
+       /*!
+         * pre1.peer => peer
+         * pre2.transport = transport
+         * user2.user => user
+         * user2.domain => domain
+         * user1.secret => secret
+         * user1.authuser => authuser
+         * host3.host => host
+         * host3.port => port
+         * host2.extension => extension
+         * host1.expiry => expiry
+        */
+       AST_NONSTANDARD_RAW_ARGS(user2, user1.userpart, '@');
+
+       /*!
+         * pre1.peer => peer
+         * pre2.transport = transport
+         * user2.user => user
+         * user2.domain => domain
+         * user1.secret => secret
+         * user3.authuser => authuser
+         * user3.domainport => domainport
+         * host3.host => host
+         * host3.port => port
+         * host2.extension => extension
+         * host1.expiry => expiry
+        */
+       AST_NONSTANDARD_RAW_ARGS(user3, user1.authuser, ':');
+
+       /* Reordering needed due to fields being [(:secret[:username])|(:regdomainport:secret:username)]
+          but parsing being [secret[:username[:regdomainport]]] */
+       if (user3.argc == 2) {
+               char *reorder = user3.domainport;
+               user3.domainport = user1.secret;
+               user1.secret = user3.authuser;
+               user3.authuser = reorder;
+       }
+
        if (host3.port) {
                if (!(portnum = port_str2int(host3.port, 0))) {
                        ast_log(LOG_NOTICE, "'%s' is not a valid port number on line %d of sip.conf. using default.\n", host3.port, lineno);
                }
        }
+       if (user3.domainport) {
+               if (!(domainport = port_str2int(user3.domainport, 0))) {
+                       ast_log(LOG_NOTICE, "'%s' is not a valid domain port number on line %d of sip.conf. using default.\n", user3.domainport, lineno);
+               }
+       }
 
        /* set transport type */
        if (!pre2.transport) {
@@ -197,20 +249,20 @@ int sip_parse_register_line(struct sip_registry *reg, const char *value, int lin
 
        /* copy into sip_registry object */
        ast_string_field_set(reg, callback, ast_strip_quoted(S_OR(host2.extension, "s"), "\"", "\""));
-       ast_string_field_set(reg, username, ast_strip_quoted(S_OR(user1.userpart, ""), "\"", "\""));
+       ast_string_field_set(reg, username, ast_strip_quoted(S_OR(user2.user, ""), "\"", "\""));
        ast_string_field_set(reg, hostname, ast_strip_quoted(S_OR(host3.host, ""), "\"", "\""));
-       ast_string_field_set(reg, authuser, ast_strip_quoted(S_OR(user1.authuser, ""), "\"", "\""));
+       ast_string_field_set(reg, authuser, ast_strip_quoted(S_OR(user3.authuser, ""), "\"", "\""));
        ast_string_field_set(reg, secret, ast_strip_quoted(S_OR(user1.secret, ""), "\"", "\""));
        ast_string_field_set(reg, peername, ast_strip_quoted(S_OR(pre1.peer, ""), "\"", "\""));
+       ast_string_field_set(reg, regdomain, ast_strip_quoted(S_OR(user2.domain, ""), "\"", "\""));
 
        reg->transport = transport;
        reg->timeout = reg->expire = -1;
        reg->portno = portnum;
+       reg->regdomainport = domainport;
        reg->callid_valid = FALSE;
        reg->ocseq = INITIAL_CSEQ;
-       if (!ast_strlen_zero(host1.expiry)) {
-               reg->refresh = reg->expiry = reg->configured_expiry = atoi(ast_strip_quoted(host1.expiry, "\"", "\""));
-       }
+       reg->refresh = reg->expiry = reg->configured_expiry = (host1.expiry ? atoi(ast_strip_quoted(host1.expiry, "\"", "\"")) : default_expiry);
 
        return 0;
 }
@@ -219,6 +271,7 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
 {
        int res = AST_TEST_PASS;
        struct sip_registry *reg;
+       int default_expiry = 120;
        const char *reg1 = "name@domain";
        const char *reg2 = "name:pass@domain";
        const char *reg3 = "name@namedomain:pass:authuser@domain";
@@ -229,15 +282,17 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        const char *reg8 = "peer?name@namedomain:pass:authuser@domain:1234/extension~111";
        const char *reg9 = "peer?name:pass:authuser:1234/extension~111";
        const char *reg10 = "@domin:1234";
+       const char *reg12 = "name@namedomain:4321:pass:authuser@domain";
+       const char *reg13 = "name@namedomain:4321::@domain";
 
        switch (cmd) {
        case TEST_INIT:
                info->name = "sip_parse_register_line_test";
-               info->category = "channels/chan_sip/";
+               info->category = "/channels/chan_sip/";
                info->summary = "tests sip register line parsing";
                info->description =
-                                                       " Tests parsing of various register line configurations."
-                                                       " Verifies output matches expected behavior.";
+                                                       "Tests parsing of various register line configurations. "
+                                                       "Verifies output matches expected behavior.";
                return AST_TEST_NOT_RUN;
        case TEST_EXECUTE:
                break;
@@ -247,9 +302,10 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
        } else if (
-           sip_parse_register_line(reg, reg1, 1) ||
+           sip_parse_register_line(reg, default_expiry, reg1, 1) ||
                strcmp(reg->callback, "s")           ||
                strcmp(reg->username, "name")       ||
+               strcmp(reg->regdomain, "")          ||
                strcmp(reg->hostname, "domain")     ||
                strcmp(reg->authuser, "")           ||
                strcmp(reg->secret, "")             ||
@@ -257,14 +313,15 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
                reg->transport != SIP_TRANSPORT_UDP ||
                reg->timeout != -1                  ||
                reg->expire != -1                   ||
-               reg->refresh ||
-               reg->expiry ||
-               reg->configured_expiry ||
+               reg->refresh != default_expiry ||
+               reg->expiry != default_expiry ||
+               reg->configured_expiry != default_expiry ||
                reg->portno != STANDARD_SIP_PORT    ||
+               (reg->regdomainport)                ||
                reg->callid_valid != FALSE          ||
                reg->ocseq != INITIAL_CSEQ) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 1: simple config failed\n");
+               ast_test_status_update(test, "Test 1: simple config failed\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
@@ -274,9 +331,10 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
        } else if (
-           sip_parse_register_line(reg, reg2, 1) ||
+           sip_parse_register_line(reg, default_expiry, reg2, 1) ||
                strcmp(reg->callback, "s")           ||
                strcmp(reg->username, "name")       ||
+               strcmp(reg->regdomain, "")          ||
                strcmp(reg->hostname, "domain")     ||
                strcmp(reg->authuser, "")           ||
                strcmp(reg->secret, "pass")         ||
@@ -284,14 +342,15 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
                reg->transport != SIP_TRANSPORT_UDP ||
                reg->timeout != -1                  ||
                reg->expire != -1                   ||
-               reg->refresh ||
-               reg->expiry ||
-               reg->configured_expiry ||
+               reg->refresh != default_expiry ||
+               reg->expiry != default_expiry ||
+               reg->configured_expiry != default_expiry ||
                reg->portno != STANDARD_SIP_PORT    ||
+               (reg->regdomainport)                ||
                reg->callid_valid != FALSE          ||
                reg->ocseq != INITIAL_CSEQ) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 2: add secret failed\n");
+               ast_test_status_update(test,  "Test 2: add secret failed\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
@@ -301,9 +360,10 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
        } else if (
-           sip_parse_register_line(reg, reg3, 1) ||
+           sip_parse_register_line(reg, default_expiry, reg3, 1) ||
                strcmp(reg->callback, "s")           ||
-               strcmp(reg->username, "name@namedomain") ||
+               strcmp(reg->username, "name") ||
+               strcmp(reg->regdomain, "namedomain") ||
                strcmp(reg->hostname, "domain")     ||
                strcmp(reg->authuser, "authuser")           ||
                strcmp(reg->secret, "pass")         ||
@@ -311,14 +371,15 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
                reg->transport != SIP_TRANSPORT_UDP ||
                reg->timeout != -1                  ||
                reg->expire != -1                   ||
-               reg->refresh ||
-               reg->expiry ||
-               reg->configured_expiry ||
+               reg->refresh != default_expiry ||
+               reg->expiry != default_expiry ||
+               reg->configured_expiry != default_expiry ||
                reg->portno != STANDARD_SIP_PORT    ||
+               (reg->regdomainport)                ||
                reg->callid_valid != FALSE          ||
                reg->ocseq != INITIAL_CSEQ) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 3: add userdomain and authuser failed\n");
+               ast_test_status_update(test, "Test 3: add userdomain and authuser failed\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
@@ -328,9 +389,10 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
        } else if (
-           sip_parse_register_line(reg, reg4, 1) ||
+           sip_parse_register_line(reg, default_expiry, reg4, 1) ||
                strcmp(reg->callback, "extension")           ||
-               strcmp(reg->username, "name@namedomain") ||
+               strcmp(reg->username, "name") ||
+               strcmp(reg->regdomain, "namedomain") ||
                strcmp(reg->hostname, "domain")     ||
                strcmp(reg->authuser, "authuser")           ||
                strcmp(reg->secret, "pass")         ||
@@ -338,14 +400,15 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
                reg->transport != SIP_TRANSPORT_UDP ||
                reg->timeout != -1                  ||
                reg->expire != -1                   ||
-               reg->refresh ||
-               reg->expiry ||
-               reg->configured_expiry ||
+               reg->refresh != default_expiry ||
+               reg->expiry != default_expiry ||
+               reg->configured_expiry != default_expiry ||
                reg->portno != STANDARD_SIP_PORT    ||
+               (reg->regdomainport)                ||
                reg->callid_valid != FALSE          ||
                reg->ocseq != INITIAL_CSEQ) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 4: add callback extension failed\n");
+               ast_test_status_update(test, "Test 4: add callback extension failed\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
@@ -355,9 +418,10 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
        } else if (
-           sip_parse_register_line(reg, reg5, 1) ||
+           sip_parse_register_line(reg, default_expiry, reg5, 1) ||
                strcmp(reg->callback, "extension")           ||
-               strcmp(reg->username, "name@namedomain") ||
+               strcmp(reg->username, "name") ||
+               strcmp(reg->regdomain, "namedomain") ||
                strcmp(reg->hostname, "domain")     ||
                strcmp(reg->authuser, "authuser")           ||
                strcmp(reg->secret, "pass")         ||
@@ -365,14 +429,15 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
                reg->transport != SIP_TRANSPORT_TCP ||
                reg->timeout != -1                  ||
                reg->expire != -1                   ||
-               reg->refresh ||
-               reg->expiry ||
-               reg->configured_expiry ||
+               reg->refresh != default_expiry ||
+               reg->expiry != default_expiry ||
+               reg->configured_expiry != default_expiry ||
                reg->portno != STANDARD_SIP_PORT    ||
+               (reg->regdomainport)                ||
                reg->callid_valid != FALSE          ||
                reg->ocseq != INITIAL_CSEQ) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 5: add transport failed\n");
+               ast_test_status_update(test, "Test 5: add transport failed\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
@@ -382,9 +447,10 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
        } else if (
-           sip_parse_register_line(reg, reg6, 1) ||
+           sip_parse_register_line(reg, default_expiry, reg6, 1) ||
                strcmp(reg->callback, "extension")           ||
-               strcmp(reg->username, "name@namedomain") ||
+               strcmp(reg->username, "name") ||
+               strcmp(reg->regdomain, "namedomain") ||
                strcmp(reg->hostname, "domain")     ||
                strcmp(reg->authuser, "authuser")           ||
                strcmp(reg->secret, "pass")         ||
@@ -396,10 +462,11 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
                reg->expiry != 111 ||
                reg->configured_expiry != 111 ||
                reg->portno != STANDARD_TLS_PORT    ||
+               (reg->regdomainport)                ||
                reg->callid_valid != FALSE          ||
                reg->ocseq != INITIAL_CSEQ) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 6: change to tls transport and add expiry failed\n");
+               ast_test_status_update(test, "Test 6: change to tls transport and add expiry failed\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
@@ -409,9 +476,10 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
        } else if (
-           sip_parse_register_line(reg, reg7, 1) ||
+           sip_parse_register_line(reg, default_expiry, reg7, 1) ||
                strcmp(reg->callback, "extension")           ||
-               strcmp(reg->username, "name@namedomain") ||
+               strcmp(reg->username, "name") ||
+               strcmp(reg->regdomain, "namedomain") ||
                strcmp(reg->hostname, "domain")     ||
                strcmp(reg->authuser, "authuser")           ||
                strcmp(reg->secret, "pass")         ||
@@ -423,10 +491,11 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
                reg->expiry != 111 ||
                reg->configured_expiry != 111 ||
                reg->portno != 1234    ||
+               (reg->regdomainport)                ||
                reg->callid_valid != FALSE          ||
                reg->ocseq != INITIAL_CSEQ) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 7, change transport to tcp, add custom port, and add peer failed.\n");
+               ast_test_status_update(test, "Test 7, change transport to tcp, add custom port, and add peer failed.\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
@@ -436,9 +505,10 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
        } else if (
-           sip_parse_register_line(reg, reg8, 1) ||
+           sip_parse_register_line(reg, default_expiry, reg8, 1) ||
                strcmp(reg->callback, "extension")           ||
-               strcmp(reg->username, "name@namedomain") ||
+               strcmp(reg->username, "name") ||
+               strcmp(reg->regdomain, "namedomain") ||
                strcmp(reg->hostname, "domain")     ||
                strcmp(reg->authuser, "authuser")           ||
                strcmp(reg->secret, "pass")         ||
@@ -450,21 +520,76 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
                reg->expiry != 111 ||
                reg->configured_expiry != 111 ||
                reg->portno != 1234    ||
+               (reg->regdomainport)                ||
                reg->callid_valid != FALSE          ||
                reg->ocseq != INITIAL_CSEQ) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 8, remove transport failed.\n");
+               ast_test_status_update(test, "Test 8, remove transport failed.\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
        ast_free(reg);
 
-       /* ---Test reg 9, missing domain, expected to fail --- */
+       /* ---Test reg12, add domain port --- */
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
-       } else if (!sip_parse_register_line(reg, reg9, 1)) {
+       } else if (
+          sip_parse_register_line(reg, default_expiry, reg12, 1) ||
+               strcmp(reg->callback, "s")           ||
+               strcmp(reg->username, "name") ||
+               strcmp(reg->regdomain, "namedomain") ||
+               strcmp(reg->hostname, "domain")     ||
+               strcmp(reg->authuser, "authuser")           ||
+               strcmp(reg->secret, "pass")         ||
+               strcmp(reg->peername, "")           ||
+               reg->transport != SIP_TRANSPORT_UDP ||
+               reg->timeout != -1                  ||
+               reg->expire != -1                   ||
+               reg->refresh != default_expiry ||
+               reg->expiry != default_expiry ||
+               reg->configured_expiry != default_expiry ||
+               reg->portno != STANDARD_SIP_PORT    ||
+               reg->regdomainport != 4321          ||
+               reg->callid_valid != FALSE          ||
+               reg->ocseq != INITIAL_CSEQ) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 9, missing domain, expected to fail but did not.\n");
+               ast_test_status_update(test, "Test 12, add domain port failed.\n");
+               res = AST_TEST_FAIL;
+       }
+
+       /* ---Test reg13, domain port without secret --- */
+       if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
+               goto alloc_fail;
+       } else if (
+          sip_parse_register_line(reg, default_expiry, reg13, 1) ||
+               strcmp(reg->callback, "s")           ||
+               strcmp(reg->username, "name") ||
+               strcmp(reg->regdomain, "namedomain") ||
+               strcmp(reg->hostname, "domain")     ||
+               strcmp(reg->authuser, "")           ||
+               strcmp(reg->secret, "")         ||
+               strcmp(reg->peername, "")           ||
+               reg->transport != SIP_TRANSPORT_UDP ||
+               reg->timeout != -1                  ||
+               reg->expire != -1                   ||
+               reg->refresh != default_expiry ||
+               reg->expiry != default_expiry ||
+               reg->configured_expiry != default_expiry ||
+               reg->portno != STANDARD_SIP_PORT    ||
+               reg->regdomainport != 4321          ||
+               reg->callid_valid != FALSE          ||
+               reg->ocseq != INITIAL_CSEQ) {
+
+               ast_test_status_update(test, "Test 13, domain port without secret failed.\n");
+               res = AST_TEST_FAIL;
+}
+
+       /* ---Test reg 9, missing domain, expected to fail --- */
+       if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
+               goto alloc_fail;
+       } else if (!sip_parse_register_line(reg, default_expiry, reg9, 1)) {
+               ast_test_status_update(test,
+                               "Test 9, missing domain, expected to fail but did not.\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
@@ -473,27 +598,28 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        /* ---Test reg 10,  missing user, expected to fail --- */
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
-       } else if (!sip_parse_register_line(reg, reg10, 1)) {
-
-               ast_str_append(&args->ast_test_error_str, 0, "Test 10, missing user expected to fail but did not\n");
+       } else if (!sip_parse_register_line(reg, default_expiry, reg10, 1)) {
+               ast_test_status_update(test,
+                               "Test 10, missing user expected to fail but did not\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
        ast_free(reg);
 
        /* ---Test reg 11, no registry object, expected to fail--- */
-       if (!sip_parse_register_line(NULL, reg1, 1)) {
-
-               ast_str_append(&args->ast_test_error_str, 0, "Test 11, no registery object, expected to fail but did not.\n");
+       if (!sip_parse_register_line(NULL, default_expiry, reg1, 1)) {
+               ast_test_status_update(test,
+                               "Test 11, no registry object, expected to fail but did not.\n");
                res = AST_TEST_FAIL;
        }
 
        /* ---Test reg 11,  no registry line, expected to fail --- */
        if (!(reg = ast_calloc_with_stringfields(1, struct sip_registry, 256))) {
                goto alloc_fail;
-       } else if (!sip_parse_register_line(reg, NULL, 1)) {
+       } else if (!sip_parse_register_line(reg, default_expiry, NULL, 1)) {
 
-               ast_str_append(&args->ast_test_error_str, 0, "Test 11, NULL register line expected to fail but did not.\n");
+               ast_test_status_update(test,
+                               "Test 11, NULL register line expected to fail but did not.\n");
                res = AST_TEST_FAIL;
        }
        ast_string_field_free_memory(reg);
@@ -503,7 +629,7 @@ AST_TEST_DEFINE(sip_parse_register_line_test)
        return res;
 
 alloc_fail:
-       ast_str_set(&args->ast_test_error_str, 0, "Out of memory. \n");
+       ast_test_status_update(test, "Out of memory. \n");
        return res;
 }
 
@@ -535,16 +661,18 @@ int sip_parse_host(char *line, int lineno, char **hostname, int *portnum, enum s
        else
                line = *hostname;
 
-       if ((port = strrchr(line, ':'))) {
-               *port++ = '\0';
+       if (ast_sockaddr_split_hostport(line, hostname, &port, 0) == 0) {
+               ast_log(LOG_WARNING, "Cannot parse host '%s' on line %d of sip.conf.\n",
+                       line, lineno);
+               return -1;
+       }
 
+       if (port) {
                if (!sscanf(port, "%5u", portnum)) {
                        ast_log(LOG_NOTICE, "'%s' is not a valid port number on line %d of sip.conf. using default.\n", port, lineno);
                        port = NULL;
                }
-       }
-
-       if (!port) {
+       } else {
                if (*transport & SIP_TRANSPORT_TLS) {
                        *portnum = STANDARD_TLS_PORT;
                } else {
@@ -570,11 +698,11 @@ AST_TEST_DEFINE(sip_parse_host_line_test)
        switch (cmd) {
        case TEST_INIT:
                info->name = "sip_parse_host_line_test";
-               info->category = "channels/chan_sip/";
+               info->category = "/channels/chan_sip/";
                info->summary = "tests sip.conf host line parsing";
                info->description =
-                                                       " Tests parsing of various host line configurations."
-                                                       " Verifies output matches expected behavior.";
+                                                       "Tests parsing of various host line configurations. "
+                                                       "Verifies output matches expected behavior.";
                return AST_TEST_NOT_RUN;
        case TEST_EXECUTE:
                break;
@@ -583,60 +711,54 @@ AST_TEST_DEFINE(sip_parse_host_line_test)
        /* test 1, simple host */
        sip_parse_host(host1, 1, &host, &port, &transport);
        if (port != STANDARD_SIP_PORT ||
-               ast_strlen_zero(host) || strcmp(host, "www.blah.com") ||
-               transport != SIP_TRANSPORT_UDP) {
-
-               ast_str_append(&args->ast_test_error_str, 0, "Test 1: simple host failed.\n");
+                       ast_strlen_zero(host) || strcmp(host, "www.blah.com") ||
+                       transport != SIP_TRANSPORT_UDP) {
+               ast_test_status_update(test, "Test 1: simple host failed.\n");
                res = AST_TEST_FAIL;
        }
 
        /* test 2, add tcp transport */
        sip_parse_host(host2, 1, &host, &port, &transport);
        if (port != STANDARD_SIP_PORT ||
-               ast_strlen_zero(host) || strcmp(host, "www.blah.com") ||
-               transport != SIP_TRANSPORT_TCP) {
-
-               ast_str_append(&args->ast_test_error_str, 0, "Test 2: tcp host failed.\n");
+                       ast_strlen_zero(host) || strcmp(host, "www.blah.com") ||
+                       transport != SIP_TRANSPORT_TCP) {
+               ast_test_status_update(test, "Test 2: tcp host failed.\n");
                res = AST_TEST_FAIL;
        }
 
        /* test 3, add tls transport */
        sip_parse_host(host3, 1, &host, &port, &transport);
        if (port != STANDARD_TLS_PORT ||
-               ast_strlen_zero(host) || strcmp(host, "10.10.10.10") ||
-               transport != SIP_TRANSPORT_TLS) {
-
-               ast_str_append(&args->ast_test_error_str, 0, "Test 3: tls host failed. \n");
+                       ast_strlen_zero(host) || strcmp(host, "10.10.10.10") ||
+                       transport != SIP_TRANSPORT_TLS) {
+               ast_test_status_update(test, "Test 3: tls host failed. \n");
                res = AST_TEST_FAIL;
        }
 
        /* test 4, add custom port with tls */
        sip_parse_host(host4, 1, &host, &port, &transport);
-       if (port != 1234 ||
-               ast_strlen_zero(host) || strcmp(host, "10.10.10.10") ||
-               transport != SIP_TRANSPORT_TLS) {
-
-               ast_str_append(&args->ast_test_error_str, 0, "Test 4: tls host with custom port failed.\n");
+       if (port != 1234 || ast_strlen_zero(host) ||
+                       strcmp(host, "10.10.10.10") ||
+                       transport != SIP_TRANSPORT_TLS) {
+               ast_test_status_update(test, "Test 4: tls host with custom port failed.\n");
                res = AST_TEST_FAIL;
        }
 
        /* test 5, simple host with custom port */
        sip_parse_host(host5, 1, &host, &port, &transport);
-       if (port != 1234 ||
-               ast_strlen_zero(host) || strcmp(host, "10.10.10.10") ||
-               transport != SIP_TRANSPORT_UDP) {
-
-               ast_str_append(&args->ast_test_error_str, 0, "Test 5: simple host with custom port failed.\n");
+       if (port != 1234 || ast_strlen_zero(host) ||
+                       strcmp(host, "10.10.10.10") ||
+                       transport != SIP_TRANSPORT_UDP) {
+               ast_test_status_update(test, "Test 5: simple host with custom port failed.\n");
                res = AST_TEST_FAIL;
        }
-       return res;
 
        /* test 6, expected failure with NULL input */
-       if (sip_parse_host(NULL, 1, &host, &port, &transport)) {
-
-               ast_str_append(&args->ast_test_error_str, 0, "Test 6: expected error on NULL input did not occur.\n");
+       if (!sip_parse_host(NULL, 1, &host, &port, &transport)) {
+               ast_test_status_update(test, "Test 6: expected error on NULL input did not occur.\n");
                res = AST_TEST_FAIL;
        }
+
        return res;
 
 }