Files
sendnrwlib/netproto/netproto.go
2025-01-21 06:20:23 +01:00

97 lines
2.9 KiB
Go

package netproto
import (
"encoding/base64"
)
type MainHeader struct {
Version uint8 `json:"version"`
Meta map[string]string `json:"meta"`
ExtensionHeaders []ExtensionHeader `json:"extension_headers"`
}
const (
MainHeaderVersion1 = 1
)
const (
ExtensionHeaderType_Source uint8 = 1 /* https://git.send.nrw/sendnrw/sendnrwlib/issues/1 */
ExtensionHeaderType_Destination uint8 = 2 /* https://git.send.nrw/sendnrw/sendnrwlib/issues/1 */
ExtensionHeaderType_PayloadDefinition uint8 = 3
ExtensionHeaderType_Protocol uint8 = 4
ExtensionHeaderType_Control uint8 = 5 /*Steuerbefehle wie Download, Upload, ...*/
ExtensionHeaderType_Crypto uint8 = 6 /*Hinweis auf eine Verschlüsselung*/
ExtensionHeaderType_Validation uint8 = 7 /*Hinweis auf eine Validierung oder Checksum*/
ExtensionHeaderType_Routing uint8 = 8 /*Hinweis auf eine Routing-Information*/
)
func GenerateEHT1(IPv4, IPv6, Port string) ExtensionHeader {
return ExtensionHeader{
Type: ExtensionHeaderType_Source,
Meta: map[string]string{"version": "1.0"},
Data: map[string]string{"ipv4": IPv4, "ipv6": IPv6, "port": Port},
}
}
func GenerateEHT2(IPv4, IPv6, Port string) ExtensionHeader {
return ExtensionHeader{
Type: ExtensionHeaderType_Destination,
Meta: map[string]string{"version": "1.0"},
Data: map[string]string{"ipv4": IPv4, "ipv6": IPv6, "port": Port},
}
}
func GenerateEHT3(PayloadMime, PayloadLength, PayloadChecksum string) ExtensionHeader {
return ExtensionHeader{
Type: ExtensionHeaderType_PayloadDefinition,
Meta: map[string]string{"version": "1.0"},
Data: map[string]string{"payloadmime": PayloadMime, "payloadlength": PayloadLength, "payloadchecksum": PayloadChecksum},
}
}
func GenerateEHT4(ProtocolName, ProtocolVersion, ProtocolOID string) ExtensionHeader {
return ExtensionHeader{
Type: ExtensionHeaderType_Protocol,
Meta: map[string]string{"version": "1.0"},
Data: map[string]string{"protocolname": ProtocolName, "protocolversion": ProtocolVersion, "protocoloid": ProtocolOID},
}
}
func GenerateEHT7(Checksum string) ExtensionHeader {
return ExtensionHeader{
Type: ExtensionHeaderType_Validation,
Meta: map[string]string{"version": "1.0"},
Data: map[string]string{"checksum": Checksum},
}
}
func GenerateMH(Version uint8, Flag string) MainHeader {
return MainHeader{
Version: Version,
Meta: map[string]string{"version": "1.0", "flag": Flag},
}
}
func EncodeB64(input string) (string, error) {
return base64.StdEncoding.EncodeToString([]byte(input)), nil
}
func DecodeB64(input string) (string, error) {
d, err := base64.StdEncoding.DecodeString(input)
if err != nil {
return "", err
}
return string(d), nil
}
type ExtensionHeader struct {
Type uint8 `json:"type"`
Meta map[string]string `json:"meta"`
Data map[string]string `json:"data"`
}
type NetworkProtocol struct {
Header MainHeader `json:"header"`
Payload string `json:"payload"`
}