示例#1
0
  static Module LoadModule(
      DatagramSocket datagramsocket, InetAddress inetaddress, int i, String s, boolean flag) {
    try {
      Module module = new Module();
      module.Name = s;
      int j = Challenge(datagramsocket, inetaddress, i);
      System.out.print("Sending the get request, file '" + s);
      if (flag) System.out.print(" [beta] ");
      byte abyte0[] = Cmd_Get(s, j, flag);
      datagramsocket.send(new DatagramPacket(abyte0, abyte0.length, inetaddress, i));
      try {
        Thread.sleep(50L);
      } catch (Exception exception2) {
      }
      System.out.print("' ...");
      abyte0 = new byte[256];
      DatagramPacket datagrampacket = new DatagramPacket(abyte0, abyte0.length);
      datagramsocket.receive(datagrampacket);
      System.out.println(" ok ");
      ReqFile reqfile = new ReqFile(abyte0);
      if (!((Req) (reqfile)).legal) {
        System.out.println("Can't download module " + s);
        return null;
      }
      module.Size = reqfile.Size;
      module.Header = reqfile.Header;
      module.Data = new byte[module.Size];
      Module module1 = null;
      try {
        module1 = new Module(s);
      } catch (Exception exception3) {
        module1 = null;
      }
      if (module1 != null && module1.compareHeader(module)) {
        byte abyte1[] = Cmd_Abort("");
        datagramsocket.send(new DatagramPacket(abyte1, abyte1.length, inetaddress, i));
        System.out.println(s + " is already the newest version.");
        return null;
      }
      System.out.print("downloading data");
      int k = 0;
      do {
        byte abyte2[] = Cmd_Next(k);
        datagramsocket.send(new DatagramPacket(abyte2, abyte2.length, inetaddress, i));
        try {
          Thread.sleep(50L);
        } catch (Exception exception4) {
        }
        abyte2 = new byte[16534];
        DatagramPacket datagrampacket1 = new DatagramPacket(abyte2, abyte2.length);

        try {
          datagramsocket.receive(datagrampacket1);
        } catch (InterruptedIOException e) {
          continue;
        }

        ReqBlock reqblock = new ReqBlock(abyte2);
        if (!((Req) (reqblock)).legal) {
          if (!"FINISH".equals(((Req) (reqblock)).Cmd)) throw new Exception("Protocol violation");
          break;
        }
        System.arraycopy(reqblock.Data, 0, module.Data, k, reqblock.Size);
        k += reqblock.Size;
        System.out.print(".");
      } while (true);
      if (k != module.Size) {
        throw new Exception("File size mismatch");
      } else {
        System.out.println("done");
        Module.decode(module.Data, j);
        return module;
      }
    } catch (Exception exception) {
      exception.printStackTrace();
    }
    if (datagramsocket != null)
      try {
        datagramsocket.close();
      } catch (Exception exception1) {
      }
    System.out.println("Can't download module " + s);
    return null;
  }