SConn.h 955 B

1234567891011121314151617181920212223242526
  1. // delimited, authenticated, encrypted connection
  2. enum{ Maxmsg=4096 }; // messages > Maxmsg bytes are truncated
  3. typedef struct SConn SConn;
  4. extern SConn* newSConn(int); // arg is open file descriptor
  5. struct SConn{
  6. void *chan;
  7. int secretlen;
  8. int (*secret)(SConn*, uchar*, int);//
  9. int (*read)(SConn*, uchar*, int); // <0 if error; errmess in buffer
  10. int (*write)(SConn*, uchar*, int);
  11. void (*free)(SConn*); // also closes file descriptor
  12. };
  13. // secret(s,b,dir) sets secret for digest, encrypt, using the secretlen
  14. // bytes in b to form keys for the two directions;
  15. // set dir=0 in client, dir=1 in server
  16. // error convention: write !message in-band
  17. extern void writerr(SConn*, char*);
  18. extern int readstr(SConn*, char*); // call with buf of size Maxmsg+1
  19. // returns -1 upon error, with error message in buf
  20. extern void *emalloc(ulong); /* dies on failure; clears memory */
  21. extern void *erealloc(void *, ulong);
  22. extern char *estrdup(char *);