Refactor MTProxy checker to support multiple DC probing with enhanced timeout handling. Update README and Docker documentation to include new -dc-ids flag for sequential DC checks, clarify exit codes, and improve error reporting for each DC. Adjust logic in checkOneLine and related functions to aggregate results from multiple DCs, ensuring robust performance and clearer output.
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
// Package dclist parses comma-separated Telegram DC ids (int16).
|
||||
package dclist
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// ParseList parses "1,2,5" or "2". Empty string returns (nil, nil) — caller uses single-DC default.
|
||||
func ParseList(s string) ([]int16, error) {
|
||||
s = strings.TrimSpace(s)
|
||||
if s == "" {
|
||||
return nil, nil
|
||||
}
|
||||
parts := strings.Split(s, ",")
|
||||
out := make([]int16, 0, len(parts))
|
||||
for _, p := range parts {
|
||||
p = strings.TrimSpace(p)
|
||||
if p == "" {
|
||||
continue
|
||||
}
|
||||
v, err := strconv.ParseInt(p, 10, 16)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("dc id %q: %w", p, err)
|
||||
}
|
||||
if v < -32768 || v > 32767 {
|
||||
return nil, fmt.Errorf("dc id %d out of int16 range", v)
|
||||
}
|
||||
out = append(out, int16(v))
|
||||
}
|
||||
if len(out) == 0 {
|
||||
return nil, fmt.Errorf("empty dc list after parsing %q", s)
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package dclist
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestParseList(t *testing.T) {
|
||||
got, err := ParseList("")
|
||||
if err != nil || got != nil {
|
||||
t.Fatalf("empty: got %v err %v", got, err)
|
||||
}
|
||||
got, err = ParseList(" 1 , 2 , 5 ")
|
||||
if err != nil || !reflect.DeepEqual(got, []int16{1, 2, 5}) {
|
||||
t.Fatalf("1,2,5: got %v err %v", got, err)
|
||||
}
|
||||
got, err = ParseList("-1")
|
||||
if err != nil || !reflect.DeepEqual(got, []int16{-1}) {
|
||||
t.Fatalf("-1: got %v err %v", got, err)
|
||||
}
|
||||
if _, err := ParseList("foo"); err == nil {
|
||||
t.Fatal("expected error")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user