package pkg import ( "errors" "strings" ) type SOCKSProfile struct { ProfileCommon DefaultConnectHandling string `json:"default_connect_handling"` DNSResolver string `json:"dns_resolver"` ProtocolVersions []string `json:"protocol_versions"` RouteDomain string `json:"route_domain"` TunnelName string `json:"tunnel_name"` } func ParseSocksProfile(raw string) (*SOCKSProfile, error) { p := new(SOCKSProfile) split := strings.Split(raw, "\n") if !strings.Contains(split[0], "ltm profile socks") { return nil, errors.New("not a socks profile") } p.ProfileCommon = parseCommon(raw) for _, line := range split { f := strings.Fields(line) switch strings.ToLower(f[0]) { case "default-connect-handling": p.DefaultConnectHandling = strings.Join(f[1:], " ") case "dns-resolver": p.DNSResolver = strings.Join(f[1:], " ") case "protocol-versions": if f[1] != "none" { p.ProtocolVersions = f[2 : len(f)-1] } case "route-domain": p.RouteDomain = strings.Join(f[1:], " ") case "tunnel-name": p.TunnelName = strings.Join(f[1:], " ") } } return p, nil }