mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 23:26:44 +00:00
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
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package ws
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/ethereum/go-ethereum/logger"
|
|
"github.com/ethereum/go-ethereum/logger/glog"
|
|
"github.com/ethereum/go-ethereum/rpc"
|
|
)
|
|
|
|
// Server is the basic configuration needs for the HTTP server and also
|
|
// includes CORS settings.
|
|
type Server struct {
|
|
//Addr string
|
|
CorsString string
|
|
Endpoint string
|
|
}
|
|
|
|
// startWS initializes and starts the websocket RPC endpoint.
|
|
func StartWSServer(apis []rpc.API, server *Server) error {
|
|
|
|
// Generate the whitelist based on the allowed modules
|
|
/*whitelist := make(map[string]bool)
|
|
for _, module := range modules {
|
|
whitelist[module] = true
|
|
}*/
|
|
// Register all the APIs exposed by the services
|
|
handler := rpc.NewServer()
|
|
for _, api := range apis {
|
|
//if whitelist[api.Namespace] || (len(whitelist) == 0 && api.Public) {
|
|
if err := handler.RegisterName(api.Namespace, api.Service); err != nil {
|
|
return err
|
|
}
|
|
glog.V(logger.Debug).Infof("WebSocket registered %T under '%s'", api.Service, api.Namespace)
|
|
//}
|
|
}
|
|
// All APIs registered, start the HTTP listener
|
|
var (
|
|
listener net.Listener
|
|
err error
|
|
)
|
|
if listener, err = net.Listen("tcp", server.Endpoint); err != nil {
|
|
return err
|
|
}
|
|
rpc.NewWSServer(server.CorsString, handler).Serve(listener)
|
|
glog.V(logger.Info).Infof("WebSocket endpoint opened: ws://%s", server.Endpoint)
|
|
|
|
// All listeners booted successfully
|
|
//n.wsEndpoint = endpoint
|
|
//n.wsListener = listener
|
|
//n.wsHandler = handler
|
|
|
|
return nil
|
|
}
|