Guest User

Untitled

a guest
Dec 16th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.89 KB | None | 0 0
  1. package org.pdtp;
  2.  
  3. import java.io.IOException;
  4. import java.net.DatagramPacket;
  5. import java.net.DatagramSocket;
  6. import java.net.SocketException;
  7. import java.util.concurrent.ExecutorService;
  8. import java.util.concurrent.Executors;
  9.  
  10. public class UDPServer {
  11.  
  12.     public byte[][] storage;
  13.     public long[] keys;
  14.  
  15.     public static void main(String[] args) {
  16.         UDPServer server = new UDPServer();
  17.         server.init();
  18.     }
  19.  
  20.     public void init() {
  21.         storage = new byte[0x10000][1024 * 1024 * 2];
  22.         keys = new long[0x10000];
  23.  
  24.         Thread serverThread = new Thread(new Server());
  25.         serverThread.start();
  26.     }
  27.  
  28.     public class Server implements Runnable {
  29.  
  30.         public void run() {
  31.             DatagramSocket socket = null;
  32.  
  33.             try {
  34.                 socket = new DatagramSocket(7777);
  35.             } catch (SocketException ex) {
  36.             }
  37.  
  38.             ExecutorService pool = Executors.newFixedThreadPool(32);
  39.  
  40.             while (true) {
  41.                 DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
  42.  
  43.                 try {
  44.                     socket.receive(packet);
  45.                 } catch (IOException ex) {
  46.                 }
  47.  
  48.                 pool.execute(new Responder(socket, packet));
  49.             }
  50.         }
  51.     }
  52.  
  53.     public class Responder implements Runnable {
  54.  
  55.         DatagramSocket socket = null;
  56.         DatagramPacket packet = null;
  57.  
  58.         public Responder(DatagramSocket socket, DatagramPacket packet) {
  59.             this.socket = socket;
  60.             this.packet = packet;
  61.         }
  62.  
  63.         public void run() {
  64.             byte[] pData = packet.getData();
  65.             short address = 0;
  66.             long passkey = 0;
  67.             byte[] data = new byte[] { 0 };
  68.  
  69.             if (pData.length >= 3) {
  70.                 address = (short) (pData[1] << 8 | pData[2]);
  71.  
  72.                 switch (pData[0]) {
  73.                 case 0: /* Read Packet - Requests target (16b) and key (64b) */
  74.                     if (pData.length >= 11) {
  75.                         passkey = (long) (pData[10] << 56 | pData[9] << 48
  76.                                 | pData[8] << 40 | pData[7] << 32
  77.                                 | pData[6] << 24 | pData[5] << 16
  78.                                 | pData[4] << 8 | pData[3]);
  79.                         if (keys[address] == passkey) {
  80.                             data = storage[address];
  81.                         }
  82.                     }
  83.                     break;
  84.                 case 1: /*
  85.                          * Write Packet - Requests target (16b) and data
  86.                          * (<=1024b * 1024b * 2b)
  87.                          */
  88.                     if (pData.length >= 4) {
  89.                         if (storage[address] == null) {
  90.                             System.arraycopy(pData, 3, storage[address],
  91.                                     0, pData.length - 3);
  92.                             data = new byte[] { 1 };
  93.                         }
  94.                     }
  95.                     break;
  96.                 case 2: /* Kill Packet - Requests target (16b) and key (64b) */
  97.                     if (pData.length >= 11) {
  98.                         passkey = (long) (pData[10] << 56 | pData[9] << 48
  99.                                 | pData[8] << 40 | pData[7] << 32
  100.                                 | pData[6] << 24 | pData[5] << 16
  101.                                 | pData[4] << 8 | pData[3]);
  102.                         if (keys[address] == passkey) {
  103.                             storage[address] = null;
  104.                             data = new byte[] { 1 };
  105.                         }
  106.                         break;
  107.                     }
  108.                 }
  109.  
  110.                 DatagramPacket response = new DatagramPacket(data, data.length,
  111.                         packet.getAddress(), packet.getPort());
  112.  
  113.                 try {
  114.                     socket.send(response);
  115.                 } catch (IOException ex) {
  116.                 }
  117.             }
  118.         }
  119.     }
  120. }
Add Comment
Please, Sign In to add comment