MCPcopy Create free account
hub / github.com/encodeous/nylon / SendHandshakeInitiation

Method SendHandshakeInitiation

polyamide/device/send.go:98–151  ·  view source on GitHub ↗
(isRetry bool)

Source from the content-addressed store, hash-verified

96}
97
98func (peer *Peer) SendHandshakeInitiation(isRetry bool) error {
99 if !isRetry {
100 peer.timers.handshakeAttempts.Store(0)
101 }
102
103 peer.handshake.mutex.RLock()
104 if time.Since(peer.handshake.lastSentHandshake) < RekeyTimeout {
105 peer.handshake.mutex.RUnlock()
106 return nil
107 }
108 peer.handshake.mutex.RUnlock()
109
110 peer.handshake.mutex.Lock()
111 if time.Since(peer.handshake.lastSentHandshake) < RekeyTimeout {
112 peer.handshake.mutex.Unlock()
113 return nil
114 }
115 peer.handshake.lastSentHandshake = time.Now()
116 peer.handshake.mutex.Unlock()
117
118 peer.device.Log.Verbosef("%v - Sending handshake initiation", peer)
119
120 msg, err := peer.device.CreateMessageInitiation(peer)
121 if err != nil {
122 peer.device.Log.Errorf("%v - Failed to create initiation message: %v", peer, err)
123 return err
124 }
125
126 packet := make([]byte, MessageInitiationSize)
127 _ = msg.marshal(packet)
128 peer.cookieGenerator.AddMacs(packet)
129
130 peer.timersAnyAuthenticatedPacketTraversal(false)
131 peer.timersAnyAuthenticatedPacketSent()
132
133 // try a different index every time
134 peer.endpoints.Lock()
135 if len(peer.endpoints.val) == 0 {
136 peer.device.Log.Verbosef("%v - Cannot send handshake initiation, no endpoints available", peer)
137 peer.endpoints.Unlock()
138 return nil
139 }
140 peer.endpoints.lastInitIndex = (peer.endpoints.lastInitIndex + 1) % len(peer.endpoints.val)
141 selEp := []conn.Endpoint{peer.endpoints.val[peer.endpoints.lastInitIndex]}
142 peer.endpoints.Unlock()
143
144 err = peer.SendBuffers([][]byte{packet}, selEp)
145 if err != nil {
146 peer.device.Log.Verbosef("%v - Failed to send handshake initiation: %v", peer, err)
147 }
148 peer.timersHandshakeInitiated()
149
150 return err
151}
152
153func (peer *Peer) SendHandshakeResponse(srcEndpoint conn.Endpoint) error {
154 peer.handshake.mutex.Lock()

Callers 5

keepKeyFreshReceivingMethod · 0.95
keepKeyFreshSendingMethod · 0.95
SendStagedPacketsMethod · 0.95
expiredNewHandshakeFunction · 0.80

Calls 7

SendBuffersMethod · 0.95
AddMacsMethod · 0.80
marshalMethod · 0.45

Tested by

no test coverage detected