summaryrefslogtreecommitdiff
path: root/ext/sockets/sendrecvmsg.c
diff options
context:
space:
mode:
authorGustavo Lopes <glopes@nebm.ist.utl.pt>2012-11-02 17:54:31 +0100
committerGustavo Lopes <glopes@nebm.ist.utl.pt>2013-02-02 16:38:05 +0100
commit73ab2385cb4dd2da08be940f0f6b0ef9f06f15b8 (patch)
tree4ea01d4114d91bee5aa0899f36efe0d302663973 /ext/sockets/sendrecvmsg.c
parentb27c22d627e342687eb0c21bac8859ea1d91b54b (diff)
downloadphp-git-73ab2385cb4dd2da08be940f0f6b0ef9f06f15b8.tar.gz
Support for IPV6_HOPLIMIT and IPV6_TCLASS
Diffstat (limited to 'ext/sockets/sendrecvmsg.c')
-rw-r--r--ext/sockets/sendrecvmsg.c43
1 files changed, 38 insertions, 5 deletions
diff --git a/ext/sockets/sendrecvmsg.c b/ext/sockets/sendrecvmsg.c
index 0489e977be..e47bd46e38 100644
--- a/ext/sockets/sendrecvmsg.c
+++ b/ext/sockets/sendrecvmsg.c
@@ -98,7 +98,7 @@ typedef struct {
typedef struct {
int cmsg_level; /* originating protocol */
- int msg_type; /* protocol-specific type */
+ int cmsg_type; /* protocol-specific type */
} anc_reg_key;
static struct {
@@ -1194,14 +1194,32 @@ static void init_ancillary_registry(void)
zend_hash_init(&ancillary_registry.ht, 32, NULL, NULL, 1);
- /* struct in6_pktinfo *pktinfo; */
+#define PUT_ENTRY() \
+ zend_hash_update(&ancillary_registry.ht, (char*)&key, sizeof(key), \
+ (void*)&entry, sizeof(entry), NULL)
+
entry.size = sizeof(struct in6_pktinfo);
entry.from_array = from_zval_write_in6_pktinfo;
entry.to_array = to_zval_read_in6_pktinfo;
key.cmsg_level = IPPROTO_IPV6;
- key.msg_type = IPV6_PKTINFO;
- zend_hash_update(&ancillary_registry.ht, (char*)&key, sizeof(key),
- (void*)&entry, sizeof(entry), NULL);
+ key.cmsg_type = IPV6_PKTINFO;
+ PUT_ENTRY();
+
+ entry.size = sizeof(int);
+ entry.from_array = from_zval_write_int;
+ entry.to_array = to_zval_read_int;
+ key.cmsg_level = IPPROTO_IPV6;
+ key.cmsg_type = IPV6_HOPLIMIT;
+ PUT_ENTRY();
+
+ entry.size = sizeof(int);
+ entry.from_array = from_zval_write_int;
+ entry.to_array = to_zval_read_int;
+ key.cmsg_level = IPPROTO_IPV6;
+ key.cmsg_type = IPV6_TCLASS;
+ PUT_ENTRY();
+
+
}
static ancillary_reg_entry *get_ancillary_reg_entry(int cmsg_level, int msg_type)
{
@@ -1364,7 +1382,22 @@ PHP_FUNCTION(socket_cmsg_space)
void _socket_sendrecvmsg_init(INIT_FUNC_ARGS)
{
REGISTER_LONG_CONSTANT("IPV6_RECVPKTINFO", IPV6_RECVPKTINFO, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT, CONST_CS | CONST_PERSISTENT);
+ /* would require some effort:
+ REGISTER_LONG_CONSTANT("IPV6_RECVRTHDR", IPV6_RECVRTHDR, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS, CONST_CS | CONST_PERSISTENT);
+ */
+ REGISTER_LONG_CONSTANT("IPV6_RECVTCLASS", IPV6_RECVTCLASS, CONST_CS | CONST_PERSISTENT);
+
REGISTER_LONG_CONSTANT("IPV6_PKTINFO", IPV6_PKTINFO, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IPV6_HOPLIMIT", IPV6_HOPLIMIT, CONST_CS | CONST_PERSISTENT);
+ /*
+ REGISTER_LONG_CONSTANT("IPV6_RTHDR", IPV6_RTHDR, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IPV6_HOPOPTS", IPV6_HOPOPTS, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IPV6_DSTOPTS", IPV6_DSTOPTS, CONST_CS | CONST_PERSISTENT);
+ */
+ REGISTER_LONG_CONSTANT("IPV6_TCLASS", IPV6_TCLASS, CONST_CS | CONST_PERSISTENT);
#ifdef ZTS
ancillary_mutex = tsrm_mutex_alloc();