(isRetry bool)
| 96 | } |
| 97 | |
| 98 | func (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() |
| 131 | peer.timersAnyAuthenticatedPacketSent() |
| 132 | |
| 133 | err = peer.SendBuffers([][]byte{packet}) |
| 134 | if err != nil { |
| 135 | peer.device.log.Errorf("%v - Failed to send handshake initiation: %v", peer, err) |
| 136 | } |
| 137 | peer.timersHandshakeInitiated() |
| 138 | |
| 139 | return err |
| 140 | } |
| 141 | |
| 142 | func (peer *Peer) SendHandshakeResponse() error { |
| 143 | peer.handshake.mutex.Lock() |
no test coverage detected