Blame


1 2277c5d7 2004-03-21 devnull enum
2 2277c5d7 2004-03-21 devnull {
3 2277c5d7 2004-03-21 devnull MaxRpc = 2048, /* max size of any protocol message */
4 2277c5d7 2004-03-21 devnull
5 2277c5d7 2004-03-21 devnull /* keep in sync with rpc.c:/rpcname */
6 2277c5d7 2004-03-21 devnull RpcUnknown = 0, /* Rpc.op */
7 2277c5d7 2004-03-21 devnull RpcAuthinfo,
8 2277c5d7 2004-03-21 devnull RpcAttr,
9 2277c5d7 2004-03-21 devnull RpcRead,
10 2277c5d7 2004-03-21 devnull RpcStart,
11 2277c5d7 2004-03-21 devnull RpcWrite,
12 2277c5d7 2004-03-21 devnull
13 2277c5d7 2004-03-21 devnull /* thread stack size */
14 2277c5d7 2004-03-21 devnull STACK = 8192,
15 2277c5d7 2004-03-21 devnull };
16 2277c5d7 2004-03-21 devnull
17 2277c5d7 2004-03-21 devnull typedef struct Conv Conv;
18 2277c5d7 2004-03-21 devnull typedef struct Key Key;
19 2277c5d7 2004-03-21 devnull typedef struct Logbuf Logbuf;
20 2277c5d7 2004-03-21 devnull typedef struct Proto Proto;
21 2277c5d7 2004-03-21 devnull typedef struct Ring Ring;
22 2277c5d7 2004-03-21 devnull typedef struct Role Role;
23 2277c5d7 2004-03-21 devnull typedef struct Rpc Rpc;
24 2277c5d7 2004-03-21 devnull
25 2277c5d7 2004-03-21 devnull struct Rpc
26 2277c5d7 2004-03-21 devnull {
27 2277c5d7 2004-03-21 devnull int op;
28 2277c5d7 2004-03-21 devnull void *data;
29 2277c5d7 2004-03-21 devnull int count;
30 2277c5d7 2004-03-21 devnull };
31 2277c5d7 2004-03-21 devnull
32 2277c5d7 2004-03-21 devnull struct Conv
33 2277c5d7 2004-03-21 devnull {
34 2277c5d7 2004-03-21 devnull int ref; /* ref count */
35 2277c5d7 2004-03-21 devnull int hangup; /* flag: please hang up */
36 2277c5d7 2004-03-21 devnull int active; /* flag: there is an active thread */
37 2277c5d7 2004-03-21 devnull int done; /* flag: conversation finished successfully */
38 2277c5d7 2004-03-21 devnull ulong tag; /* identifying tag */
39 2277c5d7 2004-03-21 devnull Conv *next; /* in linked list */
40 2277c5d7 2004-03-21 devnull char *sysuser; /* system name for user speaking to us */
41 2277c5d7 2004-03-21 devnull char *state; /* for debugging */
42 2277c5d7 2004-03-21 devnull char statebuf[128]; /* for formatted states */
43 2277c5d7 2004-03-21 devnull char err[ERRMAX]; /* last error */
44 2277c5d7 2004-03-21 devnull
45 2277c5d7 2004-03-21 devnull Attr *attr; /* current attributes */
46 2277c5d7 2004-03-21 devnull Proto *proto; /* protocol */
47 2277c5d7 2004-03-21 devnull
48 2277c5d7 2004-03-21 devnull Channel *rpcwait; /* wait here for an rpc */
49 2277c5d7 2004-03-21 devnull Rpc rpc; /* current rpc. op==RpcUnknown means none */
50 2277c5d7 2004-03-21 devnull char rpcbuf[MaxRpc]; /* buffer for rpc */
51 2277c5d7 2004-03-21 devnull char reply[MaxRpc]; /* buffer for response */
52 2277c5d7 2004-03-21 devnull int nreply; /* count of response */
53 2277c5d7 2004-03-21 devnull void (*kickreply)(Conv*); /* call to send response */
54 2277c5d7 2004-03-21 devnull Req *req; /* 9P call to read response */
55 2277c5d7 2004-03-21 devnull
56 2277c5d7 2004-03-21 devnull Channel *keywait; /* wait here for key confirmation */
57 2277c5d7 2004-03-21 devnull
58 2277c5d7 2004-03-21 devnull };
59 2277c5d7 2004-03-21 devnull
60 2277c5d7 2004-03-21 devnull struct Key
61 2277c5d7 2004-03-21 devnull {
62 2277c5d7 2004-03-21 devnull int ref; /* ref count */
63 2277c5d7 2004-03-21 devnull ulong tag; /* identifying tag: sequence number */
64 2277c5d7 2004-03-21 devnull Attr *attr; /* public attributes */
65 2277c5d7 2004-03-21 devnull Attr *privattr; /* private attributes, like !password */
66 2277c5d7 2004-03-21 devnull Proto *proto; /* protocol owner of key */
67 2277c5d7 2004-03-21 devnull void *priv; /* protocol-specific storage */
68 2277c5d7 2004-03-21 devnull };
69 2277c5d7 2004-03-21 devnull
70 2277c5d7 2004-03-21 devnull struct Logbuf
71 2277c5d7 2004-03-21 devnull {
72 2277c5d7 2004-03-21 devnull Req *wait;
73 2277c5d7 2004-03-21 devnull Req **waitlast;
74 2277c5d7 2004-03-21 devnull int rp;
75 2277c5d7 2004-03-21 devnull int wp;
76 2277c5d7 2004-03-21 devnull char *msg[128];
77 2277c5d7 2004-03-21 devnull };
78 2277c5d7 2004-03-21 devnull
79 2277c5d7 2004-03-21 devnull struct Ring
80 2277c5d7 2004-03-21 devnull {
81 2277c5d7 2004-03-21 devnull Key **key;
82 2277c5d7 2004-03-21 devnull int nkey;
83 2277c5d7 2004-03-21 devnull };
84 2277c5d7 2004-03-21 devnull
85 2277c5d7 2004-03-21 devnull struct Proto
86 2277c5d7 2004-03-21 devnull {
87 2277c5d7 2004-03-21 devnull char *name; /* name of protocol */
88 2277c5d7 2004-03-21 devnull Role *roles; /* list of roles and service functions */
89 2277c5d7 2004-03-21 devnull char *keyprompt; /* required attributes for key proto=name */
90 2277c5d7 2004-03-21 devnull int (*checkkey)(Key*); /* initialize k->priv or reject key */
91 2277c5d7 2004-03-21 devnull void (*closekey)(Key*); /* free k->priv */
92 2277c5d7 2004-03-21 devnull };
93 2277c5d7 2004-03-21 devnull
94 2277c5d7 2004-03-21 devnull struct Role
95 2277c5d7 2004-03-21 devnull {
96 2277c5d7 2004-03-21 devnull char *name; /* name of role */
97 2277c5d7 2004-03-21 devnull int (*fn)(Conv*); /* service function */
98 2277c5d7 2004-03-21 devnull };
99 2277c5d7 2004-03-21 devnull
100 2277c5d7 2004-03-21 devnull extern char *authaddr; /* plan9.c */
101 2277c5d7 2004-03-21 devnull extern int *confirminuse; /* fs.c */
102 2277c5d7 2004-03-21 devnull extern Conv* conv; /* conv.c */
103 2277c5d7 2004-03-21 devnull extern int debug; /* main.c */
104 2277c5d7 2004-03-21 devnull extern char *factname; /* main.c */
105 2277c5d7 2004-03-21 devnull extern Srv fs; /* fs.c */
106 2277c5d7 2004-03-21 devnull extern int *needkeyinuse; /* fs.c */
107 2277c5d7 2004-03-21 devnull extern char *owner; /* main.c */
108 2277c5d7 2004-03-21 devnull extern Proto *prototab[]; /* main.c */
109 2277c5d7 2004-03-21 devnull extern Ring ring; /* key.c */
110 2277c5d7 2004-03-21 devnull extern char *rpcname[]; /* rpc.c */
111 2277c5d7 2004-03-21 devnull
112 2277c5d7 2004-03-21 devnull extern char Easproto[]; /* err.c */
113 2277c5d7 2004-03-21 devnull
114 2277c5d7 2004-03-21 devnull extern Proto apop; /* apop.c */
115 2277c5d7 2004-03-21 devnull extern Proto chap; /* chap.c */
116 2277c5d7 2004-03-21 devnull extern Proto cram; /* cram.c */
117 2277c5d7 2004-03-21 devnull extern Proto mschap; /* mschap.c */
118 2277c5d7 2004-03-21 devnull extern Proto p9any; /* p9any.c */
119 2277c5d7 2004-03-21 devnull extern Proto p9sk1; /* p9sk1.c */
120 2277c5d7 2004-03-21 devnull extern Proto p9sk2; /* p9sk2.c */
121 2277c5d7 2004-03-21 devnull
122 2277c5d7 2004-03-21 devnull /* provided by lib9p */
123 2277c5d7 2004-03-21 devnull #define emalloc emalloc9p
124 2277c5d7 2004-03-21 devnull #define erealloc erealloc9p
125 2277c5d7 2004-03-21 devnull #define estrdup estrdup9p
126 2277c5d7 2004-03-21 devnull
127 2277c5d7 2004-03-21 devnull /* hidden in libauth */
128 2277c5d7 2004-03-21 devnull #define attrfmt _attrfmt
129 2277c5d7 2004-03-21 devnull #define copyattr _copyattr
130 2277c5d7 2004-03-21 devnull #define delattr _delattr
131 2277c5d7 2004-03-21 devnull #define findattr _findattr
132 2277c5d7 2004-03-21 devnull #define freeattr _freeattr
133 2277c5d7 2004-03-21 devnull #define mkattr _mkattr
134 2277c5d7 2004-03-21 devnull #define parseattr _parseattr
135 2277c5d7 2004-03-21 devnull #define strfindattr _strfindattr
136 2277c5d7 2004-03-21 devnull
137 2277c5d7 2004-03-21 devnull extern Attr* addattr(Attr*, char*, ...);
138 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos addattr 2 */
139 2277c5d7 2004-03-21 devnull extern Attr* addattrs(Attr*, Attr*);
140 2277c5d7 2004-03-21 devnull extern Attr* sortattr(Attr*);
141 2277c5d7 2004-03-21 devnull extern int attrnamefmt(Fmt*);
142 2277c5d7 2004-03-21 devnull /* #pragma varargck type "N" Attr* */
143 2277c5d7 2004-03-21 devnull extern int matchattr(Attr*, Attr*, Attr*);
144 2277c5d7 2004-03-21 devnull extern Attr* parseattrfmt(char*, ...);
145 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos parseattrfmt 1 */
146 2277c5d7 2004-03-21 devnull extern Attr* parseattrfmtv(char*, va_list);
147 2277c5d7 2004-03-21 devnull
148 2277c5d7 2004-03-21 devnull extern void confirmflush(Req*);
149 2277c5d7 2004-03-21 devnull extern void confirmread(Req*);
150 2277c5d7 2004-03-21 devnull extern int confirmwrite(char*);
151 2277c5d7 2004-03-21 devnull extern int needkey(Conv*, Attr*);
152 2277c5d7 2004-03-21 devnull extern int badkey(Conv*, Key*, char*, Attr*);
153 2277c5d7 2004-03-21 devnull extern int confirmkey(Conv*, Key*);
154 2277c5d7 2004-03-21 devnull
155 2277c5d7 2004-03-21 devnull extern Conv* convalloc(char*);
156 2277c5d7 2004-03-21 devnull extern void convclose(Conv*);
157 2277c5d7 2004-03-21 devnull extern void convhangup(Conv*);
158 2277c5d7 2004-03-21 devnull extern int convneedkey(Conv*, Attr*);
159 2277c5d7 2004-03-21 devnull extern int convbadkey(Conv*, Key*, char*, Attr*);
160 2277c5d7 2004-03-21 devnull extern int convread(Conv*, void*, int);
161 2277c5d7 2004-03-21 devnull extern int convreadm(Conv*, char**);
162 2277c5d7 2004-03-21 devnull extern int convprint(Conv*, char*, ...);
163 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos convprint 2 */
164 2277c5d7 2004-03-21 devnull extern int convreadfn(Conv*, int(*)(void*, int), char**);
165 2277c5d7 2004-03-21 devnull extern void convreset(Conv*);
166 2277c5d7 2004-03-21 devnull extern int convwrite(Conv*, void*, int);
167 2277c5d7 2004-03-21 devnull
168 2277c5d7 2004-03-21 devnull extern int ctlwrite(char*);
169 2277c5d7 2004-03-21 devnull
170 2277c5d7 2004-03-21 devnull extern char* estrappend(char*, char*, ...);
171 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos estrappend 2 */
172 2277c5d7 2004-03-21 devnull extern int hexparse(char*, uchar*, int);
173 2277c5d7 2004-03-21 devnull
174 2277c5d7 2004-03-21 devnull extern void keyadd(Key*);
175 2277c5d7 2004-03-21 devnull extern Key* keylookup(char*, ...);
176 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos keylookup 1 */
177 2277c5d7 2004-03-21 devnull extern Key* keyfetch(Conv*, char*, ...);
178 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos keyfetch 2 */
179 2277c5d7 2004-03-21 devnull extern void keyclose(Key*);
180 2277c5d7 2004-03-21 devnull extern void keyevict(Conv*, Key*, char*, ...);
181 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos keyevict 3 */
182 2277c5d7 2004-03-21 devnull extern Key* keyreplace(Conv*, Key*, char*, ...);
183 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos keyreplace 3 */
184 2277c5d7 2004-03-21 devnull
185 2277c5d7 2004-03-21 devnull extern void lbkick(Logbuf*);
186 2277c5d7 2004-03-21 devnull extern void lbappend(Logbuf*, char*, ...);
187 2277c5d7 2004-03-21 devnull extern void lbvappend(Logbuf*, char*, va_list);
188 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos lbappend 2 */
189 2277c5d7 2004-03-21 devnull extern void lbread(Logbuf*, Req*);
190 2277c5d7 2004-03-21 devnull extern void lbflush(Logbuf*, Req*);
191 2277c5d7 2004-03-21 devnull extern void flog(char*, ...);
192 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos flog 1 */
193 2277c5d7 2004-03-21 devnull
194 2277c5d7 2004-03-21 devnull extern void logflush(Req*);
195 2277c5d7 2004-03-21 devnull extern void logread(Req*);
196 2277c5d7 2004-03-21 devnull extern void logwrite(Req*);
197 2277c5d7 2004-03-21 devnull
198 2277c5d7 2004-03-21 devnull extern void needkeyread(Req*);
199 2277c5d7 2004-03-21 devnull extern void needkeyflush(Req*);
200 2277c5d7 2004-03-21 devnull extern int needkeywrite(char*);
201 2277c5d7 2004-03-21 devnull extern int needkeyqueue(void);
202 2277c5d7 2004-03-21 devnull
203 2277c5d7 2004-03-21 devnull extern Attr* addcap(Attr*, char*, Ticket*);
204 2277c5d7 2004-03-21 devnull extern Key* plan9authkey(Attr*);
205 2277c5d7 2004-03-21 devnull extern int _authdial(char*, char*);
206 2277c5d7 2004-03-21 devnull
207 2277c5d7 2004-03-21 devnull extern int memrandom(void*, int);
208 2277c5d7 2004-03-21 devnull
209 2277c5d7 2004-03-21 devnull extern Proto* protolookup(char*);
210 2277c5d7 2004-03-21 devnull
211 2277c5d7 2004-03-21 devnull extern char* readcons(char *prompt, char *def, int raw);
212 2277c5d7 2004-03-21 devnull
213 2277c5d7 2004-03-21 devnull extern int rpcwrite(Conv*, void*, int);
214 2277c5d7 2004-03-21 devnull extern void rpcrespond(Conv*, char*, ...);
215 2277c5d7 2004-03-21 devnull /* #pragma varargck argpos rpcrespond 2 */
216 2277c5d7 2004-03-21 devnull extern void rpcrespondn(Conv*, char*, void*, int);
217 2277c5d7 2004-03-21 devnull extern void rpcexec(Conv*);
218 2277c5d7 2004-03-21 devnull
219 2277c5d7 2004-03-21 devnull extern int xioauthdial(char*, char*);
220 2277c5d7 2004-03-21 devnull extern void xioclose(int);
221 2277c5d7 2004-03-21 devnull extern int xiodial(char*, char*, char*, int*);
222 2277c5d7 2004-03-21 devnull extern int xiowrite(int, void*, int);
223 2277c5d7 2004-03-21 devnull extern int xioasrdresp(int, void*, int);
224 2277c5d7 2004-03-21 devnull extern int xioasgetticket(int, char*, char*);