aboutsummaryrefslogtreecommitdiff
path: root/src/gnunet/cmd/peer_mockup/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/gnunet/cmd/peer_mockup/main.go')
-rw-r--r--src/gnunet/cmd/peer_mockup/main.go40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/gnunet/cmd/peer_mockup/main.go b/src/gnunet/cmd/peer_mockup/main.go
index 96f62da..4d29927 100644
--- a/src/gnunet/cmd/peer_mockup/main.go
+++ b/src/gnunet/cmd/peer_mockup/main.go
@@ -15,6 +15,7 @@ import (
15 "gnunet/message" 15 "gnunet/message"
16 "gnunet/service" 16 "gnunet/service"
17 17
18 "github.com/bfix/gospel/crypto/ed25519"
18 "github.com/bfix/gospel/logger" 19 "github.com/bfix/gospel/logger"
19) 20)
20 21
@@ -33,10 +34,9 @@ var (
33 }, 34 },
34 } 35 }
35 // configuration for remote node 36 // configuration for remote node
36 remoteCfg = "3GXXMNb5YpIUO7ejIR2Yy0Cf5texuLfDjHkXcqbPxkc=" 37 remoteCfg = "3GXXMNb5YpIUO7ejIR2Yy0Cf5texuLfDjHkXcqbPxkc="
37 remoteAddr = "udp://172.17.0.5:2086"
38 38
39 // top-level variables used accross functions 39 // top-level variables used across functions
40 local *core.Peer // local peer (with private key) 40 local *core.Peer // local peer (with private key)
41 remote *core.Peer // remote peer 41 remote *core.Peer // remote peer
42 c *core.Core 42 c *core.Core
@@ -79,7 +79,9 @@ func main() {
79 79
80 if !asServer { 80 if !asServer {
81 // we start the message exchange 81 // we start the message exchange
82 c.Send(ctx, remote.GetID(), message.NewTransportTCPWelcomeMsg(c.PeerID())) 82 if err := c.Send(ctx, remote.GetID(), message.NewTransportTCPWelcomeMsg(c.PeerID())); err != nil {
83 fmt.Printf("send message failed: %s", err.Error())
84 }
83 } 85 }
84 86
85 // handle OS signals 87 // handle OS signals
@@ -117,23 +119,27 @@ loop:
117// process incoming messages and send responses; it is used for protocol exploration only. 119// process incoming messages and send responses; it is used for protocol exploration only.
118// it tries to mimick the message flow between "real" GNUnet peers. 120// it tries to mimick the message flow between "real" GNUnet peers.
119func process(ctx context.Context, ev *core.Event) { 121func process(ctx context.Context, ev *core.Event) {
120
121 logger.Printf(logger.DBG, "<<< %s", ev.Msg.String()) 122 logger.Printf(logger.DBG, "<<< %s", ev.Msg.String())
122 123
123 switch msg := ev.Msg.(type) { 124 switch msg := ev.Msg.(type) {
124
125 case *message.TransportTCPWelcomeMsg: 125 case *message.TransportTCPWelcomeMsg:
126 c.Send(ctx, ev.Peer, message.NewTransportPingMsg(ev.Peer, nil)) 126 if err := c.Send(ctx, ev.Peer, message.NewTransportPingMsg(ev.Peer, nil)); err != nil {
127 logger.Printf(logger.ERROR, "TransportTCPWelcomeMsg send failed: %s", err.Error())
128 return
129 }
127 130
128 case *message.HelloMsg: 131 case *message.HelloMsg:
129 132
130 case *message.TransportPingMsg: 133 case *message.TransportPingMsg:
131 mOut := message.NewTransportPongMsg(msg.Challenge, nil) 134 mOut := message.NewTransportPongMsg(msg.Challenge, nil)
132 if err := mOut.Sign(local.PrvKey()); err != nil { 135 if err := mOut.Sign(local.PrvKey()); err != nil {
133 logger.Println(logger.ERROR, "PONG: signing failed") 136 logger.Printf(logger.ERROR, "PONG signing failed: %s", err.Error())
137 return
138 }
139 if err := c.Send(ctx, ev.Peer, mOut); err != nil {
140 logger.Printf(logger.ERROR, "TransportPongMsg send failed: %s", err.Error())
134 return 141 return
135 } 142 }
136 c.Send(ctx, ev.Peer, mOut)
137 logger.Printf(logger.DBG, ">>> %s", mOut) 143 logger.Printf(logger.DBG, ">>> %s", mOut)
138 144
139 case *message.TransportPongMsg: 145 case *message.TransportPongMsg:
@@ -148,7 +154,9 @@ func process(ctx context.Context, ev *core.Event) {
148 case *message.SessionSynMsg: 154 case *message.SessionSynMsg:
149 mOut := message.NewSessionSynAckMsg() 155 mOut := message.NewSessionSynAckMsg()
150 mOut.Timestamp = msg.Timestamp 156 mOut.Timestamp = msg.Timestamp
151 c.Send(ctx, ev.Peer, mOut) 157 if err := c.Send(ctx, ev.Peer, mOut); err != nil {
158 logger.Printf(logger.ERROR, "SessionSynAckMsg send failed: %s", err.Error())
159 }
152 logger.Printf(logger.DBG, ">>> %s", mOut) 160 logger.Printf(logger.DBG, ">>> %s", mOut)
153 161
154 case *message.SessionQuotaMsg: 162 case *message.SessionQuotaMsg:
@@ -157,7 +165,9 @@ func process(ctx context.Context, ev *core.Event) {
157 165
158 case *message.SessionKeepAliveMsg: 166 case *message.SessionKeepAliveMsg:
159 mOut := message.NewSessionKeepAliveRespMsg(msg.Nonce) 167 mOut := message.NewSessionKeepAliveRespMsg(msg.Nonce)
160 c.Send(ctx, ev.Peer, mOut) 168 if err := c.Send(ctx, ev.Peer, mOut); err != nil {
169 logger.Printf(logger.ERROR, "SessionKeepAliveRespMsg send failed: %s", err.Error())
170 }
161 logger.Printf(logger.DBG, ">>> %s", mOut) 171 logger.Printf(logger.DBG, ">>> %s", mOut)
162 172
163 case *message.EphemeralKeyMsg: 173 case *message.EphemeralKeyMsg:
@@ -171,9 +181,13 @@ func process(ctx context.Context, ev *core.Event) {
171 } 181 }
172 remote.SetEphKeyMsg(msg) 182 remote.SetEphKeyMsg(msg)
173 mOut := local.EphKeyMsg() 183 mOut := local.EphKeyMsg()
174 c.Send(ctx, ev.Peer, mOut) 184 if err := c.Send(ctx, ev.Peer, mOut); err != nil {
185 logger.Printf(logger.ERROR, "EphKeyMsg send failed: %s", err.Error())
186 }
175 logger.Printf(logger.DBG, ">>> %s", mOut) 187 logger.Printf(logger.DBG, ">>> %s", mOut)
176 secret = crypto.SharedSecret(local.EphPrvKey(), remote.EphKeyMsg().Public()) 188 pk := ed25519.NewPublicKeyFromBytes(remote.EphKeyMsg().Public().Data)
189 secret = crypto.SharedSecret(local.EphPrvKey(), pk)
190 fmt.Printf("Shared secret: %s\n", secret.String())
177 191
178 default: 192 default:
179 fmt.Printf("!!! %v\n", msg) 193 fmt.Printf("!!! %v\n", msg)