mirror of https://github.com/grpc/grpc-node.git
Merge branch 'master' of github.com:grpc/grpc into grpclb_v0
This commit is contained in:
commit
68089fa8f9
|
@ -68,6 +68,8 @@ using v8::Value;
|
||||||
Nan::Callback *CallCredentials::constructor;
|
Nan::Callback *CallCredentials::constructor;
|
||||||
Persistent<FunctionTemplate> CallCredentials::fun_tpl;
|
Persistent<FunctionTemplate> CallCredentials::fun_tpl;
|
||||||
|
|
||||||
|
static Callback *plugin_callback;
|
||||||
|
|
||||||
CallCredentials::CallCredentials(grpc_call_credentials *credentials)
|
CallCredentials::CallCredentials(grpc_call_credentials *credentials)
|
||||||
: wrapped_credentials(credentials) {}
|
: wrapped_credentials(credentials) {}
|
||||||
|
|
||||||
|
@ -88,6 +90,11 @@ void CallCredentials::Init(Local<Object> exports) {
|
||||||
Nan::New<FunctionTemplate>(CreateFromPlugin)).ToLocalChecked());
|
Nan::New<FunctionTemplate>(CreateFromPlugin)).ToLocalChecked());
|
||||||
Nan::Set(exports, Nan::New("CallCredentials").ToLocalChecked(), ctr);
|
Nan::Set(exports, Nan::New("CallCredentials").ToLocalChecked(), ctr);
|
||||||
constructor = new Nan::Callback(ctr);
|
constructor = new Nan::Callback(ctr);
|
||||||
|
|
||||||
|
Local<FunctionTemplate> callback_tpl =
|
||||||
|
Nan::New<FunctionTemplate>(PluginCallback);
|
||||||
|
plugin_callback = new Callback(
|
||||||
|
Nan::GetFunction(callback_tpl).ToLocalChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CallCredentials::HasInstance(Local<Value> val) {
|
bool CallCredentials::HasInstance(Local<Value> val) {
|
||||||
|
@ -195,23 +202,28 @@ NAN_METHOD(PluginCallback) {
|
||||||
return Nan::ThrowTypeError(
|
return Nan::ThrowTypeError(
|
||||||
"The callback's third argument must be an object");
|
"The callback's third argument must be an object");
|
||||||
}
|
}
|
||||||
|
if (!info[3]->IsObject()) {
|
||||||
|
return Nan::ThrowTypeError(
|
||||||
|
"The callback's fourth argument must be an object");
|
||||||
|
}
|
||||||
shared_ptr<Resources> resources(new Resources);
|
shared_ptr<Resources> resources(new Resources);
|
||||||
grpc_status_code code = static_cast<grpc_status_code>(
|
grpc_status_code code = static_cast<grpc_status_code>(
|
||||||
Nan::To<uint32_t>(info[0]).FromJust());
|
Nan::To<uint32_t>(info[0]).FromJust());
|
||||||
Utf8String details_utf8_str(info[1]);
|
Utf8String details_utf8_str(info[1]);
|
||||||
char *details = *details_utf8_str;
|
char *details = *details_utf8_str;
|
||||||
grpc_metadata_array array;
|
grpc_metadata_array array;
|
||||||
|
Local<Object> callback_data = Nan::To<Object>(info[3]).ToLocalChecked();
|
||||||
if (!CreateMetadataArray(Nan::To<Object>(info[2]).ToLocalChecked(),
|
if (!CreateMetadataArray(Nan::To<Object>(info[2]).ToLocalChecked(),
|
||||||
&array, resources)){
|
&array, resources)){
|
||||||
return Nan::ThrowError("Failed to parse metadata");
|
return Nan::ThrowError("Failed to parse metadata");
|
||||||
}
|
}
|
||||||
grpc_credentials_plugin_metadata_cb cb =
|
grpc_credentials_plugin_metadata_cb cb =
|
||||||
reinterpret_cast<grpc_credentials_plugin_metadata_cb>(
|
reinterpret_cast<grpc_credentials_plugin_metadata_cb>(
|
||||||
Nan::Get(info.Callee(),
|
Nan::Get(callback_data,
|
||||||
Nan::New("cb").ToLocalChecked()
|
Nan::New("cb").ToLocalChecked()
|
||||||
).ToLocalChecked().As<External>()->Value());
|
).ToLocalChecked().As<External>()->Value());
|
||||||
void *user_data =
|
void *user_data =
|
||||||
Nan::Get(info.Callee(),
|
Nan::Get(callback_data,
|
||||||
Nan::New("user_data").ToLocalChecked()
|
Nan::New("user_data").ToLocalChecked()
|
||||||
).ToLocalChecked().As<External>()->Value();
|
).ToLocalChecked().As<External>()->Value();
|
||||||
cb(user_data, array.metadata, array.count, code, details);
|
cb(user_data, array.metadata, array.count, code, details);
|
||||||
|
@ -227,17 +239,17 @@ NAUV_WORK_CB(SendPluginCallback) {
|
||||||
while (!callbacks.empty()) {
|
while (!callbacks.empty()) {
|
||||||
plugin_callback_data *data = callbacks.front();
|
plugin_callback_data *data = callbacks.front();
|
||||||
callbacks.pop_front();
|
callbacks.pop_front();
|
||||||
// Attach cb and user_data to plugin_callback so that it can access them later
|
Local<Object> callback_data = Nan::New<Object>();
|
||||||
v8::Local<v8::Function> plugin_callback = Nan::GetFunction(
|
Nan::Set(callback_data, Nan::New("cb").ToLocalChecked(),
|
||||||
Nan::New<v8::FunctionTemplate>(PluginCallback)).ToLocalChecked();
|
|
||||||
Nan::Set(plugin_callback, Nan::New("cb").ToLocalChecked(),
|
|
||||||
Nan::New<v8::External>(reinterpret_cast<void*>(data->cb)));
|
Nan::New<v8::External>(reinterpret_cast<void*>(data->cb)));
|
||||||
Nan::Set(plugin_callback, Nan::New("user_data").ToLocalChecked(),
|
Nan::Set(callback_data, Nan::New("user_data").ToLocalChecked(),
|
||||||
Nan::New<v8::External>(data->user_data));
|
Nan::New<v8::External>(data->user_data));
|
||||||
const int argc = 2;
|
const int argc = 3;
|
||||||
v8::Local<v8::Value> argv[argc] = {
|
v8::Local<v8::Value> argv[argc] = {
|
||||||
Nan::New(data->service_url).ToLocalChecked(),
|
Nan::New(data->service_url).ToLocalChecked(),
|
||||||
plugin_callback
|
callback_data,
|
||||||
|
// Get Local<Function> from Nan::Callback*
|
||||||
|
**plugin_callback
|
||||||
};
|
};
|
||||||
Nan::Callback *callback = state->callback;
|
Nan::Callback *callback = state->callback;
|
||||||
callback->Call(argc, argv);
|
callback->Call(argc, argv);
|
||||||
|
|
|
@ -19,11 +19,11 @@
|
||||||
"lodash": "^3.9.3",
|
"lodash": "^3.9.3",
|
||||||
"google-protobuf": "^3.0.0-alpha.5"
|
"google-protobuf": "^3.0.0-alpha.5"
|
||||||
},
|
},
|
||||||
"files": {
|
"files": [
|
||||||
"LICENSE",
|
"LICENSE",
|
||||||
"health.js",
|
"health.js",
|
||||||
"v1"
|
"v1"
|
||||||
},
|
],
|
||||||
"main": "src/node/index.js",
|
"main": "src/node/index.js",
|
||||||
"license": "BSD-3-Clause"
|
"license": "BSD-3-Clause"
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,8 @@ exports.createSsl = ChannelCredentials.createSsl;
|
||||||
* @return {CallCredentials} The credentials object
|
* @return {CallCredentials} The credentials object
|
||||||
*/
|
*/
|
||||||
exports.createFromMetadataGenerator = function(metadata_generator) {
|
exports.createFromMetadataGenerator = function(metadata_generator) {
|
||||||
return CallCredentials.createFromPlugin(function(service_url, callback) {
|
return CallCredentials.createFromPlugin(function(service_url, cb_data,
|
||||||
|
callback) {
|
||||||
metadata_generator({service_url: service_url}, function(error, metadata) {
|
metadata_generator({service_url: service_url}, function(error, metadata) {
|
||||||
var code = grpc.status.OK;
|
var code = grpc.status.OK;
|
||||||
var message = '';
|
var message = '';
|
||||||
|
@ -107,7 +108,7 @@ exports.createFromMetadataGenerator = function(metadata_generator) {
|
||||||
metadata = new Metadata();
|
metadata = new Metadata();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
callback(code, message, metadata._getCoreRepresentation());
|
callback(code, message, metadata._getCoreRepresentation(), cb_data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue