Documentation ¶
Overview ¶
Package wire provides MongoDB 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
- func (msg *OpMsg) DecodeDeepDocument() (*wirebson.Document, error)
- func (msg *OpMsg) MarshalBinary() ([]byte, error)
- func (msg *OpMsg) RawDocument() (wirebson.RawDocument, error)
- func (msg *OpMsg) RawSection0() wirebson.RawDocument
- func (msg *OpMsg) RawSections() (wirebson.RawDocument, []byte)
- func (msg *OpMsg) Sections() []OpMsgSection
- func (msg *OpMsg) SetSections(sections ...OpMsgSection) error
- func (msg *OpMsg) String() string
- func (msg *OpMsg) StringIndent() string
- func (msg *OpMsg) UnmarshalBinaryNocopy(b []byte) error
- type OpMsgFlagBit
- type OpMsgFlags
- type OpMsgSection
- type OpQuery
- type OpQueryFlagBit
- type OpQueryFlags
- type OpReply
- func (reply *OpReply) Document() (*wirebson.Document, error)
- func (reply *OpReply) MarshalBinary() ([]byte, error)
- func (reply *OpReply) RawDocument() wirebson.RawDocument
- func (reply *OpReply) SetDocument(doc *wirebson.Document)
- func (reply *OpReply) String() string
- func (reply *OpReply) StringIndent() string
- func (reply *OpReply) UnmarshalBinaryNocopy(b []byte) error
- type OpReplyFlagBit
- type OpReplyFlags
- type Record
Constants ¶
const ( OpCodeReply = OpCode(1) // OP_REPLY OpCodeUpdate = OpCode(2001) // OP_UPDATE OpCodeInsert = OpCode(2002) // OP_INSERT OpCodeGetByOID = OpCode(2003) // OP_GET_BY_OID OpCodeQuery = OpCode(2004) // OP_QUERY OpCodeGetMore = OpCode(2005) // OP_GET_MORE OpCodeDelete = OpCode(2006) // OP_DELETE OpCodeKillCursors = OpCode(2007) // OP_KILL_CURSORS OpCodeCompressed = OpCode(2012) // OP_COMPRESSED OpCodeMsg = OpCode(2013) // OP_MSG )
const ( // MsgHeaderLen is an expected len of the header. MsgHeaderLen = 16 // MaxMsgLen is the maximum message length. MaxMsgLen = 48_000_000 )
const ( OpMsgChecksumPresent = OpMsgFlagBit(1 << 0) // checksumPresent OpMsgMoreToCome = OpMsgFlagBit(1 << 1) // moreToCome OpMsgExhaustAllowed = OpMsgFlagBit(1 << 16) // exhaustAllowed )
const ( OpQueryTailableCursor = OpQueryFlagBit(1 << 1) // TailableCursor OpQuerySlaveOk = OpQueryFlagBit(1 << 2) // SlaveOk OpQueryOplogReplay = OpQueryFlagBit(1 << 3) // OplogReplay OpQueryNoCursorTimeout = OpQueryFlagBit(1 << 4) // NoCursorTimeout OpQueryAwaitData = OpQueryFlagBit(1 << 5) // AwaitData OpQueryExhaust = OpQueryFlagBit(1 << 6) // Exhaust OpQueryPartial = OpQueryFlagBit(1 << 7) // Partial )
const ( OpReplyCursorNotFound = OpReplyFlagBit(1 << 0) // CursorNotFound OpReplyQueryFailure = OpReplyFlagBit(1 << 1) // QueryFailure OpReplyShardConfigStale = OpReplyFlagBit(1 << 2) // ShardConfigStale OpReplyAwaitCapable = OpReplyFlagBit(1 << 3) // AwaitCapable )
Variables ¶
var CheckNaNs bool
CheckNaNs set to true returns an error if float64 NaN value is present in wire messages.
var Debug bool
Debug set to true performs additional slow checks during encoding/decoding that are not normally required. It is exposed mainly to simplify testing.
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.BinaryMarshaler // UnmarshalBinaryNocopy is a variant of [encoding.BinaryUnmarshaler] that does not have to copy the data. UnmarshalBinaryNocopy([]byte) error fmt.Stringer // StringIndent returns an indented string representation for logging. StringIndent() string // contains filtered or unexported methods }
MsgBody is a wire protocol message body.
type MsgHeader ¶
MsgHeader represents common message header.
func (*MsgHeader) MarshalBinary ¶
MarshalBinary writes a MsgHeader to a byte array.
type OpMsg ¶
type OpMsg struct { Flags OpMsgFlags // contains filtered or unexported fields }
OpMsg is the main wire protocol message type.
func MustOpMsg ¶ added in v0.0.3
MustOpMsg creates a message with a single section of kind 0 with a single document constructed from the given pairs of field names and values. It panics on error.
func NewOpMsg ¶
func NewOpMsg(doc wirebson.AnyDocument) (*OpMsg, error)
NewOpMsg creates a message with a single section of kind 0 with a single document.
func (*OpMsg) DecodeDeepDocument ¶ added in v0.0.13
DecodeDeepDocument returns the value of msg as deeply-decoded *wirebson.Document.
The error is returned if msg contains anything other than a single section of kind 0 with a single document.
Most callers do not need deeply-decoded document and should use more effective combination of OpMsg.RawDocument and wirebson.RawDocument.Decode instead.
func (*OpMsg) MarshalBinary ¶
MarshalBinary writes an OpMsg to a byte array.
func (*OpMsg) RawDocument ¶
func (msg *OpMsg) RawDocument() (wirebson.RawDocument, error)
RawDocument returns the value of msg as a wirebson.RawDocument.
The error is returned if msg contains anything other than a single section of kind 0 with a single document.
func (*OpMsg) RawSection0 ¶
func (msg *OpMsg) RawSection0() wirebson.RawDocument
RawSection0 returns the value of first section with kind 0.
Most callers should use OpMsg.RawDocument instead.
func (*OpMsg) RawSections ¶
func (msg *OpMsg) RawSections() (wirebson.RawDocument, []byte)
RawSections returns the value of section with kind 0 and the value of all sections with kind 1.
Most callers should use OpMsg.RawDocument instead.
func (*OpMsg) Sections ¶
func (msg *OpMsg) Sections() []OpMsgSection
Sections returns the sections of the OpMsg.
func (*OpMsg) SetSections ¶
func (msg *OpMsg) SetSections(sections ...OpMsgSection) error
SetSections sets sections of the OpMsg.
func (*OpMsg) StringIndent ¶ added in v0.0.10
StringIndent returns an indented string representation for logging.
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 ¶ added in v0.0.4
OpMsgSection is one or more sections contained in an OpMsg.
func (*OpMsgSection) Documents ¶ added in v0.0.4
func (msg *OpMsgSection) Documents() []wirebson.RawDocument
Documents returns all documents of that section.
type OpQuery ¶
type OpQuery struct { FullCollectionName string Flags OpQueryFlags NumberToSkip int32 NumberToReturn int32 // contains filtered or unexported fields }
OpQuery is a deprecated request message type.
func NewOpQuery ¶
func NewOpQuery(doc wirebson.AnyDocument) (*OpQuery, error)
NewOpQuery creates a new OpQuery message.
func (*OpQuery) MarshalBinary ¶
MarshalBinary implements MsgBody.
func (*OpQuery) StringIndent ¶ added in v0.0.10
StringIndent returns an indented string representation for logging.
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 { CursorID int64 Flags OpReplyFlags StartingFrom int32 // contains filtered or unexported fields }
OpReply is a deprecated response message type.
Only up to one returned document is supported.
func NewOpReply ¶
func NewOpReply(doc wirebson.AnyDocument) (*OpReply, error)
NewOpReply creates a new OpReply message.
func (*OpReply) MarshalBinary ¶
MarshalBinary implements MsgBody.
func (*OpReply) RawDocument ¶
func (reply *OpReply) RawDocument() wirebson.RawDocument
RawDocument returns raw document.
func (*OpReply) SetDocument ¶
SetDocument sets reply document.
func (*OpReply) StringIndent ¶ added in v0.0.10
StringIndent returns an indented string representation for logging.
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.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
util/lazyerrors
Package lazyerrors provides error wrapping with file location.
|
Package lazyerrors provides error wrapping with file location. |
util/must
Package must provides helper functions that panic on error.
|
Package must provides helper functions that panic on error. |
Package wirebson implements encoding and decoding of BSON as defined by https://bsonspec.org/spec.html.
|
Package wirebson implements encoding and decoding of BSON as defined by https://bsonspec.org/spec.html. |
Package wireclient provides low-level wire protocol client.
|
Package wireclient provides low-level wire protocol client. |