コード例 #1
0
        Tuple <JObject, JToken> VeeToConfig(Model.VeeShareLinks.Ver0a vee)
        {
            if (vee == null)
            {
                return(null);
            }

            var outVmess = cache.tpl.LoadTemplate("outbVeeVmess");

            outVmess["streamSettings"] = GenStreamSetting(vee);
            var node = outVmess["settings"]["vnext"][0];

            node["address"]        = vee.address;
            node["port"]           = vee.port;
            node["users"][0]["id"] = vee.uuid;

            if (vee.alterId > 0)
            {
                node["users"][0]["alterId"] = vee.alterId;
            }

            var tpl = cache.tpl.LoadTemplate("tplImportVmess") as JObject;

            tpl["v2raygcon"]["alias"]       = vee.alias;
            tpl["v2raygcon"]["description"] = vee.description;
            return(new Tuple <JObject, JToken>(tpl, outVmess));
        }
コード例 #2
0
        JToken GenStreamSetting(Model.VeeShareLinks.Ver0a 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 "tcp":
                    streamToken["tcpSettings"]["header"]["type"] = mainParam;
                    break;

                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"] = Lib.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);
        }
コード例 #3
0
ファイル: Vee0a.cs プロジェクト: torgitor/vrGCon
 void ExtractTcpHttpSettings(JObject json, bool isUseV4, Model.VeeShareLinks.Ver0a vee)
 {
     try
     {
         var path = isUseV4 ?
                    json["outbounds"][0]["streamSettings"]["tcpSettings"]["header"]["request"]["path"] :
                    json["outbound"]["streamSettings"]["tcpSettings"]["header"]["request"]["path"];
         vee.streamParam2 = Lib.Utils.JArray2Str(path as JArray);
     }
     catch { }
     try
     {
         var hosts = isUseV4 ?
                     json["outbounds"][0]["streamSettings"]["tcpSettings"]["header"]["request"]["headers"]["Host"] :
                     json["outbound"]["streamSettings"]["tcpSettings"]["header"]["request"]["headers"]["Host"];
         vee.streamParam3 = Lib.Utils.JArray2Str(hosts as JArray);
     }
     catch { }
 }
コード例 #4
0
ファイル: Ver001ModelTest.cs プロジェクト: torgitor/vrGCon
 public void Ver001NormalTest()
 {
     for (int i = 0; i < 10; i++)
     {
         var v1 = new Model.VeeShareLinks.Ver0a
         {
             address      = "::1",
             alias        = "中文abc 123",
             description  = "描述abc123",
             isUseTls     = true,
             streamParam1 = "/v2ray?#abc",
             streamParam2 = Lib.Utils.RandomHex(7),
             streamParam3 = Lib.Utils.RandomHex(7),
             streamType   = Lib.Utils.RandomHex(7),
             port         = 123,
             uuid         = Guid.NewGuid(),
         };
         var bytes = v1.ToBytes();
         var v2    = new Model.VeeShareLinks.Ver0a(bytes);
         Assert.AreEqual(true, v1.EqTo(v2));
     }
 }
コード例 #5
0
        Model.VeeShareLinks.Ver0a Config2Vee(JObject config)
        {
            var GetStr  = Lib.Utils.GetStringByPrefixAndKeyHelper(config);
            var isUseV4 = (GetStr("outbounds.0", "protocol")?.ToLower()) == "vmess";
            var root    = isUseV4 ? "outbounds.0" : "outbound";

            if (!isUseV4)
            {
                var protocol = GetStr(root, "protocol")?.ToLower();
                if (protocol == null || protocol != "vmess")
                {
                    return(null);
                }
            }

            var mainPrefix = root + "." + "settings.vnext.0";
            var vee        = new Model.VeeShareLinks.Ver0a
            {
                alias       = GetStr("v2raygcon", "alias"),
                address     = GetStr(mainPrefix, "address"),
                port        = Lib.Utils.Str2Int(GetStr(mainPrefix, "port")),
                alterId     = Lib.Utils.Str2Int(GetStr(mainPrefix, "users.0.alterId")),
                uuid        = Guid.Parse(GetStr(mainPrefix, "users.0.id")),
                description = GetStr("v2raygcon", "description"),
            };

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

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

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

            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 = Lib.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);
        }
コード例 #6
0
        public Tuple <JObject, JToken> Bytes2Config(byte[] bytes)
        {
            var veeLink = new Model.VeeShareLinks.Ver0a(bytes);

            return(VeeToConfig(veeLink));
        }