2002-03-03 07:06:35 -05:00
|
|
|
\section{Overview}\label{sec:intro}
|
2002-02-12 06:50:54 -05:00
|
|
|
\subsection{What's in sunet?}
|
|
|
|
|
|
|
|
The Scheme Underground Network Package contains a set of libraries for
|
|
|
|
doing Net hacking from Scheme/scsh. It includes:
|
|
|
|
|
|
|
|
\begin{description}
|
|
|
|
\item{An smtp client library.}\\
|
|
|
|
Forge mail from the comfort of your own Scheme process.
|
|
|
|
|
|
|
|
\item{rfc822 header library}\\
|
|
|
|
Read email-style headers. Useful in several contexts (smtp, http,
|
|
|
|
etc.)
|
|
|
|
|
|
|
|
\item{Simple structured HTML output library} \\
|
|
|
|
Balanced delimiters, etc.
|
|
|
|
|
|
|
|
\item{The SU Web server}\\
|
|
|
|
This is a complete implementation of an HTTP 1.0 server in Scheme.
|
|
|
|
The server contains other standalone packages that may separately be
|
|
|
|
of use:
|
|
|
|
\begin{itemize}
|
|
|
|
\item URI and URL parsers and unparsers.
|
|
|
|
\item A library to help writing CGI scripts in Scheme.
|
|
|
|
\item Server extensions for interfacing to CGI scripts.
|
|
|
|
\item Server extensions for uploading Scheme code.
|
|
|
|
\end{itemize}
|
|
|
|
|
|
|
|
The server has three main design goals:
|
|
|
|
\begin{description}
|
|
|
|
\item{Extensibility}\\
|
|
|
|
The server is in fact nothing but extensions, using a mechanism
|
|
|
|
called ``path handlers'' to define URL-specific services. It has a
|
|
|
|
toolkit of services that can be used as-is, extended or built
|
|
|
|
upon. User extensions have exactly the same status as the base
|
|
|
|
services.
|
|
|
|
|
|
|
|
The extension mechanism allows for easy implementation of new
|
|
|
|
services without the overhead of the CGI interface. Since the
|
|
|
|
server is written on top of the Scheme shell, the full set of Unix
|
|
|
|
system calls and program tools is available to the implementor.
|
|
|
|
|
|
|
|
\item{Mobile code}\\
|
|
|
|
The server allows Scheme code to be uploaded for direct execution
|
|
|
|
inside the server. The server has complete control over the code,
|
|
|
|
and can safely execute it in restricted environments that do not
|
|
|
|
provide access to potentially dangerous primitives (such as the
|
|
|
|
``delete file'' procedure.)
|
|
|
|
|
|
|
|
\item{Clarity}\\
|
|
|
|
I\footnote{That's Olin Shivers (\ex{shivers@ai.mit.edu},
|
|
|
|
\ex{http://www.\ob{}ai.\ob{}mit.\ob{}edu/\ob{}people/\ob{}shivers/}).
|
|
|
|
For the rest of the documentation, if not mentioned otherwise,
|
|
|
|
`I' refers to him.} wrote this server to help myself understand
|
|
|
|
the Web. It is voluminously commented, and I hope it will prove to
|
|
|
|
be an aid in understanding the low-level details of the Web
|
|
|
|
protocols.
|
|
|
|
|
|
|
|
The S.U. server has the ability to upload code from Web clients
|
|
|
|
and execute that code on behalf of the client in a protected
|
|
|
|
environment.
|
|
|
|
|
|
|
|
Some simple documentation on the server is available.
|
|
|
|
\end{description}
|
|
|
|
\end{description}
|
|
|
|
|
|
|
|
|
|
|
|
\subsection{Obtaining the system}
|
|
|
|
|
|
|
|
The network code is available by
|
|
|
|
ftp\footnote{\ex{ftp://ftp-swiss.ai.mit.edu/pub/scsh/contrib/net/net.tar.gz}}.
|
|
|
|
To run the server, you need our 0.6 release of
|
|
|
|
scsh\footnote{http://www.scsh.net}. Beyond actually running the
|
|
|
|
server, the separate parser libraries and other utilites may be of use
|
|
|
|
as separate modules.
|
|
|
|
|
|
|
|
The sunet package contains following parts:
|
|
|
|
%
|
|
|
|
\begin{itemize}
|
|
|
|
\item Several servers (HTTP, CGI, FTP)
|
|
|
|
\item Several clients (to FTP, SMTP, POP3, NTP)
|
|
|
|
\item procedures to handle URIs
|
|
|
|
\item procedures to handle RFC822 headers
|
|
|
|
\item analogue of \verb|ls| for scsh
|
|
|
|
\item {\dots}
|
|
|
|
\end{itemize}
|
|
|
|
|
|
|
|
\subsection{What is in this docu?}
|
|
|
|
%
|
|
|
|
Unfortunately not all parts of sunet are documented here. If you miss
|
|
|
|
something, have a look in the source files -- they are alle well
|
|
|
|
documented (I hope so!).
|
|
|
|
|
|
|
|
Currently the ftp server, the ftp client, the modules containing the
|
|
|
|
procedures handling URIs and URLs, the module handling RFC~822
|
|
|
|
headers, the netrc package, the save evaluation environment
|
|
|
|
\ex{toothless\=eval} and the obsolete library for using strings are
|
|
|
|
documented.
|
|
|
|
|
|
|
|
\subsection{How to use the modules}
|
|
|
|
%
|
|
|
|
% I think it is a good idea to tell the people how to use
|
|
|
|
% scsh / sunet as the docu of scsh does not really do this
|
|
|
|
% (as long as concerning my experience). Additionally, possible
|
|
|
|
% programmers should be introduced how to create own modules,
|
|
|
|
% including those in sunet.
|
|
|
|
%FIXME
|
|
|
|
\FIXME{Does anybody have a good idea how to tell newbies how to use
|
|
|
|
the packages? I do not feel capable enough for this.}
|
|
|
|
|
|
|
|
For the time being, it may help to look at the following. Scsh is started
|
|
|
|
in the sunet directory. Then, the description file of the modules is
|
|
|
|
loaded and the ftp-module is opened (to use a ftp client). After the
|
|
|
|
things are done, scsh is finished via the \verb|,exit| command.
|
|
|
|
\begin{code}
|
|
|
|
atari-2600[72] scsh-0.6
|
|
|
|
Welcome to scsh 0.6.0 (Chinese Democracy)
|
|
|
|
Type ,? for help.
|
|
|
|
> ,config ,load modules.scm
|
|
|
|
modules.scm
|
|
|
|
> ,open ftp
|
|
|
|
Load structure ftp (y/n)? y
|
|
|
|
[ecm-utilities ecm-utilities.scm]
|
|
|
|
[netrc netrc.scm]
|
|
|
|
[ftp ftp.scm]
|
|
|
|
> ; do something nasty
|
|
|
|
> ,exit
|
|
|
|
atari-2600[73]\end{code}
|
|
|
|
|
|
|
|
%%% Local Variables:
|
|
|
|
%%% mode: latex
|
|
|
|
%%% TeX-master: t
|
|
|
|
%%% End:
|