1 #ifndef PHP_SOCK_CONVERSIONS_H
2 #define PHP_SOCK_CONVERSIONS_H 1
3
4 #include <php.h>
5
6 #ifndef PHP_WIN32
7 # include <netinet/in.h>
8 # include <sys/socket.h>
9 #else
10 # include <Ws2tcpip.h>
11 #endif
12
13 #include "php_sockets.h"
14
15
16 struct err_s {
17 int has_error;
18 char *msg;
19 int level;
20 int should_free;
21 };
22
23 struct key_value {
24 const char *key;
25 unsigned key_size;
26 void *value;
27 };
28
29
30 typedef struct _ser_context ser_context;
31 typedef struct _res_context res_context;
32
33 #define KEY_RECVMSG_RET "recvmsg_ret"
34
35 typedef void (from_zval_write_field)(const zval *arr_value, char *field, ser_context *ctx);
36 typedef void (to_zval_read_field)(const char *data, zval *zv, res_context *ctx);
37
38
39 extern const struct key_value empty_key_value_list[];
40
41
42 void err_msg_dispose(struct err_s *err);
43 void allocations_dispose(zend_llist **allocations);
44
45
46 void from_zval_write_int(const zval *arr_value, char *field, ser_context *ctx);
47 void to_zval_read_int(const char *data, zval *zv, res_context *ctx);
48
49 #ifdef IPV6_PKTINFO
50 void from_zval_write_in6_pktinfo(const zval *container, char *in6_pktinfo_c, ser_context *ctx);
51 void to_zval_read_in6_pktinfo(const char *data, zval *zv, res_context *ctx);
52 #endif
53
54 #ifdef SO_PASSCRED
55 void from_zval_write_ucred(const zval *container, char *ucred_c, ser_context *ctx);
56 void to_zval_read_ucred(const char *data, zval *zv, res_context *ctx);
57 #endif
58
59 #ifdef SCM_RIGHTS
60 size_t calculate_scm_rights_space(const zval *arr, ser_context *ctx);
61 void from_zval_write_fd_array(const zval *arr, char *int_arr, ser_context *ctx);
62 void to_zval_read_fd_array(const char *data, zval *zv, res_context *ctx);
63 #endif
64
65 void from_zval_write_msghdr_send(const zval *container, char *msghdr_c, ser_context *ctx);
66 void from_zval_write_msghdr_recv(const zval *container, char *msghdr_c, ser_context *ctx);
67 void to_zval_read_msghdr(const char *msghdr_c, zval *zv, res_context *ctx);
68
69
70 void *from_zval_run_conversions(const zval *container,
71 php_socket *sock,
72 from_zval_write_field *writer,
73 size_t struct_size,
74 const char *top_name,
75 zend_llist **allocations ,
76 struct err_s *err );
77
78 zval *to_zval_run_conversions(const char *structure,
79 to_zval_read_field *reader,
80 const char *top_name,
81 const struct key_value *key_value_pairs,
82 struct err_s *err, zval *zv);
83
84 #endif