github.com/vipernet-xyz/tm@v0.34.24/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  func ToRequestListSnapshots(req RequestListSnapshots) *Request {
   139  	return &Request{
   140  		Value: &Request_ListSnapshots{&req},
   141  	}
   142  }
   143  
   144  func ToRequestOfferSnapshot(req RequestOfferSnapshot) *Request {
   145  	return &Request{
   146  		Value: &Request_OfferSnapshot{&req},
   147  	}
   148  }
   149  
   150  func ToRequestLoadSnapshotChunk(req RequestLoadSnapshotChunk) *Request {
   151  	return &Request{
   152  		Value: &Request_LoadSnapshotChunk{&req},
   153  	}
   154  }
   155  
   156  func ToRequestApplySnapshotChunk(req RequestApplySnapshotChunk) *Request {
   157  	return &Request{
   158  		Value: &Request_ApplySnapshotChunk{&req},
   159  	}
   160  }
   161  
   162  //----------------------------------------
   163  
   164  func ToResponseException(errStr string) *Response {
   165  	return &Response{
   166  		Value: &Response_Exception{&ResponseException{Error: errStr}},
   167  	}
   168  }
   169  
   170  func ToResponseEcho(message string) *Response {
   171  	return &Response{
   172  		Value: &Response_Echo{&ResponseEcho{Message: message}},
   173  	}
   174  }
   175  
   176  func ToResponseFlush() *Response {
   177  	return &Response{
   178  		Value: &Response_Flush{&ResponseFlush{}},
   179  	}
   180  }
   181  
   182  func ToResponseInfo(res ResponseInfo) *Response {
   183  	return &Response{
   184  		Value: &Response_Info{&res},
   185  	}
   186  }
   187  
   188  func ToResponseSetOption(res ResponseSetOption) *Response {
   189  	return &Response{
   190  		Value: &Response_SetOption{&res},
   191  	}
   192  }
   193  
   194  func ToResponseDeliverTx(res ResponseDeliverTx) *Response {
   195  	return &Response{
   196  		Value: &Response_DeliverTx{&res},
   197  	}
   198  }
   199  
   200  func ToResponseCheckTx(res ResponseCheckTx) *Response {
   201  	return &Response{
   202  		Value: &Response_CheckTx{&res},
   203  	}
   204  }
   205  
   206  func ToResponseCommit(res ResponseCommit) *Response {
   207  	return &Response{
   208  		Value: &Response_Commit{&res},
   209  	}
   210  }
   211  
   212  func ToResponseQuery(res ResponseQuery) *Response {
   213  	return &Response{
   214  		Value: &Response_Query{&res},
   215  	}
   216  }
   217  
   218  func ToResponseInitChain(res ResponseInitChain) *Response {
   219  	return &Response{
   220  		Value: &Response_InitChain{&res},
   221  	}
   222  }
   223  
   224  func ToResponseBeginBlock(res ResponseBeginBlock) *Response {
   225  	return &Response{
   226  		Value: &Response_BeginBlock{&res},
   227  	}
   228  }
   229  
   230  func ToResponseEndBlock(res ResponseEndBlock) *Response {
   231  	return &Response{
   232  		Value: &Response_EndBlock{&res},
   233  	}
   234  }
   235  
   236  func ToResponseListSnapshots(res ResponseListSnapshots) *Response {
   237  	return &Response{
   238  		Value: &Response_ListSnapshots{&res},
   239  	}
   240  }
   241  
   242  func ToResponseOfferSnapshot(res ResponseOfferSnapshot) *Response {
   243  	return &Response{
   244  		Value: &Response_OfferSnapshot{&res},
   245  	}
   246  }
   247  
   248  func ToResponseLoadSnapshotChunk(res ResponseLoadSnapshotChunk) *Response {
   249  	return &Response{
   250  		Value: &Response_LoadSnapshotChunk{&res},
   251  	}
   252  }
   253  
   254  func ToResponseApplySnapshotChunk(res ResponseApplySnapshotChunk) *Response {
   255  	return &Response{
   256  		Value: &Response_ApplySnapshotChunk{&res},
   257  	}
   258  }