diff --git a/logger/logger.go b/logger/logger.go index a53b6f264..7056018e2 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -46,6 +46,9 @@ var ( txmpLog = BackendLog.Logger("TXMP") utilLog = BackendLog.Logger("UTIL") profLog = BackendLog.Logger("PROF") + protLog = BackendLog.Logger("PROT") + muxxLog = BackendLog.Logger("MUXX") + p2psLog = BackendLog.Logger("P2PS") ) // SubsystemTags is an enum of all sub system tags @@ -67,7 +70,10 @@ var SubsystemTags = struct { SYNC, TXMP, UTIL, - PROF string + PROF, + PROT, + MUXX, + P2PS string }{ ADXR: "ADXR", AMGR: "AMGR", @@ -87,6 +93,9 @@ var SubsystemTags = struct { TXMP: "TXMP", UTIL: "UTIL", PROF: "PROF", + PROT: "PROT", + MUXX: "MUXX", + P2PS: "P2PS", } // subsystemLoggers maps each subsystem identifier to its associated logger. @@ -109,6 +118,9 @@ var subsystemLoggers = map[string]*logs.Logger{ SubsystemTags.TXMP: txmpLog, SubsystemTags.UTIL: utilLog, SubsystemTags.PROF: profLog, + SubsystemTags.PROT: protLog, + SubsystemTags.MUXX: muxxLog, + SubsystemTags.P2PS: p2psLog, } // InitLog attaches log file and error log file to the backend log. diff --git a/messagemux/messagemux.go b/messagemux/messagemux.go new file mode 100644 index 000000000..7434b1cce --- /dev/null +++ b/messagemux/messagemux.go @@ -0,0 +1,8 @@ +package messagemux + +import "github.com/kaspanet/kaspad/wire" + +// Mux represents a p2p message multiplexer. +type Mux interface { + AddFlow(msgTypes []string, ch chan<- wire.Message) +} diff --git a/p2pserver/p2pserver.go b/p2pserver/p2pserver.go new file mode 100644 index 000000000..ce211f083 --- /dev/null +++ b/p2pserver/p2pserver.go @@ -0,0 +1,16 @@ +package p2pserver + +import "github.com/kaspanet/kaspad/wire" + +// Server represents a p2p server. +type Server interface { + Connect(address string) (Connection, error) + Connections() []Connection +} + +// Connection represents a p2p server connection. +type Connection interface { + Send(message wire.Message) error + Receive() (wire.Message, error) + Disconnect() error +} diff --git a/protocol/log.go b/protocol/log.go new file mode 100644 index 000000000..5edc8a400 --- /dev/null +++ b/protocol/log.go @@ -0,0 +1,9 @@ +package protocol + +import ( + "github.com/kaspanet/kaspad/logger" + "github.com/kaspanet/kaspad/util/panics" +) + +var log, _ = logger.Get(logger.SubsystemTags.PROT) +var spawn = panics.GoroutineWrapperFunc(log) diff --git a/protocol/protocol.go b/protocol/protocol.go new file mode 100644 index 000000000..92d29f2e2 --- /dev/null +++ b/protocol/protocol.go @@ -0,0 +1,24 @@ +package protocol + +import ( + "github.com/kaspanet/kaspad/blockdag" + "github.com/kaspanet/kaspad/messagemux" + "github.com/kaspanet/kaspad/p2pserver" + "github.com/kaspanet/kaspad/wire" +) + +// StartProtocol starts the p2p protocol for a given connection +func StartProtocol(server p2pserver.Server, mux messagemux.Mux, connection p2pserver.Connection, + dag *blockdag.BlockDAG) { + + mux.AddFlow([]string{wire.CmdTx}, startDummy(server, connection, dag)) +} + +func startDummy(server p2pserver.Server, connection p2pserver.Connection, dag *blockdag.BlockDAG) chan<- wire.Message { + ch := make(chan wire.Message) + spawn(func() { + for range ch { + } + }) + return ch +}