示例#1
0
文件: client.c 项目: CDC/mongolite
SEXP R_mongo_client_new(SEXP uri_string) {
  mongoc_client_t *client = mongoc_client_new (translateCharUTF8(asChar(uri_string)));
  if(!client)
    stop("Invalid uri_string. Try mongodb://localhost");

  //set ssl certificates here
  if (mongoc_uri_get_ssl (mongoc_client_get_uri(client))) {
    mongoc_client_set_ssl_opts(client, mongoc_ssl_opt_get_default());
  }

  //verify that server is online
  //can fail if user has limited priv
  /*
  bson_error_t err;
  if(!mongoc_client_get_server_status(client, NULL, NULL, &err)){
    mongoc_client_destroy(client);
    stop(err.message);
  }
  */

  return client2r(client);
}
示例#2
0
static bool hippo_mongo_driver_manager_apply_ssl_opts(mongoc_client_t *client, const Array options)
{
	mongoc_ssl_opt_t ssl_opt = { NULL, NULL, NULL, NULL, NULL, true };
	Array ssl;
	bool apply_ssl = false;

	if (!mongoc_uri_get_ssl(mongoc_client_get_uri(client))) {
		return 0;
	}

	if (options.exists(s_MongoDBDriverManager_context)) {
		Array context;

		if (!options[s_MongoDBDriverManager_context].isResource()) {
			return 0;
		}

#if HIPPO_HHVM_VERSION >= 30900
		req::ptr<StreamContext> sc;
#else
		SmartPtr<StreamContext> sc;
#endif
		sc = cast<StreamContext>(options[s_MongoDBDriverManager_context]);
		context = sc->getOptions();

		if (!context.exists(s_MongoDBDriverManager_context_ssl)) {
			return 0;
		}

		if (!context[s_MongoDBDriverManager_context_ssl].isArray()) {
			return 0;
		}

		ssl = context[s_MongoDBDriverManager_context_ssl].toArray();
	} else {
		ssl = options;
	}

	if (ssl.exists(s_MongoDBDriverManager_context_ssl_allow_self_signed) && ssl[s_MongoDBDriverManager_context_ssl_allow_self_signed].isBoolean()) {
		apply_ssl = true;
		ssl_opt.weak_cert_validation = (bool)true;//ssl[s_MongoDBDriverManager_context_ssl_allow_self_signed].toBoolean();
	}
	if (ssl.exists(s_MongoDBDriverManager_context_ssl_local_cert) && ssl[s_MongoDBDriverManager_context_ssl_local_cert].isString()) {
		apply_ssl = true;
		ssl_opt.pem_file = ssl[s_MongoDBDriverManager_context_ssl_local_cert].toString().c_str();
	}
	if (ssl.exists(s_MongoDBDriverManager_context_ssl_passphrase) && ssl[s_MongoDBDriverManager_context_ssl_passphrase].isString()) {
		apply_ssl = true;
		ssl_opt.pem_pwd = ssl[s_MongoDBDriverManager_context_ssl_passphrase].toString().c_str();
	}
	if (ssl.exists(s_MongoDBDriverManager_context_ssl_cafile) && ssl[s_MongoDBDriverManager_context_ssl_cafile].isString()) {
		apply_ssl = true;
		ssl_opt.ca_file = ssl[s_MongoDBDriverManager_context_ssl_cafile].toString().c_str();
	}
	if (ssl.exists(s_MongoDBDriverManager_context_ssl_capath) && ssl[s_MongoDBDriverManager_context_ssl_capath].isString()) {
		apply_ssl = true;
		ssl_opt.ca_dir = ssl[s_MongoDBDriverManager_context_ssl_capath].toString().c_str();
	}

	if (apply_ssl) {
		mongoc_client_set_ssl_opts(client, &ssl_opt);
	}
	return 1;
}