diff options
Diffstat (limited to 'src/php/ext/grpc/call.c')
-rw-r--r--[-rwxr-xr-x] | src/php/ext/grpc/call.c | 293 |
1 files changed, 124 insertions, 169 deletions
diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c index 7f4f221caa..c01af34e95 100755..100644 --- a/src/php/ext/grpc/call.c +++ b/src/php/ext/grpc/call.c @@ -24,9 +24,9 @@ #include "byte_buffer.h" /* Frees and destroys an instance of wrapped_grpc_call */ -void free_wrapped_grpc_call(void *object TSRMLS_DC){ - wrapped_grpc_call *call = (wrapped_grpc_call*)object; - if(call->owned && call->wrapped != NULL){ +void free_wrapped_grpc_call(void *object TSRMLS_DC) { + wrapped_grpc_call *call = (wrapped_grpc_call *)object; + if (call->owned && call->wrapped != NULL) { grpc_call_destroy(call->wrapped); } efree(call); @@ -34,38 +34,36 @@ void free_wrapped_grpc_call(void *object TSRMLS_DC){ /* Initializes an instance of wrapped_grpc_call to be associated with an object * of a class specified by class_type */ -zend_object_value create_wrapped_grpc_call( - zend_class_entry *class_type TSRMLS_DC){ +zend_object_value create_wrapped_grpc_call(zend_class_entry *class_type + TSRMLS_DC) { zend_object_value retval; wrapped_grpc_call *intern; - intern = (wrapped_grpc_call*)emalloc(sizeof(wrapped_grpc_call)); + intern = (wrapped_grpc_call *)emalloc(sizeof(wrapped_grpc_call)); memset(intern, 0, sizeof(wrapped_grpc_call)); zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); retval.handle = zend_objects_store_put( - intern, - (zend_objects_store_dtor_t) zend_objects_destroy_object, - free_wrapped_grpc_call, - NULL TSRMLS_CC); + intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, + free_wrapped_grpc_call, NULL TSRMLS_CC); retval.handlers = zend_get_std_object_handlers(); return retval; } /* Wraps a grpc_call struct in a PHP object. Owned indicates whether the struct should be destroyed at the end of the object's lifecycle */ -zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned){ +zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned) { zval *call_object; MAKE_STD_ZVAL(call_object); object_init_ex(call_object, grpc_ce_call); - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - call_object TSRMLS_CC); + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(call_object TSRMLS_CC); call->wrapped = wrapped; return call_object; } -zval *grpc_call_create_metadata_array(int count, grpc_metadata *elements){ +zval *grpc_call_create_metadata_array(int count, grpc_metadata *elements) { int i; zval *array; zval **data = NULL; @@ -78,18 +76,16 @@ zval *grpc_call_create_metadata_array(int count, grpc_metadata *elements){ array_init(array); array_hash = Z_ARRVAL_P(array); grpc_metadata *elem; - for(i=0; i<count; i++){ + for (i = 0; i < count; i++) { elem = &elements[i]; key_len = strlen(elem->key); - str_key = ecalloc(key_len+1, sizeof(char)); + str_key = ecalloc(key_len + 1, sizeof(char)); memcpy(str_key, elem->key, key_len); - str_val = ecalloc(elem->value_length+1, sizeof(char)); + str_val = ecalloc(elem->value_length + 1, sizeof(char)); memcpy(str_val, elem->value, elem->value_length); - if(zend_hash_find(array_hash, - str_key, - key_len, - (void**)data) == SUCCESS){ - switch(Z_TYPE_P(*data)){ + if (zend_hash_find(array_hash, str_key, key_len, (void **)data) == + SUCCESS) { + switch (Z_TYPE_P(*data)) { case IS_STRING: MAKE_STD_ZVAL(inner_array); array_init(inner_array); @@ -107,44 +103,36 @@ zval *grpc_call_create_metadata_array(int count, grpc_metadata *elements){ efree(str_val); return NULL; } - add_next_index_stringl(inner_array, - str_val, - elem->value_length, - false); + add_next_index_stringl(inner_array, str_val, elem->value_length, false); } else { - add_assoc_stringl(array, - str_key, - str_val, - elem->value_length, - false); + add_assoc_stringl(array, str_key, str_val, elem->value_length, false); } } return array; } -int php_grpc_call_add_metadata_array_walk(void *elem TSRMLS_DC, - int num_args, +int php_grpc_call_add_metadata_array_walk(void *elem TSRMLS_DC, int num_args, va_list args, - zend_hash_key *hash_key){ + zend_hash_key *hash_key) { grpc_call_error error_code; - zval **data = (zval**)elem; + zval **data = (zval **)elem; grpc_metadata metadata; - grpc_call *call = va_arg(args, grpc_call*); + grpc_call *call = va_arg(args, grpc_call *); gpr_uint32 flags = va_arg(args, gpr_uint32); const char *key; HashTable *inner_hash; /* We assume that either two args were passed, and we are in the recursive case (and the second argument is the key), or one arg was passed and hash_key is the string key. */ - if(num_args > 2){ - key = va_arg(args, const char*); + if (num_args > 2) { + key = va_arg(args, const char *); } else { /* TODO(mlumish): If possible, check that hash_key is a string */ key = hash_key->arKey; } - switch(Z_TYPE_P(*data)){ + switch (Z_TYPE_P(*data)) { case IS_STRING: - metadata.key = (char*)key; + metadata.key = (char *)key; metadata.value = Z_STRVAL_P(*data); metadata.value_length = Z_STRLEN_P(*data); error_code = grpc_call_add_metadata(call, &metadata, 0u); @@ -153,11 +141,8 @@ int php_grpc_call_add_metadata_array_walk(void *elem TSRMLS_DC, case IS_ARRAY: inner_hash = Z_ARRVAL_P(*data); zend_hash_apply_with_arguments(inner_hash TSRMLS_CC, - php_grpc_call_add_metadata_array_walk, - 3, - call, - flags, - key); + php_grpc_call_add_metadata_array_walk, 3, + call, flags, key); break; default: zend_throw_exception(zend_exception_get_default(), @@ -174,27 +159,26 @@ int php_grpc_call_add_metadata_array_walk(void *elem TSRMLS_DC, * @param string $method The method to call * @param Timeval $absolute_deadline The deadline for completing the call */ -PHP_METHOD(Call, __construct){ - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); +PHP_METHOD(Call, __construct) { + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); zval *channel_obj; char *method; int method_len; zval *deadline_obj; /* "OsO" == 1 Object, 1 string, 1 Object */ - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "OsO", - &channel_obj, grpc_ce_channel, - &method, &method_len, - &deadline_obj, grpc_ce_timeval) == FAILURE){ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "OsO", &channel_obj, + grpc_ce_channel, &method, &method_len, + &deadline_obj, grpc_ce_timeval) == FAILURE) { zend_throw_exception(spl_ce_InvalidArgumentException, "Call expects a Channel, a String, and a Timeval", 1 TSRMLS_CC); return; } wrapped_grpc_channel *channel = - (wrapped_grpc_channel*)zend_object_store_get_object(channel_obj TSRMLS_CC); - if(channel->wrapped == NULL) { + (wrapped_grpc_channel *)zend_object_store_get_object( + channel_obj TSRMLS_CC); + if (channel->wrapped == NULL) { zend_throw_exception(spl_ce_InvalidArgumentException, "Call cannot be constructed from a closed Channel", 1 TSRMLS_CC); @@ -202,11 +186,10 @@ PHP_METHOD(Call, __construct){ } add_property_zval(getThis(), "channel", channel_obj); wrapped_grpc_timeval *deadline = - (wrapped_grpc_timeval*)zend_object_store_get_object(deadline_obj TSRMLS_CC); - call->wrapped = grpc_channel_create_call(channel->wrapped, - method, - channel->target, - deadline->wrapped); + (wrapped_grpc_timeval *)zend_object_store_get_object( + deadline_obj TSRMLS_CC); + call->wrapped = grpc_channel_create_call(channel->wrapped, method, + channel->target, deadline->wrapped); } /** @@ -218,17 +201,15 @@ PHP_METHOD(Call, __construct){ * (optional) * @return Void */ -PHP_METHOD(Call, add_metadata){ - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); +PHP_METHOD(Call, add_metadata) { + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); zval *array; HashTable *array_hash; long flags = 0; /* "a|l" == 1 array, 1 optional long */ - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "a|l", - &array, - &flags) == FAILURE){ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &flags) == + FAILURE) { zend_throw_exception(spl_ce_InvalidArgumentException, "add_metadata expects an array and an optional long", 1 TSRMLS_CC); @@ -236,10 +217,8 @@ PHP_METHOD(Call, add_metadata){ } array_hash = Z_ARRVAL_P(array); zend_hash_apply_with_arguments(array_hash TSRMLS_CC, - php_grpc_call_add_metadata_array_walk, - 2, - call->wrapped, - (gpr_uint32)flags); + php_grpc_call_add_metadata_array_walk, 2, + call->wrapped, (gpr_uint32)flags); } /** @@ -252,7 +231,7 @@ PHP_METHOD(Call, add_metadata){ * (optional) * @return Void */ -PHP_METHOD(Call, start_invoke){ +PHP_METHOD(Call, start_invoke) { grpc_call_error error_code; long tag1; long tag2; @@ -260,31 +239,24 @@ PHP_METHOD(Call, start_invoke){ zval *queue_obj; long flags = 0; /* "Olll|l" == 1 Object, 3 mandatory longs, 1 optional long */ - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "Olll|l", - &queue_obj, grpc_ce_completion_queue, - &tag1, - &tag2, - &tag3, - &flags) == FAILURE){ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Olll|l", &queue_obj, + grpc_ce_completion_queue, &tag1, &tag2, &tag3, + &flags) == FAILURE) { zend_throw_exception( spl_ce_InvalidArgumentException, "start_invoke needs a CompletionQueue, 3 longs, and an optional long", - 1 TSRMLS_CC); + 1 TSRMLS_CC); return; } add_property_zval(getThis(), "completion_queue", queue_obj); - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); wrapped_grpc_completion_queue *queue = - (wrapped_grpc_completion_queue*)zend_object_store_get_object( - queue_obj TSRMLS_CC); - error_code = grpc_call_start_invoke(call->wrapped, - queue->wrapped, - (void*)tag1, - (void*)tag2, - (void*)tag3, - (gpr_uint32)flags); + (wrapped_grpc_completion_queue *)zend_object_store_get_object( + queue_obj TSRMLS_CC); + error_code = + grpc_call_start_invoke(call->wrapped, queue->wrapped, (void *)tag1, + (void *)tag2, (void *)tag3, (gpr_uint32)flags); MAYBE_THROW_CALL_ERROR(start_invoke, error_code); } @@ -298,15 +270,13 @@ PHP_METHOD(Call, start_invoke){ * (optional) * @return Void */ -PHP_METHOD(Call, server_accept){ +PHP_METHOD(Call, server_accept) { long tag; zval *queue_obj; grpc_call_error error_code; /* "Ol|l" == 1 Object, 1 long */ - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "Ol", - &queue_obj, grpc_ce_completion_queue, - &tag) == FAILURE){ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Ol", &queue_obj, + grpc_ce_completion_queue, &tag) == FAILURE) { zend_throw_exception( spl_ce_InvalidArgumentException, "server_accept expects a CompletionQueue, a long, and an optional long", @@ -314,14 +284,13 @@ PHP_METHOD(Call, server_accept){ return; } add_property_zval(getThis(), "completion_queue", queue_obj); - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); wrapped_grpc_completion_queue *queue = - (wrapped_grpc_completion_queue*)zend_object_store_get_object( - queue_obj TSRMLS_CC); - error_code = grpc_call_server_accept(call->wrapped, - queue->wrapped, - (void*)tag); + (wrapped_grpc_completion_queue *)zend_object_store_get_object( + queue_obj TSRMLS_CC); + error_code = + grpc_call_server_accept(call->wrapped, queue->wrapped, (void *)tag); MAYBE_THROW_CALL_ERROR(server_accept, error_code); } @@ -329,16 +298,14 @@ PHP_METHOD(Call, server_end_initial_metadata) { grpc_call_error error_code; long flags = 0; /* "|l" == 1 optional long */ - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "|l", - &flags) == FAILURE) { - zend_throw_exception( - spl_ce_InvalidArgumentException, - "server_end_initial_metadata expects an optional long", - 1 TSRMLS_CC); + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &flags) == + FAILURE) { + zend_throw_exception(spl_ce_InvalidArgumentException, + "server_end_initial_metadata expects an optional long", + 1 TSRMLS_CC); } - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); error_code = grpc_call_server_end_initial_metadata(call->wrapped, flags); MAYBE_THROW_CALL_ERROR(server_end_initial_metadata, error_code); } @@ -347,9 +314,9 @@ PHP_METHOD(Call, server_end_initial_metadata) { * Called by clients to cancel an RPC on the server. * @return Void */ -PHP_METHOD(Call, cancel){ - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); +PHP_METHOD(Call, cancel) { + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); grpc_call_error error_code = grpc_call_cancel(call->wrapped); MAYBE_THROW_CALL_ERROR(cancel, error_code); } @@ -362,30 +329,25 @@ PHP_METHOD(Call, cancel){ * (optional) * @return Void */ -PHP_METHOD(Call, start_write){ +PHP_METHOD(Call, start_write) { grpc_call_error error_code; - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); char *buffer; int buffer_len; long tag; long flags = 0; /* "Ol|l" == 1 Object, 1 mandatory long, 1 optional long */ - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "sl|l", - &buffer, &buffer_len, - &tag, - &flags) == FAILURE){ - zend_throw_exception( - spl_ce_InvalidArgumentException, - "start_write expects a string and an optional long", - 1 TSRMLS_CC); + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|l", &buffer, + &buffer_len, &tag, &flags) == FAILURE) { + zend_throw_exception(spl_ce_InvalidArgumentException, + "start_write expects a string and an optional long", + 1 TSRMLS_CC); return; } error_code = grpc_call_start_write(call->wrapped, string_to_byte_buffer(buffer, buffer_len), - (void*)tag, - (gpr_uint32)flags); + (void *)tag, (gpr_uint32)flags); MAYBE_THROW_CALL_ERROR(start_write, error_code); } @@ -396,30 +358,26 @@ PHP_METHOD(Call, start_write){ * @param long $tag The tag to associate with this status * @return Void */ -PHP_METHOD(Call, start_write_status){ +PHP_METHOD(Call, start_write_status) { grpc_call_error error_code; - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); long status_code; int status_details_length; long tag; char *status_details; /* "lsl" == 1 long, 1 string, 1 long */ - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "lsl", - &status_code, - &status_details, &status_details_length, - &tag) == FAILURE){ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsl", &status_code, + &status_details, &status_details_length, + &tag) == FAILURE) { zend_throw_exception( spl_ce_InvalidArgumentException, - "start_write_status expects a long, a string, and a long", - 1 TSRMLS_CC); + "start_write_status expects a long, a string, and a long", 1 TSRMLS_CC); return; } - error_code = grpc_call_start_write_status(call->wrapped, - (grpc_status_code)status_code, - status_details, - (void*)tag); + error_code = + grpc_call_start_write_status(call->wrapped, (grpc_status_code)status_code, + status_details, (void *)tag); MAYBE_THROW_CALL_ERROR(start_write_status, error_code); } @@ -427,19 +385,18 @@ PHP_METHOD(Call, start_write_status){ * Indicate that there are no more messages to send * @return Void */ -PHP_METHOD(Call, writes_done){ +PHP_METHOD(Call, writes_done) { grpc_call_error error_code; - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); long tag; /* "l" == 1 long */ - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &tag) == FAILURE){ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &tag) == FAILURE) { zend_throw_exception(spl_ce_InvalidArgumentException, - "writes_done expects a long", - 1 TSRMLS_CC); + "writes_done expects a long", 1 TSRMLS_CC); return; } - error_code = grpc_call_writes_done(call->wrapped, (void*)tag); + error_code = grpc_call_writes_done(call->wrapped, (void *)tag); MAYBE_THROW_CALL_ERROR(writes_done, error_code); } @@ -449,37 +406,35 @@ PHP_METHOD(Call, writes_done){ * @param long $tag The tag to associate with this read * @return Void */ -PHP_METHOD(Call, start_read){ +PHP_METHOD(Call, start_read) { grpc_call_error error_code; - wrapped_grpc_call *call = (wrapped_grpc_call*)zend_object_store_get_object( - getThis() TSRMLS_CC); + wrapped_grpc_call *call = + (wrapped_grpc_call *)zend_object_store_get_object(getThis() TSRMLS_CC); long tag; /* "l" == 1 long */ - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &tag) == FAILURE){ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &tag) == FAILURE) { zend_throw_exception(spl_ce_InvalidArgumentException, - "start_read expects a long", - 1 TSRMLS_CC); + "start_read expects a long", 1 TSRMLS_CC); return; } - error_code = grpc_call_start_read(call->wrapped, (void*)tag); + error_code = grpc_call_start_read(call->wrapped, (void *)tag); MAYBE_THROW_CALL_ERROR(start_read, error_code); } static zend_function_entry call_methods[] = { - PHP_ME(Call, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) - PHP_ME(Call, server_accept, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, server_end_initial_metadata, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, add_metadata, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, cancel, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, start_invoke, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, start_read, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, start_write, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, start_write_status, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, writes_done, NULL, ZEND_ACC_PUBLIC) - PHP_FE_END -}; + PHP_ME(Call, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) + PHP_ME(Call, server_accept, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, server_end_initial_metadata, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, add_metadata, NULL, ZEND_ACC_PUBLIC) PHP_ME( + Call, cancel, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, start_invoke, NULL, ZEND_ACC_PUBLIC) PHP_ME( + Call, start_read, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, start_write, NULL, ZEND_ACC_PUBLIC) PHP_ME( + Call, start_write_status, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, writes_done, NULL, ZEND_ACC_PUBLIC) + PHP_FE_END}; -void grpc_init_call(TSRMLS_D){ +void grpc_init_call(TSRMLS_D) { zend_class_entry ce; INIT_CLASS_ENTRY(ce, "Grpc\\Call", call_methods); ce.create_object = create_wrapped_grpc_call; |