]> granicus.if.org Git - php/commitdiff
Allow define connection timeout throught "connection_timeout" option in SoapClient...
authorDmitry Stogov <dmitry@php.net>
Wed, 23 Mar 2005 08:08:34 +0000 (08:08 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 23 Mar 2005 08:08:34 +0000 (08:08 +0000)
ext/soap/php_http.c
ext/soap/soap.c

index 97d5f4057d04b6e9815856eb3437e4494b525698..7ce8dc9b607af45d7f2e9648ea3db66914645771 100644 (file)
@@ -82,7 +82,7 @@ static void proxy_authentication(zval* this_ptr, smart_str* soap_headers TSRMLS_
 static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, int *use_proxy TSRMLS_DC)
 {
        php_stream *stream;
-       zval **proxy_host, **proxy_port;
+       zval **proxy_host, **proxy_port, **tmp;
        char *host;
 #ifdef ZEND_ENGINE_2
        php_stream_context *context = NULL;
@@ -91,6 +91,8 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, in
 #endif
        int port;
        int old_error_reporting;
+       struct timeval tv;
+       struct timeval *timeout = NULL;
 
        if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_proxy_host", sizeof("_proxy_host"), (void **) &proxy_host) == SUCCESS &&
            Z_TYPE_PP(proxy_host) == IS_STRING &&
@@ -103,6 +105,12 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, in
                host = phpurl->host;
                port = phpurl->port;
        }
+       if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_connection_timeout", sizeof("_connection_timeout"), (void **) &tmp) == SUCCESS &&
+           Z_TYPE_PP(tmp) == IS_LONG && Z_LVAL_PP(tmp) > 0) {
+         tv.tv_sec = Z_LVAL_PP(tmp);
+         tv.tv_usec = 0;
+               timeout = &tv;
+       }
 
        old_error_reporting = EG(error_reporting);
        EG(error_reporting) &= ~(E_WARNING|E_NOTICE|E_USER_WARNING|E_USER_NOTICE);
@@ -126,12 +134,12 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, in
                ENFORCE_SAFE_MODE | REPORT_ERRORS,
                STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT,
                NULL /*persistent_id*/,
-               NULL /*timeout*/,
+               timeout,
                context,
                NULL, NULL);
        efree(name);
 #else
-       stream = php_stream_sock_open_host(host, port, SOCK_STREAM, NULL, NULL);
+       stream = php_stream_sock_open_host(host, port, SOCK_STREAM, timeout, NULL);
 #endif
 
        /* SSL & proxy */
index 25b0947c8a5ef075f8ef9918cb55773063690841..aaa062429b03b7918f70bf25b423a23aadbb0c56 100644 (file)
@@ -2094,6 +2094,11 @@ PHP_METHOD(SoapClient, SoapClient)
 #endif
                        add_property_zval(this_ptr, "_classmap", class_map);
                }
+
+               if (zend_hash_find(ht, "connection_timeout", sizeof("connection_timeout"), (void**)&tmp) == SUCCESS &&
+                   Z_TYPE_PP(tmp) == IS_LONG && Z_LVAL_PP(tmp) > 0) {
+                       add_property_long(this_ptr, "_connection_timeout", Z_LVAL_PP(tmp));
+               }
        } else if (wsdl == NULL) {
                php_error_docref(NULL TSRMLS_CC, E_ERROR, "'location' and 'uri' options are requred in nonWSDL mode");
                return;