1<?php
2/**
3 * This is a PHP library that handles calling reCAPTCHA.
4 *
5 * @copyright Copyright (c) 2015, Google Inc.
6 * @link      http://www.google.com/recaptcha
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy
9 * of this software and associated documentation files (the "Software"), to deal
10 * in the Software without restriction, including without limitation the rights
11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the Software is
13 * furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 * THE SOFTWARE.
25 */
26
27namespace ReCaptcha\RequestMethod;
28
29/**
30 * Convenience wrapper around native socket and file functions to allow for
31 * mocking.
32 */
33class Socket
34{
35    private $handle = null;
36
37    /**
38     * fsockopen
39     *
40     * @see http://php.net/fsockopen
41     * @param string $hostname
42     * @param int $port
43     * @param int $errno
44     * @param string $errstr
45     * @param float $timeout
46     * @return resource
47     */
48    public function fsockopen($hostname, $port = -1, &$errno = 0, &$errstr = '', $timeout = null)
49    {
50        $this->handle = fsockopen($hostname, $port, $errno, $errstr, (is_null($timeout) ? ini_get("default_socket_timeout") : $timeout));
51
52        if ($this->handle != false && $errno === 0 && $errstr === '') {
53            return $this->handle;
54        } else {
55            return false;
56        }
57    }
58
59    /**
60     * fwrite
61     *
62     * @see http://php.net/fwrite
63     * @param string $string
64     * @param int $length
65     * @return int | bool
66     */
67    public function fwrite($string, $length = null)
68    {
69        return fwrite($this->handle, $string, (is_null($length) ? strlen($string) : $length));
70    }
71
72    /**
73     * fgets
74     *
75     * @see http://php.net/fgets
76     * @param int $length
77     */
78    public function fgets($length = null)
79    {
80        return fgets($this->handle, $length);
81    }
82
83    /**
84     * feof
85     *
86     * @see http://php.net/feof
87     * @return bool
88     */
89    public function feof()
90    {
91        return feof($this->handle);
92    }
93
94    /**
95     * fclose
96     *
97     * @see http://php.net/fclose
98     * @return bool
99     */
100    public function fclose()
101    {
102        return fclose($this->handle);
103    }
104}
105