diff options
author | MW | 2007-05-19 14:34:44 +0000 |
---|---|---|
committer | MW | 2007-05-19 14:34:44 +0000 |
commit | df6ec3ba6c47bb55b9c3ba011c3e2e58177f9109 (patch) | |
tree | 6f0cf235e93c0033cfcffef216f14edb77f188ff | |
parent | Moved CheckSumServer (and added UDPServerBase ) to OpenSim.Servers (diff) | |
download | opensim-SC-df6ec3ba6c47bb55b9c3ba011c3e2e58177f9109.zip opensim-SC-df6ec3ba6c47bb55b9c3ba011c3e2e58177f9109.tar.gz opensim-SC-df6ec3ba6c47bb55b9c3ba011c3e2e58177f9109.tar.bz2 opensim-SC-df6ec3ba6c47bb55b9c3ba011c3e2e58177f9109.tar.xz |
Added the echo method for template checksum handling (idea from Hegemons_Login_Analysis page) to the CheckSumServer, but currently it is comment out as enabling it would mean that any version of client could connect which is very likely to lead to problem with pre 1.15 version clients.
-rw-r--r-- | OpenSim.RegionServer/CheckSumServer.cs | 120 | ||||
-rw-r--r-- | OpenSim.Servers/CheckSumServer.cs | 29 | ||||
-rw-r--r-- | OpenSim.Servers/UDPServerBase.cs | 3 |
3 files changed, 26 insertions, 126 deletions
diff --git a/OpenSim.RegionServer/CheckSumServer.cs b/OpenSim.RegionServer/CheckSumServer.cs deleted file mode 100644 index 353383a..0000000 --- a/OpenSim.RegionServer/CheckSumServer.cs +++ /dev/null | |||
@@ -1,120 +0,0 @@ | |||
1 | using System; | ||
2 | using System.Text; | ||
3 | using System.IO; | ||
4 | using System.Threading; | ||
5 | using System.Net; | ||
6 | using System.Net.Sockets; | ||
7 | using System.Timers; | ||
8 | using System.Reflection; | ||
9 | using System.Collections; | ||
10 | using System.Collections.Generic; | ||
11 | using libsecondlife; | ||
12 | using libsecondlife.Packets; | ||
13 | using OpenSim.world; | ||
14 | using OpenSim.Terrain; | ||
15 | using OpenSim.Framework.Interfaces; | ||
16 | using OpenSim.Framework.Types; | ||
17 | using OpenSim.UserServer; | ||
18 | using OpenSim.Assets; | ||
19 | using OpenSim.CAPS; | ||
20 | using OpenSim.Framework.Console; | ||
21 | using Nwc.XmlRpc; | ||
22 | using OpenSim.Servers; | ||
23 | using OpenSim.GenericConfig; | ||
24 | |||
25 | |||
26 | namespace OpenSim | ||
27 | { | ||
28 | public class CheckSumServer : UDPServer | ||
29 | { | ||
30 | public CheckSumServer(int port, ConsoleBase console) | ||
31 | { | ||
32 | listenPort = port; | ||
33 | this.m_console = console; | ||
34 | } | ||
35 | |||
36 | protected override void CreatePacketServer() | ||
37 | { | ||
38 | |||
39 | } | ||
40 | |||
41 | public override void RegisterPacketServer(PacketServer server) | ||
42 | { | ||
43 | |||
44 | } | ||
45 | |||
46 | protected override void OnReceivedData(IAsyncResult result) | ||
47 | { | ||
48 | ipeSender = new IPEndPoint(IPAddress.Any, 0); | ||
49 | epSender = (EndPoint)ipeSender; | ||
50 | Packet packet = null; | ||
51 | int numBytes = Server.EndReceiveFrom(result, ref epSender); | ||
52 | int packetEnd = numBytes - 1; | ||
53 | |||
54 | packet = Packet.BuildPacket(RecvBuffer, ref packetEnd, ZeroBuffer); | ||
55 | |||
56 | // do we already have a circuit for this endpoint | ||
57 | if (packet.Type == PacketType.SecuredTemplateChecksumRequest) | ||
58 | { | ||
59 | SecuredTemplateChecksumRequestPacket checksum = (SecuredTemplateChecksumRequestPacket)packet; | ||
60 | TemplateChecksumReplyPacket checkreply = new TemplateChecksumReplyPacket(); | ||
61 | checkreply.DataBlock.Checksum = 180572585; | ||
62 | checkreply.DataBlock.Flags = 0; | ||
63 | checkreply.DataBlock.MajorVersion = 1; | ||
64 | checkreply.DataBlock.MinorVersion = 15; | ||
65 | checkreply.DataBlock.PatchVersion = 0; | ||
66 | checkreply.DataBlock.ServerVersion = 2; | ||
67 | checkreply.TokenBlock.Token = checksum.TokenBlock.Token; | ||
68 | this.SendPacket(checkreply, epSender); | ||
69 | |||
70 | } | ||
71 | else | ||
72 | { // invalid client | ||
73 | // Console.Error.WriteLine("CheckSumServer.cs:OnReceivedData() - WARNING: Got a invalid packet from an invalid client - " + epSender.ToString()); | ||
74 | } | ||
75 | |||
76 | Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); | ||
77 | } | ||
78 | |||
79 | protected override void AddNewClient(Packet packet) | ||
80 | { | ||
81 | } | ||
82 | |||
83 | private void SendPacket(Packet Pack, EndPoint endp) | ||
84 | { | ||
85 | if (!Pack.Header.Resent) | ||
86 | { | ||
87 | // Set the sequence number | ||
88 | |||
89 | Pack.Header.Sequence = 1; | ||
90 | |||
91 | } | ||
92 | byte[] ZeroOutBuffer = new byte[4096]; | ||
93 | byte[] sendbuffer; | ||
94 | sendbuffer = Pack.ToBytes(); | ||
95 | |||
96 | try | ||
97 | { | ||
98 | if (Pack.Header.Zerocoded) | ||
99 | { | ||
100 | int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer); | ||
101 | this.SendPackTo(ZeroOutBuffer, packetsize, SocketFlags.None, endp); | ||
102 | } | ||
103 | else | ||
104 | { | ||
105 | this.SendPackTo(sendbuffer, sendbuffer.Length, SocketFlags.None, endp); | ||
106 | } | ||
107 | } | ||
108 | catch (Exception) | ||
109 | { | ||
110 | OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " ); | ||
111 | |||
112 | } | ||
113 | } | ||
114 | |||
115 | private void SendPackTo(byte[] buffer, int size, SocketFlags flags, EndPoint endp) | ||
116 | { | ||
117 | this.Server.SendTo(buffer, size, flags, endp); | ||
118 | } | ||
119 | } | ||
120 | } | ||
diff --git a/OpenSim.Servers/CheckSumServer.cs b/OpenSim.Servers/CheckSumServer.cs index dc83192..2f79b7a 100644 --- a/OpenSim.Servers/CheckSumServer.cs +++ b/OpenSim.Servers/CheckSumServer.cs | |||
@@ -38,21 +38,42 @@ namespace OpenSim.Servers | |||
38 | // do we already have a circuit for this endpoint | 38 | // do we already have a circuit for this endpoint |
39 | if (packet.Type == PacketType.SecuredTemplateChecksumRequest) | 39 | if (packet.Type == PacketType.SecuredTemplateChecksumRequest) |
40 | { | 40 | { |
41 | |||
41 | SecuredTemplateChecksumRequestPacket checksum = (SecuredTemplateChecksumRequestPacket)packet; | 42 | SecuredTemplateChecksumRequestPacket checksum = (SecuredTemplateChecksumRequestPacket)packet; |
42 | TemplateChecksumReplyPacket checkreply = new TemplateChecksumReplyPacket(); | 43 | TemplateChecksumReplyPacket checkreply = new TemplateChecksumReplyPacket(); |
43 | checkreply.DataBlock.Checksum = 180572585; | 44 | checkreply.DataBlock.Checksum = 180572585; |
44 | checkreply.DataBlock.Flags = 0; | 45 | checkreply.DataBlock.Flags = 0; |
45 | checkreply.DataBlock.MajorVersion = 1; | 46 | checkreply.DataBlock.MajorVersion = 1; |
46 | checkreply.DataBlock.MinorVersion = 15; | 47 | checkreply.DataBlock.MinorVersion = 15; |
47 | checkreply.DataBlock.PatchVersion = 0; | 48 | checkreply.DataBlock.PatchVersion = 0; |
48 | checkreply.DataBlock.ServerVersion = 2; | 49 | checkreply.DataBlock.ServerVersion = 0; |
49 | checkreply.TokenBlock.Token = checksum.TokenBlock.Token; | 50 | checkreply.TokenBlock.Token = checksum.TokenBlock.Token; |
50 | this.SendPacket(checkreply, epSender); | 51 | this.SendPacket(checkreply, epSender); |
51 | 52 | ||
53 | /* | ||
54 | //if we wanted to echo the the checksum/ version from the client (so that any client worked) | ||
55 | SecuredTemplateChecksumRequestPacket checkrequest = new SecuredTemplateChecksumRequestPacket(); | ||
56 | checkrequest.TokenBlock.Token = checksum.TokenBlock.Token; | ||
57 | this.SendPacket(checkrequest, epSender); | ||
58 | */ | ||
59 | |||
60 | } | ||
61 | else if (packet.Type == PacketType.TemplateChecksumReply) | ||
62 | { | ||
63 | TemplateChecksumReplyPacket checksum = (TemplateChecksumReplyPacket)packet; | ||
64 | TemplateChecksumReplyPacket checkreply2 = new TemplateChecksumReplyPacket(); | ||
65 | checkreply2.DataBlock.Checksum = checksum.DataBlock.Checksum; | ||
66 | checkreply2.DataBlock.Flags = checksum.DataBlock.Flags; | ||
67 | checkreply2.DataBlock.MajorVersion = checksum.DataBlock.MajorVersion; | ||
68 | checkreply2.DataBlock.MinorVersion = checksum.DataBlock.MinorVersion; | ||
69 | checkreply2.DataBlock.PatchVersion = checksum.DataBlock.PatchVersion; | ||
70 | checkreply2.DataBlock.ServerVersion = checksum.DataBlock.ServerVersion; | ||
71 | checkreply2.TokenBlock.Token = checksum.TokenBlock.Token; | ||
72 | this.SendPacket(checkreply2, epSender); | ||
73 | |||
52 | } | 74 | } |
53 | else | 75 | else |
54 | { // invalid client | 76 | { |
55 | // Console.Error.WriteLine("CheckSumServer.cs:OnReceivedData() - WARNING: Got a invalid packet from an invalid client - " + epSender.ToString()); | ||
56 | } | 77 | } |
57 | 78 | ||
58 | Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); | 79 | Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); |
diff --git a/OpenSim.Servers/UDPServerBase.cs b/OpenSim.Servers/UDPServerBase.cs index bdbc772..e7feb01 100644 --- a/OpenSim.Servers/UDPServerBase.cs +++ b/OpenSim.Servers/UDPServerBase.cs | |||
@@ -15,7 +15,6 @@ namespace OpenSim.Servers | |||
15 | { | 15 | { |
16 | public class UDPServerBase | 16 | public class UDPServerBase |
17 | { | 17 | { |
18 | |||
19 | public Socket Server; | 18 | public Socket Server; |
20 | protected IPEndPoint ServerIncoming; | 19 | protected IPEndPoint ServerIncoming; |
21 | protected byte[] RecvBuffer = new byte[4096]; | 20 | protected byte[] RecvBuffer = new byte[4096]; |
@@ -48,7 +47,7 @@ namespace OpenSim.Servers | |||
48 | { | 47 | { |
49 | } | 48 | } |
50 | 49 | ||
51 | public void ServerListener() | 50 | public virtual void ServerListener() |
52 | { | 51 | { |
53 | 52 | ||
54 | ServerIncoming = new IPEndPoint(IPAddress.Any, listenPort); | 53 | ServerIncoming = new IPEndPoint(IPAddress.Any, listenPort); |