Annotation of libwww/Library/src/HTProt.html, revision 2.4
2.1 frystyk 1: <HTML>
2: <HEAD>
3: <TITLE>Access Scheme Manager</TITLE>
2.3 frystyk 4: <!-- Changed by: Henrik Frystyk Nielsen, 9-Jul-1995 -->
2.1 frystyk 5: <NEXTID N="z11">
6: </HEAD>
7: <BODY>
8:
9: <H1>Access Scheme Manager</H1>
10:
11: <PRE>
12: /*
13: ** (c) COPYRIGHT MIT 1995.
14: ** Please first read the full copyright statement in the file COPYRIGH.
15: */
16: </PRE>
17:
18: This module keeps a list of valid protocol (naming scheme) specifiers
19: with associated access code. New access protocols may be registered at
20: any time.<P>
21:
22: This module is implemented by <A HREF="HTProt.c">HTProt.c</A>, and it
23: is a part of the <A NAME="z10"
2.4 ! frystyk 24: HREF="http://www.w3.org/pub/WWW/Library/">
2.2 frystyk 25: W3C Reference Library</A>. <P>
2.1 frystyk 26:
27: <PRE>
28: #ifndef HTPROT_H
29: #define HTPROT_H
30:
31: #include "HTAccess.h"
32: #include "HTAnchor.h"
33: </PRE>
34:
35: An access scheme is defined by an HTProtocol structure which point to
36: the routines for performing the various logical operations on an
37: object: in HTTP terms, GET, PUT, and POST. The access schemes
38: supported in the Library are initiated automaticly using the function
39: <CODE>HTAccessInit()</CODE> <B>if not</B> defined
40: <CODE>HT_NO_INIT</CODE> <P>
41:
42: Each of these routine takes as a parameter a <A NAME="z2"
43: HREF="HTAccess.html#z1">request structure</A> containing details of
44: the request. When the protocol class routine is called, the anchor
45: element in the request is already valid (made valid by HTAccess).
46:
47: <PRE>
48: typedef enum _HTSocBlock {
49: SOC_BLOCK,
50: SOC_NON_BLOCK
51: } HTSocBlock;
52:
53: typedef struct _HTProtocol {
54: char * name;
55: HTSocBlock block;
56: int (*load) PARAMS((HTRequest * request));
57: HTStream* (*saveStream) PARAMS((HTRequest * request));
58: HTStream* (*postStream) PARAMS((HTRequest * request,
59: HTParentAnchor* postTo));
60: } HTProtocol;
61: </PRE>
62:
63: <H3>Add an Access Scheme</H3>
64:
65: This functions registers a protocol module and binds it to a specific
66: access acheme. For example HTTP.c is bound to http URLs.
67:
68: <PRE>
69: extern BOOL HTProtocol_add PARAMS((HTProtocol * protocol));
70: </PRE>
71:
72: <H3>Get an Access Scheme</H3>
73:
74: This function finds the access scheme that is bound to the anchor's
75: type of URL. Returns YES if found, else NO
76:
77: <PRE>
2.3 frystyk 78: extern BOOL HTProtocol_get PARAMS((HTParentAnchor * anchor));
2.1 frystyk 79: </PRE>
80:
81: <H3>Remove ALL Registered Schemes</H3>
82:
83: This is the garbage collection function. It is called by <A
84: HREF="HTAccess.html#Library">HTLibTerminate</A>
85:
86: <PRE>
87: extern void HTProtocol_deleteAll NOPARAMS;
88: </PRE>
89:
90: <H3>Is the Scheme using Blocking I/O?</H3>
91:
92: A small function to make life easier. Returns <CODE>YES</CODE> or
93: <CODE>NO</CODE>. If the Library is run in non-interactive mode then
94: the function always returns YES;
95:
96: <PRE>
97: #define HTProtocol_isBlocking(me) \
98: ((me) && ((me)->BlockingIO || \
99: ((me)->anchor && (me)->anchor->protocol && \
100: ((HTProtocol*)((me)->anchor->protocol))->block==SOC_BLOCK)))
101: </PRE>
102:
103: <PRE>
104: #endif /* HTPROT_H */
105: </PRE>
106:
107: End of Declaration
108:
109: </BODY>
110: </HTML>
Webmaster