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"` }