Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

RingBridge.php

Zuletzt modifiziert: 09.10.2024, 12:56 - Dateigröße: 5.78 KiB


001  <?php
002  namespace GuzzleHttp;
003   
004  use GuzzleHttp\Message\MessageFactoryInterface;
005  use GuzzleHttp\Message\RequestInterface;
006  use GuzzleHttp\Event\ProgressEvent;
007  use GuzzleHttp\Message\Request;
008  use GuzzleHttp\Ring\Core;
009  use GuzzleHttp\Stream\Stream;
010  use GuzzleHttp\Exception\RequestException;
011   
012  /**
013   * Provides the bridge between Guzzle requests and responses and Guzzle Ring.
014   */
015  class RingBridge
016  {
017      /**
018       * Creates a Ring request from a request object.
019       *
020       * This function does not hook up the "then" and "progress" events that
021       * would be required for actually sending a Guzzle request through a
022       * RingPHP handler.
023       *
024       * @param RequestInterface $request Request to convert.
025       *
026       * @return array Converted Guzzle Ring request.
027       */
028      public static function createRingRequest(RequestInterface $request)
029      {
030          $options = $request->getConfig()->toArray();
031          $url = $request->getUrl();
032          // No need to calculate the query string twice (in URL and query).
033          $qs = ($pos = strpos($url, '?')) ? substr($url, $pos + 1) : null;
034   
035          return [
036              'scheme'       => $request->getScheme(),
037              'http_method'  => $request->getMethod(),
038              'url'          => $url,
039              'uri'          => $request->getPath(),
040              'headers'      => $request->getHeaders(),
041              'body'         => $request->getBody(),
042              'version'      => $request->getProtocolVersion(),
043              'client'       => $options,
044              'query_string' => $qs,
045              'future'       => isset($options['future']) ? $options['future'] : false
046          ];
047      }
048   
049      /**
050       * Creates a Ring request from a request object AND prepares the callbacks.
051       *
052       * @param Transaction $trans Transaction to update.
053       *
054       * @return array Converted Guzzle Ring request.
055       */
056      public static function prepareRingRequest(Transaction $trans)
057      {
058          // Clear out the transaction state when initiating.
059          $trans->exception = null;
060          $request = self::createRingRequest($trans->request);
061   
062          // Emit progress events if any progress listeners are registered.
063          if ($trans->request->getEmitter()->hasListeners('progress')) {
064              $emitter = $trans->request->getEmitter();
065              $request['client']['progress'] = function ($a, $b, $c, $d) use ($trans, $emitter) {
066                  $emitter->emit('progress', new ProgressEvent($trans, $a, $b, $c, $d));
067              };
068          }
069   
070          return $request;
071      }
072   
073      /**
074       * Handles the process of processing a response received from a ring
075       * handler. The created response is added to the transaction, and the
076       * transaction stat is set appropriately.
077       *
078       * @param Transaction             $trans          Owns request and response.
079       * @param array                   $response       Ring response array
080       * @param MessageFactoryInterface $messageFactory Creates response objects.
081       */
082      public static function completeRingResponse(
083          Transaction $trans,
084          array $response,
085          MessageFactoryInterface $messageFactory
086      ) {
087          $trans->state = 'complete';
088          $trans->transferInfo = isset($response['transfer_stats'])
089              ? $response['transfer_stats'] : [];
090   
091          if (!empty($response['status'])) {
092              $options = [];
093              if (isset($response['version'])) {
094                  $options['protocol_version'] = $response['version'];
095              }
096              if (isset($response['reason'])) {
097                  $options['reason_phrase'] = $response['reason'];
098              }
099              $trans->response = $messageFactory->createResponse(
100                  $response['status'],
101                  isset($response['headers']) ? $response['headers'] : [],
102                  isset($response['body']) ? $response['body'] : null,
103                  $options
104              );
105              if (isset($response['effective_url'])) {
106                  $trans->response->setEffectiveUrl($response['effective_url']);
107              }
108          } elseif (empty($response['error'])) {
109              // When nothing was returned, then we need to add an error.
110              $response['error'] = self::getNoRingResponseException($trans->request);
111          }
112   
113          if (isset($response['error'])) {
114              $trans->state = 'error';
115              $trans->exception = $response['error'];
116          }
117      }
118   
119      /**
120       * Creates a Guzzle request object using a ring request array.
121       *
122       * @param array $request Ring request
123       *
124       * @return Request
125       * @throws \InvalidArgumentException for incomplete requests.
126       */
127      public static function fromRingRequest(array $request)
128      {
129          $options = [];
130          if (isset($request['version'])) {
131              $options['protocol_version'] = $request['version'];
132          }
133   
134          if (!isset($request['http_method'])) {
135              throw new \InvalidArgumentException('No http_method');
136          }
137   
138          return new Request(
139              $request['http_method'],
140              Core::url($request),
141              isset($request['headers']) ? $request['headers'] : [],
142              isset($request['body']) ? Stream::factory($request['body']) : null,
143              $options
144          );
145      }
146   
147      /**
148       * Get an exception that can be used when a RingPHP handler does not
149       * populate a response.
150       *
151       * @param RequestInterface $request
152       *
153       * @return RequestException
154       */
155      public static function getNoRingResponseException(RequestInterface $request)
156      {
157          $message = <<<EOT
158  Sending the request did not return a response, exception, or populate the
159  transaction with a response. This is most likely due to an incorrectly
160  implemented RingPHP handler. If you are simply trying to mock responses,
161  then it is recommended to use the GuzzleHttp\Ring\Client\MockHandler.
162  EOT;
163   
164          return new RequestException($message, $request);
165      }
166  }
167