@@ -37,6 +37,9 @@ bool fromwire_wireaddr(const u8 **cursor, size_t *max, struct wireaddr *addr)
3737 case ADDR_TYPE_TOR_V3 :
3838 addr -> addrlen = TOR_V3_ADDRLEN ;
3939 break ;
40+ case ADDR_TYPE_WEBSOCKET :
41+ addr -> addrlen = 0 ;
42+ break ;
4043 default :
4144 return false;
4245 }
@@ -160,6 +163,14 @@ void wireaddr_from_ipv6(struct wireaddr *addr,
160163 memcpy (& addr -> addr , ip6 , addr -> addrlen );
161164}
162165
166+ void wireaddr_from_websocket (struct wireaddr * addr , const u16 port )
167+ {
168+ addr -> type = ADDR_TYPE_WEBSOCKET ;
169+ addr -> addrlen = 0 ;
170+ addr -> port = port ;
171+ memset (addr -> addr , 0 , sizeof (addr -> addr ));
172+ }
173+
163174bool wireaddr_to_ipv4 (const struct wireaddr * addr , struct sockaddr_in * s4 )
164175{
165176 if (addr -> type != ADDR_TYPE_IPV4 )
@@ -184,6 +195,14 @@ bool wireaddr_to_ipv6(const struct wireaddr *addr, struct sockaddr_in6 *s6)
184195 return true;
185196}
186197
198+ bool wireaddr_to_websocket (const struct wireaddr * addr , u16 * port )
199+ {
200+ if (addr -> type != ADDR_TYPE_WEBSOCKET )
201+ return false;
202+ * port = addr -> port ;
203+ return true;
204+ }
205+
187206bool wireaddr_is_wildcard (const struct wireaddr * addr )
188207{
189208 switch (addr -> type ) {
@@ -192,6 +211,7 @@ bool wireaddr_is_wildcard(const struct wireaddr *addr)
192211 return memeqzero (addr -> addr , addr -> addrlen );
193212 case ADDR_TYPE_TOR_V2 :
194213 case ADDR_TYPE_TOR_V3 :
214+ case ADDR_TYPE_WEBSOCKET :
195215 return false;
196216 }
197217 abort ();
@@ -239,6 +259,8 @@ char *fmt_wireaddr_without_port(const tal_t * ctx, const struct wireaddr *a)
239259 case ADDR_TYPE_TOR_V3 :
240260 return tal_fmt (ctx , "%s.onion" ,
241261 b32_encode (tmpctx , a -> addr , a -> addrlen ));
262+ case ADDR_TYPE_WEBSOCKET :
263+ return tal_strdup (ctx , "websocket" );
242264 }
243265
244266 hex = tal_hexstr (ctx , a -> addr , a -> addrlen );
@@ -675,6 +697,7 @@ struct addrinfo *wireaddr_to_addrinfo(const tal_t *ctx,
675697 return ai ;
676698 case ADDR_TYPE_TOR_V2 :
677699 case ADDR_TYPE_TOR_V3 :
700+ case ADDR_TYPE_WEBSOCKET :
678701 break ;
679702 }
680703 abort ();
@@ -729,6 +752,7 @@ bool all_tor_addresses(const struct wireaddr_internal *wireaddr)
729752 return false;
730753 case ADDR_TYPE_TOR_V2 :
731754 case ADDR_TYPE_TOR_V3 :
755+ case ADDR_TYPE_WEBSOCKET :
732756 continue ;
733757 }
734758 }
0 commit comments