#ifndef _ATALK_DSI_H
#define _ATALK_DSI_H
-#include <sys/cdefs.h>
#include <sys/types.h>
#include <sys/time.h>
+#include <sys/socket.h>
#include <signal.h>
-
+#include <arpa/inet.h>
#include <netinet/in.h>
+
#include <atalk/afp.h>
#include <atalk/server_child.h>
-#include <netatalk/endian.h>
-
-#ifdef __OpenBSD__
-#include <sys/socket.h>
-#endif
+#include <atalk/globals.h>
/* What a DSI packet looks like:
0 32
#define DSI_BLOCKSIZ 16
struct dsi_block {
- u_int8_t dsi_flags; /* packet type: request or reply */
- u_int8_t dsi_command; /* command */
- u_int16_t dsi_requestID; /* request ID */
- u_int32_t dsi_code; /* error code or data offset */
- u_int32_t dsi_len; /* total data length */
- u_int32_t dsi_reserved; /* reserved field */
+ uint8_t dsi_flags; /* packet type: request or reply */
+ uint8_t dsi_command; /* command */
+ uint16_t dsi_requestID; /* request ID */
+ uint32_t dsi_code; /* error code or data offset */
+ uint32_t dsi_len; /* total data length */
+ uint32_t dsi_reserved; /* reserved field */
};
#define DSI_CMDSIZ 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;
int msg_request; /* pending message to the client */
int down_request; /* pending SIGUSR1 down in 5 mn */
- u_int32_t attn_quantum, datasize, server_quantum;
- u_int16_t serverID, clientID;
+ uint32_t attn_quantum, datasize, server_quantum;
+ uint16_t serverID, clientID;
char *status;
- u_int8_t commands[DSI_CMDSIZ], data[DSI_DATASIZ];
+ uint8_t commands[DSI_CMDSIZ], data[DSI_DATASIZ];
size_t statuslen;
size_t datalen, cmdlen;
off_t read_count, write_count;
#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 */
+#if 0
+#define DSI_GOT_ECONNRESET (1 << 10) /* got ECONNRESET from client => exit */
+#endif
/* basic initialization: dsi_init.c */
extern DSI *dsi_init (const dsi_proto /*protocol*/,
const char * /*program*/,
const char * /*host*/, const char * /*address*/,
const char * /*port*/, const int /*proxy*/,
- const u_int32_t /* server quantum */);
+ const uint32_t /* server quantum */);
extern void dsi_setstatus (DSI *, char *, const size_t);
/* in dsi_getsess.c */
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_stream_receive (DSI *);
+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);
(x)->header.dsi_len = htonl((x)->cmdlen); \
dsi_stream_send((x), (x)->commands, (x)->cmdlen); \
} while (0)
-#define dsi_receive(x) (dsi_stream_receive((x), (x)->commands, \
- DSI_CMDSIZ, &(x)->cmdlen))
+
#endif /* atalk/dsi.h */