Annotation of embedaddon/php/ext/openssl/tests/bug48182.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: #48182,ssl handshake fails during asynchronous socket connection
                      3: --SKIPIF--
                      4: <?php 
                      5: if (!extension_loaded("openssl")) die("skip, openssl required");
                      6: if (!extension_loaded("pcntl")) die("skip, pcntl required");
                      7: if (OPENSSL_VERSION_NUMBER < 0x009070af) die("skip");
                      8: ?>
                      9: --FILE--
                     10: <?php
                     11: 
                     12: function ssl_server($port) {
                     13:        $host = 'ssl://127.0.0.1'.':'.$port;
                     14:        $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
                     15:        $data = "Sending bug48182\n";
                     16: 
                     17:        $pem = dirname(__FILE__) . '/bug46127.pem';
                     18:        $ssl_params = array( 'verify_peer' => false, 'allow_self_signed' => true, 'local_cert' => $pem);
                     19:        $ssl = array('ssl' => $ssl_params);
                     20: 
                     21:        $context = stream_context_create($ssl);
                     22:        $sock = stream_socket_server($host, $errno, $errstr, $flags, $context);
                     23:        if (!$sock) return false;
                     24: 
                     25:        $link = stream_socket_accept($sock);
                     26:        if (!$link) return false; // bad link?
                     27: 
                     28:        $r = array($link);
                     29:        $w = array();
                     30:        $e = array();
                     31:        if (stream_select($r, $w, $e, 1, 0) != 0)
                     32:                $data .= fread($link, 8192);
                     33: 
                     34:        $r = array();
                     35:        $w = array($link);
                     36:        if (stream_select($r, $w, $e, 1, 0) != 0)
                     37:                $wrote = fwrite($link, $data, strlen($data));
                     38: 
                     39:        // close stuff
                     40:        fclose($link);
                     41:        fclose($sock);
                     42: 
                     43:        exit;
                     44: }
                     45: 
                     46: function ssl_async_client($port) {
                     47:        $host = 'ssl://127.0.0.1'.':'.$port;
                     48:        $flags = STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT;
                     49:        $data = "Sending data over to SSL server in async mode with contents like Hello World\n";
                     50: 
                     51:        $socket = stream_socket_client($host, $errno, $errstr, 10, $flags);
                     52:        stream_set_blocking($socket, 0);
                     53: 
                     54:        while ($socket && $data) {
                     55:                $wrote = fwrite($socket, $data, strlen($data));
                     56:                $data = substr($data, $wrote);
                     57:        }
                     58: 
                     59:        $r = array($socket);
                     60:        $w = array();
                     61:        $e = array();
                     62:        if (stream_select($r, $w, $e, 1, 0) != 0) 
                     63:        {
                     64:                $data .= fread($socket, 1024);
                     65:        }
                     66: 
                     67:        echo "$data";
                     68: 
                     69:        fclose($socket);
                     70: }
                     71: 
                     72: echo "Running bug48182\n";
                     73: 
                     74: $port = rand(15000, 32000);
                     75: 
                     76: $pid = pcntl_fork();
                     77: if ($pid == 0) { // child
                     78:        ssl_server($port);
                     79:        exit;
                     80: }
                     81: 
                     82: // client or failed
                     83: sleep(1);
                     84: ssl_async_client($port);
                     85: 
                     86: pcntl_waitpid($pid, $status);
                     87: 
                     88: ?>
                     89: --EXPECTF--
                     90: Running bug48182
                     91: Sending bug48182
                     92: Sending data over to SSL server in async mode with contents like Hello World

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>