sunet/scheme/httpd/surflets/packages.scm

340 lines
8.8 KiB
Scheme
Raw Normal View History

2003-01-19 11:57:27 -05:00
;; Structures and interfaces for surflets.
;; NOTE: SSAX/lib/packages.scm must be loaded before you can use this
;; downloadable from http://sourceforge.net/project/showfiles.php?group_id=30687
;; (take the r5rs compliant version (ssax-sr5rs-plt200-4.9.tar.gz))
2002-09-13 03:21:19 -04:00
(define-interface rt-module-language-interface
(export ((lambda-interface
with-names-from-rt-structure)
:syntax)
reify-structure
load-structure
load-config-file
rt-structure-binding))
(define-interface rt-modules-interface
(export interface-value-names
reify-structure
load-config-file
rt-structure-binding
load-structure))
(define-structure rt-module-language rt-module-language-interface
(open scheme
rt-modules)
(for-syntax (open scheme
rt-modules))
(begin
(define-syntax lambda-interface
(lambda (expr rename compare)
(let ((%lambda (rename 'lambda))
(interface-name (cadr expr))
(body (cddr expr)))
`(,%lambda ,(interface-value-names interface-name) ,@body))))
2003-01-19 11:57:27 -05:00
;(with-names-from-rt-structure surflet surflet-interface (main))
2002-09-13 03:21:19 -04:00
(define-syntax with-names-from-rt-structure
(lambda (expr rename compare)
(let ((%lambda (rename 'lambda))
(%let (rename 'let))
(%rt-structure-value (rename 'rt-structure-value))
(%rt-structure-binding (rename 'rt-structure-binding))
(rt-structure (cadr expr))
(interface-name (caddr expr))
(body (cdddr expr)))
(let ((ivn (interface-value-names interface-name)))
`(,%let ((,%rt-structure-value ,rt-structure))
((,%lambda ,ivn ,@body)
,@(map (lambda (name)
`(,%rt-structure-binding ,%rt-structure-value ',name))
ivn)))))))))
(define-structure rt-modules rt-modules-interface
(open scheme
meta-types ; syntax-type
interfaces ; for-each-declaration
define-record-types
records
signals
bindings
packages
packages-internal
locations
environments
ensures-loaded
package-commands-internal)
(files rt-module))
2003-01-19 11:57:27 -05:00
(define-interface surflet-handler-interface
(export surflet-handler))
2002-09-13 03:21:19 -04:00
(define-interface surflet-handler/surflets-interface
(export send/suspend ;send and suspend
send/finish ;send and finish
send ;just send (no finish, no suspend)
2003-01-24 11:02:29 -05:00
send-error ;send error response
2003-01-19 11:57:27 -05:00
set-surflet-data!
get-surflet-data
adjust-timeout ;adjusts timeout of current session
;Without `!' because PLT
;doesn't have it.
))
2002-09-13 03:21:19 -04:00
2003-01-19 11:57:27 -05:00
(define-interface surflet-handler/admin-interface
(export get-loaded-surflets
unload-surflet
set-options-session-lifetime
options-session-lifetime
2003-01-19 11:57:27 -05:00
set-options-cache-surflets?
options-cache-surflets?
options-surflet-path
get-sessions
2003-01-19 11:57:27 -05:00
session-surflet-name
session-memo
session-continuation-table
session-continuation-table-lock
session-continuation-counter
delete-session!
session-adjust-timeout!
adjust-timeout
get-continuations
delete-continuation!
instance-session-id
resume-url?
resume-url-ids
resume-url-session-id
resume-url-continuation-id))
(define-interface surflet-handler/responses-interface
(export make-surflet-response
surflet-response?
surflet-response-status
surflet-response-content-type
surflet-response-headers
surflet-response-data))
2002-09-13 03:21:19 -04:00
(define-structures
2003-01-19 11:57:27 -05:00
((surflet-handler surflet-handler-interface)
(surflet-handler/surflets surflet-handler/surflets-interface)
(surflet-handler/admin surflet-handler/admin-interface)
(surflet-handler/responses surflet-handler/responses-interface))
(open httpd-responses ;replies for httpd
httpd-requests ;requests from httpd
surflet-requests ;requests for surflets
httpd-errors ;errors for httpd
2002-09-18 11:32:41 -04:00
uri ;URI-PATH-LIST->PATH
tables ;HASH-TABLES
define-record-types ;DEFINE-RECORD-TYPE
2002-09-13 03:21:19 -04:00
rt-module-language ;get structures dynamically
2002-09-18 11:32:41 -04:00
; srfi-13 ;string
2002-09-13 03:21:19 -04:00
srfi-14 ;CHAR-SET:DIGIT
handle-fatal ;WITH-FATAL-ERROR-HANDLER* et al.
2002-09-18 11:32:41 -04:00
srfi-27 ;random numbers
locks ;MAKE-LOCK et al.
thread-cells ;THREAD-CELL et al.
profiling ;PROFILE-SPACE
httpd-logging ;HTTP-SYSLOG
shift-reset ;SHIFT and RESET
threads ;SLEEP
thread-fluids ;FORK-THREAD
sxml-to-html ;SXML->HTML
scheme-with-scsh ;regexp et al.
srfi-6 ;string-ports
thread-safe-counter
handle-fatal-error
2002-09-13 03:21:19 -04:00
)
(files surflet-handler))
2002-09-13 03:21:19 -04:00
2003-01-19 11:57:27 -05:00
(define-interface surflets-interface
(export send/suspend
send/finish
2002-10-03 07:20:05 -04:00
send
2003-01-24 11:02:29 -05:00
send-error
send-html/suspend
send-html/finish
send-html
form-query
2002-09-29 09:43:39 -04:00
get-bindings
extract-bindings
extract-single-binding
adjust-timeout
make-outdater
(if-outdated :syntax)
show-outdated
generate-input-field-name
make-input-field
make-higher-input-field
make-text-input-field
make-hidden-input-field
make-password-input-field
make-number-input-field
make-textarea-input-field
make-select-input-field
2002-09-27 13:29:31 -04:00
make-checkbox-input-field
make-radio-input-fields
make-submit-button
make-reset-button
make-image-button
input-field-value
raw-input-field-value
2002-10-02 14:22:01 -04:00
input-field-binding
make-address
make-annotated-address
returned-via
returned-via?
(case-returned-via :syntax)
2002-10-02 20:15:44 -04:00
make-callback
2003-01-19 11:57:27 -05:00
set-surflet-data!
get-surflet-data))
2003-01-19 11:57:27 -05:00
(define-structure surflets surflets-interface
(open surflet-handler/surflets
surflet-handler/responses
httpd-responses ; STATUS-CODE
surflet-requests ; HTTP-URL:SEARCH
2002-09-29 09:43:39 -04:00
url ; REQUEST:URL
(subset uri (escape-uri unescape-uri))
parse-html-forms
2002-09-29 09:43:39 -04:00
sxml-to-html ; SXML->HTML
srfi-1 ; FILTER
2002-10-02 20:15:44 -04:00
(subset srfi-13 (string-index))
sxml-tree-trans
define-record-types
weak ;MAKE-WEAK-POINTER
locks
let-opt ;:OPTIONAL
handle-fatal-error
2003-02-19 12:05:16 -05:00
(subset sunet-utilities (get-header)) ; GET-HEADER
scheme-with-scsh)
(files surflets))
2002-09-13 03:21:19 -04:00
2003-01-19 11:57:27 -05:00
(define-interface surflet-interface
(export main)) ; MAIN gets one parameter, the REQUEST
(define-interface shift-reset-interface
(export (reset :syntax)
(shift :syntax)))
(define-structure shift-reset shift-reset-interface
(open scheme
signals
escapes
thread-cells)
(files shift-reset))
(define-interface profiling-interface
(export profile-space
profile-result
profile-results
write-gnuplot-data-file
space-info-pair space-info-symbol
space-info-vector space-info-closure
space-info-location space-info-cell
space-info-channel space-info-port
space-info-ratnum space-info-record
space-info-continuation space-info-extended-number
space-info-template space-info-weak-pointer
space-info-shared-binding space-info-unused-d-header1
space-info-unused-d-header2 space-info-string
space-info-byte-vector space-info-double
space-info-bignum space-info-total
set-space-info-pair! set-space-info-symbol!
set-space-info-vector! set-space-info-closure!
set-space-info-location! set-space-info-cell!
set-space-info-channel! set-space-info-port!
set-space-info-ratnum! set-space-info-record!
set-space-info-continuation! set-space-info-extended-number!
set-space-info-template! set-space-info-weak-pointer!
set-space-info-shared-binding! set-space-info-unused-d-header1!
set-space-info-unused-d-header2! set-space-info-string!
set-space-info-byte-vector! set-space-info-double!
set-space-info-bignum! set-space-info-total!
pure-count pure-bytes
impure-count impure-bytes
total-count total-bytes
))
(define-structure profiling profiling-interface
(open let-opt
define-record-types
spatial
srfi-13
srfi-1
2002-09-18 11:32:41 -04:00
locks
scheme-with-scsh)
(files profile))
2003-01-19 11:57:27 -05:00
(define-interface simple-surflet-api-interface
(export single-query
queries
form-query
inform
final-page
make-password
make-number
make-boolean
make-radio
make-yes-no
extract/single
extract))
2003-01-19 11:57:27 -05:00
(define-structure simple-surflet-api simple-surflet-api-interface
(open scheme-with-scsh
define-record-types
let-opt
2003-01-19 11:57:27 -05:00
surflets
(subset srfi-1 (zip filter find make-list))
handle-fatal-error
)
(files simple-surflet-api))
(define-interface handle-fatal-interface
(export with-fatal-handler*
(with-fatal-handler :syntax)))
(define-structure handle-fatal handle-fatal-interface
(open scheme conditions handle)
(files handle-fatal))
(define-interface thread-safe-counter-interface
(export make-thread-safe-counter
thread-safe-counter-value
thread-safe-counter-next!
thread-safe-counter?))
(define-structure thread-safe-counter thread-safe-counter-interface
(open scheme
locks
define-record-types)
(files thread-safe-counter))
(define-interface surflet-requests-interface
(export make-surflet-request
surflet-request?
surflet-request-request
surflet-request-input-port
surflet-request-method
surflet-request-uri
surflet-request-url
surflet-request-version
surflet-request-headers
surflet-request-socket))
(define-structure surflet-requests surflet-requests-interface
(open scheme
define-record-types
httpd-requests)
(files surflet-request))