Skip to content

Commit 2c16a9c

Browse files
committed
Refactor to reuse URI construction
1 parent 2d471da commit 2c16a9c

File tree

3 files changed

+59
-82
lines changed

3 files changed

+59
-82
lines changed

src/Connector.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,61 @@ public function connect($uri)
175175

176176
return $this->connectors[$scheme]->connect($uri);
177177
}
178+
179+
180+
/**
181+
* [internal] Builds on URI from the given URI parts and ip address with original hostname as query
182+
*
183+
* @param array $parts
184+
* @param string $host
185+
* @param string $ip
186+
* @return string
187+
* @internal
188+
*/
189+
public static function uri(array $parts, $host, $ip)
190+
{
191+
$uri = '';
192+
193+
// prepend original scheme if known
194+
if (isset($parts['scheme'])) {
195+
$uri .= $parts['scheme'] . '://';
196+
}
197+
198+
if (\strpos($ip, ':') !== false) {
199+
// enclose IPv6 addresses in square brackets before appending port
200+
$uri .= '[' . $ip . ']';
201+
} else {
202+
$uri .= $ip;
203+
}
204+
205+
// append original port if known
206+
if (isset($parts['port'])) {
207+
$uri .= ':' . $parts['port'];
208+
}
209+
210+
// append orignal path if known
211+
if (isset($parts['path'])) {
212+
$uri .= $parts['path'];
213+
}
214+
215+
// append original query if known
216+
if (isset($parts['query'])) {
217+
$uri .= '?' . $parts['query'];
218+
}
219+
220+
// append original hostname as query if resolved via DNS and if
221+
// destination URI does not contain "hostname" query param already
222+
$args = array();
223+
\parse_str(isset($parts['query']) ? $parts['query'] : '', $args);
224+
if ($host !== $ip && !isset($args['hostname'])) {
225+
$uri .= (isset($parts['query']) ? '&' : '?') . 'hostname=' . \rawurlencode($host);
226+
}
227+
228+
// append original fragment if known
229+
if (isset($parts['fragment'])) {
230+
$uri .= '#' . $parts['fragment'];
231+
}
232+
233+
return $uri;
234+
}
178235
}

src/DnsConnector.php

Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -46,47 +46,7 @@ function ($resolve, $reject) use (&$promise, &$resolved, $uri, $connector, $host
4646
// resolve/reject with result of DNS lookup
4747
$promise->then(function ($ip) use (&$promise, &$resolved, $connector, $host, $parts) {
4848
$resolved = $ip;
49-
$uri = '';
50-
51-
// prepend original scheme if known
52-
if (isset($parts['scheme'])) {
53-
$uri .= $parts['scheme'] . '://';
54-
}
55-
56-
if (\strpos($ip, ':') !== false) {
57-
// enclose IPv6 addresses in square brackets before appending port
58-
$uri .= '[' . $ip . ']';
59-
} else {
60-
$uri .= $ip;
61-
}
62-
63-
// append original port if known
64-
if (isset($parts['port'])) {
65-
$uri .= ':' . $parts['port'];
66-
}
67-
68-
// append orignal path if known
69-
if (isset($parts['path'])) {
70-
$uri .= $parts['path'];
71-
}
72-
73-
// append original query if known
74-
if (isset($parts['query'])) {
75-
$uri .= '?' . $parts['query'];
76-
}
77-
78-
// append original hostname as query if resolved via DNS and if
79-
// destination URI does not contain "hostname" query param already
80-
$args = array();
81-
\parse_str(isset($parts['query']) ? $parts['query'] : '', $args);
82-
if ($host !== $ip && !isset($args['hostname'])) {
83-
$uri .= (isset($parts['query']) ? '&' : '?') . 'hostname=' . \rawurlencode($host);
84-
}
85-
86-
// append original fragment if known
87-
if (isset($parts['fragment'])) {
88-
$uri .= '#' . $parts['fragment'];
89-
}
49+
$uri = Connector::uri($parts, $host, $ip);
9050

9151
return $promise = $connector->connect($uri);
9252
}, function ($e) use ($uri, $reject) {

src/HappyEyeBallsConnectionBuilder.php

Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -222,47 +222,7 @@ public function check($resolve, $reject)
222222
*/
223223
public function attemptConnection($ip)
224224
{
225-
$uri = '';
226-
227-
// prepend original scheme if known
228-
if (isset($this->parts['scheme'])) {
229-
$uri .= $this->parts['scheme'] . '://';
230-
}
231-
232-
if (\strpos($ip, ':') !== false) {
233-
// enclose IPv6 addresses in square brackets before appending port
234-
$uri .= '[' . $ip . ']';
235-
} else {
236-
$uri .= $ip;
237-
}
238-
239-
// append original port if known
240-
if (isset($this->parts['port'])) {
241-
$uri .= ':' . $this->parts['port'];
242-
}
243-
244-
// append orignal path if known
245-
if (isset($this->parts['path'])) {
246-
$uri .= $this->parts['path'];
247-
}
248-
249-
// append original query if known
250-
if (isset($this->parts['query'])) {
251-
$uri .= '?' . $this->parts['query'];
252-
}
253-
254-
// append original hostname as query if resolved via DNS and if
255-
// destination URI does not contain "hostname" query param already
256-
$args = array();
257-
\parse_str(isset($this->parts['query']) ? $this->parts['query'] : '', $args);
258-
if ($this->host !== $ip && !isset($args['hostname'])) {
259-
$uri .= (isset($this->parts['query']) ? '&' : '?') . 'hostname=' . \rawurlencode($this->host);
260-
}
261-
262-
// append original fragment if known
263-
if (isset($this->parts['fragment'])) {
264-
$uri .= '#' . $this->parts['fragment'];
265-
}
225+
$uri = Connector::uri($this->parts, $this->host, $ip);
266226

267227
return $this->connector->connect($uri);
268228
}

0 commit comments

Comments
 (0)