static void mg_rpc_channel_ws_out_connect(struct mg_rpc_channel *ch) { struct mg_rpc_channel_ws_out_data *chd = (struct mg_rpc_channel_ws_out_data *) ch->channel_data; if (chd->wsd.nc != NULL) return; struct mg_connect_opts opts; memset(&opts, 0, sizeof(opts)); struct mg_rpc_channel_ws_out_cfg *cfg = chd->cfg; #if MG_ENABLE_SSL opts.ssl_server_name = cfg->ssl_server_name; opts.ssl_ca_cert = cfg->ssl_ca_file; opts.ssl_cert = cfg->ssl_client_cert_file; #endif LOG(LL_INFO, ("%p Connecting to %s, SSL? %d", ch, cfg->server_address, #if MG_ENABLE_SSL (opts.ssl_ca_cert != NULL) #else 0 #endif )); chd->wsd.nc = mg_connect_ws_opt(chd->mgr, mg_rpc_ws_out_handler, opts, cfg->server_address, MG_RPC_WS_PROTOCOL, NULL); if (chd->wsd.nc != NULL) { chd->wsd.nc->user_data = ch; } else { mg_rpc_channel_ws_out_reconnect(ch); } }
struct mg_connection *clubby_proto_connect( struct mg_mgr *mgr, const char *server_address, const char *ssl_server_name, const char *ssl_ca_file, const char *ssl_client_cert_file, void *context) { LOG(LL_DEBUG, ("Connecting to %s", server_address)); struct mg_connect_opts opts; memset(&opts, 0, sizeof(opts)); #ifdef MG_ENABLE_SSL if (strlen(server_address) > 6 && strncmp(server_address, "wss://", 6) == 0) { opts.ssl_server_name = (ssl_server_name && strlen(ssl_server_name) != 0) ? ssl_server_name : get_cfg()->clubby.ssl_server_name; opts.ssl_ca_cert = (ssl_ca_file && strlen(ssl_ca_file) != 0) ? ssl_ca_file : get_cfg()->clubby.ssl_ca_file; if (opts.ssl_ca_cert == NULL) { /* Use global CA file if clubby specific one is not set */ opts.ssl_ca_cert = get_cfg()->tls.ca_file; } opts.ssl_cert = (ssl_client_cert_file && strlen(ssl_client_cert_file) != 0) ? ssl_client_cert_file : get_cfg()->clubby.ssl_client_cert_file; } #else (void) ssl_server_name; (void) ssl_ca_file; (void) ssl_client_cert_file; #endif struct mg_connection *nc = mg_connect_ws_opt(mgr, clubby_proto_handler, opts, server_address, WS_PROTOCOL, "Sec-WebSocket-Extensions: " WS_PROTOCOL "-encoding; in=json; out=ubjson\r\n"); if (nc == NULL) { LOG(LL_DEBUG, ("Cannot connect to %s", server_address)); struct clubby_event evt; evt.ev = CLUBBY_NET_CONNECT; evt.net_connect.success = 0; evt.context = context; s_clubby_cb(&evt); return NULL; } nc->user_data = context; return nc; }