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

Method handlePeerLine

polyamide/device/uapi.go:307–408  ·  view source on GitHub ↗
(peer *ipcSetPeer, key, value string)

Source from the content-addressed store, hash-verified

305}
306
307func (device *Device) handlePeerLine(peer *ipcSetPeer, key, value string) error {
308 switch key {
309 case "update_only":
310 // allow disabling of creation
311 if value != "true" {
312 return ipcErrorf(ipc.IpcErrorInvalid, "failed to set update only, invalid value: %v", value)
313 }
314 if peer.created && !peer.dummy {
315 device.RemovePeer(peer.handshake.remoteStatic)
316 peer.Peer = &Peer{}
317 peer.dummy = true
318 }
319
320 case "remove":
321 // remove currently selected peer from device
322 if value != "true" {
323 return ipcErrorf(ipc.IpcErrorInvalid, "failed to set remove, invalid value: %v", value)
324 }
325 if !peer.dummy {
326 device.Log.Verbosef("%v - UAPI: Removing", peer.Peer)
327 device.RemovePeer(peer.handshake.remoteStatic)
328 }
329 peer.Peer = &Peer{}
330 peer.dummy = true
331
332 case "preshared_key":
333 device.Log.Verbosef("%v - UAPI: Updating preshared key", peer.Peer)
334
335 peer.handshake.mutex.Lock()
336 err := peer.handshake.presharedKey.FromHex(value)
337 peer.handshake.mutex.Unlock()
338
339 if err != nil {
340 return ipcErrorf(ipc.IpcErrorInvalid, "failed to set preshared key: %w", err)
341 }
342
343 case "endpoint":
344 device.Log.Verbosef("%v - UAPI: Updating endpoint", peer.Peer)
345 endpoint, err := device.net.bind.ParseEndpoint(value)
346 if err != nil {
347 return ipcErrorf(ipc.IpcErrorInvalid, "failed to set endpoint %v: %w", value, err)
348 }
349 peer.endpoints.Lock()
350 defer peer.endpoints.Unlock()
351 peer.endpoints.val = []conn.Endpoint{endpoint}
352
353 case "persistent_keepalive_interval":
354 device.Log.Verbosef("%v - UAPI: Updating persistent keepalive interval", peer.Peer)
355
356 secs, err := strconv.ParseUint(value, 10, 16)
357 if err != nil {
358 return ipcErrorf(ipc.IpcErrorInvalid, "failed to set persistent keepalive interval: %w", err)
359 }
360
361 old := peer.persistentKeepaliveInterval.Swap(uint32(secs))
362
363 // Send immediate keepalive if we're turning it on and before it wasn't on.
364 peer.pkaOn = old == 0 && secs != 0

Callers 1

IpcSetOperationMethod · 0.95

Implementers 4

NativeTunpolyamide/tun/tun_linux.go
netTunpolyamide/tun/netstack/tun.go
chTunpolyamide/tun/tuntest/tuntest.go
fakeTUNDeviceSizedpolyamide/device/device_test.go

Calls 8

RemovePeerMethod · 0.95
ipcErrorfFunction · 0.85
SwapMethod · 0.80
RemoveMethod · 0.80
ParseEndpointMethod · 0.65
FromHexMethod · 0.45
RemoveByPeerMethod · 0.45
InsertMethod · 0.45

Tested by

no test coverage detected