@@ -392,7 +392,43 @@ fn parse_transport(
392392 . to_lowercase ( ) ;
393393
394394 match transport_type. as_str ( ) {
395- "http" => {
395+ "tcp" | "" => {
396+ let header_type: String = query
397+ . remove ( "headerType" )
398+ . unwrap_or_else ( || "none" . to_string ( ) ) ;
399+ if header_type == "http" {
400+ let host = query
401+ . remove ( "host" )
402+ . map ( |h| h. split ( ',' ) . map ( |s| s. trim ( ) . to_string ( ) ) . collect ( ) )
403+ . unwrap_or_else ( Vec :: new) ;
404+
405+ let path = query
406+ . remove ( "path" )
407+ . map ( |mut p| {
408+ if !p. starts_with ( '/' ) {
409+ p. insert ( 0 , '/' ) ;
410+ }
411+ p
412+ } )
413+ . unwrap_or_default ( ) ;
414+
415+ Ok ( transport:: TransportConfig :: Http {
416+ host,
417+ path,
418+ method : query. remove ( "method" ) . unwrap_or_else ( || "GET" . to_string ( ) ) ,
419+ headers : parse_headers ( query. remove ( "headers" ) ) ,
420+ idle_timeout : query
421+ . remove ( "idle_timeout" )
422+ . unwrap_or_else ( || "15s" . to_string ( ) ) ,
423+ ping_timeout : query
424+ . remove ( "ping_timeout" )
425+ . unwrap_or_else ( || "15s" . to_string ( ) ) ,
426+ } )
427+ } else {
428+ Ok ( transport:: TransportConfig :: TCP )
429+ }
430+ }
431+ "http" | "h2" => {
396432 let host = query
397433 . remove ( "host" )
398434 . map ( |h| h. split ( ',' ) . map ( |s| s. trim ( ) . to_string ( ) ) . collect ( ) )
@@ -437,9 +473,8 @@ fn parse_transport(
437473 early_data_header_name : query. remove ( "early_data_header_name" ) . unwrap_or_default ( ) ,
438474 } ) ,
439475 "quic" => Ok ( transport:: TransportConfig :: Quic ) ,
440- "tcp" => Ok ( transport:: TransportConfig :: TCP ) ,
441476 "grpc" => Ok ( transport:: TransportConfig :: Grpc {
442- service_name : query. remove ( "service_name " ) . unwrap_or_default ( ) ,
477+ service_name : query. remove ( "serviceName " ) . unwrap_or_default ( ) ,
443478 idle_timeout : query
444479 . remove ( "idle_timeout" )
445480 . unwrap_or_else ( || "15s" . to_string ( ) ) ,
0 commit comments