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

Method IpcHandle

polyamide/device/uapi.go:422–479  ·  view source on GitHub ↗
(socket net.Conn)

Source from the content-addressed store, hash-verified

420}
421
422func (device *Device) IpcHandle(socket net.Conn) {
423 defer socket.Close()
424
425 buffered := func(s io.ReadWriter) *bufio.ReadWriter {
426 reader := bufio.NewReader(s)
427 writer := bufio.NewWriter(s)
428 return bufio.NewReadWriter(reader, writer)
429 }(socket)
430
431 for {
432 op, err := buffered.ReadString('\n')
433 if err != nil {
434 return
435 }
436
437 // handle operation
438 switch op {
439 case "set=1\n":
440 err = device.IpcSetOperation(buffered.Reader)
441 case "get=1\n":
442 var nextByte byte
443 nextByte, err = buffered.ReadByte()
444 if err != nil {
445 return
446 }
447 if nextByte != '\n' {
448 err = ipcErrorf(ipc.IpcErrorInvalid, "trailing character in UAPI get: %q", nextByte)
449 break
450 }
451 err = device.IpcGetOperation(buffered.Writer)
452 default:
453 if fun, ok := device.IpcHandler[op]; ok {
454 err = fun(buffered)
455 break
456 }
457 device.Log.Errorf("invalid UAPI operation: %v", op)
458 return
459 }
460
461 // write status
462 if errors.Is(err, ErrIPCStatusHandled) {
463 err = nil
464 continue
465 }
466 var status *IPCError
467 if err != nil && !errors.As(err, &status) {
468 // shouldn't happen
469 status = ipcErrorf(ipc.IpcErrorUnknown, "other UAPI error: %w", err)
470 }
471 if status != nil {
472 device.Log.Errorf("%v", status)
473 fmt.Fprintf(buffered, "errno=%d\n\n", status.ErrorCode())
474 } else {
475 fmt.Fprintf(buffered, "errno=0\n\n")
476 }
477 buffered.Flush()
478 }
479}

Callers 4

mainFunction · 0.95
mainFunction · 0.95
NewWireGuardDeviceFunction · 0.80

Implementers 4

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

Calls 6

IpcSetOperationMethod · 0.95
IpcGetOperationMethod · 0.95
ErrorCodeMethod · 0.95
ipcErrorfFunction · 0.85
FlushMethod · 0.80
CloseMethod · 0.65