Simplify userdata being passed to checkServerIdentity callback.

This commit is contained in:
Ian Haken 2018-06-20 15:11:11 -07:00 committed by murgatroid99
parent b6ad568c09
commit c70df88fc0
1 changed files with 6 additions and 12 deletions

View File

@ -60,14 +60,10 @@ ChannelCredentials::~ChannelCredentials() {
grpc_channel_credentials_release(wrapped_credentials); grpc_channel_credentials_release(wrapped_credentials);
} }
struct callback_md {
Nan::Callback *callback;
};
static int verify_peer_callback_wrapper(const char* servername, const char* cert, void* userdata) { static int verify_peer_callback_wrapper(const char* servername, const char* cert, void* userdata) {
Nan::HandleScope scope; Nan::HandleScope scope;
Nan::TryCatch try_catch; Nan::TryCatch try_catch;
struct callback_md* md = (struct callback_md*)userdata; Nan::Callback *callback = (Nan::Callback*)userdata;
const unsigned argc = 2; const unsigned argc = 2;
Local<Value> argv[argc]; Local<Value> argv[argc];
@ -82,7 +78,7 @@ static int verify_peer_callback_wrapper(const char* servername, const char* cert
argv[1] = Nan::New<v8::String>(cert).ToLocalChecked(); argv[1] = Nan::New<v8::String>(cert).ToLocalChecked();
} }
md->callback->Call(argc, argv); callback->Call(argc, argv);
if (try_catch.HasCaught()) { if (try_catch.HasCaught()) {
return 1; return 1;
@ -92,9 +88,8 @@ static int verify_peer_callback_wrapper(const char* servername, const char* cert
} }
static void verify_peer_callback_destruct(void *userdata) { static void verify_peer_callback_destruct(void *userdata) {
callback_md *md = (callback_md*)userdata; Nan::Callback *callback = (Nan::Callback*)userdata;
delete md->callback; delete callback;
delete md;
} }
void ChannelCredentials::Init(Local<Object> exports) { void ChannelCredentials::Init(Local<Object> exports) {
@ -211,10 +206,9 @@ NAN_METHOD(ChannelCredentials::CreateSsl) {
if (!value->IsFunction()) { if (!value->IsFunction()) {
return Nan::ThrowError("Value of checkServerIdentity must be a function."); return Nan::ThrowError("Value of checkServerIdentity must be a function.");
} }
struct callback_md *md = new struct callback_md; Nan::Callback *callback = new Callback(Local<Function>::Cast(value));
md->callback = new Callback(Local<Function>::Cast(value));
verify_options.verify_peer_callback = verify_peer_callback_wrapper; verify_options.verify_peer_callback = verify_peer_callback_wrapper;
verify_options.verify_peer_callback_userdata = (void*)md; verify_options.verify_peer_callback_userdata = (void*)callback;
verify_options.verify_peer_destruct = verify_peer_callback_destruct; verify_options.verify_peer_destruct = verify_peer_callback_destruct;
} }