diff options
Diffstat (limited to 'sys/include/oventi.h')
-rwxr-xr-x | sys/include/oventi.h | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/sys/include/oventi.h b/sys/include/oventi.h new file mode 100755 index 000000000..62bde295f --- /dev/null +++ b/sys/include/oventi.h @@ -0,0 +1,271 @@ +#pragma lib "liboventi.a" +#pragma src "/sys/src/liboventi" + +typedef struct VtSession VtSession; +typedef struct VtSha1 VtSha1; +typedef struct Packet Packet; +typedef struct VtLock VtLock; +typedef struct VtRendez VtRendez; +typedef struct VtRoot VtRoot; +typedef struct VtEntry VtEntry; +typedef struct VtServerVtbl VtServerVtbl; + +#pragma incomplete VtSession +#pragma incomplete VtSha1 +#pragma incomplete Packet +#pragma incomplete VtLock +#pragma incomplete VtRendez + +enum { + VtScoreSize = 20, /* Venti */ + VtMaxLumpSize = 56*1024, + VtPointerDepth = 7, + VtEntrySize = 40, + VtRootSize = 300, + VtMaxStringSize = 1000, + VtAuthSize = 1024, /* size of auth group - in bits - must be multiple of 8 */ + MaxFragSize = 9*1024, + VtMaxFileSize = (1ULL<<48) - 1, + VtRootVersion = 2, +}; + +/* crypto strengths */ +enum { + VtCryptoStrengthNone, + VtCryptoStrengthAuth, + VtCryptoStrengthWeak, + VtCryptoStrengthStrong, +}; + +/* crypto suites */ +enum { + VtCryptoNone, + VtCryptoSSL3, + VtCryptoTLS1, + + VtCryptoMax +}; + +/* codecs */ +enum { + VtCodecNone, + + VtCodecDeflate, + VtCodecThwack, + + VtCodecMax +}; + +/* Lump Types */ +enum { + VtErrType, /* illegal */ + + VtRootType, + VtDirType, + VtPointerType0, + VtPointerType1, + VtPointerType2, + VtPointerType3, + VtPointerType4, + VtPointerType5, + VtPointerType6, + VtPointerType7, /* not used */ + VtPointerType8, /* not used */ + VtPointerType9, /* not used */ + VtDataType, + + VtMaxType +}; + +/* Dir Entry flags */ +enum { + VtEntryActive = (1<<0), /* entry is in use */ + VtEntryDir = (1<<1), /* a directory */ + VtEntryDepthShift = 2, /* shift for pointer depth */ + VtEntryDepthMask = (0x7<<2), /* mask for pointer depth */ + VtEntryLocal = (1<<5), /* used for local storage: should not be set for Venti blocks */ + VtEntryNoArchive = (1<<6), /* used for local storage: should not be set for Venti blocks */ +}; + +struct VtRoot { + ushort version; + char name[128]; + char type[128]; + uchar score[VtScoreSize]; /* to a Dir block */ + ushort blockSize; /* maximum block size */ + uchar prev[VtScoreSize]; /* last root block */ +}; + +struct VtEntry { + ulong gen; /* generation number */ + ushort psize; /* pointer block size */ + ushort dsize; /* data block size */ + uchar depth; /* unpacked from flags */ + uchar flags; + uvlong size; + uchar score[VtScoreSize]; +}; + +struct VtServerVtbl { + Packet *(*read)(VtSession*, uchar score[VtScoreSize], int type, int n); + int (*write)(VtSession*, uchar score[VtScoreSize], int type, Packet *p); + void (*closing)(VtSession*, int clean); + void (*sync)(VtSession*); +}; + +/* versions */ +enum { + /* experimental versions */ + VtVersion01 = 1, + VtVersion02, +}; + +/* score of zero length block */ +extern uchar vtZeroScore[VtScoreSize]; + +/* both sides */ +void vtAttach(void); +void vtDetach(void); +void vtClose(VtSession *s); +void vtFree(VtSession *s); +char *vtGetUid(VtSession *s); +char *vtGetSid(VtSession *s); +int vtSetDebug(VtSession *s, int); +int vtGetDebug(VtSession *s); +int vtSetFd(VtSession *s, int fd); +int vtGetFd(VtSession *s); +int vtConnect(VtSession *s, char *password); +int vtSetCryptoStrength(VtSession *s, int); +int vtGetCryptoStrength(VtSession *s); +int vtSetCompression(VtSession *s, int); +int vtGetCompression(VtSession *s); +int vtGetCrypto(VtSession *s); +int vtGetCodec(VtSession *s); +char *vtGetVersion(VtSession *s); +char *vtGetError(void); +int vtErrFmt(Fmt *fmt); +void vtDebug(VtSession*, char *, ...); +void vtDebugMesg(VtSession *z, Packet *p, char *s); + +/* internal */ +VtSession *vtAlloc(void); +void vtReset(VtSession*); +int vtAddString(Packet*, char*); +int vtGetString(Packet*, char**); +int vtSendPacket(VtSession*, Packet*); +Packet *vtRecvPacket(VtSession*); +void vtDisconnect(VtSession*, int); +int vtHello(VtSession*); + +/* client side */ +VtSession *vtClientAlloc(void); +VtSession *vtDial(char *server, int canfail); +int vtRedial(VtSession*, char *server); +VtSession *vtStdioServer(char *server); +int vtPing(VtSession *s); +int vtSetUid(VtSession*, char *uid); +int vtRead(VtSession*, uchar score[VtScoreSize], int type, uchar *buf, int n); +int vtWrite(VtSession*, uchar score[VtScoreSize], int type, uchar *buf, int n); +Packet *vtReadPacket(VtSession*, uchar score[VtScoreSize], int type, int n); +int vtWritePacket(VtSession*, uchar score[VtScoreSize], int type, Packet *p); +int vtSync(VtSession *s); + +int vtZeroExtend(int type, uchar *buf, int n, int nn); +int vtZeroTruncate(int type, uchar *buf, int n); +int vtParseScore(char*, uint, uchar[VtScoreSize]); + +void vtRootPack(VtRoot*, uchar*); +int vtRootUnpack(VtRoot*, uchar*); +void vtEntryPack(VtEntry*, uchar*, int index); +int vtEntryUnpack(VtEntry*, uchar*, int index); + +/* server side */ +VtSession *vtServerAlloc(VtServerVtbl*); +int vtSetSid(VtSession *s, char *sid); +int vtExport(VtSession *s); + +/* sha1 */ +VtSha1* vtSha1Alloc(void); +void vtSha1Free(VtSha1*); +void vtSha1Init(VtSha1*); +void vtSha1Update(VtSha1*, uchar *, int n); +void vtSha1Final(VtSha1*, uchar sha1[VtScoreSize]); +void vtSha1(uchar score[VtScoreSize], uchar *, int); +int vtSha1Check(uchar score[VtScoreSize], uchar *, int); +int vtScoreFmt(Fmt *fmt); + +/* Packet */ +Packet *packetAlloc(void); +void packetFree(Packet*); +Packet *packetForeign(uchar *buf, int n, void (*free)(void *a), void *a); +Packet *packetDup(Packet*, int offset, int n); +Packet *packetSplit(Packet*, int n); +int packetConsume(Packet*, uchar *buf, int n); +int packetTrim(Packet*, int offset, int n); +uchar *packetHeader(Packet*, int n); +uchar *packetTrailer(Packet*, int n); +int packetPrefix(Packet*, uchar *buf, int n); +int packetAppend(Packet*, uchar *buf, int n); +int packetConcat(Packet*, Packet*); +uchar *packetPeek(Packet*, uchar *buf, int offset, int n); +int packetCopy(Packet*, uchar *buf, int offset, int n); +int packetFragments(Packet*, IOchunk*, int nio, int offset); +int packetSize(Packet*); +int packetAllocatedSize(Packet*); +void packetSha1(Packet*, uchar sha1[VtScoreSize]); +int packetCompact(Packet*); +int packetCmp(Packet*, Packet*); +void packetStats(void); + +/* portability stuff - should be a seperate library */ + +void vtMemFree(void *); +void *vtMemAlloc(int); +void *vtMemAllocZ(int); +void *vtMemRealloc(void *p, int); +void *vtMemBrk(int n); +char *vtStrDup(char *); +void vtFatal(char *, ...); +char *vtGetError(void); +char *vtSetError(char *, ...); +char *vtOSError(void); + +/* locking/threads */ +int vtThread(void (*f)(void*), void *rock); +void vtThreadSetName(char*); + +VtLock *vtLockAlloc(void); +/* void vtLockInit(VtLock**); */ +void vtLock(VtLock*); +int vtCanLock(VtLock*); +void vtRLock(VtLock*); +int vtCanRLock(VtLock*); +void vtUnlock(VtLock*); +void vtRUnlock(VtLock*); +void vtLockFree(VtLock*); + +VtRendez *vtRendezAlloc(VtLock*); +void vtRendezFree(VtRendez*); +int vtSleep(VtRendez*); +int vtWakeup(VtRendez*); +int vtWakeupAll(VtRendez*); + +/* fd functions - really network (socket) functions */ +void vtFdClose(int); +int vtFdRead(int, uchar*, int); +int vtFdReadFully(int, uchar*, int); +int vtFdWrite(int, uchar*, int); + +/* + * formatting + * other than noted, these formats all ignore + * the width and precision arguments, and all flags + * + * V a venti score + * R venti error + */ +#pragma varargck type "V" uchar* +#pragma varargck type "R" void + +#pragma varargck argpos vtSetError 1 + |