mirror of https://github.com/mabam/CAP.git
140 lines
4.7 KiB
Plaintext
140 lines
4.7 KiB
Plaintext
CAP note: last revision April 1, 1987
|
|
|
|
UNIX Appletalk Session Protocol (ASP) Implementation notes
|
|
|
|
Last revision: February 23, 1988
|
|
Previous revision: April 1, 1987
|
|
|
|
Design document: Inside Appletalk, June 1986.
|
|
|
|
There are two major things to note about this version of ASP.
|
|
|
|
First, it uses a non-standard interface. Second, some of the error
|
|
codes have slightly different meanings. For now, you'll have to go
|
|
the source to get to the interfaces (sorry).
|
|
|
|
This is a preliminary note that defines some of the specifics of the
|
|
CAP version of ASP. Mostly, they are error codes which are added or
|
|
used slighltly differently or out of the specified context. Maybe in
|
|
the future, there will be a more detailed document that will go into
|
|
more depth.
|
|
|
|
SPGetStat
|
|
aspFault - unexpected internal inconsistency - usually bad atp
|
|
completion.
|
|
noATPResource - can't get ATP resources
|
|
SizeErr - request too big (shouldn't happen)
|
|
|
|
SPOpenSession
|
|
aspFault - unexpected internal inconsistency - usually bad atp
|
|
completion.
|
|
noATPResource - can't get ATP resources
|
|
SizeErr - request too big (shouldn't happen)
|
|
|
|
SPCloseSession
|
|
aspFault - unexpected internal inconsistency - usually bad atp
|
|
completion.
|
|
noATPResource - can't get ATP resources
|
|
SizeErr - request too big (shouldn't happen)
|
|
sktClosed - socket already closed (in some way)
|
|
|
|
|
|
SPWrite
|
|
aspFault - unexpected internal inconsistency - usually bad atp
|
|
completion.
|
|
noATPResource - can't get ATP resources
|
|
SizeErr - request too big
|
|
NoAck - no acknowlegment in the specfied timeout
|
|
|
|
SPCommand
|
|
aspFault - unexpected internal inconsistency - usually bad atp
|
|
completion.
|
|
noATPResource - can't get ATP resources
|
|
SizeErr - request too big
|
|
NoAck - no acknowlegment in the specfied timeout
|
|
|
|
SPWrtContinue
|
|
aspFault - unexpected internal inconsistency - usually bad atp
|
|
completion.
|
|
noATPResource - can't get ATP resources
|
|
SizeErr - request too big
|
|
NoAck - no acknowlegment in the specfied timeout
|
|
|
|
SPAttention
|
|
aspFault - unexpected internal inconsistency - usually bad atp
|
|
completion.
|
|
noATPResource - can't get ATP resources
|
|
SizeErr - request too big
|
|
|
|
SPGetStat
|
|
aspFault - unexpected internal inconsistency - usually bad atp
|
|
completion.
|
|
noATPResource - can't get ATP resources
|
|
SizeErr - request too big (Shouldn't happen)
|
|
|
|
|
|
SPWrtReply, SPCmdReply
|
|
noATPResource - can't get ATP resources
|
|
NoAck - No acknowledgement to reply - decided to do this instead
|
|
of closing session (really means no rel received, but should
|
|
close session based on tickle then...)
|
|
|
|
SPGetRequest
|
|
noATPResource - can't get ATP resources
|
|
SessClosed - session closed underneath us
|
|
BadReqRcvd - unexpected request received - please reissue getRequest
|
|
|
|
SPGetSession
|
|
NoMoreSessions - either out of sessions or atp sockets
|
|
SktClosed - SLS closed!!!!!
|
|
|
|
SPInit
|
|
noATPResource - can't get ATP resources
|
|
|
|
|
|
EXTENSIONS
|
|
|
|
* aspInit(n) tells asp to allow up to n sessions (total, not per sls)
|
|
|
|
The SPFork and SPShutdown calls are necessary because the way ASP is
|
|
defined, the client sends tickles to the Server Listener Socket (SLS).
|
|
If one needs to fork off clients to handle ASP connections, then it is
|
|
necessary for the base process to watch for incoming tickles. The
|
|
child process cannot do this since the SLS must not be read from by
|
|
the child (or else the base process will not see the input).
|
|
|
|
* SPFork(srn, hc_tickle, open_tickle) tells asp to fork and leave things
|
|
in the following state:
|
|
In the base process:
|
|
If srn points to a server connection, then the connection is left
|
|
"half-closed". It listens for incoming tickle requests.
|
|
Certain outgoing calls are still allowed (SPClose,
|
|
SPAttention). In all other respects, the connection is deemed
|
|
closed (and in fact, the Sever Session Socket created is
|
|
closed -- SPAttention and SPClose sends out on the SLS when
|
|
half closed). If the srn points to a client connection, the
|
|
connection is torn down.
|
|
In the child process:
|
|
All half closed connections are discarded (without sending
|
|
closes etc). The SLS is discarded.
|
|
|
|
In addition, hc_tickle tells the base process to continue tickling the
|
|
remote (useful if child process may block). (Default is considered
|
|
off since it the parent really shouldn't need to do this, but then
|
|
again this whole exercise shouldn't be necessary). hc stands for the
|
|
half-closed copy of the connection.
|
|
|
|
open_tickle tells the child process whether the child should tickle
|
|
the remote. If the base process does the tickling, it probably isn't
|
|
necessary for the child process to do it... open, of course, stands
|
|
for the "open" copy of the connection.
|
|
|
|
* SPShutdown(srn) finishes closing down a half closed socket.
|
|
|
|
* SPGetNetworkInfo(srn, AddrBlock *addr)
|
|
returns the remote WSS (server) or SSS (client) address. You must
|
|
supply a block that is filled in.
|
|
|
|
|
|
|