// ************************************************************
// This file is automatically generated by genxdr. Do not edit.
// ************************************************************

package protocol

import (
	"bytes"
	"io"

	"github.com/calmh/xdr"
)

/*

header Structure:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             magic                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         message Type                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        message Length                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


struct header {
	unsigned int magic;
	int messageType;
	int messageLength;
}

*/

func (o header) EncodeXDR(w io.Writer) (int, error) {
	var xw = xdr.NewWriter(w)
	return o.EncodeXDRInto(xw)
}

func (o header) MarshalXDR() ([]byte, error) {
	return o.AppendXDR(make([]byte, 0, 128))
}

func (o header) MustMarshalXDR() []byte {
	bs, err := o.MarshalXDR()
	if err != nil {
		panic(err)
	}
	return bs
}

func (o header) AppendXDR(bs []byte) ([]byte, error) {
	var aw = xdr.AppendWriter(bs)
	var xw = xdr.NewWriter(&aw)
	_, err := o.EncodeXDRInto(xw)
	return []byte(aw), err
}

func (o header) EncodeXDRInto(xw *xdr.Writer) (int, error) {
	xw.WriteUint32(o.magic)
	xw.WriteUint32(uint32(o.messageType))
	xw.WriteUint32(uint32(o.messageLength))
	return xw.Tot(), xw.Error()
}

func (o *header) DecodeXDR(r io.Reader) error {
	xr := xdr.NewReader(r)
	return o.DecodeXDRFrom(xr)
}

func (o *header) UnmarshalXDR(bs []byte) error {
	var br = bytes.NewReader(bs)
	var xr = xdr.NewReader(br)
	return o.DecodeXDRFrom(xr)
}

func (o *header) DecodeXDRFrom(xr *xdr.Reader) error {
	o.magic = xr.ReadUint32()
	o.messageType = int32(xr.ReadUint32())
	o.messageLength = int32(xr.ReadUint32())
	return xr.Error()
}

/*

Ping Structure:
(contains no fields)


struct Ping {
}

*/

func (o Ping) EncodeXDR(w io.Writer) (int, error) {
	return 0, nil
}

func (o Ping) MarshalXDR() ([]byte, error) {
	return nil, nil
}

func (o Ping) MustMarshalXDR() []byte {
	return nil
}

func (o Ping) AppendXDR(bs []byte) ([]byte, error) {
	return bs, nil
}

func (o Ping) EncodeXDRInto(xw *xdr.Writer) (int, error) {
	return xw.Tot(), xw.Error()
}

func (o *Ping) DecodeXDR(r io.Reader) error {
	return nil
}

func (o *Ping) UnmarshalXDR(bs []byte) error {
	return nil
}

func (o *Ping) DecodeXDRFrom(xr *xdr.Reader) error {
	return xr.Error()
}

/*

Pong Structure:
(contains no fields)


struct Pong {
}

*/

func (o Pong) EncodeXDR(w io.Writer) (int, error) {
	return 0, nil
}

func (o Pong) MarshalXDR() ([]byte, error) {
	return nil, nil
}

func (o Pong) MustMarshalXDR() []byte {
	return nil
}

func (o Pong) AppendXDR(bs []byte) ([]byte, error) {
	return bs, nil
}

func (o Pong) EncodeXDRInto(xw *xdr.Writer) (int, error) {
	return xw.Tot(), xw.Error()
}

func (o *Pong) DecodeXDR(r io.Reader) error {
	return nil
}

func (o *Pong) UnmarshalXDR(bs []byte) error {
	return nil
}

func (o *Pong) DecodeXDRFrom(xr *xdr.Reader) error {
	return xr.Error()
}

/*

JoinRelayRequest Structure:
(contains no fields)


struct JoinRelayRequest {
}

*/

func (o JoinRelayRequest) EncodeXDR(w io.Writer) (int, error) {
	return 0, nil
}

func (o JoinRelayRequest) MarshalXDR() ([]byte, error) {
	return nil, nil
}

func (o JoinRelayRequest) MustMarshalXDR() []byte {
	return nil
}

func (o JoinRelayRequest) AppendXDR(bs []byte) ([]byte, error) {
	return bs, nil
}

func (o JoinRelayRequest) EncodeXDRInto(xw *xdr.Writer) (int, error) {
	return xw.Tot(), xw.Error()
}

func (o *JoinRelayRequest) DecodeXDR(r io.Reader) error {
	return nil
}

func (o *JoinRelayRequest) UnmarshalXDR(bs []byte) error {
	return nil
}

