Adds pub/sub of incoming Pss messages using event.Feed,
and a websockets interface for pss send and notifications
through persistent connection using rpc.notifier.
Websocket RPC are started automatically on the swarm executable
if the --pss flag is present. If more instances are to be run,
alternate ws ports can be specified with the --pssport flag.
Current implementation also includes a shallow builtin ping/pong handler
with topic "pss" and version 1, to simplify POCs and testing against pss.
This will eventually be removed, so no code should be made dependent on it.
General:
- Message encapsulation is temporary until integration with whisper
Incoming message handling:
- Implements a dispatcher for registering handler functions to pss topics
- Handlers can be any sort of function, and can send/receive on p2p.MsgReadWriter
- Actual p2p.Protocol handling now as pluggable convenience function
Sending and routing:
- Added temporary cache solution based on message hash digest
- Send and forward split up as separate methods
- Send is now payload agnostic (p2p.Protocol replies massaged in p2p.MsgWriter)
Tests:
- TestPssRandom...
Sends PSS between randomly selected nodes in different population magnitudes
- TestPssFullLinearEcho
A->B->C->B->A ping/pong over pss, where A and C are running pss
- TestPssFullRandom50Pct
10 nodes where 5 are running pss, 5 sends to/from random nodes
(messages currently get stuck in kad. routing, discarded by cache block)
- Protocoltester tests status unknown
* Conceals rw in messenger type
* Adds generic remote control for nodes in network sim
* Adds msg type and event to sim, journal
* Msg http output, http options handler
* Msg event added to "cytoscape" for output to visualizer
* Msg event structure changed to fit "cytodata" logic
* Fix for handling CORS/PUT requests:
* fallthrough OPTIONS method handler
* Access-Control-Allow-Methods header added (note that the servermux panics if sent empty method value through http)
Pointer rcvr incompatible with protocols.NewPeer
p2p: Removed duplicate declaration of Messenger interface
p2p/protocols,swarm/network: Codemap primitive type correction
Codemap was using uint for message types
But Messenger.SendMsg needs uint64
subpackages:
* adapters:
* msgpipes for simulated test connections
* rlpx the RLPx adapter for normal non-test use
* inproc simulated in-process network adapter
* docker placeholder for docker cluster remote adapter
* protocols: easy-to-setup modular protocols
* simulations:
* generic network model
* journal, events, snapshots
* cytoscape visualisation plugin
* resourceful controller suite + REST API server
* example: connectivity UX backend
* testing: test resource drivers
* exchange: trigger/expect style driver for single node and its peers
* sessions: for unit testing protocols and protocol modules
* (network: for network testing, benchmarking, stats, correctness, fault tolerance)
* test peerpool
see more in the README-s in each subpackage
* p2p/server : conn/disconn hooks
* reporter remote client skeleton