From e12437d06761357eb2bf1a570feae181c617dee8 Mon Sep 17 00:00:00 2001 From: LandaMm Date: Sun, 27 Apr 2025 15:36:48 +0200 Subject: [PATCH] feat: packet remove write+read funcs && add encryption fields --- hsp/packet.go | 108 +------------------------------------------------- 1 file changed, 2 insertions(+), 106 deletions(-) diff --git a/hsp/packet.go b/hsp/packet.go index a180876..baa0d5a 100644 --- a/hsp/packet.go +++ b/hsp/packet.go @@ -2,10 +2,7 @@ package hsp import ( "bytes" - "encoding/binary" - "errors" "fmt" - "io" "net" ) @@ -23,8 +20,10 @@ type RawPacket struct { Flags uint8 HeaderSize uint16 PayloadSize uint32 + Nonce []byte Header []byte Payload []byte + Mac []byte } type Packet struct { @@ -82,106 +81,3 @@ func SerializeHeaders(headers *map[string]string) []byte { fmt.Fprintf(buf, "\n") return buf.Bytes() } - -func NewPacketDuplex(conn net.Conn) *PacketDuplex { - return &PacketDuplex{ - conn, - } -} - -func (r *PacketDuplex) ReadPacket() (*Packet, error) { - rpkt := &RawPacket{} - - err := binary.Read(r.conn, binary.BigEndian, &rpkt.Magic) - if err != nil { - return nil, err - } - - if rpkt.Magic != Magic { - return nil, errors.New("Magic bytes are invalid") - } - - err = binary.Read(r.conn, binary.BigEndian, &rpkt.Version) - if err != nil { - return nil, err - } - - err = binary.Read(r.conn, binary.BigEndian, &rpkt.Flags) - if err != nil { - return nil, err - } - - err = binary.Read(r.conn, binary.BigEndian, &rpkt.HeaderSize) - if err != nil { - return nil, err - } - - err = binary.Read(r.conn, binary.BigEndian, &rpkt.PayloadSize) - if err != nil { - return nil, err - } - - rpkt.Header = make([]byte, rpkt.HeaderSize) - if _, err := io.ReadFull(r.conn, rpkt.Header); err != nil { - return nil, err - } - - rpkt.Payload = make([]byte, rpkt.PayloadSize) - if _, err := io.ReadFull(r.conn, rpkt.Payload); err != nil { - return nil, err - } - - pkt := &Packet{ - Version: int(rpkt.Version), - Flags: int(rpkt.Flags), - Headers: make(map[string]string), - Payload: rpkt.Payload, - } - - ParseHeaders(rpkt.Header, &pkt.Headers) - - return pkt, nil -} - -func (r *PacketDuplex) WritePacket(packet *Packet) (int, error) { - buf := new(bytes.Buffer) - - if err := binary.Write(buf, binary.BigEndian, Magic); err != nil { - return 0, errors.New(fmt.Sprintf("Failed to write magic into packet: %s", err.Error())) - } - - if err := binary.Write(buf, binary.BigEndian, uint8(packet.Version)); err != nil { - return 0, errors.New(fmt.Sprintf("Failed to write version into packet: %s", err.Error())) - } - - if err := binary.Write(buf, binary.BigEndian, uint8(packet.Flags)); err != nil { - return 0, errors.New(fmt.Sprintf("Failed to write flags into packet: %s", err.Error())) - } - - rawHeaders := SerializeHeaders(&packet.Headers) - headerSize := len(rawHeaders) - payloadSize := len(packet.Payload) - - if err := binary.Write(buf, binary.BigEndian, uint16(headerSize)); err != nil { - return 0, errors.New(fmt.Sprintf("Failed to write header size into packet: %s", err.Error())) - } - - if err := binary.Write(buf, binary.BigEndian, uint32(payloadSize)); err != nil { - return 0, errors.New(fmt.Sprintf("Failed to write payload size into packet: %s", err.Error())) - } - - if _, err := buf.Write(rawHeaders[:headerSize]); err != nil { - return 0, errors.New(fmt.Sprintf("Failed to write raw headers: %s", err.Error())) - } - - if _, err := buf.Write(packet.Payload[:payloadSize]); err != nil { - return 0, errors.New(fmt.Sprintf("Failed to write payload: %s", err.Error())) - } - - n, err := r.conn.Write(buf.Bytes()) - if err != nil { - return 0, errors.New(fmt.Sprintf("Failed to send packet over connection: %s", err.Error())) - } - - return n, nil -}