Annotation of embedaddon/php/ext/openssl/tests/bug48182.phpt, revision 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>