36 #include <ext/spl/spl_exceptions.h>
37 #include <zend_exceptions.h>
39 #ifdef GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
61 STANDARD_MODULE_HEADER,
70 PHP_MODULE_GLOBALS(
grpc),
74 STANDARD_MODULE_PROPERTIES_EX};
77 #ifdef COMPILE_DL_GRPC
108 void create_new_channel(
112 wrapped_grpc_channel_credentials *creds) {
161 wrapped_grpc_channel wrapped_channel;
162 wrapped_channel.wrapper = le->channel;
197 zend_throw_exception(spl_ce_UnexpectedValueException,
198 "Oops, failed to shutdown gRPC Core after fork()",
212 if (
getenv(
"GRPC_ENABLE_FORK_SUPPORT")) {
213 #ifdef GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
215 #endif // GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
221 char *enable_str = malloc(
sizeof(
"GRPC_ENABLE_FORK_SUPPORT=1"));
222 strcpy(enable_str,
"GRPC_ENABLE_FORK_SUPPORT=1");
227 char *poll_str = malloc(
sizeof(
"GRPC_POLL_STRATEGY=") +
229 strcpy(poll_str,
"GRPC_POLL_STRATEGY=");
235 char *verbosity_str = malloc(
sizeof(
"GRPC_VERBOSITY=") +
237 strcpy(verbosity_str,
"GRPC_VERBOSITY=");
239 putenv(verbosity_str);
243 char *trace_str = malloc(
sizeof(
"GRPC_TRACE=") +
245 strcpy(trace_str,
"GRPC_TRACE=");
254 const char* final_slash;
255 const char* display_file;
260 final_slash = strrchr(
args->file,
'/');
262 display_file = final_slash + 1;
264 display_file =
args->file;
274 now.tv_nsec, display_file,
args->line);
278 fprintf(fp,
"%s",
final);
287 REGISTER_INI_ENTRIES();
292 CONST_CS | CONST_PERSISTENT);
295 CONST_CS | CONST_PERSISTENT);
297 REGISTER_LONG_CONSTANT(
"Grpc\\CALL_ERROR_NOT_ON_SERVER",
299 CONST_CS | CONST_PERSISTENT);
301 REGISTER_LONG_CONSTANT(
"Grpc\\CALL_ERROR_NOT_ON_CLIENT",
303 CONST_CS | CONST_PERSISTENT);
305 REGISTER_LONG_CONSTANT(
"Grpc\\CALL_ERROR_ALREADY_INVOKED",
307 CONST_CS | CONST_PERSISTENT);
309 REGISTER_LONG_CONSTANT(
"Grpc\\CALL_ERROR_NOT_INVOKED",
311 CONST_CS | CONST_PERSISTENT);
314 REGISTER_LONG_CONSTANT(
"Grpc\\CALL_ERROR_ALREADY_FINISHED",
316 CONST_CS | CONST_PERSISTENT);
318 REGISTER_LONG_CONSTANT(
"Grpc\\CALL_ERROR_TOO_MANY_OPERATIONS",
320 CONST_CS | CONST_PERSISTENT);
322 REGISTER_LONG_CONSTANT(
"Grpc\\CALL_ERROR_INVALID_FLAGS",
324 CONST_CS | CONST_PERSISTENT);
331 CONST_CS | CONST_PERSISTENT);
335 CONST_CS | CONST_PERSISTENT);
340 CONST_CS | CONST_PERSISTENT);
343 CONST_CS | CONST_PERSISTENT);
350 CONST_CS | CONST_PERSISTENT);
355 REGISTER_LONG_CONSTANT(
"Grpc\\STATUS_INVALID_ARGUMENT",
357 CONST_CS | CONST_PERSISTENT);
363 REGISTER_LONG_CONSTANT(
"Grpc\\STATUS_DEADLINE_EXCEEDED",
365 CONST_CS | CONST_PERSISTENT);
368 CONST_CS | CONST_PERSISTENT);
371 REGISTER_LONG_CONSTANT(
"Grpc\\STATUS_ALREADY_EXISTS",
373 CONST_CS | CONST_PERSISTENT);
380 REGISTER_LONG_CONSTANT(
"Grpc\\STATUS_PERMISSION_DENIED",
382 CONST_CS | CONST_PERSISTENT);
385 REGISTER_LONG_CONSTANT(
"Grpc\\STATUS_UNAUTHENTICATED",
387 CONST_CS | CONST_PERSISTENT);
390 REGISTER_LONG_CONSTANT(
"Grpc\\STATUS_RESOURCE_EXHAUSTED",
392 CONST_CS | CONST_PERSISTENT);
412 REGISTER_LONG_CONSTANT(
"Grpc\\STATUS_FAILED_PRECONDITION",
414 CONST_CS | CONST_PERSISTENT);
421 CONST_CS | CONST_PERSISTENT);
437 REGISTER_LONG_CONSTANT(
"Grpc\\STATUS_OUT_OF_RANGE",
439 CONST_CS | CONST_PERSISTENT);
441 REGISTER_LONG_CONSTANT(
"Grpc\\STATUS_UNIMPLEMENTED",
443 CONST_CS | CONST_PERSISTENT);
448 CONST_CS | CONST_PERSISTENT);
462 CONST_CS | CONST_PERSISTENT);
465 CONST_CS | CONST_PERSISTENT);
472 REGISTER_LONG_CONSTANT(
"Grpc\\OP_SEND_INITIAL_METADATA",
474 CONST_CS | CONST_PERSISTENT);
478 REGISTER_LONG_CONSTANT(
"Grpc\\OP_SEND_MESSAGE",
480 CONST_CS | CONST_PERSISTENT);
485 REGISTER_LONG_CONSTANT(
"Grpc\\OP_SEND_CLOSE_FROM_CLIENT",
487 CONST_CS | CONST_PERSISTENT);
492 REGISTER_LONG_CONSTANT(
"Grpc\\OP_SEND_STATUS_FROM_SERVER",
494 CONST_CS | CONST_PERSISTENT);
499 REGISTER_LONG_CONSTANT(
"Grpc\\OP_RECV_INITIAL_METADATA",
501 CONST_CS | CONST_PERSISTENT);
505 REGISTER_LONG_CONSTANT(
"Grpc\\OP_RECV_MESSAGE",
507 CONST_CS | CONST_PERSISTENT);
513 REGISTER_LONG_CONSTANT(
"Grpc\\OP_RECV_STATUS_ON_CLIENT",
515 CONST_CS | CONST_PERSISTENT);
521 REGISTER_LONG_CONSTANT(
"Grpc\\OP_RECV_CLOSE_ON_SERVER",
523 CONST_CS | CONST_PERSISTENT);
527 REGISTER_LONG_CONSTANT(
"Grpc\\CHANNEL_IDLE",
529 CONST_CS | CONST_PERSISTENT);
531 REGISTER_LONG_CONSTANT(
"Grpc\\CHANNEL_CONNECTING",
533 CONST_CS | CONST_PERSISTENT);
535 REGISTER_LONG_CONSTANT(
"Grpc\\CHANNEL_READY",
537 CONST_CS | CONST_PERSISTENT);
539 REGISTER_LONG_CONSTANT(
"Grpc\\CHANNEL_TRANSIENT_FAILURE",
541 CONST_CS | CONST_PERSISTENT);
543 REGISTER_LONG_CONSTANT(
"Grpc\\CHANNEL_FATAL_FAILURE",
545 CONST_CS | CONST_PERSISTENT);
549 CONST_CS | CONST_PERSISTENT);
565 UNREGISTER_INI_ENTRIES();
585 php_info_print_table_start();
586 php_info_print_table_row(2,
"grpc support",
"enabled");
588 php_info_print_table_end();
589 DISPLAY_INI_ENTRIES();
613 grpc_globals->initialized = 0;
614 grpc_globals->enable_fork_support = 0;
615 grpc_globals->poll_strategy = NULL;
616 grpc_globals->grpc_verbosity = NULL;
617 grpc_globals->grpc_trace = NULL;
618 grpc_globals->log_filename = NULL;