github.com/vipernet-xyz/tendermint-core@v0.32.0/abci/types/messages.go (about)

     1  package types
     2  
     3  import (
     4  	"bufio"
     5  	"encoding/binary"
     6  	"io"
     7  
     8  	"github.com/gogo/protobuf/proto"
     9  )
    10  
    11  const (
    12  	maxMsgSize = 104857600 // 100MB
    13  )
    14  
    15  // WriteMessage writes a varint length-delimited protobuf message.
    16  func WriteMessage(msg proto.Message, w io.Writer) error {
    17  	bz, err := proto.Marshal(msg)
    18  	if err != nil {
    19  		return err
    20  	}
    21  	return encodeByteSlice(w, bz)
    22  }
    23  
    24  // ReadMessage reads a varint length-delimited protobuf message.
    25  func ReadMessage(r io.Reader, msg proto.Message) error {
    26  	return readProtoMsg(r, msg, maxMsgSize)
    27  }
    28  
    29  func readProtoMsg(r io.Reader, msg proto.Message, maxSize int) error {
    30  	// binary.ReadVarint takes an io.ByteReader, eg. a bufio.Reader
    31  	reader, ok := r.(*bufio.Reader)
    32  	if !ok {
    33  		reader = bufio.NewReader(r)
    34  	}
    35  	length64, err := binary.ReadVarint(reader)
    36  	if err != nil {
    37  		return err
    38  	}
    39  	length := int(length64)
    40  	if length < 0 || length > maxSize {
    41  		return io.ErrShortBuffer
    42  	}
    43  	buf := make([]byte, length)
    44  	if _, err := io.ReadFull(reader, buf); err != nil {
    45  		return err
    46  	}
    47  	return proto.Unmarshal(buf, msg)
    48  }
    49  
    50  //-----------------------------------------------------------------------
    51  // NOTE: we copied wire.EncodeByteSlice from go-wire rather than keep
    52  // go-wire as a dep
    53  
    54  func encodeByteSlice(w io.Writer, bz []byte) (err error) {
    55  	err = encodeVarint(w, int64(len(bz)))
    56  	if err != nil {
    57  		return
    58  	}
    59  	_, err = w.Write(bz)
    60  	return
    61  }
    62  
    63  func encodeVarint(w io.Writer, i int64) (err error) {
    64  	var buf [10]byte
    65  	n := binary.PutVarint(buf[:], i)
    66  	_, err = w.Write(buf[0:n])
    67  	return
    68  }
    69  
    70  //----------------------------------------
    71  
    72  func ToRequestEcho(message string) *Request {
    73  	return &Request{
    74  		Value: &Request_Echo{&RequestEcho{Message: message}},
    75  	}
    76  }
    77  
    78  func ToRequestFlush() *Request {
    79  	return &Request{
    80  		Value: &Request_Flush{&RequestFlush{}},
    81  	}
    82  }
    83  
    84  func ToRequestInfo(req RequestInfo) *Request {
    85  	return &Request{
    86  		Value: &Request_Info{&req},
    87  	}
    88  }
    89  
    90  func ToRequestSetOption(req RequestSetOption) *Request {
    91  	return &Request{
    92  		Value: &Request_SetOption{&req},
    93  	}
    94  }
    95  
    96  func ToRequestDeliverTx(req RequestDeliverTx) *Request {
    97  	return &Request{
    98  		Value: &Request_DeliverTx{&req},
    99  	}
   100  }
   101  
   102  func ToRequestCheckTx(req RequestCheckTx) *Request {
   103  	return &Request{
   104  		Value: &Request_CheckTx{&req},
   105  	}
   106  }
   107  
   108  func ToRequestCommit() *Request {
   109  	return &Request{
   110  		Value: &Request_Commit{&RequestCommit{}},
   111  	}
   112  }
   113  
   114  func ToRequestQuery(req RequestQuery) *Request {
   115  	return &Request{
   116  		Value: &Request_Query{&req},
   117  	}
   118  }
   119  
   120  func ToRequestInitChain(req RequestInitChain) *Request {
   121  	return &Request{
   122  		Value: &Request_InitChain{&req},
   123  	}
   124  }
   125  
   126  func ToRequestBeginBlock(req RequestBeginBlock) *Request {
   127  	return &Request{
   128  		Value: &Request_BeginBlock{&req},
   129  	}
   130  }
   131  
   132  func ToRequestEndBlock(req RequestEndBlock) *Request {
   133  	return &Request{
   134  		Value: &Request_EndBlock{&req},
   135  	}
   136  }
   137  
   138  //----------------------------------------
   139  
   140  func ToResponseException(errStr string) *Response {
   141  	return &Response{
   142  		Value: &Response_Exception{&ResponseException{Error: errStr}},
   143  	}
   144  }
   145  
   146  func ToResponseEcho(message string) *Response {
   147  	return &Response{
   148  		Value: &Response_Echo{&ResponseEcho{Message: message}},
   149  	}
   150  }
   151  
   152  func ToResponseFlush() *Response {
   153  	return &Response{
   154  		Value: &Response_Flush{&ResponseFlush{}},
   155  	}
   156  }
   157  
   158  func ToResponseInfo(res ResponseInfo) *Response {
   159  	return &Response{
   160  		Value: &Response_Info{&res},
   161  	}
   162  }
   163  
   164  func ToResponseSetOption(res ResponseSetOption) *Response {
   165  	return &Response{
   166  		Value: &Response_SetOption{&res},
   167  	}
   168  }
   169  
   170  func ToResponseDeliverTx(res ResponseDeliverTx) *Response {
   171  	return &Response{
   172  		Value: &Response_DeliverTx{&res},
   173  	}
   174  }
   175  
   176  func ToResponseCheckTx(res ResponseCheckTx) *Response {
   177  	return &Response{
   178  		Value: &Response_CheckTx{&res},
   179  	}
   180  }
   181  
   182  func ToResponseCommit(res ResponseCommit) *Response {
   183  	return &Response{
   184  		Value: &Response_Commit{&res},
   185  	}
   186  }
   187  
   188  func ToResponseQuery(res ResponseQuery) *Response {
   189  	return &Response{
   190  		Value: &Response_Query{&res},
   191  	}
   192  }
   193  
   194  func ToResponseInitChain(res ResponseInitChain) *Response {
   195  	return &Response{
   196  		Value: &Response_InitChain{&res},
   197  	}
   198  }
   199  
   200  func ToResponseBeginBlock(res ResponseBeginBlock) *Response {
   201  	return &Response{
   202  		Value: &Response_BeginBlock{&res},
   203  	}
   204  }
   205  
   206  func ToResponseEndBlock(res ResponseEndBlock) *Response {
   207  	return &Response{
   208  		Value: &Response_EndBlock{&res},
   209  	}
   210  }