-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHandshake.java
More file actions
50 lines (41 loc) · 1.93 KB
/
Handshake.java
File metadata and controls
50 lines (41 loc) · 1.93 KB
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
49
50
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
public class Handshake {
private static final String HEADER = "P2PFILESHARINGPROJ";
private static final int HEADER_LENGTH = 18;
private static final int PEER_ID_LENGTH = 4;
private static final int ZEROBITS_LENGTH = 10;
public static final int MESSAGE_LENGTH = 32;
private byte[] headerArr;
private byte[] zeroBitsArr;
private byte[] peerIdArr;
private Handshake(byte[] headerArr, byte[] zeroBitsArr, byte[] peerIdArr){
this.headerArr = headerArr;
this.zeroBitsArr = zeroBitsArr;
this.peerIdArr = peerIdArr;
}
public Handshake(int peerId){
this.headerArr = HEADER.getBytes(StandardCharsets.UTF_8);
this.peerIdArr = String.valueOf(peerId).getBytes(StandardCharsets.UTF_8);
this.zeroBitsArr = "0000000000".getBytes(StandardCharsets.UTF_8);
}
public static Handshake createHandShake(byte[] handShakeByteArr){
byte[] headerArr = Arrays.copyOfRange(handShakeByteArr,0, HEADER_LENGTH);
byte[] zeroBitsArr = Arrays.copyOfRange(handShakeByteArr, HEADER_LENGTH, HEADER_LENGTH + ZEROBITS_LENGTH);
byte[] peerIdArr = Arrays.copyOfRange(handShakeByteArr, HEADER_LENGTH + ZEROBITS_LENGTH, MESSAGE_LENGTH);
if(HEADER.equals(new String(headerArr, StandardCharsets.UTF_8))){
return new Handshake(headerArr, zeroBitsArr, peerIdArr);
}
return null;
}
public byte[] toBytes(){
byte[] handShakeByteArr = new byte[MESSAGE_LENGTH];
System.arraycopy(this.headerArr,0,handShakeByteArr,0, HEADER_LENGTH);
System.arraycopy(this.zeroBitsArr,0,handShakeByteArr, HEADER_LENGTH, ZEROBITS_LENGTH);
System.arraycopy(this.peerIdArr,0,handShakeByteArr,HEADER_LENGTH + ZEROBITS_LENGTH, PEER_ID_LENGTH);
return handShakeByteArr;
}
public int getPeerId(){
return Integer.parseInt(new String(this.peerIdArr));
}
}