blob: 67e366c385dc0b66f9ef094e0abbccf562362417 [file] [log] [blame]
Craig Tiller1a61b172015-02-16 11:53:47 -08001/*
2 *
3 * Copyright 2015, 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
mlumishb892a272014-12-09 16:28:23 -080034#include "call.h"
35#include "channel.h"
36#include "server.h"
37#include "completion_queue.h"
38#include "event.h"
39#include "timeval.h"
40#include "credentials.h"
41#include "server_credentials.h"
42
43#ifdef HAVE_CONFIG_H
44#include "config.h"
45#endif
46
47#include "php.h"
48#include "php_ini.h"
49#include "ext/standard/info.h"
50#include "php_grpc.h"
51
Craig Tillerb5dcec52015-01-13 11:13:42 -080052// ZEND_DECLARE_MODULE_GLOBALS(grpc)
mlumishb892a272014-12-09 16:28:23 -080053
54/* {{{ grpc_functions[]
55 *
56 * Every user visible function must have an entry in grpc_functions[].
57 */
58const zend_function_entry grpc_functions[] = {
Craig Tillerb5dcec52015-01-13 11:13:42 -080059 PHP_FE_END /* Must be the last line in grpc_functions[] */
mlumishb892a272014-12-09 16:28:23 -080060};
61/* }}} */
62
63/* {{{ grpc_module_entry
64 */
65zend_module_entry grpc_module_entry = {
66#if ZEND_MODULE_API_NO >= 20010901
67 STANDARD_MODULE_HEADER,
68#endif
murgatroid991d894522015-01-16 09:57:05 -080069 "grpc", grpc_functions, PHP_MINIT(grpc),
70 PHP_MSHUTDOWN(grpc), NULL, NULL,
mlumishb892a272014-12-09 16:28:23 -080071 PHP_MINFO(grpc),
72#if ZEND_MODULE_API_NO >= 20010901
73 PHP_GRPC_VERSION,
74#endif
Craig Tillerb5dcec52015-01-13 11:13:42 -080075 STANDARD_MODULE_PROPERTIES};
mlumishb892a272014-12-09 16:28:23 -080076/* }}} */
77
78#ifdef COMPILE_DL_GRPC
79ZEND_GET_MODULE(grpc)
80#endif
81
82/* {{{ PHP_INI
83 */
84/* Remove comments and fill if you need to have entries in php.ini
85PHP_INI_BEGIN()
Craig Tillerb5dcec52015-01-13 11:13:42 -080086 STD_PHP_INI_ENTRY("grpc.global_value", "42", PHP_INI_ALL, OnUpdateLong,
87global_value, zend_grpc_globals, grpc_globals)
88 STD_PHP_INI_ENTRY("grpc.global_string", "foobar", PHP_INI_ALL,
89OnUpdateString, global_string, zend_grpc_globals, grpc_globals)
mlumishb892a272014-12-09 16:28:23 -080090PHP_INI_END()
91*/
92/* }}} */
93
94/* {{{ php_grpc_init_globals
95 */
96/* Uncomment this function if you have INI entries
97static void php_grpc_init_globals(zend_grpc_globals *grpc_globals)
98{
99 grpc_globals->global_value = 0;
100 grpc_globals->global_string = NULL;
101}
102*/
103/* }}} */
104
105/* {{{ PHP_MINIT_FUNCTION
106 */
Craig Tillerb5dcec52015-01-13 11:13:42 -0800107PHP_MINIT_FUNCTION(grpc) {
108 /* If you have INI entries, uncomment these lines
109 REGISTER_INI_ENTRIES();
110 */
111 /* Register call error constants */
112 grpc_init();
113 REGISTER_LONG_CONSTANT("Grpc\\CALL_OK", GRPC_CALL_OK, CONST_CS);
114 REGISTER_LONG_CONSTANT("Grpc\\CALL_ERROR", GRPC_CALL_ERROR, CONST_CS);
115 REGISTER_LONG_CONSTANT("Grpc\\CALL_ERROR_NOT_ON_SERVER",
116 GRPC_CALL_ERROR_NOT_ON_SERVER, CONST_CS);
117 REGISTER_LONG_CONSTANT("Grpc\\CALL_ERROR_NOT_ON_CLIENT",
118 GRPC_CALL_ERROR_NOT_ON_CLIENT, CONST_CS);
119 REGISTER_LONG_CONSTANT("Grpc\\CALL_ERROR_ALREADY_INVOKED",
120 GRPC_CALL_ERROR_ALREADY_INVOKED, CONST_CS);
121 REGISTER_LONG_CONSTANT("Grpc\\CALL_ERROR_NOT_INVOKED",
122 GRPC_CALL_ERROR_NOT_INVOKED, CONST_CS);
123 REGISTER_LONG_CONSTANT("Grpc\\CALL_ERROR_ALREADY_FINISHED",
124 GRPC_CALL_ERROR_ALREADY_FINISHED, CONST_CS);
125 REGISTER_LONG_CONSTANT("Grpc\\CALL_ERROR_TOO_MANY_OPERATIONS",
126 GRPC_CALL_ERROR_TOO_MANY_OPERATIONS, CONST_CS);
127 REGISTER_LONG_CONSTANT("Grpc\\CALL_ERROR_INVALID_FLAGS",
128 GRPC_CALL_ERROR_INVALID_FLAGS, CONST_CS);
mlumishb892a272014-12-09 16:28:23 -0800129
Craig Tillerb5dcec52015-01-13 11:13:42 -0800130 /* Register op error constants */
131 REGISTER_LONG_CONSTANT("Grpc\\OP_OK", GRPC_OP_OK, CONST_CS);
132 REGISTER_LONG_CONSTANT("Grpc\\OP_ERROR", GRPC_OP_ERROR, CONST_CS);
mlumishb892a272014-12-09 16:28:23 -0800133
Craig Tillerb5dcec52015-01-13 11:13:42 -0800134 /* Register flag constants */
135 REGISTER_LONG_CONSTANT("Grpc\\WRITE_BUFFER_HINT", GRPC_WRITE_BUFFER_HINT,
136 CONST_CS);
137 REGISTER_LONG_CONSTANT("Grpc\\WRITE_NO_COMPRESS", GRPC_WRITE_NO_COMPRESS,
138 CONST_CS);
mlumishb892a272014-12-09 16:28:23 -0800139
Craig Tillerb5dcec52015-01-13 11:13:42 -0800140 /* Register completion type constants */
141 REGISTER_LONG_CONSTANT("Grpc\\QUEUE_SHUTDOWN", GRPC_QUEUE_SHUTDOWN, CONST_CS);
142 REGISTER_LONG_CONSTANT("Grpc\\READ", GRPC_READ, CONST_CS);
Craig Tillerb5dcec52015-01-13 11:13:42 -0800143 REGISTER_LONG_CONSTANT("Grpc\\FINISH_ACCEPTED", GRPC_FINISH_ACCEPTED,
144 CONST_CS);
murgatroid991d894522015-01-16 09:57:05 -0800145 REGISTER_LONG_CONSTANT("Grpc\\WRITE_ACCEPTED", GRPC_WRITE_ACCEPTED, CONST_CS);
Craig Tillerb5dcec52015-01-13 11:13:42 -0800146 REGISTER_LONG_CONSTANT("Grpc\\CLIENT_METADATA_READ",
147 GRPC_CLIENT_METADATA_READ, CONST_CS);
148 REGISTER_LONG_CONSTANT("Grpc\\FINISHED", GRPC_FINISHED, CONST_CS);
149 REGISTER_LONG_CONSTANT("Grpc\\SERVER_RPC_NEW", GRPC_SERVER_RPC_NEW, CONST_CS);
mlumishb892a272014-12-09 16:28:23 -0800150
Craig Tillerb5dcec52015-01-13 11:13:42 -0800151 /* Register status constants */
152 REGISTER_LONG_CONSTANT("Grpc\\STATUS_OK", GRPC_STATUS_OK, CONST_CS);
153 REGISTER_LONG_CONSTANT("Grpc\\STATUS_CANCELLED", GRPC_STATUS_CANCELLED,
154 CONST_CS);
155 REGISTER_LONG_CONSTANT("Grpc\\STATUS_UNKNOWN", GRPC_STATUS_UNKNOWN, CONST_CS);
156 REGISTER_LONG_CONSTANT("Grpc\\STATUS_INVALID_ARGUMENT",
157 GRPC_STATUS_INVALID_ARGUMENT, CONST_CS);
158 REGISTER_LONG_CONSTANT("Grpc\\STATUS_DEADLINE_EXCEEDED",
159 GRPC_STATUS_DEADLINE_EXCEEDED, CONST_CS);
160 REGISTER_LONG_CONSTANT("Grpc\\STATUS_NOT_FOUND", GRPC_STATUS_NOT_FOUND,
161 CONST_CS);
162 REGISTER_LONG_CONSTANT("Grpc\\STATUS_ALREADY_EXISTS",
163 GRPC_STATUS_ALREADY_EXISTS, CONST_CS);
164 REGISTER_LONG_CONSTANT("Grpc\\STATUS_PERMISSION_DENIED",
165 GRPC_STATUS_PERMISSION_DENIED, CONST_CS);
166 REGISTER_LONG_CONSTANT("Grpc\\STATUS_UNAUTHENTICATED",
167 GRPC_STATUS_UNAUTHENTICATED, CONST_CS);
168 REGISTER_LONG_CONSTANT("Grpc\\STATUS_RESOURCE_EXHAUSTED",
169 GRPC_STATUS_RESOURCE_EXHAUSTED, CONST_CS);
170 REGISTER_LONG_CONSTANT("Grpc\\STATUS_FAILED_PRECONDITION",
171 GRPC_STATUS_FAILED_PRECONDITION, CONST_CS);
172 REGISTER_LONG_CONSTANT("Grpc\\STATUS_ABORTED", GRPC_STATUS_ABORTED, CONST_CS);
173 REGISTER_LONG_CONSTANT("Grpc\\STATUS_OUT_OF_RANGE", GRPC_STATUS_OUT_OF_RANGE,
174 CONST_CS);
175 REGISTER_LONG_CONSTANT("Grpc\\STATUS_UNIMPLEMENTED",
176 GRPC_STATUS_UNIMPLEMENTED, CONST_CS);
177 REGISTER_LONG_CONSTANT("Grpc\\STATUS_INTERNAL", GRPC_STATUS_INTERNAL,
178 CONST_CS);
179 REGISTER_LONG_CONSTANT("Grpc\\STATUS_UNAVAILABLE", GRPC_STATUS_UNAVAILABLE,
180 CONST_CS);
181 REGISTER_LONG_CONSTANT("Grpc\\STATUS_DATA_LOSS", GRPC_STATUS_DATA_LOSS,
182 CONST_CS);
mlumishb892a272014-12-09 16:28:23 -0800183
Craig Tillerb5dcec52015-01-13 11:13:42 -0800184 grpc_init_call(TSRMLS_C);
185 grpc_init_channel(TSRMLS_C);
186 grpc_init_server(TSRMLS_C);
187 grpc_init_completion_queue(TSRMLS_C);
188 grpc_init_timeval(TSRMLS_C);
189 grpc_init_credentials(TSRMLS_C);
190 grpc_init_server_credentials(TSRMLS_C);
191 return SUCCESS;
mlumishb892a272014-12-09 16:28:23 -0800192}
193/* }}} */
194
195/* {{{ PHP_MSHUTDOWN_FUNCTION
196 */
Craig Tillerb5dcec52015-01-13 11:13:42 -0800197PHP_MSHUTDOWN_FUNCTION(grpc) {
198 /* uncomment this line if you have INI entries
199 UNREGISTER_INI_ENTRIES();
200 */
201 grpc_shutdown_timeval(TSRMLS_C);
202 grpc_shutdown();
203 return SUCCESS;
mlumishb892a272014-12-09 16:28:23 -0800204}
205/* }}} */
206
207/* {{{ PHP_MINFO_FUNCTION
208 */
Craig Tillerb5dcec52015-01-13 11:13:42 -0800209PHP_MINFO_FUNCTION(grpc) {
210 php_info_print_table_start();
211 php_info_print_table_header(2, "grpc support", "enabled");
212 php_info_print_table_end();
mlumishb892a272014-12-09 16:28:23 -0800213
Craig Tillerb5dcec52015-01-13 11:13:42 -0800214 /* Remove comments if you have entries in php.ini
215 DISPLAY_INI_ENTRIES();
216 */
mlumishb892a272014-12-09 16:28:23 -0800217}
218/* }}} */
219/* The previous line is meant for vim and emacs, so it can correctly fold and
220 unfold functions in source code. See the corresponding marks just before
221 function definition, where the functions purpose is also documented. Please
222 follow this convention for the convenience of others editing your code.
223*/
224
mlumishb892a272014-12-09 16:28:23 -0800225/*
226 * Local variables:
227 * tab-width: 4
228 * c-basic-offset: 4
229 * End:
230 * vim600: noet sw=4 ts=4 fdm=marker
231 * vim<600: noet sw=4 ts=4
232 */