Files
desktop/app/providers/ProtocolProvider/protocol/packets/packet.handshake.ts
2026-01-31 03:01:25 +02:00

117 lines
3.0 KiB
TypeScript

import Packet from "../packet";
import Stream from "../stream";
export enum HandshakeState {
COMPLETED,
NEED_DEVICE_VERIFICATION
}
export interface Device {
deviceId: string;
deviceName: string;
deviceOs: string;
}
/**
* Hadshake packet
* ID: 0x00
*
* The handshake packet is the first packet sent by the client to the server.
* It contains the hash of the client's public key and the public key itself.
*/
export default class PacketHandshake extends Packet {
private privateKey: string = "";
private publicKey: string = "";
private protocolVersion: number = 1;
/**
* Interval seconds
*/
private heartbeatInterval : number = 15;
private device: Device = {
deviceId: "",
deviceName: "",
deviceOs: ""
};
private handshakeState:
HandshakeState = HandshakeState.NEED_DEVICE_VERIFICATION;
public getPacketId(): number {
return 0x00;
}
public _receive(stream: Stream): void {
this.privateKey = stream.readString();
this.publicKey = stream.readString();
this.protocolVersion = stream.readInt8();
this.heartbeatInterval = stream.readInt8();
this.device = {
deviceId: stream.readString(),
deviceName: stream.readString(),
deviceOs: stream.readString()
}
this.handshakeState = stream.readInt8();
}
public _send(): Stream {
const stream = new Stream();
stream.writeInt16(this.getPacketId());
stream.writeString(this.privateKey);
stream.writeString(this.publicKey);
stream.writeInt8(this.protocolVersion);
stream.writeInt8(this.heartbeatInterval);
stream.writeString(this.device.deviceId);
stream.writeString(this.device.deviceName);
stream.writeString(this.device.deviceOs);
stream.writeInt8(this.handshakeState);
return stream;
}
public getPrivateKey(): string {
return this.privateKey;
}
public getPublicKey(): string {
return this.publicKey;
}
public setPrivateKey(privateKey: string): void {
this.privateKey = privateKey;
}
public setPublicKey(publicKey: string): void {
this.publicKey = publicKey;
}
public getProtocolVersion(): number {
return this.protocolVersion;
}
public setProtocolVersion(protocolVersion: number): void {
this.protocolVersion = protocolVersion;
}
public getHeartbeatInterval(): number {
return this.heartbeatInterval;
}
public setHeartbeatInterval(heartbeatInterval: number): void {
this.heartbeatInterval = heartbeatInterval;
}
public getDevice(): Device {
return this.device;
}
public setDevice(device: Device): void {
this.device = device;
}
public getHandshakeState(): HandshakeState {
return this.handshakeState;
}
public setHandshakeState(handshakeState: HandshakeState): void {
this.handshakeState = handshakeState;
}
}