]> git.lizzy.rs Git - plan9front.git/blob - sys/include/oventi.h
libmp: remove include of libsec.h
[plan9front.git] / sys / include / oventi.h
1 #pragma lib     "liboventi.a"
2 #pragma src     "/sys/src/liboventi"
3
4 typedef struct VtSession        VtSession;
5 typedef struct VtSha1           VtSha1;
6 typedef struct Packet           Packet;
7 typedef struct VtLock           VtLock;
8 typedef struct VtRendez         VtRendez;
9 typedef struct VtRoot           VtRoot;
10 typedef struct VtEntry          VtEntry;
11 typedef struct VtServerVtbl     VtServerVtbl;
12
13 #pragma incomplete VtSession
14 #pragma incomplete VtSha1
15 #pragma incomplete Packet
16 #pragma incomplete VtLock
17 #pragma incomplete VtRendez
18
19 enum {
20         VtScoreSize     = 20, /* Venti */
21         VtMaxLumpSize   = 56*1024,
22         VtPointerDepth  = 7,    
23         VtEntrySize     = 40,
24         VtRootSize      = 300,
25         VtMaxStringSize = 1000,
26         VtAuthSize      = 1024,  /* size of auth group - in bits - must be multiple of 8 */
27         MaxFragSize     = 9*1024,
28         VtMaxFileSize   = (1ULL<<48) - 1,
29         VtRootVersion   = 2,
30 };
31
32 /* crypto strengths */
33 enum {
34         VtCryptoStrengthNone,
35         VtCryptoStrengthAuth,
36         VtCryptoStrengthWeak,
37         VtCryptoStrengthStrong,
38 };
39
40 /* crypto suites */
41 enum {
42         VtCryptoNone,
43         VtCryptoSSL3,
44         VtCryptoTLS1,
45
46         VtCryptoMax
47 };
48
49 /* codecs */
50 enum {
51         VtCodecNone,
52
53         VtCodecDeflate,
54         VtCodecThwack,
55
56         VtCodecMax
57 };
58
59 /* Lump Types */
60 enum {
61         VtErrType,              /* illegal */
62
63         VtRootType,
64         VtDirType,
65         VtPointerType0,
66         VtPointerType1,
67         VtPointerType2,
68         VtPointerType3,
69         VtPointerType4,
70         VtPointerType5,
71         VtPointerType6,
72         VtPointerType7,         /* not used */
73         VtPointerType8,         /* not used */
74         VtPointerType9,         /* not used */
75         VtDataType,
76
77         VtMaxType
78 };
79
80 /* Dir Entry flags */
81 enum {
82         VtEntryActive = (1<<0),         /* entry is in use */
83         VtEntryDir = (1<<1),            /* a directory */
84         VtEntryDepthShift = 2,          /* shift for pointer depth */
85         VtEntryDepthMask = (0x7<<2),    /* mask for pointer depth */
86         VtEntryLocal = (1<<5),          /* used for local storage: should not be set for Venti blocks */
87         VtEntryNoArchive = (1<<6),      /* used for local storage: should not be set for Venti blocks */
88 };
89
90 struct VtRoot {
91         ushort version;
92         char name[128];
93         char type[128];
94         uchar score[VtScoreSize];       /* to a Dir block */
95         ushort blockSize;               /* maximum block size */
96         uchar prev[VtScoreSize];        /* last root block */
97 };
98
99 struct VtEntry {
100         ulong gen;                      /* generation number */
101         ushort psize;                   /* pointer block size */
102         ushort dsize;                   /* data block size */
103         uchar depth;                    /* unpacked from flags */
104         uchar flags;
105         uvlong size;
106         uchar score[VtScoreSize];
107 };
108
109 struct VtServerVtbl {
110         Packet *(*read)(VtSession*, uchar score[VtScoreSize], int type, int n);
111         int (*write)(VtSession*, uchar score[VtScoreSize], int type, Packet *p);
112         void (*closing)(VtSession*, int clean);
113         void (*sync)(VtSession*);
114 };
115
116 /* versions */
117 enum {
118         /* experimental versions */
119         VtVersion01 = 1,
120         VtVersion02,
121 };
122
123 /* score of zero length block */
124 extern uchar vtZeroScore[VtScoreSize];  
125
126 /* both sides */
127 void vtAttach(void);
128 void vtDetach(void);
129 void vtClose(VtSession *s);
130 void vtFree(VtSession *s);
131 char *vtGetUid(VtSession *s);
132 char *vtGetSid(VtSession *s);
133 int vtSetDebug(VtSession *s, int);
134 int vtGetDebug(VtSession *s);
135 int vtSetFd(VtSession *s, int fd);
136 int vtGetFd(VtSession *s);
137 int vtConnect(VtSession *s, char *password);
138 int vtSetCryptoStrength(VtSession *s, int);
139 int vtGetCryptoStrength(VtSession *s);
140 int vtSetCompression(VtSession *s, int);
141 int vtGetCompression(VtSession *s);
142 int vtGetCrypto(VtSession *s);
143 int vtGetCodec(VtSession *s);
144 char *vtGetVersion(VtSession *s);
145 char *vtGetError(void);
146 int vtErrFmt(Fmt *fmt);
147 void vtDebug(VtSession*, char *, ...);
148 void vtDebugMesg(VtSession *z, Packet *p, char *s);
149
150 /* internal */
151 VtSession *vtAlloc(void);
152 void vtReset(VtSession*);
153 int vtAddString(Packet*, char*);
154 int vtGetString(Packet*, char**);
155 int vtSendPacket(VtSession*, Packet*);
156 Packet *vtRecvPacket(VtSession*);
157 void vtDisconnect(VtSession*, int);
158 int vtHello(VtSession*);
159
160 /* client side */
161 VtSession *vtClientAlloc(void);
162 VtSession *vtDial(char *server, int canfail);
163 int vtRedial(VtSession*, char *server);
164 VtSession *vtStdioServer(char *server);
165 int vtPing(VtSession *s);
166 int vtSetUid(VtSession*, char *uid);
167 int vtRead(VtSession*, uchar score[VtScoreSize], int type, uchar *buf, int n);
168 int vtWrite(VtSession*, uchar score[VtScoreSize], int type, uchar *buf, int n);
169 Packet *vtReadPacket(VtSession*, uchar score[VtScoreSize], int type, int n);
170 int vtWritePacket(VtSession*, uchar score[VtScoreSize], int type, Packet *p);
171 int vtSync(VtSession *s);
172
173 int vtZeroExtend(int type, uchar *buf, int n, int nn);
174 int vtZeroTruncate(int type, uchar *buf, int n);
175 int vtParseScore(char*, uint, uchar[VtScoreSize]);
176
177 void vtRootPack(VtRoot*, uchar*);
178 int vtRootUnpack(VtRoot*, uchar*);
179 void vtEntryPack(VtEntry*, uchar*, int index);
180 int vtEntryUnpack(VtEntry*, uchar*, int index);
181
182 /* server side */
183 VtSession *vtServerAlloc(VtServerVtbl*);
184 int vtSetSid(VtSession *s, char *sid);
185 int vtExport(VtSession *s);
186
187 /* sha1 */
188 VtSha1* vtSha1Alloc(void);
189 void vtSha1Free(VtSha1*);
190 void vtSha1Init(VtSha1*);
191 void vtSha1Update(VtSha1*, uchar *, int n);
192 void vtSha1Final(VtSha1*, uchar sha1[VtScoreSize]);
193 void vtSha1(uchar score[VtScoreSize], uchar *, int);
194 int vtSha1Check(uchar score[VtScoreSize], uchar *, int);
195 int vtScoreFmt(Fmt *fmt);
196
197 /* Packet */
198 Packet *packetAlloc(void);
199 void packetFree(Packet*);
200 Packet *packetForeign(uchar *buf, int n, void (*free)(void *a), void *a);
201 Packet *packetDup(Packet*, int offset, int n);
202 Packet *packetSplit(Packet*, int n);
203 int packetConsume(Packet*, uchar *buf, int n);
204 int packetTrim(Packet*, int offset, int n);
205 uchar *packetHeader(Packet*, int n);
206 uchar *packetTrailer(Packet*, int n);
207 int packetPrefix(Packet*, uchar *buf, int n);
208 int packetAppend(Packet*, uchar *buf, int n);
209 int packetConcat(Packet*, Packet*);
210 uchar *packetPeek(Packet*, uchar *buf, int offset, int n);
211 int packetCopy(Packet*, uchar *buf, int offset, int n);
212 int packetFragments(Packet*, IOchunk*, int nio, int offset);
213 int packetSize(Packet*);
214 int packetAllocatedSize(Packet*);
215 void packetSha1(Packet*, uchar sha1[VtScoreSize]);
216 int packetCompact(Packet*);
217 int packetCmp(Packet*, Packet*);
218 void packetStats(void);
219
220 /* portability stuff - should be a seperate library */
221
222 void vtMemFree(void *);
223 void *vtMemAlloc(int);
224 void *vtMemAllocZ(int);
225 void *vtMemRealloc(void *p, int);
226 void *vtMemBrk(int n);
227 char *vtStrDup(char *);
228 void vtFatal(char *, ...);
229 char *vtGetError(void);
230 char *vtSetError(char *, ...);
231 char *vtOSError(void);
232
233 /* locking/threads */
234 int vtThread(void (*f)(void*), void *rock);
235 void vtThreadSetName(char*);
236
237 VtLock *vtLockAlloc(void);
238 /* void vtLockInit(VtLock**); */
239 void vtLock(VtLock*);
240 int vtCanLock(VtLock*);
241 void vtRLock(VtLock*);
242 int vtCanRLock(VtLock*);
243 void vtUnlock(VtLock*);
244 void vtRUnlock(VtLock*);
245 void vtLockFree(VtLock*);
246
247 VtRendez *vtRendezAlloc(VtLock*);
248 void vtRendezFree(VtRendez*);
249 int vtSleep(VtRendez*);
250 int vtWakeup(VtRendez*);
251 int vtWakeupAll(VtRendez*);
252
253 /* fd functions - really network (socket) functions */
254 void vtFdClose(int);
255 int vtFdRead(int, uchar*, int);
256 int vtFdReadFully(int, uchar*, int);
257 int vtFdWrite(int, uchar*, int);
258
259 /*
260  * formatting
261  * other than noted, these formats all ignore
262  * the width and precision arguments, and all flags
263  *
264  * V    a venti score
265  * R    venti error
266  */
267 #pragma varargck        type    "V"             uchar*
268 #pragma varargck        type    "R"             void
269
270 #pragma varargck        argpos  vtSetError      1
271