aboutsummaryrefslogtreecommitdiff
path: root/src/gnunet/core/core.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/gnunet/core/core.go')
-rw-r--r--src/gnunet/core/core.go33
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
21import ( 21import (
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
45type 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.
47type EndpointRef struct { 49type 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.
219func (c *Core) Send(ctx context.Context, peer *util.PeerID, msg message.Message) (err error) { 221func (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
259func (c *Core) Learn(ctx context.Context, peer *util.PeerID, addrs []*util.Address) (newPeer bool) { 268func (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
297func (c *Core) Sign(obj crypto.Signable) error { 309func (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
359func (c *Core) dispatch(ev *Event) { 369func (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