diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 3e568ac587..7d87e24dbf 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -26719,6 +26719,26 @@ static int reload_config(enum channelreloadreason reason) authl = add_realm_authentication(authl, v->value, v->lineno); } + if (bindport) { + if (ast_sockaddr_port(&bindaddr)) { + ast_log(LOG_WARNING, "bindport is also specified in bindaddr. " + "Using %d.\n", bindport); + } + ast_sockaddr_set_port(&bindaddr, bindport); + } + + if (!ast_sockaddr_port(&bindaddr)) { + ast_sockaddr_set_port(&bindaddr, STANDARD_SIP_PORT); + } + + /* Set UDP address and open socket */ + ast_sockaddr_copy(&internip, &bindaddr); + if (ast_find_ourip(&internip, &bindaddr)) { + ast_log(LOG_WARNING, "Unable to get own IP address, SIP disabled\n"); + ast_config_destroy(cfg); + return 0; + } + ast_mutex_lock(&netlock); if ((sipsock > -1) && (ast_sockaddr_cmp(&old_bindaddr, &bindaddr))) { close(sipsock); @@ -26763,6 +26783,48 @@ static int reload_config(enum channelreloadreason reason) } ast_mutex_unlock(&netlock); + /* Start TCP server */ + if (sip_cfg.tcp_enabled) { + if (ast_sockaddr_isnull(&sip_tcp_desc.local_address)) { + ast_sockaddr_copy(&sip_tcp_desc.local_address, &bindaddr); + } + if (!ast_sockaddr_port(&sip_tcp_desc.local_address)) { + ast_sockaddr_set_port(&sip_tcp_desc.local_address, STANDARD_SIP_PORT); + } + } else { + ast_sockaddr_setnull(&sip_tcp_desc.local_address); + } + ast_tcptls_server_start(&sip_tcp_desc); + if (sip_cfg.tcp_enabled && sip_tcp_desc.accept_fd == -1) { + /* TCP server start failed. Tell the admin */ + ast_log(LOG_ERROR, "SIP TCP Server start failed. Not listening on TCP socket.\n"); + } else { + ast_debug(2, "SIP TCP server started\n"); + } + + /* Start TLS server if needed */ + memcpy(sip_tls_desc.tls_cfg, &default_tls_cfg, sizeof(default_tls_cfg)); + + if (ast_ssl_setup(sip_tls_desc.tls_cfg)) { + if (ast_sockaddr_isnull(&sip_tls_desc.local_address)) { + ast_sockaddr_copy(&sip_tls_desc.local_address, &bindaddr); + ast_sockaddr_set_port(&sip_tls_desc.local_address, + STANDARD_TLS_PORT); + } + if (!ast_sockaddr_port(&sip_tls_desc.local_address)) { + ast_sockaddr_set_port(&sip_tls_desc.local_address, + STANDARD_TLS_PORT); + } + ast_tcptls_server_start(&sip_tls_desc); + if (default_tls_cfg.enabled && sip_tls_desc.accept_fd == -1) { + ast_log(LOG_ERROR, "TLS Server start failed. Not listening on TLS socket.\n"); + sip_tls_desc.tls_cfg = NULL; + } + } else if (sip_tls_desc.tls_cfg->enabled) { + sip_tls_desc.tls_cfg = NULL; + ast_log(LOG_WARNING, "SIP TLS server did not load because of errors.\n"); + } + if (ucfg) { struct ast_variable *gen; int genhassip, genregistersip; @@ -26826,7 +26888,6 @@ static int reload_config(enum channelreloadreason reason) } ast_config_destroy(ucfg); } - /* Load peers, users and friends */ cat = NULL; @@ -26861,69 +26922,6 @@ static int reload_config(enum channelreloadreason reason) } } - if (bindport) { - if (ast_sockaddr_port(&bindaddr)) { - ast_log(LOG_WARNING, "bindport is also specified in bindaddr. " - "Using %d.\n", bindport); - } - ast_sockaddr_set_port(&bindaddr, bindport); - } - - if (!ast_sockaddr_port(&bindaddr)) { - ast_sockaddr_set_port(&bindaddr, STANDARD_SIP_PORT); - } - - /* Set UDP address and open socket */ - ast_sockaddr_copy(&internip, &bindaddr); - if (ast_find_ourip(&internip, &bindaddr)) { - ast_log(LOG_WARNING, "Unable to get own IP address, SIP disabled\n"); - ast_config_destroy(cfg); - return 0; - } - - /* Start TCP server */ - if (sip_cfg.tcp_enabled) { - if (ast_sockaddr_isnull(&sip_tcp_desc.local_address)) { - ast_sockaddr_copy(&sip_tcp_desc.local_address, &bindaddr); - } - if (!ast_sockaddr_port(&sip_tcp_desc.local_address)) { - ast_sockaddr_set_port(&sip_tcp_desc.local_address, STANDARD_SIP_PORT); - } - } else { - ast_sockaddr_setnull(&sip_tcp_desc.local_address); - } - ast_tcptls_server_start(&sip_tcp_desc); - if (sip_cfg.tcp_enabled && sip_tcp_desc.accept_fd == -1) { - /* TCP server start failed. Tell the admin */ - ast_log(LOG_ERROR, "SIP TCP Server start failed. Not listening on TCP socket.\n"); - } else { - ast_debug(2, "SIP TCP server started\n"); - } - - /* Start TLS server if needed */ - memcpy(sip_tls_desc.tls_cfg, &default_tls_cfg, sizeof(default_tls_cfg)); - - if (ast_ssl_setup(sip_tls_desc.tls_cfg)) { - if (ast_sockaddr_isnull(&sip_tls_desc.local_address)) { - ast_sockaddr_copy(&sip_tls_desc.local_address, &bindaddr); - ast_sockaddr_set_port(&sip_tls_desc.local_address, - STANDARD_TLS_PORT); - } - if (!ast_sockaddr_port(&sip_tls_desc.local_address)) { - ast_sockaddr_set_port(&sip_tls_desc.local_address, - STANDARD_TLS_PORT); - } - ast_tcptls_server_start(&sip_tls_desc); - if (default_tls_cfg.enabled && sip_tls_desc.accept_fd == -1) { - ast_log(LOG_ERROR, "TLS Server start failed. Not listening on TLS socket.\n"); - sip_tls_desc.tls_cfg = NULL; - } - } else if (sip_tls_desc.tls_cfg->enabled) { - sip_tls_desc.tls_cfg = NULL; - ast_log(LOG_WARNING, "SIP TLS server did not load because of errors.\n"); - } - - /* Add default domains - host name, IP address and IP:port * Only do this if user added any sip domain with "localdomains" * In order to *not* break backwards compatibility