@@ -172,9 +172,17 @@ func (d *gossipDiscoveryImpl) Connect(member NetworkMember, id identifier) {
172
172
Endpoint : member .Endpoint ,
173
173
PKIid : id .ID ,
174
174
}
175
- req := d .createMembershipRequest (id .SelfOrg ).NoopSign ()
175
+ req , err := d .createMembershipRequest (id .SelfOrg ).NoopSign ()
176
+ if err != nil {
177
+ d .logger .Warning ("Failed creating SignedGossipMessage:" , err )
178
+ continue
179
+ }
176
180
req .Nonce = util .RandomUInt64 ()
177
- req .NoopSign ()
181
+ req , err = req .NoopSign ()
182
+ if err != nil {
183
+ d .logger .Warning ("Failed adding NONCE to SignedGossipMessage" , err )
184
+ continue
185
+ }
178
186
go d .sendUntilAcked (peer , req )
179
187
return
180
188
}
@@ -221,19 +229,16 @@ func (d *gossipDiscoveryImpl) sendUntilAcked(peer *NetworkMember, message *proto
221
229
}
222
230
}
223
231
224
- func (d * gossipDiscoveryImpl ) somePeerIsKnown () bool {
225
- d .lock .RLock ()
226
- defer d .lock .RUnlock ()
227
- return len (d .aliveLastTS ) != 0
228
- }
229
-
230
232
func (d * gossipDiscoveryImpl ) InitiateSync (peerNum int ) {
231
233
if d .toDie () {
232
234
return
233
235
}
234
236
var peers2SendTo []* NetworkMember
235
- memReq := d .createMembershipRequest (true ).NoopSign ()
236
-
237
+ memReq , err := d .createMembershipRequest (true ).NoopSign ()
238
+ if err != nil {
239
+ d .logger .Warning ("Failed creating SignedGossipMessage:" , err )
240
+ return
241
+ }
237
242
d .lock .RLock ()
238
243
239
244
n := d .aliveMembership .Size ()
@@ -404,7 +409,11 @@ func (d *gossipDiscoveryImpl) sendMemResponse(targetMember *proto.Member, intern
404
409
InternalEndpoint : internalEndpoint ,
405
410
}
406
411
407
- memResp := d .createMembershipResponse (targetPeer )
412
+ aliveMsg := d .createAliveMessage (true )
413
+ if aliveMsg == nil {
414
+ return
415
+ }
416
+ memResp := d .createMembershipResponse (aliveMsg , targetPeer )
408
417
if memResp == nil {
409
418
errMsg := `Got a membership request from a peer that shouldn't have sent one: %v, closing connection to the peer as a result.`
410
419
d .logger .Warningf (errMsg , targetMember )
@@ -414,18 +423,22 @@ func (d *gossipDiscoveryImpl) sendMemResponse(targetMember *proto.Member, intern
414
423
415
424
defer d .logger .Debug ("Exiting, replying with" , memResp )
416
425
417
- d . comm . SendToPeer ( targetPeer , (& proto.GossipMessage {
426
+ msg , err := (& proto.GossipMessage {
418
427
Tag : proto .GossipMessage_EMPTY ,
419
428
Nonce : nonce ,
420
429
Content : & proto.GossipMessage_MemRes {
421
430
MemRes : memResp ,
422
431
},
423
- }).NoopSign ())
432
+ }).NoopSign ()
433
+ if err != nil {
434
+ d .logger .Warning ("Failed creating SignedGossipMessage:" , err )
435
+ return
436
+ }
437
+ d .comm .SendToPeer (targetPeer , msg )
424
438
}
425
439
426
- func (d * gossipDiscoveryImpl ) createMembershipResponse (targetMember * NetworkMember ) * proto.MembershipResponse {
440
+ func (d * gossipDiscoveryImpl ) createMembershipResponse (aliveMsg * proto. SignedGossipMessage , targetMember * NetworkMember ) * proto.MembershipResponse {
427
441
shouldBeDisclosed , omitConcealedFields := d .disclosurePolicy (targetMember )
428
- aliveMsg := d .createAliveMessage (true )
429
442
430
443
if ! shouldBeDisclosed (aliveMsg ) {
431
444
return nil
@@ -594,24 +607,29 @@ func (d *gossipDiscoveryImpl) periodicalReconnectToDead() {
594
607
}
595
608
596
609
func (d * gossipDiscoveryImpl ) sendMembershipRequest (member * NetworkMember , includeInternalEndpoint bool ) {
597
- d .comm .SendToPeer (member , d .createMembershipRequest (includeInternalEndpoint ))
610
+ req , err := d .createMembershipRequest (includeInternalEndpoint ).NoopSign ()
611
+ if err != nil {
612
+ d .logger .Error ("Failed creating SignedGossipMessage:" , err )
613
+ return
614
+ }
615
+ d .comm .SendToPeer (member , req )
598
616
}
599
617
600
- func (d * gossipDiscoveryImpl ) createMembershipRequest (includeInternalEndpoint bool ) * proto.SignedGossipMessage {
618
+ func (d * gossipDiscoveryImpl ) createMembershipRequest (includeInternalEndpoint bool ) * proto.GossipMessage {
601
619
req := & proto.MembershipRequest {
602
620
SelfInformation : d .createAliveMessage (includeInternalEndpoint ).Envelope ,
603
621
// TODO: sending the known peers is not secure because the remote peer might shouldn't know
604
622
// TODO: about the known peers. I'm deprecating this until a secure mechanism will be implemented.
605
623
// TODO: See FAB-2570 for tracking this issue.
606
624
Known : [][]byte {},
607
625
}
608
- return ( & proto.GossipMessage {
626
+ return & proto.GossipMessage {
609
627
Tag : proto .GossipMessage_EMPTY ,
610
628
Nonce : uint64 (0 ),
611
629
Content : & proto.GossipMessage_MemReq {
612
630
MemReq : req ,
613
631
},
614
- }). NoopSign ()
632
+ }
615
633
}
616
634
617
635
func (d * gossipDiscoveryImpl ) copyLastSeen (lastSeenMap map [string ]* timestamp ) []NetworkMember {
@@ -693,7 +711,11 @@ func (d *gossipDiscoveryImpl) periodicalSendAlive() {
693
711
for ! d .toDie () {
694
712
d .logger .Debug ("Sleeping" , getAliveTimeInterval ())
695
713
time .Sleep (getAliveTimeInterval ())
696
- d .comm .Gossip (d .createAliveMessage (true ))
714
+ msg := d .createAliveMessage (true )
715
+ if msg == nil {
716
+ return
717
+ }
718
+ d .comm .Gossip (msg )
697
719
}
698
720
}
699
721
@@ -726,9 +748,13 @@ func (d *gossipDiscoveryImpl) createAliveMessage(includeInternalEndpoint bool) *
726
748
},
727
749
}
728
750
751
+ envp := d .crypt .SignMessage (msg2Gossip , internalEndpoint )
752
+ if envp == nil {
753
+ return nil
754
+ }
729
755
signedMsg := & proto.SignedGossipMessage {
730
756
GossipMessage : msg2Gossip ,
731
- Envelope : d . crypt . SignMessage ( msg2Gossip , internalEndpoint ) ,
757
+ Envelope : envp ,
732
758
}
733
759
734
760
if ! includeInternalEndpoint {
0 commit comments