changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/lib/pod/client.lisp

changeset 698: 96958d3eb5b0
parent: 35a579313b80
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
165
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
1
 ;;; lib/pod/client.lisp --- Libpod API client
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
2
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
3
 ;;
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
4
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
5
 ;;; Code:
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
6
 (in-package :pod)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
7
 
441
9fa3b9154bb2 add pod/containerfile, rm pod/buildah, some work on zstd
Richard Westhaver <ellis@rwest.io>
parents: 166
diff changeset
8
 (defvar *podman-local-user-socket* (format nil "/var/run/user/~a/podman/podman.sock" (sb-posix:getuid)))
166
5a0bc297ede3 quick refactor
ellis <ellis@rwest.io>
parents: 165
diff changeset
9
 
5a0bc297ede3 quick refactor
ellis <ellis@rwest.io>
parents: 165
diff changeset
10
 (defvar *libpod-api-version* "4.8.2")
5a0bc297ede3 quick refactor
ellis <ellis@rwest.io>
parents: 165
diff changeset
11
 
5a0bc297ede3 quick refactor
ellis <ellis@rwest.io>
parents: 165
diff changeset
12
 ;;; TODO Socket
5a0bc297ede3 quick refactor
ellis <ellis@rwest.io>
parents: 165
diff changeset
13
 (defclass libpod-unix-socket (local-socket) ())
5a0bc297ede3 quick refactor
ellis <ellis@rwest.io>
parents: 165
diff changeset
14
 
5a0bc297ede3 quick refactor
ellis <ellis@rwest.io>
parents: 165
diff changeset
15
 (defclass libpod-tcp-socket (inet-socket) ())
5a0bc297ede3 quick refactor
ellis <ellis@rwest.io>
parents: 165
diff changeset
16
 
165
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
17
 ;;; Client
619
35a579313b80 init ini and vc work
Richard Westhaver <ellis@rwest.io>
parents: 551
diff changeset
18
 (defclass libpod-client ()
165
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
19
   ((socket :initarg :socket 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
20
            :initform (make-instance 'local-socket :type :stream) 
551
83b71948b92c skel containerfile build
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
21
            :type (or local-socket null)
165
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
22
            :accessor client-socket)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
23
    (addr :initarg :addr
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
24
          :initform nil
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
25
          :accessor client-addr)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
26
    (peer :initarg :peer
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
27
          :initform *podman-local-user-socket*
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
28
          :accessor client-peer)))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
29
 
551
83b71948b92c skel containerfile build
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
30
 (defmethod make-load-form ((self libpod-client) &optional env)
83b71948b92c skel containerfile build
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
31
   (declare (ignore env))
83b71948b92c skel containerfile build
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
32
   `(make-instance 'libpod-client :socket nil :addr ,(client-addr self) :peer ,(client-peer self)))
83b71948b92c skel containerfile build
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
33
 
165
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
34
 ;;; Net Client protocol
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
35
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
36
 ;;; Socket Protocol
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
37
 (defmethod socket-connect ((self libpod-client) &rest addr)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
38
   (socket-connect (client-socket self) (or addr (client-peer self))))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
39
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
40
 (defmethod socket-close ((self libpod-client) &key (abort t))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
41
   (socket-close (client-socket self) :abort abort))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
42
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
43
 (defmethod socket-shutdown ((self libpod-client) &key (direction t))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
44
   (socket-shutdown self :direction direction))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
45
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
46
 (defmethod socket-send ((self libpod-client) buffer length 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
47
                         &key address
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
48
                           external-format
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
49
                           oob
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
50
                           eor
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
51
                           dontroute
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
52
                           dontwait
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
53
                           nosignal
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
54
                           confirm
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
55
                           more)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
56
   (socket-send (client-socket self) buffer length 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
57
                :address address
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
58
                :external-format external-format
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
59
                :oob oob
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
60
                :eor eor
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
61
                :dontroute dontroute
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
62
                :dontwait dontwait
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
63
                :nosignal nosignal
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
64
                :confirm confirm
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
65
                :more more))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
66
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
67
 (defmethod socket-receive ((self libpod-client) buffer length 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
68
                         &key (oob t)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
69
                           (peek t)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
70
                           (waitall t)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
71
                           (dontwait t)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
72
                           (element-type 'character))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
73
   (socket-receive (client-socket self) buffer length 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
74
                :element-type element-type
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
75
                :oob oob
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
76
                :dontwait dontwait
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
77
                :waitall waitall
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
78
                :peek peek))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
79
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
80
 (defmethod socket-listen ((self libpod-client) backlog)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
81
   (socket-listen (client-socket self) backlog))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
82
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
83
 (defmethod socket-bind ((self libpod-client) &rest addr)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
84
   (socket-bind (client-socket self) (or addr (client-addr self))))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
85
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
86
 (defmethod socket-accept ((self libpod-client))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
87
   (socket-accept (client-socket self)))
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
88
 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
89
 (defmethod socket-make-stream ((self libpod-client) 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
90
                                &key input output
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
91
                                  (element-type 'character) 
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
92
                                  (external-format :default)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
93
                                  (buffering :full)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
94
                                  timeout
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
95
                                  auto-close
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
96
                                  serve-events)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
97
   (socket-make-stream (client-socket self)
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
98
                       :input input
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
99
                       :output output
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
100
                       :element-type element-type
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
101
                       :external-format external-format
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
102
                       :buffering buffering
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
103
                       :timeout timeout
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
104
                       :auto-close auto-close
fbab9b24fbe6 pod types
ellis <ellis@rwest.io>
parents:
diff changeset
105
                       :serve-events serve-events))
469
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 441
diff changeset
106
 
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 441
diff changeset
107
 (defmacro with-libpod-client ((cvar &optional c) &body body)
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 441
diff changeset
108
   `(let ((,cvar ,(or c (make-instance 'libpod-client))))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 441
diff changeset
109
      (socket-connect ,cvar)
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 441
diff changeset
110
      (unwind-protect (progn ,@body)
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 441
diff changeset
111
        (socket-close ,cvar))))