/**
  * 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);
     }
 }
Beispiel #2
0
 /**
  * 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));
 }
Beispiel #8
0
 /**
  * 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));
 }