X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-ares;a=blobdiff_plain;f=php_ares.c;fp=php_ares.c;h=680c4d9c8cf9cead446a1bb4155f7e7fc8679e48;hp=c60ce4f8d4ccd234a54a632f790d6dc93f56b17c;hb=9aea024d8b1de196394cf6b5dc868628d92154b4;hpb=7c7f2a0c5aa15419325556444184ad24d62ba870 diff --git a/php_ares.c b/php_ares.c index c60ce4f..680c4d9 100644 --- a/php_ares.c +++ b/php_ares.c @@ -1113,6 +1113,65 @@ static PHP_FUNCTION(ares_init) } /* }}} */ +#ifdef HAVE_ARES_SET_LOCAL_DEV +/* {{{ proto void ares_set_local_dev(resource ares, string dev) + Set the local interface name to bind to. */ +static PHP_FUNCTION(ares_set_local_dev) +{ + zval *rsrc; + char *dev_str = NULL; + int dev_len = 0; + php_ares *ares; + + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs!", &rsrc, &dev_str, &dev_len)) { + RETURN_FALSE; + } + ZEND_FETCH_RESOURCE(ares, php_ares *, &rsrc, -1, PHP_ARES_LE_NAME, le_ares); + + ares_set_local_dev(ares->channel, dev_str); +} +#endif + +#ifdef HAVE_ARES_SET_LOCAL_IP4 +/* {{{ proto void ares_set_local_ip4(resource ares, int addr) + Set the local IPv4 address to bind to. */ +static PHP_FUNCTION(ares_set_local_ip4) +{ + zval *rsrc; + long ip4_num; + php_ares *ares; + + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &rsrc, &ip4_num)) { + RETURN_FALSE; + } + ZEND_FETCH_RESOURCE(ares, php_ares *, &rsrc, -1, PHP_ARES_LE_NAME, le_ares); + + ares_set_local_ip4(ares->channel, (unsigned int) ip4_num); +} +#endif + +#ifdef HAVE_ARES_SET_LOCAL_IP6 +/* {{{ proto void ares_set_local_ip6(resource ares, string addr128bit) + Set the local IPv6 address to bind to. */ +static PHP_FUNCTION(ares_set_local_ip6) +{ + zval *rsrc; + char *ip6_str; + int ip6_len; + php_ares *ares; + + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &rsrc, &ip6_str, &ip6_len)) { + RETURN_FALSE; + } + if (16 != ip6_len) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Binary IPv6 address string must be exactly 16 bytes long"); + } + ZEND_FETCH_RESOURCE(ares, php_ares *, &rsrc, -1, PHP_ARES_LE_NAME, le_ares); + + ares_set_local_ip6(ares->channel, (unsigned char *) ip6_str); +} +#endif + /* {{{ proto void ares_destroy(resource ares) Destroy the ares handle */ static PHP_FUNCTION(ares_destroy)