@@ -56,12 +56,14 @@ async fn resolve_app_address(prefix: &str, sni: &str, compat: bool) -> Result<Ap
5656 let Some ( data) = txt_record. txt_data ( ) . first ( ) else {
5757 continue ;
5858 } ;
59- return AppAddress :: parse ( data) . context ( "failed to parse app address" ) ;
59+ return AppAddress :: parse ( data)
60+ . with_context ( || format ! ( "failed to parse app address for {sni}" ) ) ;
6061 }
6162 } else if let Ok ( lookup) = resolver. txt_lookup ( txt_domain) . await {
6263 if let Some ( txt_record) = lookup. iter ( ) . next ( ) {
6364 if let Some ( data) = txt_record. txt_data ( ) . first ( ) {
64- return AppAddress :: parse ( data) . context ( "failed to parse app address" ) ;
65+ return AppAddress :: parse ( data)
66+ . with_context ( || format ! ( "failed to parse app address for {sni}" ) ) ;
6567 }
6668 }
6769 }
@@ -70,15 +72,22 @@ async fn resolve_app_address(prefix: &str, sni: &str, compat: bool) -> Result<Ap
7072 if let Some ( ( _, parent) ) = sni. split_once ( '.' ) {
7173 let wildcard_domain = format ! ( "{prefix}-wildcard.{parent}" ) ;
7274 let lookup = resolver
73- . txt_lookup ( wildcard_domain)
75+ . txt_lookup ( & wildcard_domain)
7476 . await
75- . context ( "failed to lookup wildcard app address" ) ?;
76- let txt_record = lookup. iter ( ) . next ( ) . context ( "no txt record found" ) ?;
77+ . with_context ( || {
78+ format ! ( "failed to lookup wildcard app address for {sni} via {wildcard_domain}" )
79+ } ) ?;
80+ let txt_record = lookup
81+ . iter ( )
82+ . next ( )
83+ . with_context ( || format ! ( "no txt record found for {sni} via {wildcard_domain}" ) ) ?;
7784 let data = txt_record
7885 . txt_data ( )
7986 . first ( )
80- . context ( "no data in txt record" ) ?;
81- return AppAddress :: parse ( data) . context ( "failed to parse app address" ) ;
87+ . with_context ( || format ! ( "no data in txt record for {sni} via {wildcard_domain}" ) ) ?;
88+ return AppAddress :: parse ( data) . with_context ( || {
89+ format ! ( "failed to parse app address for {sni} via {wildcard_domain}" )
90+ } ) ;
8291 }
8392
8493 anyhow:: bail!( "failed to resolve app address for {sni}" ) ;
@@ -95,8 +104,8 @@ pub(crate) async fn proxy_with_sni(
95104 let dns_timeout = state. config . proxy . timeouts . dns_resolve ;
96105 let addr = timeout ( dns_timeout, resolve_app_address ( ns_prefix, sni, compat) )
97106 . await
98- . context ( "DNS TXT resolve timeout" ) ?
99- . context ( "failed to resolve app address" ) ?;
107+ . with_context ( || format ! ( "DNS TXT resolve timeout for {sni}" ) ) ?
108+ . with_context ( || format ! ( "failed to resolve app address for {sni}" ) ) ?;
100109 debug ! ( "target address is {}:{}" , addr. app_id, addr. port) ;
101110 proxy_to_app ( state, inbound, buffer, & addr. app_id , addr. port ) . await
102111}
0 commit comments