1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #ifndef ZEND_EXTENSIONS_H
23 #define ZEND_EXTENSIONS_H
24
25 #include "zend_compile.h"
26 #include "zend_build.h"
27
28
29
30
31 #define ZEND_EXTENSION_API_NO 320151012
32
33 typedef struct _zend_extension_version_info {
34 int zend_extension_api_no;
35 char *build_id;
36 } zend_extension_version_info;
37
38 #define ZEND_EXTENSION_BUILD_ID "API" ZEND_TOSTR(ZEND_EXTENSION_API_NO) ZEND_BUILD_TS ZEND_BUILD_DEBUG ZEND_BUILD_SYSTEM ZEND_BUILD_EXTRA
39
40 typedef struct _zend_extension zend_extension;
41
42
43 typedef int (*startup_func_t)(zend_extension *extension);
44 typedef void (*shutdown_func_t)(zend_extension *extension);
45 typedef void (*activate_func_t)(void);
46 typedef void (*deactivate_func_t)(void);
47
48 typedef void (*message_handler_func_t)(int message, void *arg);
49
50 typedef void (*op_array_handler_func_t)(zend_op_array *op_array);
51
52 typedef void (*statement_handler_func_t)(zend_op_array *op_array);
53 typedef void (*fcall_begin_handler_func_t)(zend_op_array *op_array);
54 typedef void (*fcall_end_handler_func_t)(zend_op_array *op_array);
55
56 typedef void (*op_array_ctor_func_t)(zend_op_array *op_array);
57 typedef void (*op_array_dtor_func_t)(zend_op_array *op_array);
58 typedef size_t (*op_array_persist_calc_func_t)(zend_op_array *op_array);
59 typedef size_t (*op_array_persist_func_t)(zend_op_array *op_array, void *mem);
60
61 struct _zend_extension {
62 char *name;
63 char *version;
64 char *author;
65 char *URL;
66 char *copyright;
67
68 startup_func_t startup;
69 shutdown_func_t shutdown;
70 activate_func_t activate;
71 deactivate_func_t deactivate;
72
73 message_handler_func_t message_handler;
74
75 op_array_handler_func_t op_array_handler;
76
77 statement_handler_func_t statement_handler;
78 fcall_begin_handler_func_t fcall_begin_handler;
79 fcall_end_handler_func_t fcall_end_handler;
80
81 op_array_ctor_func_t op_array_ctor;
82 op_array_dtor_func_t op_array_dtor;
83
84 int (*api_no_check)(int api_no);
85 int (*build_id_check)(const char* build_id);
86 op_array_persist_calc_func_t op_array_persist_calc;
87 op_array_persist_func_t op_array_persist;
88 void *reserved5;
89 void *reserved6;
90 void *reserved7;
91 void *reserved8;
92
93 DL_HANDLE handle;
94 int resource_number;
95 };
96
97 BEGIN_EXTERN_C()
98 ZEND_API int zend_get_resource_handle(zend_extension *extension);
99 ZEND_API void zend_extension_dispatch_message(int message, void *arg);
100 END_EXTERN_C()
101
102 #define ZEND_EXTMSG_NEW_EXTENSION 1
103
104
105 #define ZEND_EXTENSION() \
106 ZEND_EXT_API zend_extension_version_info extension_version_info = { ZEND_EXTENSION_API_NO, ZEND_EXTENSION_BUILD_ID }
107
108 #define STANDARD_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
109 #define COMPAT_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
110 #define BUILD_COMPAT_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
111
112
113 ZEND_API extern zend_llist zend_extensions;
114 ZEND_API extern uint32_t zend_extension_flags;
115
116 #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_CTOR (1<<0)
117 #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_DTOR (1<<1)
118 #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_HANDLER (1<<2)
119 #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_PERSIST_CALC (1<<3)
120 #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_PERSIST (1<<4)
121
122 void zend_extension_dtor(zend_extension *extension);
123 ZEND_API void zend_append_version_info(const zend_extension *extension);
124 int zend_startup_extensions_mechanism(void);
125 int zend_startup_extensions(void);
126 void zend_shutdown_extensions(void);
127
128 BEGIN_EXTERN_C()
129 ZEND_API int zend_load_extension(const char *path);
130 ZEND_API int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle);
131 ZEND_API zend_extension *zend_get_extension(const char *extension_name);
132 ZEND_API size_t zend_extensions_op_array_persist_calc(zend_op_array *op_array);
133 ZEND_API size_t zend_extensions_op_array_persist(zend_op_array *op_array, void *mem);
134 END_EXTERN_C()
135
136 #endif
137
138
139
140
141
142
143
144