mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-13 17:46:39 +00:00

* [NOD-1191] Convert wire protocol to 100% protobuf * [NOD-1191] Simplify wire interface and remove redundant messages * [NOD-1191] Map all proto to wire conversions * [NOD-1203] Create netadapter outside of protocol manager * [NOD-1191] Fix nil errors * [NOD-1191] Fix comments * [NOD-1191] Add converter interface * [NOD-1191] Add missing GetBlockLocator message * [NOD-1191] Change message names that starts with 'get' to 'request' * [NOD-1191] Change message commands values * [NOD-1191] Remove redundant methods * [NOD-1191] Rename message constructors * [NOD-1191] Change message commands to use iota * [NOD-1191] Add missing outputs to protobuf conversion * [NOD-1191] Make block header a required field * [NOD-1191] Rename variables * [NOD-1212] Fix test names * [NOD-1191] Rename flow names * [NOD-1191] Fix infinite loop
160 lines
3.9 KiB
Go
160 lines
3.9 KiB
Go
package protowire
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/wire"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type converter interface {
|
|
toWireMessage() (wire.Message, error)
|
|
}
|
|
|
|
// ToWireMessage converts a KaspadMessage to its wire.Message representation
|
|
func (x *KaspadMessage) ToWireMessage() (wire.Message, error) {
|
|
return x.Payload.(converter).toWireMessage()
|
|
}
|
|
|
|
// FromWireMessage creates a KaspadMessage from a wire.Message
|
|
func FromWireMessage(message wire.Message) (*KaspadMessage, error) {
|
|
payload, err := toPayload(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &KaspadMessage{
|
|
Payload: payload,
|
|
}, nil
|
|
}
|
|
|
|
func toPayload(message wire.Message) (isKaspadMessage_Payload, error) {
|
|
switch message := message.(type) {
|
|
case *wire.MsgAddresses:
|
|
payload := new(KaspadMessage_Addresses)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgBlock:
|
|
payload := new(KaspadMessage_Block)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgRequestBlockLocator:
|
|
payload := new(KaspadMessage_RequestBlockLocator)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgBlockLocator:
|
|
payload := new(KaspadMessage_BlockLocator)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgRequestAddresses:
|
|
payload := new(KaspadMessage_RequestAddresses)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgRequestIBDBlocks:
|
|
payload := new(KaspadMessage_RequestIBDBlocks)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgRequestRelayBlocks:
|
|
payload := new(KaspadMessage_RequestRelayBlocks)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgRequestSelectedTip:
|
|
payload := new(KaspadMessage_RequestSelectedTip)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgRequestTransactions:
|
|
payload := new(KaspadMessage_RequestTransactions)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgIBDBlock:
|
|
payload := new(KaspadMessage_IbdBlock)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgInvRelayBlock:
|
|
payload := new(KaspadMessage_InvRelayBlock)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgInvTransaction:
|
|
payload := new(KaspadMessage_InvTransactions)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgPing:
|
|
payload := new(KaspadMessage_Ping)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgPong:
|
|
payload := new(KaspadMessage_Pong)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgSelectedTip:
|
|
payload := new(KaspadMessage_SelectedTip)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgTx:
|
|
payload := new(KaspadMessage_Transaction)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgVerAck:
|
|
payload := new(KaspadMessage_Verack)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
case *wire.MsgVersion:
|
|
payload := new(KaspadMessage_Version)
|
|
err := payload.fromWireMessage(message)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return payload, nil
|
|
default:
|
|
return nil, errors.Errorf("unknown message type %T", message)
|
|
}
|
|
}
|