@@ -3,7 +3,7 @@ use std::{collections::BTreeSet, net::SocketAddr, str::FromStr};
33
44use anyhow:: Result ;
55use iroh:: { EndpointAddr , EndpointId , RelayUrl } ;
6- use iroh_base :: ticket :: { self , Ticket } ;
6+ use iroh_tickets :: { ParseError , Ticket } ;
77use serde:: { Deserialize , Serialize } ;
88
99use crate :: { BlobFormat , Hash , HashAndFormat } ;
@@ -67,10 +67,10 @@ impl Ticket for BlobTicket {
6767 fn to_bytes ( & self ) -> Vec < u8 > {
6868 let data = TicketWireFormat :: Variant0 ( Variant0BlobTicket {
6969 node : Variant0NodeAddr {
70- endpoint_id : self . addr . endpoint_id ,
70+ endpoint_id : self . addr . id ,
7171 info : Variant0AddrInfo {
72- relay_url : self . addr . relay_url . clone ( ) ,
73- direct_addresses : self . addr . direct_addresses . clone ( ) ,
72+ relay_url : self . addr . relay_urls ( ) . next ( ) . cloned ( ) ,
73+ direct_addresses : self . addr . ip_addrs ( ) . cloned ( ) . collect ( ) ,
7474 } ,
7575 } ,
7676 format : self . format ,
@@ -79,23 +79,22 @@ impl Ticket for BlobTicket {
7979 postcard:: to_stdvec ( & data) . expect ( "postcard serialization failed" )
8080 }
8181
82- fn from_bytes ( bytes : & [ u8 ] ) -> std:: result:: Result < Self , ticket :: ParseError > {
82+ fn from_bytes ( bytes : & [ u8 ] ) -> std:: result:: Result < Self , ParseError > {
8383 let res: TicketWireFormat = postcard:: from_bytes ( bytes) ?;
8484 let TicketWireFormat :: Variant0 ( Variant0BlobTicket { node, format, hash } ) = res;
85- Ok ( Self {
86- addr : EndpointAddr {
87- endpoint_id : node. endpoint_id ,
88- relay_url : node. info . relay_url ,
89- direct_addresses : node. info . direct_addresses ,
90- } ,
91- format,
92- hash,
93- } )
85+ let mut addr = EndpointAddr :: new ( node. endpoint_id ) ;
86+ if let Some ( relay_url) = node. info . relay_url {
87+ addr = addr. with_relay_url ( relay_url) ;
88+ }
89+ for ip_addr in node. info . direct_addresses {
90+ addr = addr. with_ip_addr ( ip_addr) ;
91+ }
92+ Ok ( Self { addr, format, hash } )
9493 }
9594}
9695
9796impl FromStr for BlobTicket {
98- type Err = ticket :: ParseError ;
97+ type Err = ParseError ;
9998
10099 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
101100 Ticket :: deserialize ( s)
@@ -173,7 +172,7 @@ impl<'de> Deserialize<'de> for BlobTicket {
173172mod tests {
174173 use std:: net:: SocketAddr ;
175174
176- use iroh:: { PublicKey , SecretKey } ;
175+ use iroh:: { PublicKey , SecretKey , TransportAddr } ;
177176 use iroh_test:: { assert_eq_hex, hexdump:: parse_hexdump} ;
178177
179178 use super :: * ;
@@ -182,10 +181,9 @@ mod tests {
182181 let hash = Hash :: new ( b"hi there" ) ;
183182 let peer = SecretKey :: generate ( & mut rand:: rng ( ) ) . public ( ) ;
184183 let addr = SocketAddr :: from_str ( "127.0.0.1:1234" ) . unwrap ( ) ;
185- let relay_url = None ;
186184 BlobTicket {
187185 hash,
188- addr : EndpointAddr :: from_parts ( peer, relay_url , [ addr] ) ,
186+ addr : EndpointAddr :: from_parts ( peer, [ TransportAddr :: Ip ( addr) ] ) ,
189187 format : BlobFormat :: HashSeq ,
190188 }
191189 }
@@ -211,12 +209,12 @@ mod tests {
211209 let hash =
212210 Hash :: from_str ( "0b84d358e4c8be6c38626b2182ff575818ba6bd3f4b90464994be14cb354a072" )
213211 . unwrap ( ) ;
214- let node_id =
212+ let endpoint_id =
215213 PublicKey :: from_str ( "ae58ff8833241ac82d6ff7611046ed67b5072d142c588d0063e942d9a75502b6" )
216214 . unwrap ( ) ;
217215
218216 let ticket = BlobTicket {
219- addr : EndpointAddr :: from_parts ( node_id , None , [ ] ) ,
217+ addr : EndpointAddr :: new ( endpoint_id ) ,
220218 format : BlobFormat :: Raw ,
221219 hash,
222220 } ;
0 commit comments