static OpenSSL * _openssl_init(AppTransportPluginHelper * helper, AppTransportMode mode, char const * name) { OpenSSL * openssl; int res = -1; if((openssl = object_new(sizeof(*openssl))) == NULL) return NULL; openssl->helper = helper; openssl->fd = -1; openssl->ssl_ctx = NULL; openssl->ssl = NULL; switch(mode) { case ATM_CLIENT: res = _init_client(openssl, name); break; case ATM_SERVER: res = _init_server(openssl, name); break; } /* check for errors */ if(res != 0) { _openssl_destroy(openssl); return NULL; } return openssl; }
/* Handle the event (de)registration call and return negative error codes. */ static int _do_event(int cmd, char *dmeventd_path, struct dm_event_daemon_message *msg, const char *dso_name, const char *dev_name, enum dm_event_mask evmask, uint32_t timeout) { int ret; struct dm_event_fifos fifos; if (!_init_client(dmeventd_path, &fifos)) { stack; return -ESRCH; } ret = daemon_talk(&fifos, msg, DM_EVENT_CMD_HELLO, NULL, NULL, 0, 0); dm_free(msg->data); msg->data = 0; if (!ret) ret = daemon_talk(&fifos, msg, cmd, dso_name, dev_name, evmask, timeout); /* what is the opposite of init? */ fini_fifos(&fifos); return ret; }
static SSLTransport * _ssl_init(AppTransportPluginHelper * helper, AppTransportMode mode, char const * name) { SSLTransport * ssl; int res; #ifdef DEBUG fprintf(stderr, "DEBUG: %s(%u, \"%s\")\n", __func__, mode, name); #endif if((ssl = object_new(sizeof(*ssl))) == NULL) return NULL; memset(ssl, 0, sizeof(*ssl)); ssl->helper = helper; if((ssl->ssl_ctx = SSL_CTX_new(TLSv1_method())) == NULL || SSL_CTX_set_cipher_list(ssl->ssl_ctx, SSL_DEFAULT_CIPHER_LIST) != 1 || SSL_CTX_load_verify_locations(ssl->ssl_ctx, NULL, "/etc/openssl/certs") != 1) /* FIXME report the underlying error */ res = -error_set_code(1, "Could not initialize SSL"); else switch((ssl->mode = mode)) { case ATM_CLIENT: res = _init_client(ssl, name); break; case ATM_SERVER: res = _init_server(ssl, name); break; default: res = -error_set_code(1, "Unknown transport mode"); break; } /* check for errors */ if(res != 0) { #ifdef DEBUG fprintf(stderr, "DEBUG: %s() => %d (%s)\n", __func__, res, error_get(NULL)); #endif _ssl_destroy(ssl); return NULL; } #if 0 /* XXX may be useful */ SSL_CTX_set_mode(ssl->ssl_ctx, SSL_MODE_ENABLE_PARTIAL_WRITE); #endif return ssl; }