func (o *JoinRelayRequest) DecodeXDRFrom(xr *xdr.Reader) error {
	return xr.Error()
}

/*

RelayFull Structure:
(contains no fields)


struct RelayFull {
}

*/

func (o RelayFull) EncodeXDR(w io.Writer) (int, error) {
	return 0, nil
}

func (o RelayFull) MarshalXDR() ([]byte, error) {
	return nil, nil
}

func (o RelayFull) MustMarshalXDR() []byte {
	return nil
}

func (o RelayFull) AppendXDR(bs []byte) ([]byte, error) {
	return bs, nil
}

func (o RelayFull) EncodeXDRInto(xw *xdr.Writer) (int, error) {
	return xw.Tot(), xw.Error()
}

func (o *RelayFull) DecodeXDR(r io.Reader) error {
	return nil
}

func (o *RelayFull) UnmarshalXDR(bs []byte) error {
	return nil
}

func (o *RelayFull) DecodeXDRFrom(xr *xdr.Reader) error {
	return xr.Error()
}

/*

JoinSessionRequest Structure:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Length of Key                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
\                     Key (variable length)                     \
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


struct JoinSessionRequest {
	opaque Key<32>;
}

*/

func (o JoinSessionRequest) EncodeXDR(w io.Writer) (int, error) {
	var xw = xdr.NewWriter(w)
	return o.EncodeXDRInto(xw)
}

func (o JoinSessionRequest) MarshalXDR() ([]byte, error) {
	return o.AppendXDR(make([]byte, 0, 128))
}

func (o JoinSessionRequest) MustMarshalXDR() []byte {
	bs, err := o.MarshalXDR()
	if err != nil {
		panic(err)
	}
	return bs
}

func (o JoinSessionRequest) AppendXDR(bs []byte) ([]byte, error) {
	var aw = xdr.AppendWriter(bs)
	var xw = xdr.NewWriter(&aw)
	_, err := o.EncodeXDRInto(xw)
	return []byte(aw), err
}

func (o JoinSessionRequest) EncodeXDRInto(xw *xdr.Writer) (int, error) {
	if l := len(o.Key); l > 32 {
		return xw.Tot(), xdr.ElementSizeExceeded("Key", l, 32)
	}
	xw.WriteBytes(o.Key)
	return xw.Tot(), xw.Error()
}

func (o *JoinSessionRequest) DecodeXDR(r io.Reader) error {
	xr := xdr.NewReader(r)
	return o.DecodeXDRFrom(xr)
}

func (o *JoinSessionRequest) UnmarshalXDR(bs []byte) error {
	var br = bytes.NewReader(bs)
	var xr = xdr.NewReader(br)
	return o.DecodeXDRFrom(xr)
}

func (o *JoinSessionRequest) DecodeXDRFrom(xr *xdr.Reader) error {
	o.Key = xr.ReadBytesMax(32)
	return xr.Error()
}

/*

Response Structure:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Code                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Length of Message                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
\                   Message (variable length)                   \
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


struct Response {
	int Code;
	string Message<>;
}

*/

func (o Response) EncodeXDR(w io.Writer) (int, error) {
	var xw = xdr.NewWriter(w)
	return o.EncodeXDRInto(xw)
}

func (o Response) MarshalXDR() ([]byte, error) {
	return o.AppendXDR(make([]byte, 0, 128))
}

func (o Response) MustMarshalXDR() []byte {
	bs, err := o.MarshalXDR()
	if err != nil {
		panic(err)
	}
	return bs
}

func (o Response) AppendXDR(bs []byte) ([]byte, error) {
	var aw = xdr.AppendWriter(bs)
	var xw = xdr.NewWriter(&aw)
	_, err := o.EncodeXDRInto(xw)
	return []byte(aw), err
}

func (o Response) EncodeXDRInto(xw *xdr.Writer) (int, error) {
	xw.WriteUint32(uint32(o.Code))
	xw.WriteString(o.Message)
	return xw.Tot(), xw.Error()
}

func (o *Response) DecodeXDR(r io.Reader) error {
	xr := xdr.NewReader(r)
	return o.DecodeXDRFrom(xr)
}

func (o *Response) UnmarshalXDR(bs []byte) error {
	var br = bytes.NewReader(bs)
	var xr = xdr.NewReader(br)
	return o.DecodeXDRFrom(xr)
}

func (o *Response) DecodeXDRFrom(xr *xdr.Reader) error {
	o.Code = int32(xr.ReadUint32())
	o.Message = xr.ReadString()
	return xr.Error()
}

