Update domain name to kpe.io
[wol.git] / classes.lisp
1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10; Package: wol -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Name:          classes.lisp
6 ;;;; Purpose:       Classes for Wol library
7 ;;;; Programmer:    Kevin M. Rosenberg
8 ;;;; Date Started:  July 2003
9 ;;;;
10 ;;;; $Id$
11 ;;;;
12 ;;;; This file and Wol are Copyright (c) 2001-2003 by Kevin M. Rosenberg
13 ;;;; *************************************************************************
14
15 (in-package #:wol)
16
17
18 (defclass session-master ()
19   ((lifetime :initarg lifetime :initform nil :accessor lifetime)
20    (cookie-name :initarg cookie-name :accessor cookie-name)
21    (counter :initform 0 :accessor counter)
22    (prefix :initform "/" :accessor prefix)
23    (sessions :initform nil :accessor sessions)))
24
25
26 (defclass websession ()
27   ((key :initarg :key :accessor websession-key)
28    (lastref :initarg :lastref :accessor websession-lastref)
29    (lifetime :initarg :lifetime :initform nil
30              :accessor websession-lifetime)
31    (data :initform nil :accessor websession-data)
32    (method :initarg :method :accessor websession-method :initform nil)
33    (variables :initform (make-hash-table :test 'equal)
34               :accessor websession-variables)))
35
36 (defclass wol-project ()
37   ((name :initarg :name :initform "" :type string :accessor project-name)
38    (project-prefix :initarg :project-prefix :type string
39                    :initform "/" :accessor project-prefix)
40    (map :initarg :map :initform nil :type list :accessor project-map)
41    (hash :initarg :hash :initform nil :accessor project-hash-map)
42    (index :initarg :index :initform "index" :type string
43           :accessor project-index)
44    (server :initarg :server :initform nil :accessor project-server)
45    (session-master :initform (make-instance 'session-master)
46                    :accessor session-master)
47    (connector :initarg :connector :accessor project-connector)))
48
49 (defclass entity ()
50   ((project :initarg :project :accessor entity-project)
51    (generators :initarg :generators :accessor entity-generators
52                :documentation "List of waiting page generators")
53    (aserve-entity :initarg :aserve-entity :initform nil
54                   :accessor entity-aserve-entity)))
55
56
57 (defclass http-request ()
58   ((method  :initarg :method :accessor request-method)
59    (uri  :initarg :uri :accessor request-uri)
60    (decoded-uri-path :initarg :decoded-uri-path
61                      :accessor request-decoded-uri-path)
62    (raw-request :initarg :raw-request :accessor request-raw-request)
63    (raw-uri :initarg :raw-uri :accessor request-raw-uri)
64    (protocol :initarg :protocol :reader request-protocol)
65    (protocol-string :initarg :protocol-string :reader request-protocol-string)
66    (socket :initarg :socket :reader request-socket)
67    (ml-server :initarg :ml-server :reader request-ml-server)
68    (aserve-server :initarg :aserve-server :reader request-aserve-server)
69    (host :initarg :host :accessor request-host)
70    (desired-query :initform nil :accessor request-desired-query
71                   :documentation "type of query alist requested")
72    (posted-content :initarg :posted-content :accessor request-posted-content)
73    (headers :initarg :headers :accessor request-headers)
74    (page :initarg :page :initform nil :accessor request-page)
75    (url-plist :initarg :url-plist :initform nil :accessor request-url-plist)
76    (plist :initarg :plist :initform nil :accessor request-plist)
77    (url-next-plists :initarg :url-next-plists :initform nil
78                 :accessor request-url-next-plists)
79    (uri-query :initarg :uri-query :initform nil
80                 :accessor request-uri-query)
81    (query-alist :initarg :query-alist :initform nil
82                 :accessor request-query-alist)
83    (session :initarg :session :initform nil
84             :accessor websession-from-req)
85    (aserve-request :initarg :aserve-request :initform nil
86                    :accessor aserve-request)
87    ))
88
89 (defvar *reap-interval* 300)
90 (defvar *reaper-process* nil)
91
92 (defvar *active-projects* (make-hash-table :test 'equal))
93
94 (eval-when (:compile-toplevel :load-toplevel :execute)
95   (defvar +plist-header+ "sdata"
96     "string that starts an encoded plist"))
97
98 (defconstant +plist-header-length+ (length +plist-header+))
99
100 (defparameter *wol-version* '(0 1 0))
101
102 (defvar *wol-stream* nil
103   "The output stream for the current request")
104
105 (defconstant +length-session-id+ 24)
106
107 (defvar *req* nil "Current request")
108 (defvar *ent* nil "Current entity")