47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
|
package filexfer
|
||
|
|
||
|
// ExtensionPair defines the extension-pair type defined in draft-ietf-secsh-filexfer-13.
|
||
|
// This type is backwards-compatible with how draft-ietf-secsh-filexfer-02 defines extensions.
|
||
|
//
|
||
|
// Defined in: https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-4.2
|
||
|
type ExtensionPair struct {
|
||
|
Name string
|
||
|
Data string
|
||
|
}
|
||
|
|
||
|
// Len returns the number of bytes e would marshal into.
|
||
|
func (e *ExtensionPair) Len() int {
|
||
|
return 4 + len(e.Name) + 4 + len(e.Data)
|
||
|
}
|
||
|
|
||
|
// MarshalInto marshals e onto the end of the given Buffer.
|
||
|
func (e *ExtensionPair) MarshalInto(buf *Buffer) {
|
||
|
buf.AppendString(e.Name)
|
||
|
buf.AppendString(e.Data)
|
||
|
}
|
||
|
|
||
|
// MarshalBinary returns e as the binary encoding of e.
|
||
|
func (e *ExtensionPair) MarshalBinary() ([]byte, error) {
|
||
|
buf := NewBuffer(make([]byte, 0, e.Len()))
|
||
|
e.MarshalInto(buf)
|
||
|
return buf.Bytes(), nil
|
||
|
}
|
||
|
|
||
|
// UnmarshalFrom unmarshals an ExtensionPair from the given Buffer into e.
|
||
|
func (e *ExtensionPair) UnmarshalFrom(buf *Buffer) (err error) {
|
||
|
if e.Name, err = buf.ConsumeString(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if e.Data, err = buf.ConsumeString(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// UnmarshalBinary decodes the binary encoding of ExtensionPair into e.
|
||
|
func (e *ExtensionPair) UnmarshalBinary(data []byte) error {
|
||
|
return e.UnmarshalFrom(NewBuffer(data))
|
||
|
}
|