alroyso 2 年之前
父節點
當前提交
6bd3ea772b
共有 11 個文件被更改,包括 125 次插入49 次删除
  1. 59 0
      SProxy/CConnectMage.cpp
  2. 2 0
      SProxy/CConnectMage.h
  3. 59 46
      SProxy/CLashConfig.cpp
  4. 1 0
      SProxy/CLashConfig.h
  5. 2 2
      SProxy/CServerList.cpp
  6. 二進制
      SProxy/LoginDlg.cpp
  7. 二進制
      SProxy/MainDlg.cpp
  8. 1 0
      SProxy/event.h
  9. 二進制
      SProxy/res/resource.h
  10. 二進制
      SProxy/res/soui_res.rc2
  11. 1 1
      SProxy/uires/xml/menu_tray.xml

+ 59 - 0
SProxy/CConnectMage.cpp

@@ -43,6 +43,11 @@ void CConnectMage::ChangeClashNode()
 	m_Asyntask.AddTask(&CConnectMage::ThreadFun_ChangeClash_Node, this, (LPARAM)nullptr);
 }
 
+void CConnectMage::ChangeClashProxyMode()
+{
+	m_Asyntask.AddTask(&CConnectMage::ThreadFun_ChangeClash_ProxyMode, this, (LPARAM)nullptr);
+}
+
 void CConnectMage::ChangeClashInit()
 {
 }
@@ -174,6 +179,60 @@ void CConnectMage::ThreadFun_ChangeClash_Config(LPARAM lParam)
 	pEvt->Release();
 }
 
