TInt Open(RSocketServ& aServer,const TDesC& aName) {
	TInt err = init_locks();
	if (err != KErrNone) {
	    return err;
	}
	err = RSocket::Open(aServer, aName);
	if (err != KErrNone) {
	    destroy_locks();
	}
	return err;
    }
    TInt Open(RSocketServ& aServer)
    {
	TInt err = init_locks();
	if (err != KErrNone) {
	    return err;
	}
	err = RSocket::Open(aServer);
	if (err != KErrNone) {
	    destroy_locks();
	}
	return err;
    }
    TInt Open(RSocketServ& aServer, TUint addrFamily, TUint sockType,
	TUint protocol)
    {
	TInt err = init_locks();
	if (err != KErrNone) {
	    return err;
	}
	err = RSocket::Open(aServer, addrFamily, sockType, protocol);
	if (err != KErrNone) {
	    destroy_locks();
	}
	return err;
    }
Beispiel #4
0
int drngInit(JNIEnv *env) {
  char msg[1000];
  int rc, ret;
  ENGINE* eng;

#ifdef UNIX
  void *openssl = dlopen(HADOOP_CRYPTO_LIBRARY, RTLD_LAZY | RTLD_GLOBAL);
#endif
#ifdef WINDOWS
  HMODULE openssl = LoadLibrary(HADOOP_CRYPTO_LIBRARY);
#endif
  if (!openssl) {
    snprintf(msg, sizeof(msg), "Cannot load %s!", HADOOP_CRYPTO_LIBRARY);
    THROW(env, "java/lang/UnsatisfiedLinkError", msg);
    return;
  }
#ifdef UNIX
  dlerror(); // Clear any existing error
  LOAD_DYNAMIC_SYMBOL(dlsym_CRYPTO_malloc, env, openssl, "CRYPTO_malloc");
  LOAD_DYNAMIC_SYMBOL(dlsym_CRYPTO_free, env, openssl, "CRYPTO_free");
  LOAD_DYNAMIC_SYMBOL(dlsym_CRYPTO_num_locks, env, openssl, "CRYPTO_num_locks");
  LOAD_DYNAMIC_SYMBOL(dlsym_CRYPTO_set_locking_callback, \
  env, openssl, "CRYPTO_set_locking_callback");
  LOAD_DYNAMIC_SYMBOL(dlsym_CRYPTO_set_id_callback, env, \
  openssl, "CRYPTO_set_id_callback");
  LOAD_DYNAMIC_SYMBOL(dlsym_ENGINE_load_rdrand, env, \
  openssl, "ENGINE_load_rdrand");
  LOAD_DYNAMIC_SYMBOL(dlsym_ENGINE_by_id, env, openssl, "ENGINE_by_id");
  LOAD_DYNAMIC_SYMBOL(dlsym_ENGINE_init, env, openssl, "ENGINE_init");
  LOAD_DYNAMIC_SYMBOL(dlsym_ENGINE_set_default, env, \
  openssl, "ENGINE_set_default");
  LOAD_DYNAMIC_SYMBOL(dlsym_ENGINE_finish, env, openssl, "ENGINE_finish");
  LOAD_DYNAMIC_SYMBOL(dlsym_ENGINE_free, env, openssl, "ENGINE_free");
  LOAD_DYNAMIC_SYMBOL(dlsym_ENGINE_cleanup, env, openssl, "ENGINE_cleanup");
  LOAD_DYNAMIC_SYMBOL(dlsym_RAND_bytes, env, openssl, "RAND_bytes");
#endif
#ifdef WINDOWS
  LOAD_DYNAMIC_SYMBOL(__dlsym_CRYPTO_malloc, dlsym_CRYPTO_malloc, \
  env, openssl, "CRYPTO_malloc");
  LOAD_DYNAMIC_SYMBOL(__dlsym_CRYPTO_free, dlsym_CRYPTO_free, \
  env, openssl, "CRYPTO_free");
  LOAD_DYNAMIC_SYMBOL(__dlsym_CRYPTO_num_locks, dlsym_CRYPTO_num_locks, \
  env, openssl, "CRYPTO_num_locks");
  LOAD_DYNAMIC_SYMBOL(__dlsym_CRYPTO_set_locking_callback, \
  dlsym_CRYPTO_set_locking_callback, \
  env, openssl, "CRYPTO_set_locking_callback");
  LOAD_DYNAMIC_SYMBOL(__dlsym_ENGINE_load_rdrand, dlsym_ENGINE_load_rdrand, \
  env, openssl, "ENGINE_load_rdrand");
  LOAD_DYNAMIC_SYMBOL(__dlsym_ENGINE_by_id, dlsym_ENGINE_by_id, \
  env, openssl, "ENGINE_by_id");
  LOAD_DYNAMIC_SYMBOL(__dlsym_ENGINE_init, dlsym_ENGINE_init, \
  env, openssl, "ENGINE_init");
  LOAD_DYNAMIC_SYMBOL(__dlsym_ENGINE_set_default, dlsym_ENGINE_set_default, \
  env, openssl, "ENGINE_set_default");
  LOAD_DYNAMIC_SYMBOL(__dlsym_ENGINE_finish, dlsym_ENGINE_finish, \
  env, openssl, "ENGINE_finish");
  LOAD_DYNAMIC_SYMBOL(__dlsym_ENGINE_free, dlsym_ENGINE_free, \
  env, openssl, "ENGINE_free");
  LOAD_DYNAMIC_SYMBOL(__dlsym_ENGINE_cleanup, dlsym_ENGINE_cleanup, \
  env, openssl, "ENGINE_cleanup");
  LOAD_DYNAMIC_SYMBOL(__dlsym_RAND_bytes, dlsym_RAND_bytes, \
  env, openssl, "RAND_bytes");
#endif

  init_locks();
  dlsym_ENGINE_load_rdrand();
  eng = dlsym_ENGINE_by_id("rdrand");
  ret = -1;
  do {
    if (NULL == eng) {
      break;
    }

    rc = dlsym_ENGINE_init(eng);
    if (1 != rc) {
      break;
    }

    rc = dlsym_ENGINE_set_default(eng, ENGINE_METHOD_RAND);
    if(1 != rc) {
      break;
    }

    ret = 0;
  } while(0);
  if (ret == -1) {
    if (NULL != eng) {
      dlsym_ENGINE_finish(eng);
      dlsym_ENGINE_free(eng);
    }
    dlsym_ENGINE_cleanup();
    destroy_locks();
  }
  return ret;
}