summaryrefslogtreecommitdiff
path: root/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php')
-rw-r--r--vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php182
1 files changed, 182 insertions, 0 deletions
diff --git a/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php b/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php
new file mode 100644
index 0000000..50597b2
--- /dev/null
+++ b/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php
@@ -0,0 +1,182 @@
+<?php
+
+namespace Guzzle\Http\Message;
+
+use Guzzle\Common\Version;
+use Guzzle\Http\Message\Header\HeaderInterface;
+
+/**
+ * Represents a header and all of the values stored by that header
+ */
+class Header implements HeaderInterface
+{
+ protected $values = array();
+ protected $header;
+ protected $glue;
+
+ /**
+ * @param string $header Name of the header
+ * @param array|string $values Values of the header as an array or a scalar
+ * @param string $glue Glue used to combine multiple values into a string
+ */
+ public function __construct($header, $values = array(), $glue = ',')
+ {
+ $this->header = trim($header);
+ $this->glue = $glue;
+
+ foreach ((array) $values as $value) {
+ foreach ((array) $value as $v) {
+ $this->values[] = $v;
+ }
+ }
+ }
+
+ public function __toString()
+ {
+ return implode($this->glue . ' ', $this->toArray());
+ }
+
+ public function add($value)
+ {
+ $this->values[] = $value;
+
+ return $this;
+ }
+
+ public function getName()
+ {
+ return $this->header;
+ }
+
+ public function setName($name)
+ {
+ $this->header = $name;
+
+ return $this;
+ }
+
+ public function setGlue($glue)
+ {
+ $this->glue = $glue;
+
+ return $this;
+ }
+
+ public function getGlue()
+ {
+ return $this->glue;
+ }
+
+ /**
+ * Normalize the header to be a single header with an array of values.
+ *
+ * If any values of the header contains the glue string value (e.g. ","), then the value will be exploded into
+ * multiple entries in the header.
+ *
+ * @return self
+ */
+ public function normalize()
+ {
+ $values = $this->toArray();
+
+ for ($i = 0, $total = count($values); $i < $total; $i++) {
+ if (strpos($values[$i], $this->glue) !== false) {
+ // Explode on glue when the glue is not inside of a comma
+ foreach (preg_split('/' . preg_quote($this->glue) . '(?=([^"]*"[^"]*")*[^"]*$)/', $values[$i]) as $v) {
+ $values[] = trim($v);
+ }
+ unset($values[$i]);
+ }
+ }
+
+ $this->values = array_values($values);
+
+ return $this;
+ }
+
+ public function hasValue($searchValue)
+ {
+ return in_array($searchValue, $this->toArray());
+ }
+
+ public function removeValue($searchValue)
+ {
+ $this->values = array_values(array_filter($this->values, function ($value) use ($searchValue) {
+ return $value != $searchValue;
+ }));
+
+ return $this;
+ }
+
+ public function toArray()
+ {
+ return $this->values;
+ }
+
+ public function count()
+ {
+ return count($this->toArray());
+ }
+
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->toArray());
+ }
+
+ public function parseParams()
+ {
+ $params = $matches = array();
+ $callback = array($this, 'trimHeader');
+
+ // Normalize the header into a single array and iterate over all values
+ foreach ($this->normalize()->toArray() as $val) {
+ $part = array();
+ foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {
+ if (!preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
+ continue;
+ }
+ $pieces = array_map($callback, $matches[0]);
+ $part[$pieces[0]] = isset($pieces[1]) ? $pieces[1] : '';
+ }
+ if ($part) {
+ $params[] = $part;
+ }
+ }
+
+ return $params;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function hasExactHeader($header)
+ {
+ Version::warn(__METHOD__ . ' is deprecated');
+ return $this->header == $header;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function raw()
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use toArray()');
+ return $this->toArray();
+ }
+
+ /**
+ * Trim a header by removing excess spaces and wrapping quotes
+ *
+ * @param $str
+ *
+ * @return string
+ */
+ protected function trimHeader($str)
+ {
+ static $trimmed = "\"' \n\t";
+
+ return trim($str, $trimmed);
+ }
+}