+
+void CConnectMage::ThreadFun_ChangeClash_ProxyMode(LPARAM lParam)
+{
+	if (m_clash_config == nullptr || m_clash_Api == nullptr)
+	{
+		m_connect_status = ConnectState::Stop;
+		m_error = L"错误,重启电脑";
+		EventConnect* pEvt = new EventConnect(nullptr);
+		pEvt->status = m_connect_status;
+		pEvt->msg = m_error;
+		SNotifyCenter::getSingleton().FireEventAsync(pEvt);
+		pEvt->Release();
+		return;
+	}
+	ClashProxyMode modes;
+	if (CApp::getSingletonPtr()->GetRouteMode() == ROUT_MODE::cn_mode)
+	{
+		
+		modes = ClashProxyMode::Rule;
+	}
+	else {
+	 
+		modes = ClashProxyMode::Global;
+	}
+
+
+	if (m_clash_Api->UpdateProxyMode(modes))
+	{
+		m_connect_status = ConnectState::SwitchNodeSuccEss;
+		
+		//m_clash_config->SetProxy();
+		if (m_clash_Api->UpdateProxyGroup("Proxy", m_name))
+		{
+			m_connect_status = ConnectState::SwitchNodeSuccEss;
+			m_error = L"切换成功..模式成功";
+			//m_clash_config->SetProxy();
+		}
+		else {
+			m_connect_status = ConnectState::Stop;
+			m_error = L"切换节点失败,可以重新尝试";
+		}
+	}
+	else {
+		m_connect_status = ConnectState::Stop;
+		m_error = L"切换成功..模式失败";
+	}
+	EventConnect* pEvt = new EventConnect(nullptr);
+	pEvt->status = m_connect_status;
+	pEvt->msg = m_error;
+	SNotifyCenter::getSingleton().FireEventAsync(pEvt);
+	pEvt->Release();
+}
+
+
 void CConnectMage::ThreadFun_ChangeClash_Node(LPARAM lParam)
 {
 	if (m_clash_config == nullptr || m_clash_Api == nullptr)

+ 2 - 0
SProxy/CConnectMage.h

@@ -15,6 +15,7 @@ public:
 	 void Stop();
 	 void ReqConfig();
 	 void ChangeClashNode();
+	 void ChangeClashProxyMode();
 	 void ChangeClashInit();
 	 void Init();
 	 void SetNodeName(std::string name);
@@ -25,6 +26,7 @@ public:
 private:
 	
 	void ThreadFun_ChangeClash_Config(LPARAM lParam);
+	void ThreadFun_ChangeClash_ProxyMode(LPARAM lParam);
 	void ThreadFun_ChangeClash_Node(LPARAM lParam);
 	void ThreadFun_ChangeClash_Stop(LPARAM lParam);
 private:

+ 59 - 46
SProxy/CLashConfig.cpp

@@ -57,23 +57,23 @@ BOOL CLashConfig::MakeClash()
 
 	//CList_node::getSingletonPtr()->listnode;
 	YAML::Node proxies;
-	//for each (auto node in CApp::getSingletonPtr()->GetServerList()->vectlistmode)
-	//{
-	//	if (node.type == "shadowsocks") {
-	//		proxies.push_back(buildShadowsocks(&node));
-	//	}
-	//	else if (node.type == "trojan") {
-	//		proxies.push_back(buildtrojan(&node));
-	//	}
-	//	else if (node.type == "v2ray") {
-	//		proxies.push_back(buildv2ray(&node));
-	//	}
-	//}
+	for each (auto node in CApp::getSingletonPtr()->GetServerList()->vectlistmode)
+	{
+		if (node.type == "shadowsocks") {
+			proxies.push_back(buildShadowsocks(&node));
+		}
+		else if (node.type == "trojan") {
+			proxies.push_back(buildtrojan(&node));
+		}
+		else if (node.type == "v2ray") {
+			proxies.push_back(buildv2ray(&node));
+		}
+	}
 
 
 	root["proxies"] = proxies;
 
-	root["proxy-providers"] = buildProxyproviders();
+	//root["proxy-providers"] = buildProxyproviders();
 
 	root["proxy-groups"] = buildProxyGroups();
 
@@ -270,7 +270,7 @@ YAML::Node CLashConfig::buildShadowsocks(CServerListMode* node)
 	t_map["server"] = node->host;
 	t_map["port"] = std::to_string(node->port);
 	t_map["cipher"] = node->method;
-	t_map["password"] = node->passwd;
+	t_map["password"] = CApp::getSingletonPtr()->GetUserinfo()->uuid;
 	t_map["udp"] = true;
 
 	return t_map;
@@ -291,7 +291,7 @@ YAML::Node CLashConfig::buildtrojan(CServerListMode* node)
 	t_map["type"] = std::string("trojan");
 	t_map["server"] = node->host;
 	t_map["port"] = std::to_string(node->port);
-	t_map["password"] = node->passwd;
+	t_map["password"] = CApp::getSingletonPtr()->GetUserinfo()->uuid;
 	if (!node->serverName.empty()) {
 		t_map["serverName"] = node->serverName;
 	}
@@ -314,23 +314,22 @@ YAML::Node CLashConfig::buildv2ray(CServerListMode* node)
 	t_map["type"] = std::string("vmess");
 	t_map["server"] = node->host;
 	t_map["port"] = std::to_string(node->port);
-	//t_map["uuid"] = node->uuid;
-	t_map["cipher"] = node->method;
-	//t_map["alterId"] = node->v2_alter_id;
-	t_map["udp"] = node->udp;
+	t_map["uuid"] = CApp::getSingletonPtr()->GetUserinfo()->uuid;
+	t_map["cipher"] = "auto";
+	t_map["alterId"] = 0;
+	t_map["udp"] = true;
 
-	//if (node->v2_tls == "tls") {
-	//	t_map["tls"] = true;
-	//}
+	if (node->tls == 1) {
+		t_map["tls"] = true;
+	}
 
-	//if (node->v2_net == "tcp") {
-	//	t_map["skip-cert-verify"] = false;
-	//	t_map["network"] = node->v2_net;
-	//	if (!node->v2_sni.empty()) {
-	//		t_map["servername"] = node->v2_sni;
-	//	}
-	//	 
-	//}
+	if (node->network == "tcp") {
+		t_map["skip-cert-verify"] = false;
+		t_map["network"] = node->network;
+		if (!node->serverName.empty()) {
+			t_map["servername"] = node->serverName;
+		}
+	}
 	//else if (node->v2_net == "ws") {
 	//	YAML::Node t_host;
 	//	t_map["skip-cert-verify"] = false;
@@ -381,20 +380,25 @@ YAML::Node CLashConfig::buildDnsConfig()
 	YAML::Node dns;
 
 	std::vector<std::string> dns_arr;
-	dns_arr.push_back("114.114.114.114");
-	dns_arr.push_back("8.8.8.8");
-	dns_arr.push_back("tls://dns.rubyfish.cn:853");
-	dns_arr.push_back("https://1.1.1.1/dns-query");
-	dns["enable"] = true;
 	if (CApp::getSingletonPtr()->GetSysMode() == PROXY_MODE::tun_mode)
 	{
-
+		
 		dns["enhanced-mode"] = "redir-host";
+		
 	}
-	else
+ 
+	dns_arr.push_back("114.114.114.114");
+	dns_arr.push_back("8.8.8.8");
+	dns_arr.push_back("tls://dns.rubyfish.cn:853");
+	dns_arr.push_back("https://1.1.1.1/dns-query");
+	/*if (CApp::getSingletonPtr()->GetRouteMode() == ROUT_MODE::qg_mode)
 	{
-		//dns["enable"] = false;
+		dns["enable"] = false;
 	}
+	else {
+		dns["enable"] = true;
+	}*/
+	dns["enable"] = true;
 	dns["nameserver"] = dns_arr;
 	//dns["use-hosts"] = true;
 
@@ -406,18 +410,25 @@ std::vector<YAML::Node> CLashConfig::buildProxyGroups()
 {
 	std::vector<YAML::Node> dns_arr;
 	std::vector<std::string> proxy;
-	//YAML::Node proxies;
-	//for each (auto node in CApp::getSingletonPtr()->GetServerList()->vectlistmode)
-	//{
-	//	proxy.push_back(node.name.c_str());
-	//}
-	proxy.push_back("foo");
+	YAML::Node proxies;
+	for each (auto node in CApp::getSingletonPtr()->GetServerList()->vectlistmode)
+	{
+		proxy.push_back(node.name.c_str());
+	}
+
 	YAML::Node li;
 	li["name"] = "Proxy";
 	li["type"] = "select";
-	li["use"] = proxy;
+	li["proxies"] = proxy;
 	dns_arr.push_back(li);
 
+	/*proxy.push_back("foo");
+	YAML::Node li;
+	li["name"] = "Proxy";
+	li["type"] = "select";
+	li["use"] = proxy;
+	dns_arr.push_back(li);*/
+
 	return dns_arr;
 }
 
@@ -466,7 +477,7 @@ std::vector<YAML::Node> CLashConfig::buildRules()
 		// m_rules.push_back("RULE-SET,google,Proxy");
 		// m_rules.push_back("RULE-SET,gfw,Proxy");
 		// m_rules.push_back("RULE-SET,cncidr,Proxy");
-		m_rules.push_back("GEOIP,CN,Proxy");
+		//m_rules.push_back("GEOIP,CN,Proxy");
 		m_rules.push_back("IP-CIDR,127.0.0.0/8,DIRECT");
 		m_rules.push_back("IP-CIDR,172.16.0.0/12,DIRECT");
 		m_rules.push_back("IP-CIDR,192.168.0.0/16,DIRECT");
@@ -607,6 +618,8 @@ BOOL CLashConfig::SetProxy()
 	return isok;
 }
 
