blob: b4069f72f0089dae58267db4d9b12bd78bdeeec8 [file] [log] [blame]
mlumishb892a272014-12-09 16:28:23 -08001#include "event.h"
2
3#ifdef HAVE_CONFIG_H
4#include "config.h"
5#endif
6
7#include "php.h"
8#include "php_ini.h"
9#include "ext/standard/info.h"
10#include "php_grpc.h"
11
12#include <stdbool.h>
13
14#include "grpc/grpc.h"
15
16#include "byte_buffer.h"
17#include "call.h"
18#include "timeval.h"
19
mlumish34cd1f02015-01-02 13:32:41 -080020/* Create a new PHP object containing the event data in the event struct.
21 event must not be used after this function is called */
22zval *grpc_php_convert_event(grpc_event *event) {
23 zval *data_object;
mlumishb892a272014-12-09 16:28:23 -080024 char *detail_string;
25 size_t detail_len;
26 char *method_string;
27 size_t method_len;
28 char *host_string;
29 size_t host_len;
30 char *read_string;
31 size_t read_len;
32
mlumish34cd1f02015-01-02 13:32:41 -080033 zval *event_object;
34
Craig Tillerb5dcec52015-01-13 11:13:42 -080035 if (event == NULL) {
mlumish34cd1f02015-01-02 13:32:41 -080036 return NULL;
37 }
38
39 MAKE_STD_ZVAL(event_object);
40 object_init(event_object);
41
Craig Tillerb5dcec52015-01-13 11:13:42 -080042 add_property_zval(
43 event_object, "call",
44 grpc_php_wrap_call(event->call, event->type == GRPC_SERVER_RPC_NEW));
mlumish34cd1f02015-01-02 13:32:41 -080045 add_property_long(event_object, "type", event->type);
46 add_property_long(event_object, "tag", (long)event->tag);
47
Craig Tillerb5dcec52015-01-13 11:13:42 -080048 switch (event->type) {
49 case GRPC_QUEUE_SHUTDOWN:
50 add_property_null(event_object, "data");
51 break;
mlumishb892a272014-12-09 16:28:23 -080052 case GRPC_READ:
Craig Tillerb5dcec52015-01-13 11:13:42 -080053 if (event->data.read == NULL) {
mlumish34cd1f02015-01-02 13:32:41 -080054 add_property_null(event_object, "data");
mlumishb892a272014-12-09 16:28:23 -080055 } else {
56 byte_buffer_to_string(event->data.read, &read_string, &read_len);
mlumish34cd1f02015-01-02 13:32:41 -080057 add_property_stringl(event_object, "data", read_string, read_len, true);
mlumishb892a272014-12-09 16:28:23 -080058 }
59 break;
60 case GRPC_INVOKE_ACCEPTED:
Craig Tillerb5dcec52015-01-13 11:13:42 -080061 add_property_long(event_object, "data",
mlumish34cd1f02015-01-02 13:32:41 -080062 (long)event->data.invoke_accepted);
63 break;
mlumishb892a272014-12-09 16:28:23 -080064 case GRPC_WRITE_ACCEPTED:
mlumish34cd1f02015-01-02 13:32:41 -080065 add_property_long(event_object, "data", (long)event->data.write_accepted);
66 break;
mlumishb892a272014-12-09 16:28:23 -080067 case GRPC_FINISH_ACCEPTED:
Craig Tillerb5dcec52015-01-13 11:13:42 -080068 add_property_long(event_object, "data",
mlumish34cd1f02015-01-02 13:32:41 -080069 (long)event->data.finish_accepted);
70 break;
mlumishb892a272014-12-09 16:28:23 -080071 case GRPC_CLIENT_METADATA_READ:
mlumish34cd1f02015-01-02 13:32:41 -080072 data_object = grpc_call_create_metadata_array(
mlumishb892a272014-12-09 16:28:23 -080073 event->data.client_metadata_read.count,
74 event->data.client_metadata_read.elements);
mlumish34cd1f02015-01-02 13:32:41 -080075 add_property_zval(event_object, "data", data_object);
mlumishb892a272014-12-09 16:28:23 -080076 break;
77 case GRPC_FINISHED:
mlumish34cd1f02015-01-02 13:32:41 -080078 MAKE_STD_ZVAL(data_object);
79 object_init(data_object);
80 add_property_long(data_object, "code", event->data.finished.status);
Craig Tillerb5dcec52015-01-13 11:13:42 -080081 if (event->data.finished.details == NULL) {
mlumish34cd1f02015-01-02 13:32:41 -080082 add_property_null(data_object, "details");
mlumishb892a272014-12-09 16:28:23 -080083 } else {
84 detail_len = strlen(event->data.finished.details);
Craig Tillerb5dcec52015-01-13 11:13:42 -080085 detail_string = ecalloc(detail_len + 1, sizeof(char));
mlumishb892a272014-12-09 16:28:23 -080086 memcpy(detail_string, event->data.finished.details, detail_len);
Craig Tillerb5dcec52015-01-13 11:13:42 -080087 add_property_string(data_object, "details", detail_string, true);
mlumishb892a272014-12-09 16:28:23 -080088 }
Craig Tillerb5dcec52015-01-13 11:13:42 -080089 add_property_zval(data_object, "metadata",
mlumish34cd1f02015-01-02 13:32:41 -080090 grpc_call_create_metadata_array(
91 event->data.finished.metadata_count,
92 event->data.finished.metadata_elements));
93 add_property_zval(event_object, "data", data_object);
mlumishb892a272014-12-09 16:28:23 -080094 break;
95 case GRPC_SERVER_RPC_NEW:
mlumish34cd1f02015-01-02 13:32:41 -080096 MAKE_STD_ZVAL(data_object);
97 object_init(data_object);
mlumishb892a272014-12-09 16:28:23 -080098 method_len = strlen(event->data.server_rpc_new.method);
Craig Tillerb5dcec52015-01-13 11:13:42 -080099 method_string = ecalloc(method_len + 1, sizeof(char));
mlumishb892a272014-12-09 16:28:23 -0800100 memcpy(method_string, event->data.server_rpc_new.method, method_len);
Craig Tillerb5dcec52015-01-13 11:13:42 -0800101 add_property_string(data_object, "method", method_string, false);
mlumishb892a272014-12-09 16:28:23 -0800102 host_len = strlen(event->data.server_rpc_new.host);
Craig Tillerb5dcec52015-01-13 11:13:42 -0800103 host_string = ecalloc(host_len + 1, sizeof(char));
mlumishb892a272014-12-09 16:28:23 -0800104 memcpy(host_string, event->data.server_rpc_new.host, host_len);
Craig Tillerb5dcec52015-01-13 11:13:42 -0800105 add_property_string(data_object, "host", host_string, false);
106 add_property_zval(
107 data_object, "absolute_timeout",
108 grpc_php_wrap_timeval(event->data.server_rpc_new.deadline));
109 add_property_zval(data_object, "metadata",
mlumishb892a272014-12-09 16:28:23 -0800110 grpc_call_create_metadata_array(
111 event->data.server_rpc_new.metadata_count,
112 event->data.server_rpc_new.metadata_elements));
mlumish34cd1f02015-01-02 13:32:41 -0800113 add_property_zval(event_object, "data", data_object);
mlumishb892a272014-12-09 16:28:23 -0800114 break;
Craig Tillerb5dcec52015-01-13 11:13:42 -0800115 default:
116 add_property_null(event_object, "data");
117 break;
mlumishb892a272014-12-09 16:28:23 -0800118 }
mlumish34cd1f02015-01-02 13:32:41 -0800119 grpc_event_finish(event);
120 return event_object;
mlumishb892a272014-12-09 16:28:23 -0800121}