Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(927)

Side by Side Diff: third_party/grpc/src/node/ext/node_grpc.cc

Issue 1932353002: Initial checkin of gRPC to third_party/ Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 *
3 * Copyright 2015-2016, Google Inc.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following disclaimer
14 * in the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Google Inc. nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33
34 #include <node.h>
35 #include <nan.h>
36 #include <v8.h>
37 #include "grpc/grpc.h"
38
39 #include "call.h"
40 #include "call_credentials.h"
41 #include "channel.h"
42 #include "channel_credentials.h"
43 #include "server.h"
44 #include "completion_queue_async_worker.h"
45 #include "server_credentials.h"
46
47 using v8::FunctionTemplate;
48 using v8::Local;
49 using v8::Value;
50 using v8::Object;
51 using v8::Uint32;
52 using v8::String;
53
54 void InitStatusConstants(Local<Object> exports) {
55 Nan::HandleScope scope;
56 Local<Object> status = Nan::New<Object>();
57 Nan::Set(exports, Nan::New("status").ToLocalChecked(), status);
58 Local<Value> OK(Nan::New<Uint32, uint32_t>(GRPC_STATUS_OK));
59 Nan::Set(status, Nan::New("OK").ToLocalChecked(), OK);
60 Local<Value> CANCELLED(Nan::New<Uint32, uint32_t>(GRPC_STATUS_CANCELLED));
61 Nan::Set(status, Nan::New("CANCELLED").ToLocalChecked(), CANCELLED);
62 Local<Value> UNKNOWN(Nan::New<Uint32, uint32_t>(GRPC_STATUS_UNKNOWN));
63 Nan::Set(status, Nan::New("UNKNOWN").ToLocalChecked(), UNKNOWN);
64 Local<Value> INVALID_ARGUMENT(
65 Nan::New<Uint32, uint32_t>(GRPC_STATUS_INVALID_ARGUMENT));
66 Nan::Set(status, Nan::New("INVALID_ARGUMENT").ToLocalChecked(),
67 INVALID_ARGUMENT);
68 Local<Value> DEADLINE_EXCEEDED(
69 Nan::New<Uint32, uint32_t>(GRPC_STATUS_DEADLINE_EXCEEDED));
70 Nan::Set(status, Nan::New("DEADLINE_EXCEEDED").ToLocalChecked(),
71 DEADLINE_EXCEEDED);
72 Local<Value> NOT_FOUND(Nan::New<Uint32, uint32_t>(GRPC_STATUS_NOT_FOUND));
73 Nan::Set(status, Nan::New("NOT_FOUND").ToLocalChecked(), NOT_FOUND);
74 Local<Value> ALREADY_EXISTS(
75 Nan::New<Uint32, uint32_t>(GRPC_STATUS_ALREADY_EXISTS));
76 Nan::Set(status, Nan::New("ALREADY_EXISTS").ToLocalChecked(), ALREADY_EXISTS);
77 Local<Value> PERMISSION_DENIED(
78 Nan::New<Uint32, uint32_t>(GRPC_STATUS_PERMISSION_DENIED));
79 Nan::Set(status, Nan::New("PERMISSION_DENIED").ToLocalChecked(),
80 PERMISSION_DENIED);
81 Local<Value> UNAUTHENTICATED(
82 Nan::New<Uint32, uint32_t>(GRPC_STATUS_UNAUTHENTICATED));
83 Nan::Set(status, Nan::New("UNAUTHENTICATED").ToLocalChecked(),
84 UNAUTHENTICATED);
85 Local<Value> RESOURCE_EXHAUSTED(
86 Nan::New<Uint32, uint32_t>(GRPC_STATUS_RESOURCE_EXHAUSTED));
87 Nan::Set(status, Nan::New("RESOURCE_EXHAUSTED").ToLocalChecked(),
88 RESOURCE_EXHAUSTED);
89 Local<Value> FAILED_PRECONDITION(
90 Nan::New<Uint32, uint32_t>(GRPC_STATUS_FAILED_PRECONDITION));
91 Nan::Set(status, Nan::New("FAILED_PRECONDITION").ToLocalChecked(),
92 FAILED_PRECONDITION);
93 Local<Value> ABORTED(Nan::New<Uint32, uint32_t>(GRPC_STATUS_ABORTED));
94 Nan::Set(status, Nan::New("ABORTED").ToLocalChecked(), ABORTED);
95 Local<Value> OUT_OF_RANGE(
96 Nan::New<Uint32, uint32_t>(GRPC_STATUS_OUT_OF_RANGE));
97 Nan::Set(status, Nan::New("OUT_OF_RANGE").ToLocalChecked(), OUT_OF_RANGE);
98 Local<Value> UNIMPLEMENTED(
99 Nan::New<Uint32, uint32_t>(GRPC_STATUS_UNIMPLEMENTED));
100 Nan::Set(status, Nan::New("UNIMPLEMENTED").ToLocalChecked(), UNIMPLEMENTED);
101 Local<Value> INTERNAL(Nan::New<Uint32, uint32_t>(GRPC_STATUS_INTERNAL));
102 Nan::Set(status, Nan::New("INTERNAL").ToLocalChecked(), INTERNAL);
103 Local<Value> UNAVAILABLE(Nan::New<Uint32, uint32_t>(GRPC_STATUS_UNAVAILABLE));
104 Nan::Set(status, Nan::New("UNAVAILABLE").ToLocalChecked(), UNAVAILABLE);
105 Local<Value> DATA_LOSS(Nan::New<Uint32, uint32_t>(GRPC_STATUS_DATA_LOSS));
106 Nan::Set(status, Nan::New("DATA_LOSS").ToLocalChecked(), DATA_LOSS);
107 }
108
109 void InitCallErrorConstants(Local<Object> exports) {
110 Nan::HandleScope scope;
111 Local<Object> call_error = Nan::New<Object>();
112 Nan::Set(exports, Nan::New("callError").ToLocalChecked(), call_error);
113 Local<Value> OK(Nan::New<Uint32, uint32_t>(GRPC_CALL_OK));
114 Nan::Set(call_error, Nan::New("OK").ToLocalChecked(), OK);
115 Local<Value> CALL_ERROR(Nan::New<Uint32, uint32_t>(GRPC_CALL_ERROR));
116 Nan::Set(call_error, Nan::New("ERROR").ToLocalChecked(), CALL_ERROR);
117 Local<Value> NOT_ON_SERVER(
118 Nan::New<Uint32, uint32_t>(GRPC_CALL_ERROR_NOT_ON_SERVER));
119 Nan::Set(call_error, Nan::New("NOT_ON_SERVER").ToLocalChecked(),
120 NOT_ON_SERVER);
121 Local<Value> NOT_ON_CLIENT(
122 Nan::New<Uint32, uint32_t>(GRPC_CALL_ERROR_NOT_ON_CLIENT));
123 Nan::Set(call_error, Nan::New("NOT_ON_CLIENT").ToLocalChecked(),
124 NOT_ON_CLIENT);
125 Local<Value> ALREADY_INVOKED(
126 Nan::New<Uint32, uint32_t>(GRPC_CALL_ERROR_ALREADY_INVOKED));
127 Nan::Set(call_error, Nan::New("ALREADY_INVOKED").ToLocalChecked(),
128 ALREADY_INVOKED);
129 Local<Value> NOT_INVOKED(
130 Nan::New<Uint32, uint32_t>(GRPC_CALL_ERROR_NOT_INVOKED));
131 Nan::Set(call_error, Nan::New("NOT_INVOKED").ToLocalChecked(), NOT_INVOKED);
132 Local<Value> ALREADY_FINISHED(
133 Nan::New<Uint32, uint32_t>(GRPC_CALL_ERROR_ALREADY_FINISHED));
134 Nan::Set(call_error, Nan::New("ALREADY_FINISHED").ToLocalChecked(),
135 ALREADY_FINISHED);
136 Local<Value> TOO_MANY_OPERATIONS(
137 Nan::New<Uint32, uint32_t>(GRPC_CALL_ERROR_TOO_MANY_OPERATIONS));
138 Nan::Set(call_error, Nan::New("TOO_MANY_OPERATIONS").ToLocalChecked(),
139 TOO_MANY_OPERATIONS);
140 Local<Value> INVALID_FLAGS(
141 Nan::New<Uint32, uint32_t>(GRPC_CALL_ERROR_INVALID_FLAGS));
142 Nan::Set(call_error, Nan::New("INVALID_FLAGS").ToLocalChecked(),
143 INVALID_FLAGS);
144 }
145
146 void InitOpTypeConstants(Local<Object> exports) {
147 Nan::HandleScope scope;
148 Local<Object> op_type = Nan::New<Object>();
149 Nan::Set(exports, Nan::New("opType").ToLocalChecked(), op_type);
150 Local<Value> SEND_INITIAL_METADATA(
151 Nan::New<Uint32, uint32_t>(GRPC_OP_SEND_INITIAL_METADATA));
152 Nan::Set(op_type, Nan::New("SEND_INITIAL_METADATA").ToLocalChecked(),
153 SEND_INITIAL_METADATA);
154 Local<Value> SEND_MESSAGE(
155 Nan::New<Uint32, uint32_t>(GRPC_OP_SEND_MESSAGE));
156 Nan::Set(op_type, Nan::New("SEND_MESSAGE").ToLocalChecked(), SEND_MESSAGE);
157 Local<Value> SEND_CLOSE_FROM_CLIENT(
158 Nan::New<Uint32, uint32_t>(GRPC_OP_SEND_CLOSE_FROM_CLIENT));
159 Nan::Set(op_type, Nan::New("SEND_CLOSE_FROM_CLIENT").ToLocalChecked(),
160 SEND_CLOSE_FROM_CLIENT);
161 Local<Value> SEND_STATUS_FROM_SERVER(
162 Nan::New<Uint32, uint32_t>(GRPC_OP_SEND_STATUS_FROM_SERVER));
163 Nan::Set(op_type, Nan::New("SEND_STATUS_FROM_SERVER").ToLocalChecked(),
164 SEND_STATUS_FROM_SERVER);
165 Local<Value> RECV_INITIAL_METADATA(
166 Nan::New<Uint32, uint32_t>(GRPC_OP_RECV_INITIAL_METADATA));
167 Nan::Set(op_type, Nan::New("RECV_INITIAL_METADATA").ToLocalChecked(),
168 RECV_INITIAL_METADATA);
169 Local<Value> RECV_MESSAGE(
170 Nan::New<Uint32, uint32_t>(GRPC_OP_RECV_MESSAGE));
171 Nan::Set(op_type, Nan::New("RECV_MESSAGE").ToLocalChecked(), RECV_MESSAGE);
172 Local<Value> RECV_STATUS_ON_CLIENT(
173 Nan::New<Uint32, uint32_t>(GRPC_OP_RECV_STATUS_ON_CLIENT));
174 Nan::Set(op_type, Nan::New("RECV_STATUS_ON_CLIENT").ToLocalChecked(),
175 RECV_STATUS_ON_CLIENT);
176 Local<Value> RECV_CLOSE_ON_SERVER(
177 Nan::New<Uint32, uint32_t>(GRPC_OP_RECV_CLOSE_ON_SERVER));
178 Nan::Set(op_type, Nan::New("RECV_CLOSE_ON_SERVER").ToLocalChecked(),
179 RECV_CLOSE_ON_SERVER);
180 }
181
182 void InitPropagateConstants(Local<Object> exports) {
183 Nan::HandleScope scope;
184 Local<Object> propagate = Nan::New<Object>();
185 Nan::Set(exports, Nan::New("propagate").ToLocalChecked(), propagate);
186 Local<Value> DEADLINE(Nan::New<Uint32, uint32_t>(GRPC_PROPAGATE_DEADLINE));
187 Nan::Set(propagate, Nan::New("DEADLINE").ToLocalChecked(), DEADLINE);
188 Local<Value> CENSUS_STATS_CONTEXT(
189 Nan::New<Uint32, uint32_t>(GRPC_PROPAGATE_CENSUS_STATS_CONTEXT));
190 Nan::Set(propagate, Nan::New("CENSUS_STATS_CONTEXT").ToLocalChecked(),
191 CENSUS_STATS_CONTEXT);
192 Local<Value> CENSUS_TRACING_CONTEXT(
193 Nan::New<Uint32, uint32_t>(GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT));
194 Nan::Set(propagate, Nan::New("CENSUS_TRACING_CONTEXT").ToLocalChecked(),
195 CENSUS_TRACING_CONTEXT);
196 Local<Value> CANCELLATION(
197 Nan::New<Uint32, uint32_t>(GRPC_PROPAGATE_CANCELLATION));
198 Nan::Set(propagate, Nan::New("CANCELLATION").ToLocalChecked(), CANCELLATION);
199 Local<Value> DEFAULTS(Nan::New<Uint32, uint32_t>(GRPC_PROPAGATE_DEFAULTS));
200 Nan::Set(propagate, Nan::New("DEFAULTS").ToLocalChecked(), DEFAULTS);
201 }
202
203 void InitConnectivityStateConstants(Local<Object> exports) {
204 Nan::HandleScope scope;
205 Local<Object> channel_state = Nan::New<Object>();
206 Nan::Set(exports, Nan::New("connectivityState").ToLocalChecked(),
207 channel_state);
208 Local<Value> IDLE(Nan::New<Uint32, uint32_t>(GRPC_CHANNEL_IDLE));
209 Nan::Set(channel_state, Nan::New("IDLE").ToLocalChecked(), IDLE);
210 Local<Value> CONNECTING(Nan::New<Uint32, uint32_t>(GRPC_CHANNEL_CONNECTING));
211 Nan::Set(channel_state, Nan::New("CONNECTING").ToLocalChecked(), CONNECTING);
212 Local<Value> READY(Nan::New<Uint32, uint32_t>(GRPC_CHANNEL_READY));
213 Nan::Set(channel_state, Nan::New("READY").ToLocalChecked(), READY);
214 Local<Value> TRANSIENT_FAILURE(
215 Nan::New<Uint32, uint32_t>(GRPC_CHANNEL_TRANSIENT_FAILURE));
216 Nan::Set(channel_state, Nan::New("TRANSIENT_FAILURE").ToLocalChecked(),
217 TRANSIENT_FAILURE);
218 Local<Value> FATAL_FAILURE(
219 Nan::New<Uint32, uint32_t>(GRPC_CHANNEL_FATAL_FAILURE));
220 Nan::Set(channel_state, Nan::New("FATAL_FAILURE").ToLocalChecked(),
221 FATAL_FAILURE);
222 }
223
224 void InitWriteFlags(Local<Object> exports) {
225 Nan::HandleScope scope;
226 Local<Object> write_flags = Nan::New<Object>();
227 Nan::Set(exports, Nan::New("writeFlags").ToLocalChecked(), write_flags);
228 Local<Value> BUFFER_HINT(Nan::New<Uint32, uint32_t>(GRPC_WRITE_BUFFER_HINT));
229 Nan::Set(write_flags, Nan::New("BUFFER_HINT").ToLocalChecked(), BUFFER_HINT);
230 Local<Value> NO_COMPRESS(Nan::New<Uint32, uint32_t>(GRPC_WRITE_NO_COMPRESS));
231 Nan::Set(write_flags, Nan::New("NO_COMPRESS").ToLocalChecked(), NO_COMPRESS);
232 }
233
234 NAN_METHOD(MetadataKeyIsLegal) {
235 if (!info[0]->IsString()) {
236 return Nan::ThrowTypeError(
237 "headerKeyIsLegal's argument must be a string");
238 }
239 Local<String> key = Nan::To<String>(info[0]).ToLocalChecked();
240 Nan::Utf8String key_utf8_str(key);
241 char *key_str = *key_utf8_str;
242 info.GetReturnValue().Set(static_cast<bool>(
243 grpc_header_key_is_legal(key_str, static_cast<size_t>(key->Length()))));
244 }
245
246 NAN_METHOD(MetadataNonbinValueIsLegal) {
247 if (!info[0]->IsString()) {
248 return Nan::ThrowTypeError(
249 "metadataNonbinValueIsLegal's argument must be a string");
250 }
251 Local<String> value = Nan::To<String>(info[0]).ToLocalChecked();
252 Nan::Utf8String value_utf8_str(value);
253 char *value_str = *value_utf8_str;
254 info.GetReturnValue().Set(static_cast<bool>(
255 grpc_header_nonbin_value_is_legal(
256 value_str, static_cast<size_t>(value->Length()))));
257 }
258
259 NAN_METHOD(MetadataKeyIsBinary) {
260 if (!info[0]->IsString()) {
261 return Nan::ThrowTypeError(
262 "metadataKeyIsLegal's argument must be a string");
263 }
264 Local<String> key = Nan::To<String>(info[0]).ToLocalChecked();
265 Nan::Utf8String key_utf8_str(key);
266 char *key_str = *key_utf8_str;
267 info.GetReturnValue().Set(static_cast<bool>(
268 grpc_is_binary_header(key_str, static_cast<size_t>(key->Length()))));
269 }
270
271 void init(Local<Object> exports) {
272 Nan::HandleScope scope;
273 grpc_init();
274 InitStatusConstants(exports);
275 InitCallErrorConstants(exports);
276 InitOpTypeConstants(exports);
277 InitPropagateConstants(exports);
278 InitConnectivityStateConstants(exports);
279 InitWriteFlags(exports);
280
281 grpc::node::Call::Init(exports);
282 grpc::node::CallCredentials::Init(exports);
283 grpc::node::Channel::Init(exports);
284 grpc::node::ChannelCredentials::Init(exports);
285 grpc::node::Server::Init(exports);
286 grpc::node::CompletionQueueAsyncWorker::Init(exports);
287 grpc::node::ServerCredentials::Init(exports);
288
289 // Attach a few utility functions directly to the module
290 Nan::Set(exports, Nan::New("metadataKeyIsLegal").ToLocalChecked(),
291 Nan::GetFunction(
292 Nan::New<FunctionTemplate>(MetadataKeyIsLegal)).ToLocalChecked()) ;
293 Nan::Set(exports, Nan::New("metadataNonbinValueIsLegal").ToLocalChecked(),
294 Nan::GetFunction(
295 Nan::New<FunctionTemplate>(MetadataNonbinValueIsLegal)
296 ).ToLocalChecked());
297 Nan::Set(exports, Nan::New("metadataKeyIsBinary").ToLocalChecked(),
298 Nan::GetFunction(
299 Nan::New<FunctionTemplate>(MetadataKeyIsBinary)
300 ).ToLocalChecked());
301 }
302
303 NODE_MODULE(grpc_node, init)
OLDNEW
« no previous file with comments | « third_party/grpc/src/node/ext/completion_queue_async_worker.cc ('k') | third_party/grpc/src/node/ext/server.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698