aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Common/OpenSim.Servers/CheckSumServer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Common/OpenSim.Servers/CheckSumServer.cs')
-rw-r--r--Common/OpenSim.Servers/CheckSumServer.cs113
1 files changed, 113 insertions, 0 deletions
diff --git a/Common/OpenSim.Servers/CheckSumServer.cs b/Common/OpenSim.Servers/CheckSumServer.cs
new file mode 100644
index 0000000..1125baf
--- /dev/null
+++ b/Common/OpenSim.Servers/CheckSumServer.cs
@@ -0,0 +1,113 @@
1using System;
2using System.Text;
3using System.IO;
4using System.Threading;
5using System.Net;
6using System.Net.Sockets;
7using System.Timers;
8using System.Reflection;
9using System.Collections;
10using System.Collections.Generic;
11using libsecondlife;
12using libsecondlife.Packets;
13using OpenSim.Framework.Console;
14
15
16namespace OpenSim.Servers
17{
18 public class CheckSumServer : UDPServerBase
19 {
20 //protected ConsoleBase m_console;
21
22 public CheckSumServer(int port)
23 : base(port)
24 {
25 }
26
27 protected override void OnReceivedData(IAsyncResult result)
28 {
29 ipeSender = new IPEndPoint(IPAddress.Any, 0);
30 epSender = (EndPoint)ipeSender;
31 Packet packet = null;
32 int numBytes = Server.EndReceiveFrom(result, ref epSender);
33 int packetEnd = numBytes - 1;
34
35 packet = Packet.BuildPacket(RecvBuffer, ref packetEnd, ZeroBuffer);
36
37 if (packet.Type == PacketType.SecuredTemplateChecksumRequest)
38 {
39 SecuredTemplateChecksumRequestPacket checksum = (SecuredTemplateChecksumRequestPacket)packet;
40 TemplateChecksumReplyPacket checkreply = new TemplateChecksumReplyPacket();
41 checkreply.DataBlock.Checksum = 3220703154;//180572585;
42 checkreply.DataBlock.Flags = 0;
43 checkreply.DataBlock.MajorVersion = 1;
44 checkreply.DataBlock.MinorVersion = 15;
45 checkreply.DataBlock.PatchVersion = 0;
46 checkreply.DataBlock.ServerVersion = 0;
47 checkreply.TokenBlock.Token = checksum.TokenBlock.Token;
48 this.SendPacket(checkreply, epSender);
49
50 /*
51 //if we wanted to echo the the checksum/ version from the client (so that any client worked)
52 SecuredTemplateChecksumRequestPacket checkrequest = new SecuredTemplateChecksumRequestPacket();
53 checkrequest.TokenBlock.Token = checksum.TokenBlock.Token;
54 this.SendPacket(checkrequest, epSender);
55 */
56 }
57 else if (packet.Type == PacketType.TemplateChecksumReply)
58 {
59 //echo back the client checksum reply (Hegemon's method)
60 TemplateChecksumReplyPacket checksum2 = (TemplateChecksumReplyPacket)packet;
61 TemplateChecksumReplyPacket checkreply2 = new TemplateChecksumReplyPacket();
62 checkreply2.DataBlock.Checksum = checksum2.DataBlock.Checksum;
63 checkreply2.DataBlock.Flags = checksum2.DataBlock.Flags;
64 checkreply2.DataBlock.MajorVersion = checksum2.DataBlock.MajorVersion;
65 checkreply2.DataBlock.MinorVersion = checksum2.DataBlock.MinorVersion;
66 checkreply2.DataBlock.PatchVersion = checksum2.DataBlock.PatchVersion;
67 checkreply2.DataBlock.ServerVersion = checksum2.DataBlock.ServerVersion;
68 checkreply2.TokenBlock.Token = checksum2.TokenBlock.Token;
69 this.SendPacket(checkreply2, epSender);
70 }
71 else
72 {
73 }
74
75 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
76 }
77
78 private void SendPacket(Packet Pack, EndPoint endp)
79 {
80 if (!Pack.Header.Resent)
81 {
82 Pack.Header.Sequence = 1;
83 }
84
85 byte[] ZeroOutBuffer = new byte[4096];
86 byte[] sendbuffer;
87 sendbuffer = Pack.ToBytes();
88
89 try
90 {
91 if (Pack.Header.Zerocoded)
92 {
93 int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
94 this.SendPackTo(ZeroOutBuffer, packetsize, SocketFlags.None, endp);
95 }
96 else
97 {
98 this.SendPackTo(sendbuffer, sendbuffer.Length, SocketFlags.None, endp);
99 }
100 }
101 catch (Exception)
102 {
103 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection ");
104
105 }
106 }
107
108 private void SendPackTo(byte[] buffer, int size, SocketFlags flags, EndPoint endp)
109 {
110 this.Server.SendTo(buffer, size, flags, endp);
111 }
112 }
113} \ No newline at end of file