Пример #1
0
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);
  }
}
Пример #2
0
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;
}