+ 
+
 //winrt::fire_and_forget CLashConfig::_StartClash()
 //{
 //	if (CProcessManager::getSingletonPtr()->Start())

+ 1 - 0
SProxy/CLashConfig.h

@@ -31,6 +31,7 @@ public:
  
 	std::filesystem::path GetRunConfig();
 	BOOL SetProxy();
+	
 private:
 	YAML::Node buildShadowsocks(CServerListMode* node);
 	YAML::Node buildtrojan(CServerListMode* node);

+ 2 - 2
SProxy/CServerList.cpp

@@ -38,9 +38,9 @@ bool CServerList::Init(std::string data)
 
 				if (m_serverlist_mode.type == "shadowsocks")
 				{
-					if (!data[i]["method"].is_null())
+					if (!data[i]["cipher"].is_null())
 					{
-						m_serverlist_mode.method = data[i]["method"].get<std::string>();
+						m_serverlist_mode.method = data[i]["cipher"].get<std::string>();
 					}
 				}
 			

二進制
SProxy/LoginDlg.cpp


二進制
SProxy/MainDlg.cpp


+ 1 - 0
SProxy/event.h

@@ -123,6 +123,7 @@ enum struct ConnectState
 	Stop,
 	SwitchConfigSuccEss,
 	SwitchNodeSuccEss,
+	SwitchModeSuccEss,
 };
 
 #define EVT_CONNECT (SOUI::EVT_EXTERNAL_BEGIN + 1005)

二進制
SProxy/res/resource.h


二進制
SProxy/res/soui_res.rc2


+ 1 - 1
SProxy/uires/xml/menu_tray.xml

@@ -1,4 +1,4 @@
 <menu itemHeight="26" iconMargin="4" textMargin="8">
-  <!-- <item id="2">显示控制台</item> -->
+  <item id="2">调试模式</item>
   <item id="6">退出</item>
 </menu>