From 1d767a00d72a4587d6d527c3ec48ae47df2d3ba7 Mon Sep 17 00:00:00 2001 From: Stone Date: Tue, 28 Jun 2016 12:47:12 +0000 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E9=9D=A2=E4=BD=BF=E7=94=A8NetType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Board/AP0104.cpp | 2 +- Board/AP0801.cpp | 2 +- Board/IOK027X.cpp | 2 +- Board/Pandora.cpp | 4 ++-- Drivers/Esp8266/Esp8266.cpp | 6 +++--- Drivers/Esp8266/Esp8266.h | 2 +- Drivers/Esp8266/EspSocket.cpp | 10 +++++----- Drivers/Esp8266/EspSocket.h | 2 +- Drivers/Esp8266/EspTcp.cpp | 2 +- Drivers/Esp8266/EspUdp.cpp | 2 +- Drivers/W5500.cpp | 26 +++++++++++++------------- Drivers/W5500.h | 8 ++++---- Net/DNS.cpp | 2 +- Net/Dhcp.cpp | 2 +- Net/Ethernet.h | 4 ++-- Net/NetUri.h | 2 -- Net/Socket.cpp | 2 +- Net/Socket.h | 2 +- TinyIP/Arp.cpp | 2 +- TinyIP/Tcp.cpp | 2 +- TinyIP/TinyIP.cpp | 6 +++--- TinyIP/TinyIP.h | 2 +- TinyIP/Udp.cpp | 2 +- TokenNet/HelloMessage.cpp | 29 +++++++++++++++++------------ TokenNet/HelloMessage.h | 7 ++++--- TokenNet/Token.cpp | 4 ++-- TokenNet/TokenClient.cpp | 16 ++++++++-------- TokenNet/TokenClient.h | 2 +- TokenNet/TokenConfig.cpp | 12 ++++++------ TokenNet/TokenConfig.h | 7 +++---- 30 files changed, 88 insertions(+), 85 deletions(-) diff --git a/Board/AP0104.cpp b/Board/AP0104.cpp index 1fd9875f..d2781185 100644 --- a/Board/AP0104.cpp +++ b/Board/AP0104.cpp @@ -193,7 +193,7 @@ void AP0104::OpenClient() AddControl(*Host, *tk); TokenConfig cfg; - cfg.Protocol = ProtocolType::Udp; + cfg.Protocol = NetType::Udp; cfg.ServerIP = IPAddress::Broadcast().Value; cfg.ServerPort = 3355; AddControl(*Host, cfg); diff --git a/Board/AP0801.cpp b/Board/AP0801.cpp index aca5892a..d974f301 100644 --- a/Board/AP0801.cpp +++ b/Board/AP0801.cpp @@ -183,7 +183,7 @@ void AP0801::OpenClient() AddControl(*Host, *tk); TokenConfig cfg; - cfg.Protocol = ProtocolType::Udp; + cfg.Protocol = NetType::Udp; cfg.ServerIP = IPAddress::Broadcast().Value; cfg.ServerPort = 3355; AddControl(*Host, cfg); diff --git a/Board/IOK027X.cpp b/Board/IOK027X.cpp index 8d82569d..69500a7f 100644 --- a/Board/IOK027X.cpp +++ b/Board/IOK027X.cpp @@ -117,7 +117,7 @@ void IOK027X::OpenClient() AddControl(*Host, *tk); TokenConfig cfg; - cfg.Protocol = ProtocolType::Udp; + cfg.Protocol = NetType::Udp; cfg.ServerIP = IPAddress::Broadcast().Value; cfg.ServerPort = 3355; AddControl(*Host, cfg); diff --git a/Board/Pandora.cpp b/Board/Pandora.cpp index e1d35202..7d9e6d2d 100644 --- a/Board/Pandora.cpp +++ b/Board/Pandora.cpp @@ -173,10 +173,10 @@ TokenClient* PA0903::CreateClient() client->Cfg = tk; // 如果是TCP,需要再建立一个本地UDP - //if(tk->Protocol == ProtocolType::Tcp) + //if(tk->Protocol == NetType::Tcp) { // 建立一个监听内网的UDP Socket - socket = Host->CreateSocket(ProtocolType::Udp); + socket = Host->CreateSocket(NetType::Udp); socket->Remote.Port = 3355; // 广播端口。其实用哪一个都不重要,因为不会主动广播 socket->Remote.Address = IPAddress::Broadcast(); socket->Local.Port = tk->Port; diff --git a/Drivers/Esp8266/Esp8266.cpp b/Drivers/Esp8266/Esp8266.cpp index d6ca2e56..d8828b42 100644 --- a/Drivers/Esp8266/Esp8266.cpp +++ b/Drivers/Esp8266/Esp8266.cpp @@ -231,7 +231,7 @@ void Esp8266::Config() SetAutoConn(AutoConn); } -ISocket* Esp8266::CreateSocket(ProtocolType type) +ISocket* Esp8266::CreateSocket(NetType type) { auto es = (EspSocket**)_sockets; @@ -249,10 +249,10 @@ ISocket* Esp8266::CreateSocket(ProtocolType type) switch(type) { - case ProtocolType::Tcp: + case NetType::Tcp: return es[i] = new EspTcp(*this, i); - case ProtocolType::Udp: + case NetType::Udp: return es[i] = new EspUdp(*this, i); default: diff --git a/Drivers/Esp8266/Esp8266.h b/Drivers/Esp8266/Esp8266.h index fd1d6304..daaba6d8 100644 --- a/Drivers/Esp8266/Esp8266.h +++ b/Drivers/Esp8266/Esp8266.h @@ -24,7 +24,7 @@ public: virtual void Config(); //virtual const String ToString() const { return String("Esp8266"); } - virtual ISocket* CreateSocket(ProtocolType type); + virtual ISocket* CreateSocket(NetType type); // 启用DNS virtual bool EnableDNS(); // 启用DHCP diff --git a/Drivers/Esp8266/EspSocket.cpp b/Drivers/Esp8266/EspSocket.cpp index 79159b83..0c1b7f9e 100644 --- a/Drivers/Esp8266/EspSocket.cpp +++ b/Drivers/Esp8266/EspSocket.cpp @@ -10,7 +10,7 @@ /******************************** Socket ********************************/ -EspSocket::EspSocket(Esp8266& host, ProtocolType protocol, byte idx) +EspSocket::EspSocket(Esp8266& host, NetType protocol, byte idx) : _Host(host) { _Index = idx; @@ -43,7 +43,7 @@ bool EspSocket::OnOpen() _Host.SetMux(true); #if NET_DEBUG - net_printf("%s::Open ", Protocol == ProtocolType::Tcp ? "Tcp" : "Udp"); + net_printf("%s::Open ", Protocol == NetType::Tcp ? "Tcp" : "Udp"); Local.Show(false); net_printf(" => "); if(Server) @@ -58,9 +58,9 @@ bool EspSocket::OnOpen() String cmd = "AT+CIPSTART="; cmd = cmd + _Index + ","; - if(Protocol == ProtocolType::Udp) + if(Protocol == NetType::Udp) cmd += "\"UDP\""; - else if(Protocol == ProtocolType::Tcp) + else if(Protocol == NetType::Tcp) cmd += "\"TCP\""; auto rm = Server; @@ -81,7 +81,7 @@ bool EspSocket::OnOpen() auto rt = _Host.Send(cmd + "\r\n", "OK", "ERROR", 10000); if(!rt.Contains("OK") && !rt.Contains("ALREADY CONNECTED")) { - net_printf("协议 %d, %d 打开失败 \r\n", Protocol, Remote.Port); + net_printf("协议 %d, %d 打开失败 \r\n", (byte)Protocol, Remote.Port); return false; } diff --git a/Drivers/Esp8266/EspSocket.h b/Drivers/Esp8266/EspSocket.h index b1108c86..f93be97c 100644 --- a/Drivers/Esp8266/EspSocket.h +++ b/Drivers/Esp8266/EspSocket.h @@ -11,7 +11,7 @@ protected: int _Error; public: - EspSocket(Esp8266& host, ProtocolType protocol, byte idx); + EspSocket(Esp8266& host, NetType protocol, byte idx); virtual ~EspSocket(); // 打开Socket diff --git a/Drivers/Esp8266/EspTcp.cpp b/Drivers/Esp8266/EspTcp.cpp index 31826fc3..d571f0af 100644 --- a/Drivers/Esp8266/EspTcp.cpp +++ b/Drivers/Esp8266/EspTcp.cpp @@ -3,7 +3,7 @@ /******************************** Tcp ********************************/ EspTcp::EspTcp(Esp8266& host, byte idx) - : EspSocket(host, ProtocolType::Tcp, idx) + : EspSocket(host, NetType::Tcp, idx) { } diff --git a/Drivers/Esp8266/EspUdp.cpp b/Drivers/Esp8266/EspUdp.cpp index 3d8c813b..a0b1ff98 100644 --- a/Drivers/Esp8266/EspUdp.cpp +++ b/Drivers/Esp8266/EspUdp.cpp @@ -3,7 +3,7 @@ /******************************** Udp ********************************/ EspUdp::EspUdp(Esp8266& host, byte idx) - : EspSocket(host, ProtocolType::Udp, idx) + : EspSocket(host, NetType::Udp, idx) { } diff --git a/Drivers/W5500.cpp b/Drivers/W5500.cpp index 3944a597..3cb01128 100644 --- a/Drivers/W5500.cpp +++ b/Drivers/W5500.cpp @@ -632,14 +632,14 @@ byte W5500::GetSocket() return 0xFF; } -ISocket* W5500::CreateSocket(ProtocolType type) +ISocket* W5500::CreateSocket(NetType type) { switch(type) { - case ProtocolType::Tcp: + case NetType::Tcp: return new TcpClient(*this); - case ProtocolType::Udp: + case NetType::Udp: return new UdpClient(*this); default: @@ -920,7 +920,7 @@ enum S_Status #define SocRegWrites(P, D) _Host.WriteFrame(offsetof(TSocket, P), D, Index, 0x01) #define SocRegReads(P, bs) _Host.ReadFrame(offsetof(TSocket, P), bs, Index, 0x01) -HardSocket::HardSocket(W5500& host, ProtocolType protocol) : _Host(host) +HardSocket::HardSocket(W5500& host, NetType protocol) : _Host(host) { MaxSize = 1500; @@ -1071,7 +1071,7 @@ bool HardSocket::OnOpen() Local.Address = _Host.IP; #if DEBUG - debug_printf("%s::Open ", Protocol == ProtocolType::Tcp ? "Tcp" : "Udp"); + debug_printf("%s::Open ", Protocol == NetType::Tcp ? "Tcp" : "Udp"); Local.Show(false); debug_printf(" => "); Server.Show(false); @@ -1081,9 +1081,9 @@ bool HardSocket::OnOpen() // 设置分片长度,参考W5500数据手册,该值可以不修改 // 默认值:udp 1472 tcp 1460 其他类型不管他 有默认不设置也没啥 - if(Protocol == ProtocolType::Udp) + if(Protocol == NetType::Udp) SocRegWrite2(MSSR, 1472); - else if(Protocol == ProtocolType::Tcp) + else if(Protocol == NetType::Tcp) SocRegWrite2(MSSR, 1460); // 设置自己的端口号 @@ -1097,9 +1097,9 @@ bool HardSocket::OnOpen() // 设置Socket为UDP模式 S_Mode mode; mode.Init(); - if(Protocol == ProtocolType::Tcp) + if(Protocol == NetType::Tcp) mode.Protocol = 0x01; - if(Protocol == ProtocolType::Udp) + if(Protocol == NetType::Udp) mode.Protocol = 0x02; //if(Protocol == 0x02) mode.MULTI_MFEN = 1; SocRegWrite(MR, mode.ToByte()); @@ -1122,8 +1122,8 @@ bool HardSocket::OnOpen() while(!tw.Expired()) { sr = ReadStatus(); - if((Protocol == ProtocolType::Tcp && sr == SOCK_INIT) - || (Protocol == ProtocolType::Udp && sr == SOCK_UDP)) + if((Protocol == NetType::Tcp && sr == SOCK_INIT) + || (Protocol == NetType::Udp && sr == SOCK_UDP)) { rs = true; break; @@ -1131,7 +1131,7 @@ bool HardSocket::OnOpen() } if(!rs) { - debug_printf("protocol %d, Socket %d 打开失败 SR : 0x%02X \r\n", Protocol,Index, sr); + debug_printf("protocol %d, Socket %d 打开失败 SR : 0x%02X \r\n", (byte)Protocol,Index, sr); OnClose(); return false; @@ -1145,7 +1145,7 @@ void HardSocket::OnClose() WriteConfig(CLOSE); WriteInterrupt(0xFF); - debug_printf("%s::Close ", Protocol == ProtocolType::Tcp ? "Tcp" : "Udp"); + debug_printf("%s::Close ", Protocol == NetType::Tcp ? "Tcp" : "Udp"); Local.Show(false); debug_printf(" => "); Remote.Show(true); diff --git a/Drivers/W5500.h b/Drivers/W5500.h index 454cf7e9..8f4c6742 100644 --- a/Drivers/W5500.h +++ b/Drivers/W5500.h @@ -52,7 +52,7 @@ public: cstring ToString() const { return "W5500"; } - virtual ISocket* CreateSocket(ProtocolType type); + virtual ISocket* CreateSocket(NetType type); // DNS解析。默认仅支持字符串IP地址解析 virtual IPAddress QueryDNS(const String& domain); @@ -114,7 +114,7 @@ public: bool Enable; // 启用 byte Index; // 使用的硬Socket编号 也是BSB选项的一部分 - HardSocket(W5500& host, ProtocolType protocol); + HardSocket(W5500& host, NetType protocol); virtual ~HardSocket(); // 网卡状态输出 @@ -152,7 +152,7 @@ public: class TcpClient : public HardSocket { public: - TcpClient(W5500& host): HardSocket(host, ProtocolType::Tcp){ Init(); }; + TcpClient(W5500& host): HardSocket(host, NetType::Tcp){ Init(); }; void Init(); virtual ~TcpClient(); virtual bool OnOpen(); @@ -179,7 +179,7 @@ private: class UdpClient : public HardSocket { public: - UdpClient(W5500& host) : HardSocket(host, ProtocolType::Udp) { } + UdpClient(W5500& host) : HardSocket(host, NetType::Udp) { } virtual bool SendTo(const Buffer& bs, const IPEndPoint& remote); diff --git a/Net/DNS.cpp b/Net/DNS.cpp index d6939641..bf796ca6 100644 --- a/Net/DNS.cpp +++ b/Net/DNS.cpp @@ -358,7 +358,7 @@ short dns_makequery(short op, const String& name, Buffer& bs) DNS::DNS(ISocketHost& host, const IPAddress& dns) : Host(host) { - Socket = host.CreateSocket(ProtocolType::Udp); + Socket = host.CreateSocket(NetType::Udp); Socket->Remote.Port = 53; Socket->Remote.Address = !dns.IsAny() ? dns : host.DNSServer; diff --git a/Net/Dhcp.cpp b/Net/Dhcp.cpp index c21cdf14..eebd6c7d 100644 --- a/Net/Dhcp.cpp +++ b/Net/Dhcp.cpp @@ -16,7 +16,7 @@ Dhcp::Dhcp(ISocketHost& host) : Host(host) { - Socket = host.CreateSocket(ProtocolType::Udp); + Socket = host.CreateSocket(NetType::Udp); Socket->Local.Port = 68; Socket->Remote.Port = 67; diff --git a/Net/Ethernet.h b/Net/Ethernet.h index 87ae3fa9..83ac2bcc 100644 --- a/Net/Ethernet.h +++ b/Net/Ethernet.h @@ -242,7 +242,7 @@ typedef struct _ICMP_HEADER typedef struct _ARP_HEADER { ushort HardType; // 硬件类型 - ushort ProtocolType; // 协议类型 + ushort NetType; // 协议类型 byte HardLength; // 硬件地址长度 byte ProtocolLength; // 协议地址长度 ushort Option; // 选项 @@ -255,7 +255,7 @@ typedef struct _ARP_HEADER void Init(bool recursion = false) { HardType = 0x0100; - ProtocolType = 0x08; + NetType = 0x08; HardLength = 6; ProtocolLength = 4; diff --git a/Net/NetUri.h b/Net/NetUri.h index 16c99cf2..418ee952 100644 --- a/Net/NetUri.h +++ b/Net/NetUri.h @@ -3,8 +3,6 @@ #include "IPAddress.h" #include "IPEndPoint.h" -#include "MacAddress.h" -#include "Delegate.h" // 协议类型 enum class NetType diff --git a/Net/Socket.cpp b/Net/Socket.cpp index 8e51fdec..953366a2 100644 --- a/Net/Socket.cpp +++ b/Net/Socket.cpp @@ -101,7 +101,7 @@ bool ISocketHost::SaveConfig() nc.IP = IP.Value; nc.Mask = Mask.Value; Mac.CopyTo(nc.Mac); - nc.Mode = Mode; + nc.Mode = (byte)Mode; nc.DHCPServer = DHCPServer.Value; nc.DNSServer = DNSServer.Value; diff --git a/Net/Socket.h b/Net/Socket.h index 100e0509..13101067 100644 --- a/Net/Socket.h +++ b/Net/Socket.h @@ -69,7 +69,7 @@ class ISocket { public: ISocketHost* Host; // 主机 - ProtocolType Protocol; // 协议类型 + NetType Protocol; // 协议类型 IPEndPoint Local; // 本地地址。包含本地局域网IP地址,实际监听的端口,从1024开始累加 IPEndPoint Remote; // 远程地址 diff --git a/TinyIP/Arp.cpp b/TinyIP/Arp.cpp index 8fd78a9a..8f613e3a 100644 --- a/TinyIP/Arp.cpp +++ b/TinyIP/Arp.cpp @@ -86,7 +86,7 @@ bool ArpSocket::Process(IP_HEADER& ip, Stream& ms) #if NET_DEBUG // 数据校验 assert_param(arp->HardType == 0x0100); - assert_param(arp->ProtocolType == ETH_IP); + assert_param(arp->NetType == ETH_IP); assert_param(arp->HardLength == 6); assert_param(arp->ProtocolLength == 4); //assert_param(arp->Option == 0x0100); diff --git a/TinyIP/Tcp.cpp b/TinyIP/Tcp.cpp index 0bb84d6e..2ef81287 100644 --- a/TinyIP/Tcp.cpp +++ b/TinyIP/Tcp.cpp @@ -11,7 +11,7 @@ TcpSocket::TcpSocket(TinyIP* tip) : TinySocket(tip, IP_TCP) { MaxSize = 1500; Host = tip; - Protocol = ProtocolType::Tcp; + Protocol = NetType::Tcp; // 累加端口 static ushort g_tcp_port = 1024; diff --git a/TinyIP/TinyIP.cpp b/TinyIP/TinyIP.cpp index 56e20174..8eaba85c 100644 --- a/TinyIP/TinyIP.cpp +++ b/TinyIP/TinyIP.cpp @@ -318,14 +318,14 @@ bool TinyIP::SendIP(IP_TYPE type, const IPAddress& remote, const byte* buf, uint return SendEthernet(ETH_IP, mac, (byte*)ip, sizeof(IP_HEADER) + len); } -ISocket* TinyIP::CreateSocket(ProtocolType type) +ISocket* TinyIP::CreateSocket(NetType type) { switch(type) { - case ProtocolType::Tcp: + case NetType::Tcp: return new TcpSocket(this); - case ProtocolType::Udp: + case NetType::Udp: return new UdpSocket(this); default: diff --git a/TinyIP/TinyIP.h b/TinyIP/TinyIP.h index 4719ae4f..f4885249 100644 --- a/TinyIP/TinyIP.h +++ b/TinyIP/TinyIP.h @@ -66,7 +66,7 @@ public: bool SendIP(IP_TYPE type, const IPAddress& remote, const byte* buf, uint len); bool IsBroadcast(const IPAddress& ip); // 是否广播地址 - virtual ISocket* CreateSocket(ProtocolType type); + virtual ISocket* CreateSocket(NetType type); }; /* diff --git a/TinyIP/Udp.cpp b/TinyIP/Udp.cpp index 2ced7344..9880d6b4 100644 --- a/TinyIP/Udp.cpp +++ b/TinyIP/Udp.cpp @@ -7,7 +7,7 @@ UdpSocket::UdpSocket(TinyIP* tip) : TinySocket(tip, IP_UDP) { MaxSize = 1500; Host = tip; - Protocol = ProtocolType::Udp; + Protocol = NetType::Udp; // 累加端口 static ushort g_udp_port = 1024; diff --git a/TokenNet/HelloMessage.cpp b/TokenNet/HelloMessage.cpp index 7ad6eefe..99d4e98a 100644 --- a/TokenNet/HelloMessage.cpp +++ b/TokenNet/HelloMessage.cpp @@ -17,8 +17,9 @@ HelloMessage::HelloMessage() : Cipher(1), Key(0) LocalTime = DateTime::Now().TotalMs(); Cipher[0] = 1; - Protocol = 17; - Port = 0; + //Protocol = 17; + //Port = 0; + Uri.Type = NetType::Udp; } HelloMessage::HelloMessage(const HelloMessage& msg) : MessageBase(msg), Cipher(1), Key(0) @@ -31,9 +32,10 @@ HelloMessage::HelloMessage(const HelloMessage& msg) : MessageBase(msg), Cipher(1 Cipher.Copy(0, msg.Cipher, 0, msg.Cipher.Length()); Key.Copy(0, msg.Key, 0, msg.Key.Length()); - Protocol = msg.Protocol; - Port = msg.Port; - Server = msg.Server; + //Protocol = msg.Protocol; + //Port = msg.Port; + //Server = msg.Server; + Uri = msg.Uri; } // 从数据流中读取消息 @@ -52,12 +54,14 @@ bool HelloMessage::Read(Stream& ms) Stream urims(uri); BinaryPair uribp(urims); - uribp.Get("Type", Protocol); // 服务店 ProtocolType 17 为UDP - if (Protocol == 0x00) Protocol = 0x11; // 避免 unknown 出现 - uribp.Get("Host", Server); + byte type; + uribp.Get("Type", type); // 服务店 NetType 17 为UDP + Uri.Type = (NetType)type; + if (Uri.Type == NetType::Unknown) Uri.Type = NetType::Udp; // 避免 unknown 出现 + uribp.Get("Host", Uri.Host); uint uintPort; // 服务端 Port 为 int 类型 uribp.Get("Port", uintPort); - Port = uintPort ; + Uri.Port = uintPort ; } bp.Get("VisitToken", VisitToken); @@ -118,12 +122,13 @@ String& HelloMessage::ToStr(String& str) const //str += ' '; str += (ErrCode == 0xFD) ? " 临时跳转 " : " 永久跳转 "; - if(Protocol == ProtocolType::Tcp) + /*if(Protocol == NetType::Tcp) str += "Tcp://"; - else if(Protocol == ProtocolType::Udp) + else if(Protocol == NetType::Udp) str += "Udp://"; - str = str + Server + ":" + Port; + str = str + Server + ":" + Port;*/ + str += Uri; } else { diff --git a/TokenNet/HelloMessage.h b/TokenNet/HelloMessage.h index 693ba4aa..5f7fee37 100644 --- a/TokenNet/HelloMessage.h +++ b/TokenNet/HelloMessage.h @@ -2,7 +2,7 @@ #define __HelloMessage_H__ #include "Message\MessageBase.h" -#include "Net\Socket.h" +#include "Net\NetUri.h" // 握手消息 // 请求:2版本 + S类型 + S名称 + 8本地时间 + 6本地IP端口 + S支持加密算法列表 @@ -24,8 +24,9 @@ public: String ErrMsg; // 错误信息 byte Protocol; // 协议,17为UDP 6为TCP - String Server; // 服务器地址。可能是域名或IP - ushort Port; // 本地端口 + //String Server; // 服务器地址。可能是域名或IP + //ushort Port; // 本地端口 + NetUri Uri; String VisitToken; //访问令牌 // 初始化消息,各字段为0 diff --git a/TokenNet/Token.cpp b/TokenNet/Token.cpp index d51aeecf..e1a1b65a 100644 --- a/TokenNet/Token.cpp +++ b/TokenNet/Token.cpp @@ -111,10 +111,10 @@ TokenClient* Token::CreateClient(ISocketHost* host) client.Controls.Add(&ctrl); // 如果是TCP,需要再建立一个本地UDP - //if(tk->Protocol == ProtocolType::Tcp) + //if(tk->Protocol == NetType::Tcp) { // 建立一个监听内网的UDP Socket - socket = host->CreateSocket(ProtocolType::Udp); + socket = host->CreateSocket(NetType::Udp); socket->Remote.Port = 3355; // 广播端口。其实用哪一个都不重要,因为不会主动广播 socket->Remote.Address = IPAddress::Broadcast(); socket->Local.Port = tk->Port; diff --git a/TokenNet/TokenClient.cpp b/TokenNet/TokenClient.cpp index 96274f15..6da9de48 100644 --- a/TokenNet/TokenClient.cpp +++ b/TokenNet/TokenClient.cpp @@ -359,15 +359,15 @@ bool TokenClient::OnRedirect(HelloMessage& msg) if(!(msg.ErrCode == 0xFE || msg.ErrCode == 0xFD)) return false; auto cfg = Cfg; - cfg->Protocol = (ProtocolType)msg.Protocol; + cfg->Protocol = msg.Uri.Type; cfg->Show(); - cfg->Server() = msg.Server; - cfg->ServerPort = msg.Port; + cfg->Server() = msg.Uri.Host; + cfg->ServerPort = msg.Uri.Port; cfg->Token() = msg.VisitToken; - ChangeIPEndPoint(msg.Server, msg.Port); + ChangeIPEndPoint(msg.Uri); cfg->Show(); @@ -381,21 +381,21 @@ bool TokenClient::OnRedirect(HelloMessage& msg) return true; } -bool TokenClient::ChangeIPEndPoint(const String& domain, ushort port) +bool TokenClient::ChangeIPEndPoint(const NetUri& uri) { TS("TokenClient::ChangeIPEndPoint"); debug_printf("ChangeIPEndPoint "); - domain.Show(true); + uri.Show(true); auto& ctrl = *(TokenController*)Controls[0]; auto socket = ctrl.Socket; if(socket == nullptr) return false; ctrl.Port->Close(); - socket->Remote.Port = port; - socket->Server = domain; + socket->Remote.Port = uri.Port; + socket->Server = uri.Host; Cfg->ServerIP = socket->Remote.Address.Value; diff --git a/TokenNet/TokenClient.h b/TokenNet/TokenClient.h index 658913d9..73c284ae 100644 --- a/TokenNet/TokenClient.h +++ b/TokenNet/TokenClient.h @@ -89,7 +89,7 @@ private: bool OnLocalLogin(TokenMessage& msg,TokenController* ctrl); bool OnPing(TokenMessage& msg, TokenController* ctrl); - bool ChangeIPEndPoint(const String& domain, ushort port); + bool ChangeIPEndPoint(const NetUri& uri); void OnRead(const TokenMessage& msg, TokenController* ctrl); void OnWrite(const TokenMessage& msg, TokenController* ctrl); diff --git a/TokenNet/TokenConfig.cpp b/TokenNet/TokenConfig.cpp index 23754bc3..7602eb79 100644 --- a/TokenNet/TokenConfig.cpp +++ b/TokenNet/TokenConfig.cpp @@ -24,7 +24,7 @@ void TokenConfig::Init() //User[16] = '\0'; //Key[15] = '\0'; - Protocol = ProtocolType::Udp; + Protocol = NetType::Udp; } void TokenConfig::Show() const @@ -32,12 +32,12 @@ void TokenConfig::Show() const #if DEBUG debug_printf("TokenConfig::令牌配置:\r\n"); - debug_printf("\t协议: %s ,%d\r\n", Protocol == ProtocolType::Udp ? "UDP" : Protocol == ProtocolType::Tcp ? "TCP" : "", Protocol); + //debug_printf("\t协议: %s ,%d\r\n", Protocol == NetType::Udp ? "UDP" : Protocol == NetType::Tcp ? "TCP" : "", Protocol); debug_printf("\t端口: %d \r\n", Port); debug_printf("\t远程: "); - IPEndPoint ep2(IPAddress(ServerIP), ServerPort); - ep2.Show(true); + NetUri uri(Protocol, IPAddress(ServerIP), ServerPort); + uri.Show(true); debug_printf("\t服务: %s \r\n", _Server); debug_printf("\t厂商: %s \r\n", _Vendor); debug_printf("\t登录: %s \r\n", _User); @@ -45,7 +45,7 @@ void TokenConfig::Show() const #endif } -TokenConfig* TokenConfig::Create(cstring vendor, ProtocolType protocol, ushort sport, ushort port) +TokenConfig* TokenConfig::Create(cstring vendor, NetType protocol, ushort sport, ushort port) { static TokenConfig tc; if(!Current) @@ -56,7 +56,7 @@ TokenConfig* TokenConfig::Create(cstring vendor, ProtocolType protocol, ushort s tc.Load(); // 默认 UDP 不允许 unknown - if(tc.Protocol == 0x00) tc.Protocol = ProtocolType::Udp; + if(tc.Protocol == NetType::Unknown) tc.Protocol = NetType::Udp; bool rs = tc.New; auto vnd = tc.Vendor(); diff --git a/TokenNet/TokenConfig.h b/TokenNet/TokenConfig.h index 1678ae03..75cf791c 100644 --- a/TokenNet/TokenConfig.h +++ b/TokenNet/TokenConfig.h @@ -1,9 +1,8 @@ #ifndef __TokenConfig_H__ #define __TokenConfig_H__ -#include "Sys.h" #include "Config.h" -#include "Net\IPAddress.h" +#include "Net\NetUri.h" // 必须设定为1字节对齐,否则offsetof会得到错误的位置 //#pragma pack(push) // 保存对齐状态 @@ -22,7 +21,7 @@ public: ushort SoftVer; // 软件版本 byte PingTime; // 心跳时间。秒 - ProtocolType Protocol; // 协议,TCP=6/UDP=17 + NetType Protocol; // 协议,TCP=6/UDP=17 ushort Port; // 本地端口 uint ServerIP; // 服务器IP地址。服务器域名解析成功后覆盖 ushort ServerPort; // 服务器端口 @@ -43,7 +42,7 @@ public: String Vendor() { return String(_Vendor, sizeof(_Vendor), false); } static TokenConfig* Current; - static TokenConfig* Create(cstring vendor, ProtocolType protocol, ushort sport, ushort port); + static TokenConfig* Create(cstring vendor, NetType protocol, ushort sport, ushort port); private: };