Exemple #1
0
        JToken GenStreamSetting(Models.VeeShareLinks.Ss1a vee)
        {
            // insert stream type
            string[] streamTypes = { "ws", "tcp", "kcp", "h2", "quic" };
            string   streamType  = vee.streamType.ToLower();

            if (!streamTypes.Contains(streamType))
            {
                return(JToken.Parse(@"{}"));
            }

            string mainParam = vee.streamParam1;

            var streamToken = cache.tpl.LoadTemplate(streamType);

            try
            {
                switch (streamType)
                {
                case "kcp":
                    streamToken["kcpSettings"]["header"]["type"] = mainParam;
                    break;

                case "ws":
                    streamToken["wsSettings"]["path"]            = mainParam;
                    streamToken["wsSettings"]["headers"]["Host"] = vee.streamParam2;
                    break;

                case "h2":
                    streamToken["httpSettings"]["path"] = mainParam;
                    streamToken["httpSettings"]["host"] = Misc.Utils.Str2JArray(vee.streamParam2);
                    break;

                case "quic":
                    streamToken["quicSettings"]["header"]["type"] = mainParam;
                    streamToken["quicSettings"]["security"]       = vee.streamParam2;
                    streamToken["quicSettings"]["key"]            = vee.streamParam3;
                    break;

                default:
                    break;
                }
            }
            catch { }

            try
            {
                streamToken["security"] = vee.isUseTls ? "tls" : "none";
            }
            catch { }

            return(streamToken);
        }
Exemple #2
0
        Tuple <JObject, JToken> VeeToConfig(Models.VeeShareLinks.Ss1a vee)
        {
            if (vee == null)
            {
                return(null);
            }

            var outbSs = GenOutboundFrom(vee);

            outbSs["streamSettings"] = GenStreamSetting(vee);
            var tpl = cache.tpl.LoadTemplate("tplImportSS") as JObject;

            tpl["v2raygcon"]["alias"]       = vee.alias;
            tpl["v2raygcon"]["description"] = vee.description;
            return(new Tuple <JObject, JToken>(tpl, outbSs));
        }
Exemple #3
0
        JToken GenOutboundFrom(Models.VeeShareLinks.Ss1a vee)
        {
            var outbSs = cache.tpl.LoadTemplate("outbVeeSs");
            var node   = outbSs["settings"]["servers"][0];

            node["ota"]      = vee.isUseOta;
            node["address"]  = vee.address;
            node["port"]     = vee.port;
            node["method"]   = vee.method;
            node["password"] = vee.password;

            if (vee.GetCurNetworkTypeIndex() != 0)
            {
                node["network"] = vee.GetCurNetworkTypeName();
            }
            return(outbSs);
        }
Exemple #4
0
        Models.VeeShareLinks.Ss1a Config2Vee(JObject config)
        {
            var GetStr  = Misc.Utils.GetStringByPrefixAndKeyHelper(config);
            var isUseV4 = (GetStr("outbounds.0", "protocol")?.ToLower()) ==
                          VgcApis.Models.Consts.Config.ProtocolNameSs;

            var root = isUseV4 ? "outbounds.0" : "outbound";

            if (!isUseV4)
            {
                var protocol = GetStr(root, "protocol")?.ToLower();
                if (protocol == null ||
                    protocol != VgcApis.Models.Consts.Config.ProtocolNameSs)
                {
                    return(null);
                }
            }

            var mainPrefix = root + "." + "settings.servers.0";
            var vee        = new Models.VeeShareLinks.Ss1a
            {
                alias       = GetStr("v2raygcon", "alias"),
                description = GetStr("v2raygcon", "description"),

                address  = GetStr(mainPrefix, "address"),
                port     = VgcApis.Misc.Utils.Str2Int(GetStr(mainPrefix, "port")),
                method   = GetStr(mainPrefix, "method"),
                password = GetStr(mainPrefix, "password"),
                isUseOta = GetStr(mainPrefix, "ota")?.ToLower() == "true",
            };

            var networkTypeName = GetStr(mainPrefix, "network");

            vee.SetNetworkType(networkTypeName);

            var subPrefix = root + "." + "streamSettings";

            vee.streamType = GetStr(subPrefix, "network");
            vee.isUseTls   = GetStr(subPrefix, "security")?.ToLower() == "tls";
            var mainParam = "";

            switch (vee.streamType)
            {
            case "kcp":
                mainParam = GetStr(subPrefix, "kcpSettings.header.type");
                break;

            case "ws":
                mainParam        = GetStr(subPrefix, "wsSettings.path");
                vee.streamParam2 = GetStr(subPrefix, "wsSettings.headers.Host");
                break;

            case "h2":
                mainParam = GetStr(subPrefix, "httpSettings.path");
                try
                {
                    var hosts = isUseV4 ?
                                config["outbounds"][0]["streamSettings"]["httpSettings"]["host"] :
                                config["outbound"]["streamSettings"]["httpSettings"]["host"];
                    vee.streamParam2 = Misc.Utils.JArray2Str(hosts as JArray);
                }
                catch { }
                break;

            case "quic":
                mainParam        = GetStr(subPrefix, "quicSettings.header.type");
                vee.streamParam2 = GetStr(subPrefix, "quicSettings.security");
                vee.streamParam3 = GetStr(subPrefix, "quicSettings.key");
                break;

            default:
                break;
            }
            vee.streamParam1 = mainParam;
            return(vee);
        }
Exemple #5
0
        public Tuple <JObject, JToken> Bytes2Config(byte[] bytes)
        {
            var veeLink = new Models.VeeShareLinks.Ss1a(bytes);

            return(VeeToConfig(veeLink));
        }