Commit a13480f0 authored by Aviv Eyal's avatar Aviv Eyal Committed by Steven Allen
Browse files

Added comments and updated readme

parent 2dbb78f8
...@@ -33,10 +33,19 @@ The example creates two LibP2P Hosts supporting 2 protocols: ping and echo. ...@@ -33,10 +33,19 @@ The example creates two LibP2P Hosts supporting 2 protocols: ping and echo.
Each protocol consists RPC-style requests and respones and each request and response is a typed protobufs message (and a go data object). Each protocol consists RPC-style requests and respones and each request and response is a typed protobufs message (and a go data object).
This is a different pattern then defining a whole p2p protocol as 1 protobuf message with lots of optional fields (as can be observed in various p2p-lib protocols using protobufs such as dht). This is a different pattern then defining a whole p2p protocol as one protobuf message with lots of optional fields (as can be observed in various p2p-lib protocols using protobufs such as dht).
The example shows how to match async received responses with their requests. This is useful when processing a response requires access to the request data. The example shows how to match async received responses with their requests. This is useful when processing a response requires access to the request data.
The idea is to use lib-p2p protocol multiplexing on a per-message basis.
### Features
1. 2 fully implemented protocols using an RPC-like request-response pattern - Ping and Echo
2. Scaffolding for quickly implementing new app-level versioned RPC-like protocols
3. Full authentication of incoming message data by author (who might not be the message's sender peer)
4. Base p2p format in protobufs with fields shared by all protocol messages
5. Full access to request data when processing a response.
## Author ## Author
@avive @avive
......
...@@ -29,6 +29,10 @@ func NewEchoProtocol(node *Node, done chan bool) *EchoProtocol { ...@@ -29,6 +29,10 @@ func NewEchoProtocol(node *Node, done chan bool) *EchoProtocol {
e := EchoProtocol{node: node, requests: make(map[string]*p2p.EchoRequest), done: done} e := EchoProtocol{node: node, requests: make(map[string]*p2p.EchoRequest), done: done}
node.SetStreamHandler(echoRequest, e.onEchoRequest) node.SetStreamHandler(echoRequest, e.onEchoRequest)
node.SetStreamHandler(echoResponse, e.onEchoResponse) node.SetStreamHandler(echoResponse, e.onEchoResponse)
// design note: to implement fire-and-forget style messages you may just skip specifying a response callback.
// a fire-and-forget message will just include a request and not specify a response object
return &e return &e
} }
......
...@@ -35,6 +35,7 @@ func NewNode(host host.Host, done chan bool) *Node { ...@@ -35,6 +35,7 @@ func NewNode(host host.Host, done chan bool) *Node {
func (n *Node) authenticateMessage(message proto.Message, data *p2p.MessageData) bool { func (n *Node) authenticateMessage(message proto.Message, data *p2p.MessageData) bool {
// store a temp ref to signature and remove it from message data // store a temp ref to signature and remove it from message data
// sign is a string to allow easy reset to zero-value (empty string)
sign := data.Sign sign := data.Sign
data.Sign = "" data.Sign = ""
......
...@@ -30,7 +30,8 @@ message PingResponse { ...@@ -30,7 +30,8 @@ message PingResponse {
// response specific data // response specific data
string message = 2; string message = 2;
// ... add any data here
// ... add any additional message data here
} }
//// echo protocol //// echo protocol
...@@ -41,7 +42,8 @@ message EchoRequest { ...@@ -41,7 +42,8 @@ message EchoRequest {
// method specific data // method specific data
string message = 2; string message = 2;
// add any data here....
// add any additional message data here....
} }
message EchoResponse { message EchoResponse {
...@@ -49,5 +51,6 @@ message EchoResponse { ...@@ -49,5 +51,6 @@ message EchoResponse {
// response specific data // response specific data
string message = 2; string message = 2;
// ... add any data here
// ... add any additional message data here....
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment