Documentation ¶
Overview ¶
Package wire provides wire protocol implementation.
Index ¶
- Constants
- Variables
- func ReadMessage(r *bufio.Reader) (*MsgHeader, MsgBody, error)
- func WriteMessage(w *bufio.Writer, header *MsgHeader, msg MsgBody) error
- type MsgBody
- type MsgHeader
- type OpCode
- type OpMsg
- type OpMsgFlagBit
- type OpMsgFlags
- type OpMsgSection
- type OpQuery
- type OpQueryFlagBit
- type OpQueryFlags
- type OpReply
- type OpReplyFlagBit
- type OpReplyFlags
- type Record
- type ValidationError
Constants ¶
const ( // OpCodeReply is used for the initial handshake with old clients. // It is not used otherwise and is deprecated. OpCodeReply = OpCode(1) // OP_REPLY // OpCodeUpdate is deprecated. OpCodeUpdate = OpCode(2001) // OP_UPDATE // OpCodeInsert is deprecated and unused. OpCodeInsert = OpCode(2002) // OP_INSERT // OpCodeGetByOID is deprecated and unused. OpCodeGetByOID = OpCode(2003) // OP_GET_BY_OID // OpCodeQuery is used for the initial handshake with old clients. // It is not used otherwise and is deprecated. OpCodeQuery = OpCode(2004) // OP_QUERY // OpCodeGetMore is deprecated and unused. OpCodeGetMore = OpCode(2005) // OP_GET_MORE // OpCodeDelete is deprecated and unused. OpCodeDelete = OpCode(2006) // OP_DELETE // OpCodeKillCursors is deprecated and unused. OpCodeKillCursors = OpCode(2007) // OP_KILL_CURSORS // OpCodeCompressed is not implemented yet. OpCodeCompressed = OpCode(2012) // OP_COMPRESSED // OpCodeMsg is the main operation for client-server communication. OpCodeMsg = OpCode(2013) // OP_MSG )
const ( // MsgHeaderLen is an expected len of the header. MsgHeaderLen = 16 // MaxMsgLen is the maximum message length. MaxMsgLen = 48000000 )
const ( // OpMsgChecksumPresent indicates that there is a CRC-32C checksum in a message. OpMsgChecksumPresent = OpMsgFlagBit(1 << 0) // checksumPresent // OpMsgMoreToCome indicates that there is another message coming, no need to do anything for it. OpMsgMoreToCome = OpMsgFlagBit(1 << 1) // moreToCome // OpMsgExhaustAllowed indicates that client can handle multiple replies. OpMsgExhaustAllowed = OpMsgFlagBit(1 << 16) // exhaustAllowed )
const ( // OpQueryTailableCursor indicates that the cursor will not be closed. OpQueryTailableCursor = OpQueryFlagBit(1 << 1) // TailableCursor // OpQuerySlaveOk indicates that query can run on a replica slave. OpQuerySlaveOk = OpQueryFlagBit(1 << 2) // SlaveOk // OpQueryOplogReplay is deprecated. OpQueryOplogReplay = OpQueryFlagBit(1 << 3) // OplogReplay // OpQueryNoCursorTimeout disables cursor timeouts. OpQueryNoCursorTimeout = OpQueryFlagBit(1 << 4) // NoCursorTimeout // OpQueryAwaitData together with OpQueryTailableCursor, waits for data instead of returning it. OpQueryAwaitData = OpQueryFlagBit(1 << 5) // AwaitData // OpQueryExhaust indicates that server can divide data into multiple streams and expect that client can handle it. OpQueryExhaust = OpQueryFlagBit(1 << 6) // Exhaust // OpQueryPartial ignore error and give partial results. OpQueryPartial = OpQueryFlagBit(1 << 7) // Partial )
const ( // OpReplyCursorNotFound indicates that the cursor is no longer exist at the server. OpReplyCursorNotFound = OpReplyFlagBit(1 << 0) // CursorNotFound // OpReplyQueryFailure reports query has failed. OpReplyQueryFailure = OpReplyFlagBit(1 << 1) // QueryFailure // OpReplyShardConfigStale indicates that shard config is outdated. OpReplyShardConfigStale = OpReplyFlagBit(1 << 2) // ShardConfigStale // OpReplyAwaitCapable indicates server supports AwaitData Query option. OpReplyAwaitCapable = OpReplyFlagBit(1 << 3) // AwaitCapable )
Variables ¶
var ErrZeroRead = errors.New("zero bytes read")
ErrZeroRead is returned when zero bytes was read from connection, indicating that connection was closed by the client.
Functions ¶
func ReadMessage ¶
ReadMessage reads from reader and returns wire header and body.
Error is (possibly wrapped) ErrZeroRead if zero bytes was read.
Types ¶
type MsgBody ¶
type MsgBody interface { encoding.BinaryUnmarshaler encoding.BinaryMarshaler fmt.Stringer // contains filtered or unexported methods }
MsgBody is a wire protocol message body.
type MsgHeader ¶
MsgHeader in general, each message consists of a standard message header followed by request-specific data.
func (*MsgHeader) MarshalBinary ¶
MarshalBinary writes a MsgHeader to a byte array.
type OpMsg ¶
type OpMsg struct { FlagBits OpMsgFlags // contains filtered or unexported fields }
OpMsg is an extensible message format designed to subsume the functionality of other opcodes.
func (*OpMsg) MarshalBinary ¶
MarshalBinary writes an OpMsg to a byte array.
func (*OpMsg) SetSections ¶
func (msg *OpMsg) SetSections(sections ...OpMsgSection) error
SetSections of the OpMsg.
func (*OpMsg) UnmarshalBinary ¶
UnmarshalBinary reads an OpMsg from a byte array.
type OpMsgFlagBit ¶
type OpMsgFlagBit flagBit
OpMsgFlagBit integer is a bitmask encoding flags that modify the format and behavior of OpMsg.
func (OpMsgFlagBit) String ¶
func (i OpMsgFlagBit) String() string
type OpMsgFlags ¶
type OpMsgFlags flags
OpMsgFlags type unint32.
func (OpMsgFlags) FlagSet ¶
func (f OpMsgFlags) FlagSet(bit OpMsgFlagBit) bool
FlagSet check if flag is set.
func (OpMsgFlags) String ¶
func (f OpMsgFlags) String() string
String returns OpMsgFlags as a string.
type OpMsgSection ¶
type OpMsgSection struct { Kind byte Identifier string Documents []*types.Document // TODO https://github.com/FerretDB/FerretDB/issues/274 }
OpMsgSection is one or more sections contained in an OpMsg.
type OpQuery ¶
type OpQuery struct { Flags OpQueryFlags FullCollectionName string NumberToSkip int32 NumberToReturn int32 Query *types.Document ReturnFieldsSelector *types.Document // may be nil }
OpQuery is used to query the database for documents in a collection.
func (*OpQuery) MarshalBinary ¶
MarshalBinary writes an OpQuery to a byte array.
func (*OpQuery) UnmarshalBinary ¶
UnmarshalBinary reads an OpQuery from a byte array.
type OpQueryFlagBit ¶
type OpQueryFlagBit flagBit
OpQueryFlagBit an integer bitmask for the operation.
func (OpQueryFlagBit) String ¶
func (i OpQueryFlagBit) String() string
type OpQueryFlags ¶
type OpQueryFlags flags
OpQueryFlags enables String() and FlagSet methods for flags.
func (OpQueryFlags) FlagSet ¶
func (f OpQueryFlags) FlagSet(bit OpQueryFlagBit) bool
FlagSet return true if flag set.
func (OpQueryFlags) String ¶
func (f OpQueryFlags) String() string
String interface implementation for query flags.
type OpReply ¶
type OpReply struct { ResponseFlags OpReplyFlags CursorID int64 StartingFrom int32 NumberReturned int32 Documents []*types.Document }
OpReply is a message sent by the MongoDB database in response to an OpQuery.
func (*OpReply) MarshalBinary ¶
MarshalBinary writes an OpReply to a byte array.
func (*OpReply) UnmarshalBinary ¶
UnmarshalBinary reads an OpReply from a byte array.
type OpReplyFlagBit ¶
type OpReplyFlagBit flagBit
OpReplyFlagBit is a bit vector to specify OP_REPLY flags.
func (OpReplyFlagBit) String ¶
func (i OpReplyFlagBit) String() string
type OpReplyFlags ¶
type OpReplyFlags flags
OpReplyFlags are OP_REPLY flags.
func (OpReplyFlags) FlagSet ¶
func (f OpReplyFlags) FlagSet(bit OpReplyFlagBit) bool
FlagSet returns true if the flag is set.
func (OpReplyFlags) String ¶
func (f OpReplyFlags) String() string
String returns string value for OP_REPLY.
type Record ¶
type Record struct { // those may be unset if message is invalid Header *MsgHeader Body MsgBody // those are always set HeaderB []byte BodyB []byte }
Record represents a single recorded wire protocol message, loaded from a .bin file.
type ValidationError ¶
type ValidationError struct {
// contains filtered or unexported fields
}
ValidationError is used for reporting validation errors.
func (*ValidationError) Error ¶
func (v *ValidationError) Error() string
Error implements error interface.