Diese Klassen sind für das Module Protocol, um bspw. eine Toolbar anzuzeigen. Stammen aus dem K-Reverse Emulator, müssen für den Banana-Chat etwas angepasst werden.
ModuleTree.java
Wo der Tree definiert ist, ist euch überlassen, bei mir wird er aus der Datenbank gelesen und dem Konstruktor übergeben.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package kreverse.kremu;
import java.util.ArrayList;
/**
*
* @author Flav
*/
public class ModuleTree {
private String tree;
private int version;
private byte startIndex;
private ArrayList<String> modules;
public ModuleTree(String tree) {
this.tree = tree;
String[] mdls = tree.split(";");
version = Integer.parseInt(mdls[0]);
startIndex = Byte.parseByte(mdls[1]);
modules = new ArrayList<String>();
for (int i = 2; i < mdls.length; i++) {
modules.add(mdls[i]);
}
}
public String getTree() {
return tree;
}
public int getVersion() {
return version;
}
public String getModule(int index) {
return modules.get(index - startIndex);
}
public int getIndex(String module) {
for (int i = 0; i < modules.size(); i++) {
if (modules.get(i).equals(module)) {
return i + startIndex;
}
}
return -1;
}
}
|
ModuleHandler.java
Dieser Handler (Opcode: q) wird auch von der Whois2 angesprochen, ist hier aber erstmal nur dafür zuständig, dass der Tree von Client und Server übereinstimmen (braucht man nur wenn man den Tree ständig aktualisiert, was meiner Meinung nach sinnlos ist).
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package kreverse.kremu.handler;
import kreverse.kremu.Client;
import kreverse.kremu.Server;
import kreverse.kremu.tools.packet.PacketCreator;
import kreverse.kremu.tools.packet.PacketReader;
/**
*
* @author Flav
*/
public class ModuleHandler {
private static String protocolConfirmed;
private static String changeProtocol;
static {
protocolConfirmed = PacketCreator.protocolConfirmed();
changeProtocol = PacketCreator.changeProtocol();
}
public static void handle(PacketReader reader, Client client) {
String module = Server.get().getModuleTree().getModule(reader.readShort());
if (module.equals("CONFIRM_PROTOCOL_HASH")) {
reader.readInt();
int version = reader.readInt();
if (Server.get().getModuleTree().getVersion() == version) {
client.send(protocolConfirmed);
} else {
client.send(changeProtocol);
}
}
}
}
|
PacketReader.java
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package kreverse.kremu.tools.packet;
/**
*
* @author Flav
*/
public class PacketReader {
private String buffer;
public PacketReader(String buffer) {
this.buffer = buffer;
}
public byte read() {
byte v = (byte) buffer.charAt(0);
buffer = buffer.substring(1);
return v;
}
public boolean readBoolean() {
return read() != 0;
}
public short readShort() {
return (short) (((read() & 0xFF) << 8)
+ (read() & 0xFF));
}
public int readInt() {
return ((read() & 0xFF) << 24)
+ ((read() & 0xFF) << 16)
+ ((read() & 0xFF) << 8)
+ (read() & 0xFF);
}
public String readString(int len) {
String v = buffer.substring(0, len);
buffer = buffer.substring(len);
return v;
}
}
|
PacketWriter.java
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package kreverse.kremu.tools.packet;
/**
*
* @author Flav
*/
public class PacketWriter {
private StringBuilder buffer;
public PacketWriter() {
buffer = new StringBuilder();
}
public void write(int v) {
buffer.append((char) v);
}
public void writeBoolean(boolean v) {
write(v ? 1 : 0);
}
public void writeShort(int v) {
write(v >> 8);
write(v);
}
public void writeInt(int v) {
write(v >> 24);
write(v >> 16);
write(v >> 8);
write(v);
}
public void writeString(String v) {
buffer.append(v);
}
public String toString() {
return buffer.toString();
}
}
|
PacketCreator.java
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[...]
public static String protocolConfirmed() {
PacketWriter packet = new PacketWriter();
packet.writeString(SendOpcode.MODULE.getValue());
packet.write(0x00);
packet.writeShort(Server.get().getModuleTree().getIndex("PROTOCOL_CONFIRMED"));
return packet.toString();
}
public static String changeProtocol() {
PacketWriter packet = new PacketWriter();
packet.writeString(SendOpcode.MODULE.getValue());
packet.write(0x00);
packet.writeShort(Server.get().getModuleTree().getIndex("CHANGE_PROTOCOL"));
packet.writeShort(Server.get().getModuleTree().getTree().length());
packet.writeString(Server.get().getModuleTree().getTree());
return packet.toString();
}
[...]
|
SessionHandler.java
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
[...]
else if (opcode.equals(ReceiveOpcode.MODULE.getValue())) {
packet = packet.substring(2);
PacketReader reader = new PacketReader(packet);
ModuleHandler.handle(reader, this);
}
[...]
|