Blob


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