diff options
Diffstat (limited to 'src/gnunet/core/core.go')
-rw-r--r-- | src/gnunet/core/core.go | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/src/gnunet/core/core.go b/src/gnunet/core/core.go index a117643..46a53a4 100644 --- a/src/gnunet/core/core.go +++ b/src/gnunet/core/core.go | |||
@@ -20,7 +20,6 @@ package core | |||
20 | 20 | ||
21 | import ( | 21 | import ( |
22 | "context" | 22 | "context" |
23 | "encoding/hex" | ||
24 | "errors" | 23 | "errors" |
25 | "gnunet/config" | 24 | "gnunet/config" |
26 | "gnunet/crypto" | 25 | "gnunet/crypto" |
@@ -42,6 +41,9 @@ var ( | |||
42 | ErrCoreNotSent = errors.New("message not sent") | 41 | ErrCoreNotSent = errors.New("message not sent") |
43 | ) | 42 | ) |
44 | 43 | ||
44 | // CtxKey is a value-context key | ||
45 | type CtxKey string | ||
46 | |||
45 | //---------------------------------------------------------------------- | 47 | //---------------------------------------------------------------------- |
46 | // EndpointRef is a reference to an endpoint instance managed by core. | 48 | // EndpointRef is a reference to an endpoint instance managed by core. |
47 | type EndpointRef struct { | 49 | type EndpointRef struct { |
@@ -85,7 +87,7 @@ func NewCore(ctx context.Context, node *config.NodeConfig) (c *Core, err error) | |||
85 | if peer, err = NewLocalPeer(node); err != nil { | 87 | if peer, err = NewLocalPeer(node); err != nil { |
86 | return | 88 | return |
87 | } | 89 | } |
88 | logger.Printf(logger.DBG, "[core] Local node is %s", peer.GetID().String()) | 90 | logger.Printf(logger.INFO, "[core] Local node is %s", peer.GetID().Short()) |
89 | 91 | ||
90 | // create new core instance | 92 | // create new core instance |
91 | incoming := make(chan *transport.Message) | 93 | incoming := make(chan *transport.Message) |
@@ -166,7 +168,7 @@ func (c *Core) pump(ctx context.Context) { | |||
166 | select { | 168 | select { |
167 | // get (next) message from transport | 169 | // get (next) message from transport |
168 | case tm := <-c.incoming: | 170 | case tm := <-c.incoming: |
169 | logger.Printf(logger.DBG, "[core] Message received from %s: %s", tm.Peer, util.Dump(tm.Msg, "json")) | 171 | logger.Printf(logger.DBG, "[core] Message received from %s: %s", tm.Peer.Short(), tm.Msg) |
170 | 172 | ||
171 | // check if peer is already connected (has an entry in PeerAddrist) | 173 | // check if peer is already connected (has an entry in PeerAddrist) |
172 | _, connected := c.connected.Get(tm.Peer.String(), 0) | 174 | _, connected := c.connected.Get(tm.Peer.String(), 0) |
@@ -217,6 +219,14 @@ func (c *Core) Shutdown() { | |||
217 | // Send is a function that allows the local peer to send a protocol | 219 | // Send is a function that allows the local peer to send a protocol |
218 | // message to a remote peer. | 220 | // message to a remote peer. |
219 | func (c *Core) Send(ctx context.Context, peer *util.PeerID, msg message.Message) (err error) { | 221 | func (c *Core) Send(ctx context.Context, peer *util.PeerID, msg message.Message) (err error) { |
222 | // assemble log label | ||
223 | label := "core" | ||
224 | if v := ctx.Value(CtxKey("label")); v != nil { | ||
225 | if s, ok := v.(string); ok && len(s) > 0 { | ||
226 | label = s | ||
227 | } | ||
228 | } | ||
229 | |||
220 | // TODO: select best endpoint protocol for transport; now fixed to IP+UDP | 230 | // TODO: select best endpoint protocol for transport; now fixed to IP+UDP |
221 | netw := "ip+udp" | 231 | netw := "ip+udp" |
222 | 232 | ||
@@ -224,12 +234,12 @@ func (c *Core) Send(ctx context.Context, peer *util.PeerID, msg message.Message) | |||
224 | aList := c.peers.Get(peer, netw) | 234 | aList := c.peers.Get(peer, netw) |
225 | maybe := false // message may be sent... | 235 | maybe := false // message may be sent... |
226 | for _, addr := range aList { | 236 | for _, addr := range aList { |
227 | logger.Printf(logger.INFO, "[core] Trying to send to %s", addr.URI()) | 237 | logger.Printf(logger.INFO, "[%s] Trying to send to %s", label, addr.URI()) |
228 | // send message to address | 238 | // send message to address |
229 | if err = c.SendToAddr(ctx, addr, msg); err != nil { | 239 | if err = c.SendToAddr(ctx, addr, msg); err != nil { |
230 | // if it is possible that the message was not sent, try next address | 240 | // if it is possible that the message was not sent, try next address |
231 | if err != transport.ErrEndpMaybeSent { | 241 | if err != transport.ErrEndpMaybeSent { |
232 | logger.Printf(logger.WARN, "[core] Failed to send to %s: %s", addr.URI(), err.Error()) | 242 | logger.Printf(logger.WARN, "[%s] Failed to send to %s: %s", label, addr.URI(), err.Error()) |
233 | } else { | 243 | } else { |
234 | maybe = true | 244 | maybe = true |
235 | } | 245 | } |
@@ -239,7 +249,6 @@ func (c *Core) Send(ctx context.Context, peer *util.PeerID, msg message.Message) | |||
239 | return | 249 | return |
240 | } | 250 | } |
241 | if maybe { | 251 | if maybe { |
242 | logger.Printf(logger.WARN, "[core] %s", transport.ErrEndpMaybeSent.Error()) | ||
243 | err = nil | 252 | err = nil |
244 | } else { | 253 | } else { |
245 | err = ErrCoreNotSent | 254 | err = ErrCoreNotSent |
@@ -256,7 +265,9 @@ func (c *Core) SendToAddr(ctx context.Context, addr *util.Address, msg message.M | |||
256 | } | 265 | } |
257 | 266 | ||
258 | // Learn (new) addresses for peer | 267 | // Learn (new) addresses for peer |
259 | func (c *Core) Learn(ctx context.Context, peer *util.PeerID, addrs []*util.Address) (newPeer bool) { | 268 | func (c *Core) Learn(ctx context.Context, peer *util.PeerID, addrs []*util.Address, label string) (newPeer bool) { |
269 | logger.Printf(logger.DBG, "[%s] Learning %v for %s", label, addrs, peer.Short()) | ||
270 | |||
260 | // learn all addresses for peer | 271 | // learn all addresses for peer |
261 | newPeer = false | 272 | newPeer = false |
262 | for _, addr := range addrs { | 273 | for _, addr := range addrs { |
@@ -265,7 +276,8 @@ func (c *Core) Learn(ctx context.Context, peer *util.PeerID, addrs []*util.Addre | |||
265 | continue | 276 | continue |
266 | } | 277 | } |
267 | // learn address | 278 | // learn address |
268 | logger.Printf(logger.INFO, "[core] Learning %s for %s (expires %s)", addr.URI(), peer, addr.Expires) | 279 | logger.Printf(logger.INFO, "[%s] Learning %s for %s (expires %s)", |
280 | label, addr.URI(), peer.Short(), addr.Expire) | ||
269 | newPeer = (c.peers.Add(peer, addr) == 1) || newPeer | 281 | newPeer = (c.peers.Add(peer, addr) == 1) || newPeer |
270 | } | 282 | } |
271 | return | 283 | return |
@@ -296,12 +308,10 @@ func (c *Core) PeerID() *util.PeerID { | |||
296 | // Sign a signable onject with private peer key | 308 | // Sign a signable onject with private peer key |
297 | func (c *Core) Sign(obj crypto.Signable) error { | 309 | func (c *Core) Sign(obj crypto.Signable) error { |
298 | sd := obj.SignedData() | 310 | sd := obj.SignedData() |
299 | logger.Printf(logger.DBG, "[core] Signing data '%s'", hex.EncodeToString(sd)) | ||
300 | sig, err := c.local.prv.EdSign(sd) | 311 | sig, err := c.local.prv.EdSign(sd) |
301 | if err != nil { | 312 | if err != nil { |
302 | return err | 313 | return err |
303 | } | 314 | } |
304 | logger.Printf(logger.DBG, "[core] --> signature '%s'", hex.EncodeToString(sig.Bytes())) | ||
305 | return obj.SetSignature(util.NewPeerSignature(sig.Bytes())) | 315 | return obj.SetSignature(util.NewPeerSignature(sig.Bytes())) |
306 | } | 316 | } |
307 | 317 | ||
@@ -357,12 +367,11 @@ func (c *Core) Unregister(name string) *Listener { | |||
357 | 367 | ||
358 | // internal: dispatch event to listeners | 368 | // internal: dispatch event to listeners |
359 | func (c *Core) dispatch(ev *Event) { | 369 | func (c *Core) dispatch(ev *Event) { |
360 | logger.Printf(logger.DBG, "[core] Dispatching %v...", ev) | ||
361 | // dispatch event to listeners | 370 | // dispatch event to listeners |
362 | for _, l := range c.listeners { | 371 | for _, l := range c.listeners { |
363 | if l.filter.CheckEvent(ev.ID) { | 372 | if l.filter.CheckEvent(ev.ID) { |
364 | if ev.ID == EV_MESSAGE { | 373 | if ev.ID == EV_MESSAGE { |
365 | mt := ev.Msg.Header().MsgType | 374 | mt := ev.Msg.Type() |
366 | if mt != 0 && !l.filter.CheckMsgType(mt) { | 375 | if mt != 0 && !l.filter.CheckMsgType(mt) { |
367 | // skip event | 376 | // skip event |
368 | return | 377 | return |