/** * Creates a socket - overridden from parent class * * @param peer.URL $url * @param string $arg * @return peer.Socket */ protected function newSocket(\peer\URL $url, $arg) { if ('tls' === $arg) { return new TLSSocket($url->getHost(), $url->getPort(443), null); } else { sscanf($arg, 'v%d', $version); return new SSLSocket($url->getHost(), $url->getPort(443), null, $version); } }
/** * Setup the class instance. A dsn string must be given with the relevant information * about the server and script: * * Eg: nagios://nagios.xp_framework.net:5667/service_to_monitor * * @param string dsn */ public function setup($dsn) { $url = new URL($dsn); $this->server = $url->getHost(); $this->port = $url->getPort(5667); $this->version = $url->getParam('version', NscaProtocol::VERSION_2); $this->service = trim($url->getPath(), '/'); $this->host = $url->getParam('hostname', System::getProperty('host.name')); if (false !== $url->getParam('domain', false)) { $this->host .= '.' . ltrim($url->getParam('domain'), '.'); } }
/** * Handle a single request * * @param string method request method * @param string query query string * @param [:string] headers request headers * @param string data post data * @param peer.Socket socket * @return int */ public function handleRequest($method, $query, array $headers, $data, Socket $socket) { $url = new URL('http://' . (isset($headers['Host']) ? $headers['Host'] : 'localhost') . $query); $port = $url->getPort(-1); $request = $this->scriptlet->request(); $response = $this->scriptlet->response(); // Fill request $request->method = $method; $request->env = $this->env; $request->env['SERVER_PROTOCOL'] = 'HTTP/1.1'; $request->env['REQUEST_URI'] = $query; $request->env['QUERY_STRING'] = substr($query, strpos($query, '?') + 1); $request->env['HTTP_HOST'] = $url->getHost() . (-1 === $port ? '' : ':' . $port); if (isset($headers['Authorization'])) { if (0 === strncmp('Basic', $headers['Authorization'], 5)) { $credentials = explode(':', base64_decode(substr($headers['Authorization'], 6))); $request->env['PHP_AUTH_USER'] = $credentials[0]; $request->env['PHP_AUTH_PW'] = $credentials[1]; } } $request->setHeaders($headers); // Merge POST and GET parameters if (isset($headers['Content-Type']) && 'application/x-www-form-urlencoded' === $headers['Content-Type']) { parse_str($data, $params); $request->setParams(array_merge($url->getParams(), $params)); } else { $request->setParams($url->getParams()); } // Rewire request and response I/O $request->readData = function () use($data) { return new \io\streams\MemoryInputStream($data); }; $response->sendHeaders = function ($version, $statusCode, $headers) use($socket) { $this->sendHeader($socket, $statusCode, '', $headers); }; $response->sendContent = function ($content) use($socket) { $socket->write($content); }; try { $this->scriptlet->service($request, $response); } catch (ScriptletException $e) { $e->printStackTrace(); $this->sendErrorMessage($socket, $e->getStatus(), nameof($e), $e->getMessage()); return $e->getStatus(); } if (!$response->isCommitted()) { $response->flush(); } $response->sendContent(); return $response->statusCode; }
public function ipv6AddressAndPort() { $u = new URL('http://[::1]:8080'); $this->assertEquals('[::1]', $u->getHost()); $this->assertEquals(8080, $u->getPort()); }
/** * Parse DSN * * @param string dsn * @return bool success */ protected function _parsedsn($dsn) { if (null === $dsn) { return true; } $u = new URL($dsn); if (!$u->getHost()) { throw new \lang\IllegalArgumentException('DSN parsing failed ["' . $dsn . '"]'); } // Scheme switch (strtoupper($u->getScheme())) { case 'ESMTP': $this->ext = true; break; case 'SMTP': $this->ext = false; break; default: throw new \lang\IllegalArgumentException('Scheme "' . $u->getScheme() . '" not supported'); } // Copy host and port $this->host = $u->getHost(); $this->port = $u->getPort() ? $u->getPort() : 25; // User & password if ($u->getUser()) { $this->auth = $u->getParam('auth', SMTP_AUTH_PLAIN); $this->user = $u->getUser(); $this->pass = $u->getPassword(); } }
/** * Send proxy request * * @param peer.Socket $s Connection to proxy * @param peer.http.HttpRequest $request * @param peer.URL $url */ protected function proxy($s, $request, $url) { $request->setTarget(sprintf('%s://%s%s%s', $url->getScheme(), $url->getHost(), $url->getPort() ? ':' . $url->getPort() : '', $url->getPath('/'))); }
/** * Creates a socket * * @param peer.URL $url * @param string $arg * @return peer.Socket */ protected function newSocket(URL $url, $arg) { return new Socket($url->getHost(), $url->getPort(80)); }
/** * Connect to server * */ protected function _connect(URL $url) { $this->socket = new Socket($url->getHost(), $url->getPort(61612)); $this->socket->connect(); $this->in = new StringReader(new SocketInputStream($this->socket)); $this->out = new StringWriter(new SocketOutputStream($this->socket)); }