X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fatalk%2Fdsi.h;h=baaa960c9f031f838c025f4856231975ee406f23;hb=b0bcb8f6b0571592a50ce039882c9319e012a270;hp=376e7fc6d058f1f8fc4c49f87ad0281116bf1001;hpb=181e8305cdc7c058e674046650b4da8769bc5e46;p=netatalk.git diff --git a/include/atalk/dsi.h b/include/atalk/dsi.h index 376e7fc6..baaa960c 100644 --- a/include/atalk/dsi.h +++ b/include/atalk/dsi.h @@ -6,19 +6,16 @@ #ifndef _ATALK_DSI_H #define _ATALK_DSI_H -#include #include #include +#include #include - +#include #include + #include #include -#include - -#ifdef __OpenBSD__ -#include -#endif +#include /* What a DSI packet looks like: 0 32 @@ -55,15 +52,16 @@ struct dsi_block { #define DSI_CMDSIZ 8192 #define DSI_DATASIZ 8192 + /* child and parent processes might interpret a couple of these * differently. */ typedef struct DSI { + AFPObj *AFPobj; dsi_proto protocol; struct dsi_block header; struct sockaddr_storage server, client; - struct itimerval timer; - + int tickle; /* tickle count */ int in_write; /* in the middle of writing multiple packets, signal handlers can't write to the socket */ int msg_request; /* pending message to the client */ @@ -76,10 +74,7 @@ typedef struct DSI { size_t statuslen; size_t datalen, cmdlen; off_t read_count, write_count; -// int asleep; /* client won't reply AFP 0x7a ? */ - uint32_t flags; /* DSI flags like DSI_SLEEPING, DSI_DISCONNECTED */ - /* noreply = send reply? */ - char noreply; + uint32_t flags; /* DSI flags like DSI_SLEEPING, DSI_DISCONNECTED */ const char *program; int socket, serversock; @@ -95,16 +90,16 @@ typedef struct DSI { #endif #ifdef USE_ZEROCONF + char *bonjourname; /* server name as UTF8 maxlen MAXINSTANCENAMELEN */ int zeroconf_registered; #endif - /* buffer for OSX deadlock */ + /* DSI readahead buffer used for buffered reads in dsi_peek */ + size_t dsireadbuf; /* size of the DSI readahead buffer used in dsi_peek() */ char *buffer; char *start; char *eof; char *end; - int maxsize; - } DSI; /* DSI flags */ @@ -153,8 +148,14 @@ typedef struct DSI { #define DSI_DATA (1 << 0) /* we have received a DSI command */ #define DSI_RUNNING (1 << 1) /* we have received a AFP command */ #define DSI_SLEEPING (1 << 2) /* we're sleeping after FPZzz */ -#define DSI_DISCONNECTED (1 << 3) /* we're in diconnected state after a socket error */ -#define DSI_DIE (1 << 4) /* SIGUSR1, going down in 5 minutes */ +#define DSI_EXTSLEEP (1 << 3) /* we're sleeping after FPZzz */ +#define DSI_DISCONNECTED (1 << 4) /* we're in diconnected state after a socket error */ +#define DSI_DIE (1 << 5) /* SIGUSR1, going down in 5 minutes */ +#define DSI_NOREPLY (1 << 6) /* in dsi_write we generate our own replies */ +#define DSI_RECONSOCKET (1 << 7) /* we have a new socket from primary reconnect */ +#define DSI_RECONINPROG (1 << 8) /* used in the new session in reconnect */ +#define DSI_AFP_LOGGED_OUT (1 << 9) /* client called afp_logout, quit on next EOF from socket */ +#define DSI_GOT_ECONNRESET (1 << 10) /* got ECONNRESET from client => exit */ /* basic initialization: dsi_init.c */ extern DSI *dsi_init (const dsi_proto /*protocol*/, @@ -176,7 +177,6 @@ extern int dsi_cmdreply (DSI *, const int); extern int dsi_tickle (DSI *); extern void dsi_getstatus (DSI *); extern void dsi_close (DSI *); -extern void dsi_sleep (DSI *, const int ); #define DSI_NOWAIT 1 /* low-level stream commands -- in dsi_stream.c */ @@ -184,6 +184,7 @@ extern ssize_t dsi_stream_write (DSI *, void *, const size_t, const int mode); extern size_t dsi_stream_read (DSI *, void *, const size_t); extern int dsi_stream_send (DSI *, void *, size_t); extern int dsi_stream_receive (DSI *, void *, const size_t, size_t *); +extern int dsi_disconnect(DSI *dsi); #ifdef WITH_SENDFILE extern ssize_t dsi_stream_read_file(DSI *, int, off_t off, const size_t len);