mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00
188 lines
4.8 KiB
Go
188 lines
4.8 KiB
Go
package protowire
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/app/appmessage"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type converter interface {
|
|
toAppMessage() (appmessage.Message, error)
|
|
}
|
|
|
|
// ToAppMessage converts a KaspadMessage to its appmessage.Message representation
|
|
func (x *KaspadMessage) ToAppMessage() (appmessage.Message, error) {
|
|
return x.Payload.(converter).toAppMessage()
|
|
}
|
|
|
|
// FromAppMessage creates a KaspadMessage from a appmessage.Message
|
|
func FromAppMessage(message appmessage.Message) (*KaspadMessage, error) {
|
|
payload, err := toPayload(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &KaspadMessage{
|
|
Payload: payload,
|
|
}, nil
|
|
}
|
|
|
|
func toPayload(message appmessage.Message) (isKaspadMessage_Payload, error) {
|
|
switch message := message.(type) {
|
|
case *appmessage.MsgAddresses:
|
|
payload := new(KaspadMessage_Addresses)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgBlock:
|
|
payload := new(KaspadMessage_Block)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgRequestBlockLocator:
|
|
payload := new(KaspadMessage_RequestBlockLocator)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgBlockLocator:
|
|
payload := new(KaspadMessage_BlockLocator)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgRequestAddresses:
|
|
payload := new(KaspadMessage_RequestAddresses)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgRequestIBDBlocks:
|
|
payload := new(KaspadMessage_RequestIBDBlocks)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgRequestNextIBDBlocks:
|
|
payload := new(KaspadMessage_RequestNextIBDBlocks)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgDoneIBDBlocks:
|
|
payload := new(KaspadMessage_DoneIBDBlocks)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgRequestRelayBlocks:
|
|
payload := new(KaspadMessage_RequestRelayBlocks)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgRequestSelectedTip:
|
|
payload := new(KaspadMessage_RequestSelectedTip)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgRequestTransactions:
|
|
payload := new(KaspadMessage_RequestTransactions)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgTransactionNotFound:
|
|
payload := new(KaspadMessage_TransactionNotFound)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgIBDBlock:
|
|
payload := new(KaspadMessage_IbdBlock)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgInvRelayBlock:
|
|
payload := new(KaspadMessage_InvRelayBlock)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgInvTransaction:
|
|
payload := new(KaspadMessage_InvTransactions)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgPing:
|
|
payload := new(KaspadMessage_Ping)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgPong:
|
|
payload := new(KaspadMessage_Pong)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgSelectedTip:
|
|
payload := new(KaspadMessage_SelectedTip)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgTx:
|
|
payload := new(KaspadMessage_Transaction)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgVerAck:
|
|
payload := new(KaspadMessage_Verack)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgVersion:
|
|
payload := new(KaspadMessage_Version)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *appmessage.MsgReject:
|
|
payload := new(KaspadMessage_Reject)
|
|
err := payload.fromAppMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
default:
|
|
return nil, errors.Errorf("unknown message type %T", message)
|
|
}
|
|
}
|