-
Notifications
You must be signed in to change notification settings - Fork 0
/
packet.go
36 lines (31 loc) · 890 Bytes
/
packet.go
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
package cs456Packet
import "encoding/binary"
const (
ACK = 0
DATA = 1
EOT = 2
MaxData = 500
SeqNumMod = 32
)
type Packet struct {
Type int `json:"type"` // 0: ACK, 1: Data, 2: EOT
SeqNum int `json:"seq_num"` // Modulo 32
Length int `json:"length"` // Length of the String variable ‘data’
Data []byte `json:"data"` // String with Max Length 500
}
func (p Packet) Bytes() []byte {
b := make([]byte, 12)
binary.BigEndian.PutUint32(b, uint32(p.Type))
binary.BigEndian.PutUint32(b[4:], uint32(p.SeqNum))
binary.BigEndian.PutUint32(b[8:], uint32(p.Length))
b = append(b, []byte(p.Data)...)
return b
}
func DecodePacket(b []byte) Packet {
p := Packet{}
p.Type = int(binary.BigEndian.Uint32(b))
p.SeqNum = int(binary.BigEndian.Uint32(b[4:]))
p.Length = int(binary.BigEndian.Uint32(b[8:]))
p.Data = b[12 : p.Length+12]
return p
}