diff --git a/session/convert.go b/session/convert.go index df78c9e..5562fff 100644 --- a/session/convert.go +++ b/session/convert.go @@ -389,6 +389,7 @@ func (r *RequestMetaHeader) ToGRPCMessage() grpc.Message { m.SetEpoch(r.epoch) m.SetTtl(r.ttl) m.SetOrigin(r.origin.ToGRPCMessage().(*session.RequestMetaHeader)) + m.SetNetworkMagic(r.netMagic) } return m @@ -465,6 +466,7 @@ func (r *RequestMetaHeader) FromGRPCMessage(m grpc.Message) error { r.epoch = v.GetEpoch() r.ttl = v.GetTtl() + r.netMagic = v.GetNetworkMagic() return nil } diff --git a/session/grpc/types.go b/session/grpc/types.go index 07d5d13..484203d 100644 --- a/session/grpc/types.go +++ b/session/grpc/types.go @@ -185,6 +185,22 @@ func (m *RequestMetaHeader) SetOrigin(v *RequestMetaHeader) { } } +// GetNetworkMagic returns NeoFS network magic. +func (m *RequestMetaHeader) GetNetworkMagic() uint64 { + if m != nil { + return m.MagicNumber + } + + return 0 +} + +// SetNetworkMagic sets NeoFS network magic. +func (m *RequestMetaHeader) SetNetworkMagic(v uint64) { + if m != nil { + m.MagicNumber = v + } +} + // SetVersion sets server protocol version. func (m *ResponseMetaHeader) SetVersion(v *refs.Version) { if m != nil { diff --git a/session/marshal.go b/session/marshal.go index 9513d4c..f28615c 100644 --- a/session/marshal.go +++ b/session/marshal.go @@ -41,6 +41,7 @@ const ( reqMetaHeaderSessionTokenField = 5 reqMetaHeaderBearerTokenField = 6 reqMetaHeaderOriginField = 7 + reqMetaHeaderNetMagicField = 8 reqVerifHeaderBodySignatureField = 1 reqVerifHeaderMetaSignatureField = 2 @@ -564,7 +565,14 @@ func (r *RequestMetaHeader) StableMarshal(buf []byte) ([]byte, error) { offset += n - _, err = proto.NestedStructureMarshal(reqMetaHeaderOriginField, buf[offset:], r.origin) + n, err = proto.NestedStructureMarshal(reqMetaHeaderOriginField, buf[offset:], r.origin) + if err != nil { + return nil, err + } + + offset += n + + _, err = proto.UInt64Marshal(reqMetaHeaderNetMagicField, buf[offset:], r.netMagic) if err != nil { return nil, err } @@ -591,6 +599,7 @@ func (r *RequestMetaHeader) StableSize() (size int) { size += proto.NestedStructureSize(reqMetaHeaderSessionTokenField, r.sessionToken) size += proto.NestedStructureSize(reqMetaHeaderBearerTokenField, r.bearerToken) size += proto.NestedStructureSize(reqMetaHeaderOriginField, r.origin) + size += proto.UInt64Size(reqMetaHeaderNetMagicField, r.netMagic) return size } diff --git a/session/test/generate.go b/session/test/generate.go index 8473d80..d809592 100644 --- a/session/test/generate.go +++ b/session/test/generate.go @@ -130,6 +130,7 @@ func generateRequestMetaHeader(empty, withOrigin bool) *session.RequestMetaHeade if !empty { m.SetEpoch(13) m.SetTTL(100) + m.SetNetworkMagic(1337) } m.SetXHeaders(GenerateXHeaders(empty)) diff --git a/session/types.go b/session/types.go index 8a97817..26fa26e 100644 --- a/session/types.go +++ b/session/types.go @@ -88,6 +88,8 @@ type RequestMetaHeader struct { bearerToken *acl.BearerToken origin *RequestMetaHeader + + netMagic uint64 } type ResponseVerificationHeader struct { @@ -443,6 +445,22 @@ func (r *RequestMetaHeader) SetOrigin(v *RequestMetaHeader) { } } +// GetNetworkMagic returns NeoFS network magic. +func (r *RequestMetaHeader) GetNetworkMagic() uint64 { + if r != nil { + return r.netMagic + } + + return 0 +} + +// SetNetworkMagic sets NeoFS network magic. +func (r *RequestMetaHeader) SetNetworkMagic(v uint64) { + if r != nil { + r.netMagic = v + } +} + func (l *TokenLifetime) GetExp() uint64 { if l != nil { return l.exp