int ooBindPort (OOH323PortType type, OOSOCKET socket, char *ip) { int initialPort, bindPort, ret; OOIPADDR ipAddrs; ast_mutex_lock(&bindPortLock); initialPort = ooGetNextPort (type); bindPort = initialPort; ret=ast_parse_arg(ip, PARSE_ADDR, &ipAddrs); while(1) { if((ret=ooSocketBind(socket, ipAddrs, bindPort))==0) { ast_mutex_unlock(&bindPortLock); return bindPort; } else { bindPort = ooGetNextPort (type); if (bindPort == initialPort) { ast_mutex_unlock(&bindPortLock); return OO_FAILED; } } } }
int ast_tls_read_conf(struct ast_tls_config *tls_cfg, struct ast_tcptls_session_args *tls_desc, const char *varname, const char *value) { if (!strcasecmp(varname, "tlsenable") || !strcasecmp(varname, "sslenable")) { tls_cfg->enabled = ast_true(value) ? 1 : 0; } else if (!strcasecmp(varname, "tlscertfile") || !strcasecmp(varname, "sslcert") || !strcasecmp(varname, "tlscert")) { ast_free(tls_cfg->certfile); tls_cfg->certfile = ast_strdup(value); } else if (!strcasecmp(varname, "tlsprivatekey") || !strcasecmp(varname, "sslprivatekey")) { ast_free(tls_cfg->pvtfile); tls_cfg->pvtfile = ast_strdup(value); } else if (!strcasecmp(varname, "tlscipher") || !strcasecmp(varname, "sslcipher")) { ast_free(tls_cfg->cipher); tls_cfg->cipher = ast_strdup(value); } else if (!strcasecmp(varname, "tlscafile")) { ast_free(tls_cfg->cafile); tls_cfg->cafile = ast_strdup(value); } else if (!strcasecmp(varname, "tlscapath") || !strcasecmp(varname, "tlscadir")) { ast_free(tls_cfg->capath); tls_cfg->capath = ast_strdup(value); } else if (!strcasecmp(varname, "tlsverifyclient")) { ast_set2_flag(&tls_cfg->flags, ast_true(value), AST_SSL_VERIFY_CLIENT); } else if (!strcasecmp(varname, "tlsdontverifyserver")) { ast_set2_flag(&tls_cfg->flags, ast_true(value), AST_SSL_DONT_VERIFY_SERVER); } else if (!strcasecmp(varname, "tlsbindaddr") || !strcasecmp(varname, "sslbindaddr")) { if (ast_parse_arg(value, PARSE_ADDR, &tls_desc->local_address)) ast_log(LOG_ERROR, "Invalid %s '%s'\n", varname, value); } else if (!strcasecmp(varname, "tlsclientmethod") || !strcasecmp(varname, "sslclientmethod")) { if (!strcasecmp(value, "tlsv1")) { ast_set_flag(&tls_cfg->flags, AST_SSL_TLSV1_CLIENT); ast_clear_flag(&tls_cfg->flags, AST_SSL_SSLV3_CLIENT); ast_clear_flag(&tls_cfg->flags, AST_SSL_SSLV2_CLIENT); } else if (!strcasecmp(value, "sslv3")) { ast_set_flag(&tls_cfg->flags, AST_SSL_SSLV3_CLIENT); ast_clear_flag(&tls_cfg->flags, AST_SSL_SSLV2_CLIENT); ast_clear_flag(&tls_cfg->flags, AST_SSL_TLSV1_CLIENT); } else if (!strcasecmp(value, "sslv2")) { ast_set_flag(&tls_cfg->flags, AST_SSL_SSLV2_CLIENT); ast_clear_flag(&tls_cfg->flags, AST_SSL_TLSV1_CLIENT); ast_clear_flag(&tls_cfg->flags, AST_SSL_SSLV3_CLIENT); } } else if (!strcasecmp(varname, "tlsservercipherorder")) { ast_set2_flag(&tls_cfg->flags, ast_true(value), AST_SSL_SERVER_CIPHER_ORDER); } else if (!strcasecmp(varname, "tlsdisablev1")) { ast_set2_flag(&tls_cfg->flags, ast_true(value), AST_SSL_DISABLE_TLSV1); } else if (!strcasecmp(varname, "tlsdisablev11")) { ast_set2_flag(&tls_cfg->flags, ast_true(value), AST_SSL_DISABLE_TLSV11); } else if (!strcasecmp(varname, "tlsdisablev12")) { ast_set2_flag(&tls_cfg->flags, ast_true(value), AST_SSL_DISABLE_TLSV12); } else { return -1; } return 0; }
int ooSocketConnect (OOSOCKET socket, const char* host, int port) { struct ast_sockaddr m_addr; if (socket == OOSOCKET_INVALID) { return ASN_E_INVSOCKET; } memset (&m_addr, 0, sizeof (m_addr)); ast_parse_arg(host, PARSE_ADDR, &m_addr); ast_sockaddr_set_port(&m_addr, port); if (ast_connect(socket, &m_addr)) { return ASN_E_INVSOCKET; } return ASN_OK; }