diff options
Diffstat (limited to 'src/gnunet/service/gns/service.go')
-rw-r--r-- | src/gnunet/service/gns/service.go | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/gnunet/service/gns/service.go b/src/gnunet/service/gns/service.go index 19ddc14..45eb700 100644 --- a/src/gnunet/service/gns/service.go +++ b/src/gnunet/service/gns/service.go | |||
@@ -62,8 +62,6 @@ func NewService(ctx context.Context, c *core.Core) service.Service { | |||
62 | srv := &Service{ | 62 | srv := &Service{ |
63 | Module: *mod, | 63 | Module: *mod, |
64 | } | 64 | } |
65 | srv.ProcessFcn = srv.HandleMessage | ||
66 | |||
67 | // set external function references (external services) | 65 | // set external function references (external services) |
68 | srv.LookupLocal = srv.LookupNamecache | 66 | srv.LookupLocal = srv.LookupNamecache |
69 | srv.StoreLocal = srv.StoreNamecache | 67 | srv.StoreLocal = srv.StoreNamecache |
@@ -98,7 +96,8 @@ func (s *Service) ServeClient(ctx context.Context, id int, mc *service.Connectio | |||
98 | logger.Printf(logger.INFO, "[gns:%d:%d] Received request: %v\n", id, reqID, msg) | 96 | logger.Printf(logger.INFO, "[gns:%d:%d] Received request: %v\n", id, reqID, msg) |
99 | 97 | ||
100 | // handle message | 98 | // handle message |
101 | s.HandleMessage(context.WithValue(ctx, "label", fmt.Sprintf(":%d:%d", id, reqID)), msg, mc) | 99 | valueCtx := context.WithValue(ctx, service.CtxKey("label"), fmt.Sprintf(":%d:%d", id, reqID)) |
100 | s.HandleMessage(valueCtx, nil, msg, mc) | ||
102 | } | 101 | } |
103 | // close client connection | 102 | // close client connection |
104 | mc.Close() | 103 | mc.Close() |
@@ -109,11 +108,11 @@ func (s *Service) ServeClient(ctx context.Context, id int, mc *service.Connectio | |||
109 | } | 108 | } |
110 | 109 | ||
111 | // Handle a single incoming message | 110 | // Handle a single incoming message |
112 | func (s *Service) HandleMessage(ctx context.Context, msg message.Message, back transport.Responder) bool { | 111 | func (s *Service) HandleMessage(ctx context.Context, sender *util.PeerID, msg message.Message, back transport.Responder) bool { |
113 | // assemble log label | 112 | // assemble log label |
114 | label := "" | 113 | label := "" |
115 | if v := ctx.Value("label"); v != nil { | 114 | if v := ctx.Value("label"); v != nil { |
116 | label = v.(string) | 115 | label, _ = v.(string) |
117 | } | 116 | } |
118 | // perform lookup | 117 | // perform lookup |
119 | switch m := msg.(type) { | 118 | switch m := msg.(type) { |
@@ -123,7 +122,7 @@ func (s *Service) HandleMessage(ctx context.Context, msg message.Message, back t | |||
123 | //---------------------------------------------------------- | 122 | //---------------------------------------------------------- |
124 | 123 | ||
125 | // perform lookup on block (locally and remote) | 124 | // perform lookup on block (locally and remote) |
126 | go func(m *message.LookupMsg) { | 125 | go func(m *message.LookupMsg, label string) { |
127 | logger.Printf(logger.INFO, "[gns%s] Lookup request received.\n", label) | 126 | logger.Printf(logger.INFO, "[gns%s] Lookup request received.\n", label) |
128 | resp := message.NewGNSLookupResultMsg(m.ID) | 127 | resp := message.NewGNSLookupResultMsg(m.ID) |
129 | defer func() { | 128 | defer func() { |
@@ -137,7 +136,6 @@ func (s *Service) HandleMessage(ctx context.Context, msg message.Message, back t | |||
137 | logger.Printf(logger.DBG, "[gns%s] Lookup request finished.\n", label) | 136 | logger.Printf(logger.DBG, "[gns%s] Lookup request finished.\n", label) |
138 | }() | 137 | }() |
139 | 138 | ||
140 | label := m.GetName() | ||
141 | kind := NewRRTypeList(enums.GNSType(m.Type)) | 139 | kind := NewRRTypeList(enums.GNSType(m.Type)) |
142 | recset, err := s.Resolve(ctx, label, m.Zone, kind, int(m.Options), 0) | 140 | recset, err := s.Resolve(ctx, label, m.Zone, kind, int(m.Options), 0) |
143 | if err != nil { | 141 | if err != nil { |
@@ -163,11 +161,13 @@ func (s *Service) HandleMessage(ctx context.Context, msg message.Message, back t | |||
163 | // is this the record type we are looking for? | 161 | // is this the record type we are looking for? |
164 | if rec.Type == m.Type || enums.GNSType(m.Type) == enums.GNS_TYPE_ANY { | 162 | if rec.Type == m.Type || enums.GNSType(m.Type) == enums.GNS_TYPE_ANY { |
165 | // add it to the response message | 163 | // add it to the response message |
166 | resp.AddRecord(rec) | 164 | if err := resp.AddRecord(rec); err != nil { |
165 | logger.Printf(logger.ERROR, "[gns%s] failed: %sv", label, err.Error()) | ||
166 | } | ||
167 | } | 167 | } |
168 | } | 168 | } |
169 | } | 169 | } |
170 | }(m) | 170 | }(m, label) |
171 | 171 | ||
172 | default: | 172 | default: |
173 | //---------------------------------------------------------- | 173 | //---------------------------------------------------------- |
@@ -374,7 +374,7 @@ func (s *Service) LookupDHT(ctx context.Context, query blocks.Query) (block bloc | |||
374 | // send DHT GET request and wait for response | 374 | // send DHT GET request and wait for response |
375 | reqGet := message.NewDHTClientGetMsg(query.Key()) | 375 | reqGet := message.NewDHTClientGetMsg(query.Key()) |
376 | reqGet.ID = uint64(util.NextID()) | 376 | reqGet.ID = uint64(util.NextID()) |
377 | reqGet.ReplLevel = uint32(enums.DHT_GNS_REPLICATION_LEVEL) | 377 | reqGet.ReplLevel = uint32(enums.GNS_REPLICATION_LEVEL) |
378 | reqGet.Type = uint32(enums.BLOCK_TYPE_GNS_NAMERECORD) | 378 | reqGet.Type = uint32(enums.BLOCK_TYPE_GNS_NAMERECORD) |
379 | reqGet.Options = uint32(enums.DHT_RO_DEMULTIPLEX_EVERYWHERE) | 379 | reqGet.Options = uint32(enums.DHT_RO_DEMULTIPLEX_EVERYWHERE) |
380 | 380 | ||
@@ -419,7 +419,7 @@ func (s *Service) LookupDHT(ctx context.Context, query blocks.Query) (block bloc | |||
419 | } | 419 | } |
420 | 420 | ||
421 | // get GNSBlock from message | 421 | // get GNSBlock from message |
422 | qGNS := query.(*blocks.GNSQuery) | 422 | qGNS, _ := query.(*blocks.GNSQuery) |
423 | block = new(blocks.GNSBlock) | 423 | block = new(blocks.GNSBlock) |
424 | if err = data.Unmarshal(block, m.Data); err != nil { | 424 | if err = data.Unmarshal(block, m.Data); err != nil { |
425 | logger.Printf(logger.ERROR, "[gns] can't read GNS block: %s\n", err.Error()) | 425 | logger.Printf(logger.ERROR, "[gns] can't read GNS block: %s\n", err.Error()) |