@@ -61,42 +61,44 @@ public function forwardingAddress(): string|null
6161
6262 public function hash (): string
6363 {
64- return hash ('sha256 ' , $ this ->host );
64+ [$ host ] = $ this ->parseAddress ($ this ->forwardingAddress ?? $ this ->host );
65+
66+ return hash ('sha256 ' , $ host );
6567 }
6668
6769 protected function parse (): void
6870 {
69- $ address = trim ($ this ->address );
71+ [$ this ->host , $ this ->port ] = $ this ->parseAddress ($ this ->address );
72+ }
7073
71- if (preg_match ('/^\[(?<addr>[^\]]+)\](?::(?<port>\d+))?$/ ' , $ address , $ m ) === 1 ) {
72- $ this ->host = $ m ['addr ' ];
73- $ this ->port = isset ($ m ['port ' ]) ? (int ) $ m ['port ' ] : null ;
74+ /**
75+ * @return array{0: string, 1: int|null}
76+ */
77+ protected function parseAddress (string $ address ): array
78+ {
79+ $ address = trim ($ address );
7480
75- return ;
81+ if (preg_match ('/^\[(?<addr>[^\]]+)\](?::(?<port>\d+))?$/ ' , $ address , $ m ) === 1 ) {
82+ return [$ m ['addr ' ], isset ($ m ['port ' ]) ? (int ) $ m ['port ' ] : null ];
7683 }
7784
7885 if (filter_var ($ address , FILTER_VALIDATE_IP , FILTER_FLAG_IPV6 )) {
79- $ this ->host = $ address ;
80- $ this ->port = null ;
81-
82- return ;
86+ return [$ address , null ];
8387 }
8488
89+ $ result = [$ address , null ];
90+
8591 if (str_contains ($ address , ': ' )) {
8692 [$ maybeHost , $ maybePort ] = explode (': ' , $ address , 2 );
8793
8894 if (
8995 filter_var ($ maybeHost , FILTER_VALIDATE_IP , FILTER_FLAG_IPV4 ) ||
9096 filter_var ($ maybeHost , FILTER_VALIDATE_DOMAIN , FILTER_FLAG_HOSTNAME )
9197 ) {
92- $ this ->host = $ maybeHost ;
93- $ this ->port = is_numeric ($ maybePort ) ? (int ) $ maybePort : null ;
94-
95- return ;
98+ $ result = [$ maybeHost , is_numeric ($ maybePort ) ? (int ) $ maybePort : null ];
9699 }
97100 }
98101
99- $ this ->host = $ address ;
100- $ this ->port = null ;
102+ return $ result ;
101103 }
102104}
0 commit comments