aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/node
diff options
context:
space:
mode:
authorGravatar Julien Boeuf <jboeuf@google.com>2016-06-04 18:03:42 -0700
committerGravatar Julien Boeuf <jboeuf@google.com>2016-06-04 18:03:42 -0700
commitbfc7ed66286a77ed4dca0ec1feb23912b2ec1f02 (patch)
treed731e555910b79b4694b311b1faed78783f688b8 /src/node
parentc49464de3ed6108956561128b006c78777bd6db7 (diff)
parent845a0567e344d2d85ece37471e63199c045c2249 (diff)
Merge branch 'master' into fix_3803
Diffstat (limited to 'src/node')
-rw-r--r--src/node/ext/byte_buffer.cc14
-rw-r--r--src/node/ext/node_grpc.cc2
-rw-r--r--src/node/ext/server.cc38
-rw-r--r--src/node/test/math/math_grpc_pb.js75
-rw-r--r--src/node/test/math/math_pb.js10
5 files changed, 86 insertions, 53 deletions
diff --git a/src/node/ext/byte_buffer.cc b/src/node/ext/byte_buffer.cc
index 8e0b6916e9..3479a67702 100644
--- a/src/node/ext/byte_buffer.cc
+++ b/src/node/ext/byte_buffer.cc
@@ -72,17 +72,13 @@ Local<Value> ByteBufferToBuffer(grpc_byte_buffer *buffer) {
if (buffer == NULL) {
return scope.Escape(Nan::Null());
}
- size_t length = grpc_byte_buffer_length(buffer);
- char *result = new char[length];
- size_t offset = 0;
grpc_byte_buffer_reader reader;
grpc_byte_buffer_reader_init(&reader, buffer);
- gpr_slice next;
- while (grpc_byte_buffer_reader_next(&reader, &next) != 0) {
- memcpy(result + offset, GPR_SLICE_START_PTR(next), GPR_SLICE_LENGTH(next));
- offset += GPR_SLICE_LENGTH(next);
- gpr_slice_unref(next);
- }
+ gpr_slice slice = grpc_byte_buffer_reader_readall(&reader);
+ size_t length = GPR_SLICE_LENGTH(slice);
+ char *result = new char[length];
+ memcpy(result, GPR_SLICE_START_PTR(slice), length);
+ gpr_slice_unref(slice);
return scope.Escape(MakeFastBuffer(
Nan::NewBuffer(result, length, delete_buffer, NULL).ToLocalChecked()));
}
diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc
index 6b6e42737b..f18ce01c6f 100644
--- a/src/node/ext/node_grpc.cc
+++ b/src/node/ext/node_grpc.cc
@@ -220,7 +220,7 @@ void InitConnectivityStateConstants(Local<Object> exports) {
Nan::Set(channel_state, Nan::New("TRANSIENT_FAILURE").ToLocalChecked(),
TRANSIENT_FAILURE);
Local<Value> FATAL_FAILURE(
- Nan::New<Uint32, uint32_t>(GRPC_CHANNEL_FATAL_FAILURE));
+ Nan::New<Uint32, uint32_t>(GRPC_CHANNEL_SHUTDOWN));
Nan::Set(channel_state, Nan::New("FATAL_FAILURE").ToLocalChecked(),
FATAL_FAILURE);
}
diff --git a/src/node/ext/server.cc b/src/node/ext/server.cc
index b9e1fe9160..dd1b777ac8 100644
--- a/src/node/ext/server.cc
+++ b/src/node/ext/server.cc
@@ -35,15 +35,15 @@
#include "server.h"
-#include <node.h>
#include <nan.h>
+#include <node.h>
#include <vector>
+#include "call.h"
+#include "completion_queue_async_worker.h"
#include "grpc/grpc.h"
#include "grpc/grpc_security.h"
#include "grpc/support/log.h"
-#include "call.h"
-#include "completion_queue_async_worker.h"
#include "server_credentials.h"
#include "timeval.h"
@@ -100,8 +100,8 @@ class NewCallOp : public Op {
Nan::Set(obj, Nan::New("host").ToLocalChecked(),
Nan::New(details.host).ToLocalChecked());
Nan::Set(obj, Nan::New("deadline").ToLocalChecked(),
- Nan::New<Date>(
- TimespecToMilliseconds(details.deadline)).ToLocalChecked());
+ Nan::New<Date>(TimespecToMilliseconds(details.deadline))
+ .ToLocalChecked());
Nan::Set(obj, Nan::New("metadata").ToLocalChecked(),
ParseMetadata(&request_metadata));
return scope.Escape(obj);
@@ -117,14 +117,13 @@ class NewCallOp : public Op {
grpc_metadata_array request_metadata;
protected:
- std::string GetTypeString() const {
- return "new_call";
- }
+ std::string GetTypeString() const { return "new_call"; }
};
Server::Server(grpc_server *server) : wrapped_server(server) {
shutdown_queue = grpc_completion_queue_create(NULL);
- grpc_server_register_completion_queue(server, shutdown_queue, NULL);
+ grpc_server_register_non_listening_completion_queue(server, shutdown_queue,
+ NULL);
}
Server::~Server() {
@@ -156,8 +155,7 @@ bool Server::HasInstance(Local<Value> val) {
}
void Server::ShutdownServer() {
- grpc_server_shutdown_and_notify(this->wrapped_server,
- this->shutdown_queue,
+ grpc_server_shutdown_and_notify(this->wrapped_server, this->shutdown_queue,
NULL);
grpc_server_cancel_all_calls(this->wrapped_server);
grpc_completion_queue_pluck(this->shutdown_queue, NULL,
@@ -170,8 +168,8 @@ NAN_METHOD(Server::New) {
if (!info.IsConstructCall()) {
const int argc = 1;
Local<Value> argv[argc] = {info[0]};
- MaybeLocal<Object> maybe_instance = constructor->GetFunction()->NewInstance(
- argc, argv);
+ MaybeLocal<Object> maybe_instance =
+ constructor->GetFunction()->NewInstance(argc, argv);
if (maybe_instance.IsEmpty()) {
// There's probably a pending exception
return;
@@ -185,8 +183,9 @@ NAN_METHOD(Server::New) {
grpc_channel_args *channel_args;
if (!ParseChannelArgs(info[0], &channel_args)) {
DeallocateChannelArgs(channel_args);
- return Nan::ThrowTypeError("Server options must be an object with "
- "string keys and integer or string values");
+ return Nan::ThrowTypeError(
+ "Server options must be an object with "
+ "string keys and integer or string values");
}
wrapped_server = grpc_server_create(channel_args, NULL);
DeallocateChannelArgs(channel_args);
@@ -218,8 +217,7 @@ NAN_METHOD(Server::RequestCall) {
NAN_METHOD(Server::AddHttp2Port) {
if (!HasInstance(info.This())) {
- return Nan::ThrowTypeError(
- "addHttp2Port can only be called on a Server");
+ return Nan::ThrowTypeError("addHttp2Port can only be called on a Server");
}
if (!info[0]->IsString()) {
return Nan::ThrowTypeError(
@@ -239,8 +237,7 @@ NAN_METHOD(Server::AddHttp2Port) {
*Utf8String(info[0]));
} else {
port = grpc_server_add_secure_http2_port(server->wrapped_server,
- *Utf8String(info[0]),
- creds);
+ *Utf8String(info[0]), creds);
}
info.GetReturnValue().Set(Nan::New<Number>(port));
}
@@ -262,8 +259,7 @@ NAN_METHOD(Server::TryShutdown) {
Server *server = ObjectWrap::Unwrap<Server>(info.This());
unique_ptr<OpVec> ops(new OpVec());
grpc_server_shutdown_and_notify(
- server->wrapped_server,
- CompletionQueueAsyncWorker::GetQueue(),
+ server->wrapped_server, CompletionQueueAsyncWorker::GetQueue(),
new struct tag(new Nan::Callback(info[0].As<Function>()), ops.release(),
shared_ptr<Resources>(nullptr)));
CompletionQueueAsyncWorker::Next();
diff --git a/src/node/test/math/math_grpc_pb.js b/src/node/test/math/math_grpc_pb.js
index 083ed66913..17a4bf7243 100644
--- a/src/node/test/math/math_grpc_pb.js
+++ b/src/node/test/math/math_grpc_pb.js
@@ -1,94 +1,135 @@
// GENERATED CODE -- DO NOT EDIT!
+// Original file comments:
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
'use strict';
var grpc = require('grpc');
-var math_pb = require('./math_pb.js');
+var math_math_pb = require('../math/math_pb.js');
function serialize_DivArgs(arg) {
- if (!(arg instanceof math_pb.DivArgs)) {
+ if (!(arg instanceof math_math_pb.DivArgs)) {
throw new Error('Expected argument of type DivArgs');
}
return new Buffer(arg.serializeBinary());
}
function deserialize_DivArgs(buffer_arg) {
- return math_pb.DivArgs.deserializeBinary(new Uint8Array(buffer_arg));
+ return math_math_pb.DivArgs.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_DivReply(arg) {
- if (!(arg instanceof math_pb.DivReply)) {
+ if (!(arg instanceof math_math_pb.DivReply)) {
throw new Error('Expected argument of type DivReply');
}
return new Buffer(arg.serializeBinary());
}
function deserialize_DivReply(buffer_arg) {
- return math_pb.DivReply.deserializeBinary(new Uint8Array(buffer_arg));
+ return math_math_pb.DivReply.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_FibArgs(arg) {
- if (!(arg instanceof math_pb.FibArgs)) {
+ if (!(arg instanceof math_math_pb.FibArgs)) {
throw new Error('Expected argument of type FibArgs');
}
return new Buffer(arg.serializeBinary());
}
function deserialize_FibArgs(buffer_arg) {
- return math_pb.FibArgs.deserializeBinary(new Uint8Array(buffer_arg));
+ return math_math_pb.FibArgs.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_Num(arg) {
- if (!(arg instanceof math_pb.Num)) {
+ if (!(arg instanceof math_math_pb.Num)) {
throw new Error('Expected argument of type Num');
}
return new Buffer(arg.serializeBinary());
}
function deserialize_Num(buffer_arg) {
- return math_pb.Num.deserializeBinary(new Uint8Array(buffer_arg));
+ return math_math_pb.Num.deserializeBinary(new Uint8Array(buffer_arg));
}
var MathService = exports.MathService = {
+ // Div divides args.dividend by args.divisor and returns the quotient and
+ // remainder.
div: {
path: '/math.Math/Div',
requestStream: false,
responseStream: false,
- requestType: math_pb.DivArgs,
- responseType: math_pb.DivReply,
+ requestType: math_math_pb.DivArgs,
+ responseType: math_math_pb.DivReply,
requestSerialize: serialize_DivArgs,
requestDeserialize: deserialize_DivArgs,
responseSerialize: serialize_DivReply,
responseDeserialize: deserialize_DivReply,
},
+ // DivMany accepts an arbitrary number of division args from the client stream
+ // and sends back the results in the reply stream. The stream continues until
+ // the client closes its end; the server does the same after sending all the
+ // replies. The stream ends immediately if either end aborts.
divMany: {
path: '/math.Math/DivMany',
requestStream: true,
responseStream: true,
- requestType: math_pb.DivArgs,
- responseType: math_pb.DivReply,
+ requestType: math_math_pb.DivArgs,
+ responseType: math_math_pb.DivReply,
requestSerialize: serialize_DivArgs,
requestDeserialize: deserialize_DivArgs,
responseSerialize: serialize_DivReply,
responseDeserialize: deserialize_DivReply,
},
+ // Fib generates numbers in the Fibonacci sequence. If args.limit > 0, Fib
+ // generates up to limit numbers; otherwise it continues until the call is
+ // canceled. Unlike Fib above, Fib has no final FibReply.
fib: {
path: '/math.Math/Fib',
requestStream: false,
responseStream: true,
- requestType: math_pb.FibArgs,
- responseType: math_pb.Num,
+ requestType: math_math_pb.FibArgs,
+ responseType: math_math_pb.Num,
requestSerialize: serialize_FibArgs,
requestDeserialize: deserialize_FibArgs,
responseSerialize: serialize_Num,
responseDeserialize: deserialize_Num,
},
+ // Sum sums a stream of numbers, returning the final result once the stream
+ // is closed.
sum: {
path: '/math.Math/Sum',
requestStream: true,
responseStream: false,
- requestType: math_pb.Num,
- responseType: math_pb.Num,
+ requestType: math_math_pb.Num,
+ responseType: math_math_pb.Num,
requestSerialize: serialize_Num,
requestDeserialize: deserialize_Num,
responseSerialize: serialize_Num,
diff --git a/src/node/test/math/math_pb.js b/src/node/test/math/math_pb.js
index 3489143bec..ccc05c6e06 100644
--- a/src/node/test/math/math_pb.js
+++ b/src/node/test/math/math_pb.js
@@ -65,7 +65,7 @@ proto.math.DivArgs.toObject = function(includeInstance, msg) {
};
if (includeInstance) {
- obj.$jspbMessageInstance = msg
+ obj.$jspbMessageInstance = msg;
}
return obj;
};
@@ -251,7 +251,7 @@ proto.math.DivReply.toObject = function(includeInstance, msg) {
};
if (includeInstance) {
- obj.$jspbMessageInstance = msg
+ obj.$jspbMessageInstance = msg;
}
return obj;
};
@@ -436,7 +436,7 @@ proto.math.FibArgs.toObject = function(includeInstance, msg) {
};
if (includeInstance) {
- obj.$jspbMessageInstance = msg
+ obj.$jspbMessageInstance = msg;
}
return obj;
};
@@ -595,7 +595,7 @@ proto.math.Num.toObject = function(includeInstance, msg) {
};
if (includeInstance) {
- obj.$jspbMessageInstance = msg
+ obj.$jspbMessageInstance = msg;
}
return obj;
};
@@ -754,7 +754,7 @@ proto.math.FibReply.toObject = function(includeInstance, msg) {
};
if (includeInstance) {
- obj.$jspbMessageInstance = msg
+ obj.$jspbMessageInstance = msg;
}
return obj;
};