/*

ConnectRequest Structure:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Length of ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
\                     ID (variable length)                      \
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


struct ConnectRequest {
	opaque ID<32>;
}

*/

func (o ConnectRequest) EncodeXDR(w io.Writer) (int, error) {
	var xw = xdr.NewWriter(w)
	return o.EncodeXDRInto(xw)
}

func (o ConnectRequest) MarshalXDR() ([]byte, error) {
	return o.AppendXDR(make([]byte, 0, 128))
}

func (o ConnectRequest) MustMarshalXDR() []byte {
	bs, err := o.MarshalXDR()
	if err != nil {
		panic(err)
	}
	return bs
}

func (o ConnectRequest) AppendXDR(bs []byte) ([]byte, error) {
	var aw = xdr.AppendWriter(bs)
	var xw = xdr.NewWriter(&aw)
	_, err := o.EncodeXDRInto(xw)
	return []byte(aw), err
}

func (o ConnectRequest) EncodeXDRInto(xw *xdr.Writer) (int, error) {
	if l := len(o.ID); l > 32 {
		return xw.Tot(), xdr.ElementSizeExceeded("ID", l, 32)
	}
	xw.WriteBytes(o.ID)
	return xw.Tot(), xw.Error()
}

func (o *ConnectRequest) DecodeXDR(r io.Reader) error {
	xr := xdr.NewReader(r)
	return o.DecodeXDRFrom(xr)
}

func (o *ConnectRequest) UnmarshalXDR(bs []byte) error {
	var br = bytes.NewReader(bs)
	var xr = xdr.NewReader(br)
	return o.DecodeXDRFrom(xr)
}

func (o *ConnectRequest) DecodeXDRFrom(xr *xdr.Reader) error {
	o.ID = xr.ReadBytesMax(32)
	return xr.Error()
}

/*

SessionInvitation Structure:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Length of From                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
\                    From (variable length)                     \
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Length of Key                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
\                     Key (variable length)                     \
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Length of Address                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
\                   Address (variable length)                   \
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            0x0000             |             Port              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Server Socket (V=0 or 1)                   |V|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


struct SessionInvitation {
	opaque From<32>;
	opaque Key<32>;
	opaque Address<32>;
	unsigned int Port;
	bool ServerSocket;
}

*/

func (o SessionInvitation) EncodeXDR(w io.Writer) (int, error) {
	var xw = xdr.NewWriter(w)
	return o.EncodeXDRInto(xw)
}

func (o SessionInvitation) MarshalXDR() ([]byte, error) {
	return o.AppendXDR(make([]byte, 0, 128))
}

func (o SessionInvitation) MustMarshalXDR() []byte {
	bs, err := o.MarshalXDR()
	if err != nil {
		panic(err)
	}
	return bs
}

func (o SessionInvitation) AppendXDR(bs []byte) ([]byte, error) {
	var aw = xdr.AppendWriter(bs)
	var xw = xdr.NewWriter(&aw)
	_, err := o.EncodeXDRInto(xw)
	return []byte(aw), err
}

func (o SessionInvitation) EncodeXDRInto(xw *xdr.Writer) (int, error) {
	if l := len(o.From); l > 32 {
		return xw.Tot(), xdr.ElementSizeExceeded("From", l, 32)
	}
	xw.WriteBytes(o.From)
	if l := len(o.Key); l > 32 {
		return xw.Tot(), xdr.ElementSizeExceeded("Key", l, 32)
	}
	xw.WriteBytes(o.Key)
	if l := len(o.Address); l > 32 {
		return xw.Tot(), xdr.ElementSizeExceeded("Address", l, 32)
	}
	xw.WriteBytes(o.Address)
	xw.WriteUint16(o.Port)
	xw.WriteBool(o.ServerSocket)
	return xw.Tot(), xw.Error()
}

func (o *SessionInvitation) DecodeXDR(r io.Reader) error {
	xr := xdr.NewReader(r)
	return o.DecodeXDRFrom(xr)
}

func (o *SessionInvitation) UnmarshalXDR(bs []byte) error {
	var br = bytes.NewReader(bs)
	var xr = xdr.NewReader(br)
	return o.DecodeXDRFrom(xr)
}

func (o *SessionInvitation) DecodeXDRFrom(xr *xdr.Reader) error {
	o.From = xr.ReadBytesMax(32)
	o.Key = xr.ReadBytesMax(32)
	o.Address = xr.ReadBytesMax(32)
	o.Port = xr.ReadUint16()
	o.ServerSocket = xr.ReadBool()
	return xr.Error()
}
