;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
(defpackage #:services
- (:use #:common-lisp #:mdw.base #:mdw.str #:collect #:net #:anaphora)
- (:export #:serv #:servp #:serv-name #:serv-aliases #:serv-port #:serv-proto
- #:serv-by-name #:serv-by-port #:serv-add #:serv-list))
+ (:use #:common-lisp #:mdw.base #:mdw.str #:collect #:net #:anaphora))
(in-package #:services)
+(export '(serv servp serv-name serv-aliases serv-port serv-proto))
(defstruct (serv (:predicate servp))
"Represents a service entry in /etc/services."
(name :nil :type keyword)
(byport (make-hash-table)))
;; Translation functions.
+ (export 'serv-by-name)
(defun serv-by-name (name &optional proto)
"Look up the service with the given NAME (or alias) and PROTO. If PROTO
is nil, use a default protocol from a built-in list."
(awhen (find-proto proto)
(return it))))))))
+ (export 'serv-by-port)
(defun serv-by-port (port &optional (proto :tcp))
"Look up the service with the given PORT number and PROTO."
(find proto (gethash port byport) :key #'serv-proto))
(push serv (gethash alias byname))))
;; Read the whole damned lot.
+ (export 'serv-list)
(defun serv-list (&key (predicate (constantly t)))
"Return as a list the services which match PREDICATE (default all of
them)."