9.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. #include <auth.h>
  2. #include <fcall.h>
  3. enum {
  4. NFidHash = 503,
  5. };
  6. typedef struct Con Con;
  7. typedef struct DirBuf DirBuf;
  8. typedef struct Excl Excl;
  9. typedef struct Fid Fid;
  10. typedef struct Fsys Fsys;
  11. typedef struct Msg Msg;
  12. struct Msg {
  13. uchar* data;
  14. u32int msize; /* actual size of data */
  15. Fcall t;
  16. Fcall r;
  17. Con* con;
  18. Msg* anext; /* alloc */
  19. Msg* mnext; /* Con */
  20. Msg* mprev;
  21. Msg* rwnext; /* proc read/write */
  22. int state;
  23. Msg* fnext; /* proc flush */
  24. Msg* fprev;
  25. };
  26. enum {
  27. MsgN = 0,
  28. MsgR = 1,
  29. Msg9 = 2,
  30. MsgW = 3,
  31. MsgF = 4,
  32. };
  33. struct Con {
  34. char* name;
  35. uchar* data; /* max, not negotiated */
  36. int isconsole; /* immutable */
  37. VtLock* lock;
  38. int state;
  39. int fd;
  40. Msg* version;
  41. u32int msize; /* negotiated with Tversion */
  42. VtRendez* rendez;
  43. Con* anext; /* alloc */
  44. Con* cnext; /* in use */
  45. Con* cprev;
  46. VtLock* alock;
  47. int aok; /* authentication done */
  48. VtLock* mlock;
  49. Msg* mhead; /* all Msgs on this connection */
  50. Msg* mtail;
  51. VtRendez* mrendez;
  52. VtLock* wlock;
  53. Msg* whead; /* write queue */
  54. Msg* wtail;
  55. VtRendez* wrendez;
  56. VtLock* fidlock; /* */
  57. Fid* fidhash[NFidHash];
  58. Fid* fhead;
  59. Fid* ftail;
  60. int nfid;
  61. };
  62. enum {
  63. ConDead = 0,
  64. ConNew = 1,
  65. ConDown = 2,
  66. ConInit = 3,
  67. ConUp = 4,
  68. ConMoribund = 5,
  69. };
  70. struct Fid {
  71. VtLock* lock;
  72. Con* con;
  73. u32int fidno;
  74. int ref; /* inc/dec under Con.fidlock */
  75. int flags;
  76. int open;
  77. Fsys* fsys;
  78. File* file;
  79. Qid qid;
  80. char* uid;
  81. char* uname;
  82. DirBuf* db;
  83. Excl* excl;
  84. VtLock* alock; /* Tauth/Tattach */
  85. AuthRpc* rpc;
  86. char* cuname;
  87. Fid* hash; /* lookup by fidno */
  88. Fid* next; /* clunk session with Tversion */
  89. Fid* prev;
  90. };
  91. enum { /* Fid.flags and fidGet(..., flags) */
  92. FidFCreate = 0x01,
  93. FidFWlock = 0x02,
  94. };
  95. enum { /* Fid.open */
  96. FidOCreate = 0x01,
  97. FidORead = 0x02,
  98. FidOWrite = 0x04,
  99. FidORclose = 0x08,
  100. };
  101. /*
  102. * 9p.c
  103. */
  104. extern int (*rFcall[Tmax])(Msg*);
  105. extern int validFileName(char*);
  106. /*
  107. * 9auth.c
  108. */
  109. extern int authCheck(Fcall*, Fid*, Fsys*);
  110. extern int authRead(Fid*, void*, int);
  111. extern int authWrite(Fid*, void*, int);
  112. /*
  113. * 9dir.c
  114. */
  115. extern void dirBufFree(DirBuf*);
  116. extern int dirDe2M(DirEntry*, uchar*, int);
  117. extern int dirRead(Fid*, uchar*, int, vlong);
  118. /*
  119. * 9excl.c
  120. */
  121. extern int exclAlloc(Fid*);
  122. extern void exclFree(Fid*);
  123. extern void exclInit(void);
  124. extern int exclUpdate(Fid*);
  125. /*
  126. * 9fid.c
  127. */
  128. extern void fidClunk(Fid*);
  129. extern void fidClunkAll(Con*);
  130. extern Fid* fidGet(Con*, u32int, int);
  131. extern void fidInit(void);
  132. extern void fidPut(Fid*);
  133. /*
  134. * 9fsys.c
  135. */
  136. extern void fsysFsRlock(Fsys*);
  137. extern void fsysFsRUnlock(Fsys*);
  138. extern Fs* fsysGetFs(Fsys*);
  139. extern Fsys* fsysGet(char*);
  140. extern char* fsysGetName(Fsys*);
  141. extern File* fsysGetRoot(Fsys*, char*);
  142. extern Fsys* fsysIncRef(Fsys*);
  143. extern int fsysInit(void);
  144. extern int fsysNoAuthCheck(Fsys*);
  145. extern int fsysNoPermCheck(Fsys*);
  146. extern void fsysPut(Fsys*);
  147. extern int fsysWstatAllow(Fsys*);
  148. /*
  149. * 9lstn.c
  150. */
  151. extern int lstnInit(void);
  152. /*
  153. * 9proc.c
  154. */
  155. extern Con* conAlloc(int, char*);
  156. extern void conInit(void);
  157. extern void msgFlush(Msg*);
  158. extern void msgInit(void);
  159. /*
  160. * 9srv.c
  161. */
  162. extern int srvInit(void);
  163. /*
  164. * 9user.c
  165. */
  166. extern int groupLeader(char*, char*);
  167. extern int groupMember(char*, char*);
  168. extern int groupWriteMember(char*);
  169. extern char* unameByUid(char*);
  170. extern char* uidByUname(char*);
  171. extern int usersInit(void);
  172. extern int validUserName(char*);
  173. extern char* uidadm;
  174. extern char* unamenone;
  175. extern char* uidnoworld;
  176. /*
  177. * Ccli.c
  178. */
  179. extern int cliAddCmd(char*, int (*)(int, char*[]));
  180. extern int cliError(char*, ...);
  181. extern int cliInit(void);
  182. extern int cliExec(char*);
  183. /*
  184. * Ccmd.c
  185. */
  186. extern int cmdInit(void);
  187. /*
  188. * Ccons.c
  189. */
  190. extern int consPrompt(char*);
  191. extern int consInit(void);
  192. extern int consOpen(int, int, int);
  193. extern int consTTY(void);
  194. extern int consWrite(char*, int);
  195. /*
  196. * Clog.c
  197. */
  198. extern int consPrint(char*, ...);
  199. extern int consVPrint(char*, va_list);
  200. /*
  201. * fossil.c
  202. */
  203. extern int Dflag;