Skip to content

Commit 10a900e

Browse files
committed
fix: tcp http transport
1 parent 1cb8f00 commit 10a900e

2 files changed

Lines changed: 40 additions & 5 deletions

File tree

singbox/src/protocol/mod.rs

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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()),

singbox/src/protocol/transport/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ impl FromStr for TransportConfig {
4444
type Err = ConversionError;
4545
fn from_str(s: &str) -> Result<Self, Self::Err> {
4646
match s.to_lowercase().as_str() {
47-
"tcp" => Ok(TransportConfig::TCP),
48-
"http" => Ok(TransportConfig::Http {
47+
"tcp" | "" => Ok(TransportConfig::TCP),
48+
"http" | "h2" => Ok(TransportConfig::Http {
4949
host: Vec::new(),
5050
path: String::new(),
5151
method: String::new(),

0 commit comments

Comments
 (0)