Class MysqlMessageFramer

java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.handler.codec.ByteToMessageDecoder
org.mockserver.netty.proxy.BinaryMessageFramer
org.mockserver.netty.proxy.MysqlMessageFramer
All Implemented Interfaces:
io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler

public class MysqlMessageFramer extends BinaryMessageFramer
Cuts a binary connection into the messages of the MySQL client/server protocol, as a client sends them. A packet is a 3-byte little-endian payload length, a 1-byte sequence id, then the payload. A payload of 0xFFFFFF bytes or more is sent as several packets, each full one followed by the next, ending with one shorter than 0xFFFFFF (possibly empty): those packets, headers included, are one message, as they carry one command. Any other packet is a message of its own.

A TLS handshake is looked for only straight after an SSLRequest (a 32-byte payload, sequence id 1, with the CLIENT_SSL capability), as a MySQL packet at a message boundary can start with bytes that look like one.

  • Nested Class Summary

    Nested classes/interfaces inherited from class io.netty.handler.codec.ByteToMessageDecoder

    io.netty.handler.codec.ByteToMessageDecoder.Cumulator

    Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler

    io.netty.channel.ChannelHandler.Sharable
  • Field Summary

    Fields inherited from class org.mockserver.netty.proxy.BinaryMessageFramer

    NOT_YET_KNOWN

    Fields inherited from class io.netty.handler.codec.ByteToMessageDecoder

    COMPOSITE_CUMULATOR, MERGE_CUMULATOR
  • Constructor Summary

    Constructors
    Constructor
    Description
    MysqlMessageFramer(int maxMessageBytes, org.mockserver.logging.MockServerLogger mockServerLogger)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    bytesBeforeTlsMayStart(io.netty.buffer.ByteBuf in, int available)
    A client sends its ClientHello straight after an SSLRequest, without waiting for a reply, so the two can be read together.
    protected long
    messageBytes(io.netty.channel.ChannelHandlerContext ctx, io.netty.buffer.ByteBuf in)
    How many bytes the message that starts at the reader index has, BinaryMessageFramer.NOT_YET_KNOWN while the bytes held cannot say, or anything after BinaryMessageFramer.refuse(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.lang.String).
    protected void
    messageTaken(io.netty.buffer.ByteBuf message)
    Called with each whole message before it is passed on.
    protected boolean
     

    Methods inherited from class org.mockserver.netty.proxy.BinaryMessageFramer

    atMessageBoundary, decode, forConfiguration, maxMessageBytes, refuse, tlsMayStartHere

    Methods inherited from class io.netty.handler.codec.ByteToMessageDecoder

    actualReadableBytes, callDecode, channelInactive, channelRead, channelReadComplete, decodeLast, discardSomeReadBytes, handlerRemoved, handlerRemoved0, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode, userEventTriggered

    Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter

    channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught

    Methods inherited from class io.netty.channel.ChannelHandlerAdapter

    ensureNotSharable, handlerAdded, isSharable

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface io.netty.channel.ChannelHandler

    handlerAdded