github.com/ava-labs/avalanchego@v1.11.11/message/fields.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package message
     5  
     6  import (
     7  	"errors"
     8  	"time"
     9  
    10  	"github.com/ava-labs/avalanchego/ids"
    11  	"github.com/ava-labs/avalanchego/proto/pb/p2p"
    12  )
    13  
    14  var (
    15  	errMissingField = errors.New("message missing field")
    16  
    17  	_ chainIDGetter = (*p2p.GetStateSummaryFrontier)(nil)
    18  	_ chainIDGetter = (*p2p.StateSummaryFrontier)(nil)
    19  	_ chainIDGetter = (*p2p.GetAcceptedStateSummary)(nil)
    20  	_ chainIDGetter = (*p2p.AcceptedStateSummary)(nil)
    21  	_ chainIDGetter = (*p2p.GetAcceptedFrontier)(nil)
    22  	_ chainIDGetter = (*p2p.AcceptedFrontier)(nil)
    23  	_ chainIDGetter = (*p2p.GetAccepted)(nil)
    24  	_ chainIDGetter = (*p2p.Accepted)(nil)
    25  	_ chainIDGetter = (*p2p.GetAncestors)(nil)
    26  	_ chainIDGetter = (*p2p.Ancestors)(nil)
    27  	_ chainIDGetter = (*p2p.Get)(nil)
    28  	_ chainIDGetter = (*p2p.Put)(nil)
    29  	_ chainIDGetter = (*p2p.PushQuery)(nil)
    30  	_ chainIDGetter = (*p2p.PullQuery)(nil)
    31  	_ chainIDGetter = (*p2p.Chits)(nil)
    32  	_ chainIDGetter = (*p2p.AppRequest)(nil)
    33  	_ chainIDGetter = (*p2p.AppResponse)(nil)
    34  	_ chainIDGetter = (*p2p.AppGossip)(nil)
    35  
    36  	_ requestIDGetter = (*p2p.GetStateSummaryFrontier)(nil)
    37  	_ requestIDGetter = (*p2p.StateSummaryFrontier)(nil)
    38  	_ requestIDGetter = (*p2p.GetAcceptedStateSummary)(nil)
    39  	_ requestIDGetter = (*p2p.AcceptedStateSummary)(nil)
    40  	_ requestIDGetter = (*p2p.GetAcceptedFrontier)(nil)
    41  	_ requestIDGetter = (*p2p.AcceptedFrontier)(nil)
    42  	_ requestIDGetter = (*p2p.GetAccepted)(nil)
    43  	_ requestIDGetter = (*p2p.Accepted)(nil)
    44  	_ requestIDGetter = (*p2p.GetAncestors)(nil)
    45  	_ requestIDGetter = (*p2p.Ancestors)(nil)
    46  	_ requestIDGetter = (*p2p.Get)(nil)
    47  	_ requestIDGetter = (*p2p.Put)(nil)
    48  	_ requestIDGetter = (*p2p.PushQuery)(nil)
    49  	_ requestIDGetter = (*p2p.PullQuery)(nil)
    50  	_ requestIDGetter = (*p2p.Chits)(nil)
    51  	_ requestIDGetter = (*p2p.AppRequest)(nil)
    52  	_ requestIDGetter = (*p2p.AppResponse)(nil)
    53  
    54  	_ engineTypeGetter = (*p2p.GetAncestors)(nil)
    55  
    56  	_ deadlineGetter = (*p2p.GetStateSummaryFrontier)(nil)
    57  	_ deadlineGetter = (*p2p.GetAcceptedStateSummary)(nil)
    58  	_ deadlineGetter = (*p2p.GetAcceptedFrontier)(nil)
    59  	_ deadlineGetter = (*p2p.GetAccepted)(nil)
    60  	_ deadlineGetter = (*p2p.GetAncestors)(nil)
    61  	_ deadlineGetter = (*p2p.Get)(nil)
    62  	_ deadlineGetter = (*p2p.PushQuery)(nil)
    63  	_ deadlineGetter = (*p2p.PullQuery)(nil)
    64  	_ deadlineGetter = (*p2p.AppRequest)(nil)
    65  )
    66  
    67  type chainIDGetter interface {
    68  	GetChainId() []byte
    69  }
    70  
    71  func GetChainID(m any) (ids.ID, error) {
    72  	msg, ok := m.(chainIDGetter)
    73  	if !ok {
    74  		return ids.Empty, errMissingField
    75  	}
    76  	chainIDBytes := msg.GetChainId()
    77  	return ids.ToID(chainIDBytes)
    78  }
    79  
    80  type requestIDGetter interface {
    81  	GetRequestId() uint32
    82  }
    83  
    84  func GetRequestID(m any) (uint32, bool) {
    85  	if msg, ok := m.(requestIDGetter); ok {
    86  		requestID := msg.GetRequestId()
    87  		return requestID, true
    88  	}
    89  
    90  	// AppGossip is the only inbound message not containing a requestID. For
    91  	// ease of handling, imagine that it does have a requestID.
    92  	_, ok := m.(*p2p.AppGossip)
    93  	return 0, ok
    94  }
    95  
    96  type engineTypeGetter interface {
    97  	GetEngineType() p2p.EngineType
    98  }
    99  
   100  func GetEngineType(m any) (p2p.EngineType, bool) {
   101  	msg, ok := m.(engineTypeGetter)
   102  	if !ok {
   103  		return p2p.EngineType_ENGINE_TYPE_UNSPECIFIED, false
   104  	}
   105  	return msg.GetEngineType(), true
   106  }
   107  
   108  type deadlineGetter interface {
   109  	GetDeadline() uint64
   110  }
   111  
   112  func GetDeadline(m any) (time.Duration, bool) {
   113  	msg, ok := m.(deadlineGetter)
   114  	if !ok {
   115  		return 0, false
   116  	}
   117  	deadline := msg.GetDeadline()
   118  	return time.Duration(deadline), true
   119  }