netatalk  4.4.0dev
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
test/testsuite/dsi.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 1997 Adrian Sun ([email protected])
3 * All rights reserved.
4 *
5 * modified for test-suite
6 */
7
8#ifndef _ATALK_DSI_H
9#define _ATALK_DSI_H
10
11#include <sys/types.h>
12#include <sys/time.h>
13#include <signal.h>
14
15#include <netinet/in.h>
16
17/* What a DSI packet looks like:
18 0 32
19 |-------------------------------|
20 |flags |command| requestID |
21 |-------------------------------|
22 |error code/enclosed data offset|
23 |-------------------------------|
24 |total data length |
25 |-------------------------------|
26 |reserved field |
27 |-------------------------------|
28
29 CONVENTION: anything with a dsi_ prefix is kept in network byte order.
30*/
31
32#define DSI_BLOCKSIZ 16
33struct dsi_block {
34 uint8_t dsi_flags; /* packet type: request or reply */
35 uint8_t dsi_command; /* command */
36 uint16_t dsi_requestID; /* request ID */
37 uint32_t dsi_code; /* error code or data offset */
38 uint32_t dsi_len; /* total data length */
39 uint32_t dsi_reserved; /* reserved field */
40};
41
42#define DSI_CMDSIZ 800
43#define DSI_DATASIZ 8192
44/* child and parent processes might interpret a couple of these
45 * differently. */
46typedef struct DSI {
47 struct dsi_block header;
48 struct sockaddr_in server, client;
49 sigset_t sigblockset;
50 struct itimerval timer, savetimer;
52 uint16_t serverID, clientID;
54 int statuslen;
55 size_t datalen, cmdlen;
57 int asleep; /* client won't reply AFP 0x7a ? */
58 /* inited = initialized?, child = a child?, noreply = send reply? */
60 const char *program;
61 int socket, serversock;
62
63 /* protocol specific open/close, send/receive
64 * send/receive fill in the header and use dsi->commands.
65 * write/read just write/read data */
66 pid_t (*proto_open)(struct DSI *);
67 void (*proto_close)(struct DSI *);
69
70/* DSI flags */
71#define DSIFL_REQUEST 0x00
72#define DSIFL_REPLY 0x01
73#define DSIFL_MAX 0x01
74
75/* DSI session options */
76#define DSIOPT_SERVQUANT 0x00 /* server request quantum */
77#define DSIOPT_ATTNQUANT 0x01 /* attention quantum */
78
79/* DSI Commands */
80#define DSIFUNC_CLOSE 1 /* DSICloseSession */
81#define DSIFUNC_CMD 2 /* DSICommand */
82#define DSIFUNC_STAT 3 /* DSIGetStatus */
83#define DSIFUNC_OPEN 4 /* DSIOpenSession */
84#define DSIFUNC_TICKLE 5 /* DSITickle */
85#define DSIFUNC_WRITE 6 /* DSIWrite */
86#define DSIFUNC_ATTN 8 /* DSIAttention */
87#define DSIFUNC_MAX 8 /* largest command */
88
89/* DSI Error codes: most of these aren't used. */
90#define DSIERR_OK 0x0000
91#define DSIERR_BADVERS 0xfbd6
92#define DSIERR_BUFSMALL 0xfbd5
93#define DSIERR_NOSESS 0xfbd4
94#define DSIERR_NOSERV 0xfbd3
95#define DSIERR_PARM 0xfbd2
96#define DSIERR_SERVBUSY 0xfbd1
97#define DSIERR_SESSCLOS 0xfbd0
98#define DSIERR_SIZERR 0xfbcf
99#define DSIERR_TOOMANY 0xfbce
100#define DSIERR_NOACK 0xfbcd
101
102/* server and client quanta */
103#define DSI_DEFQUANT 2 /* default attention quantum size */
104#define DSI_SERVQUANT_MAX 0xffffffffL /* server quantum */
105#define DSI_SERVQUANT_MIN 0x0004A2E0L /* minimum server quantum */
106#define DSI_SERVQUANT_DEF DSI_SERVQUANT_MIN /* default server quantum */
107
108/* default port number */
109#define DSI_AFPOVERTCP_PORT 548
110
111/* basic initialization: dsi_init.c */
112extern DSI *dsi_init(
113 const char * /*program*/,
114 const char * /*host*/, const char * /*address*/,
115 const int /*port*/, const int /*proxy*/,
116 const uint32_t /* server quantum */);
117extern void dsi_setstatus(DSI *, uint8_t *, const int);
118
119/* in dsi_getsess.c */
120extern void dsi_kill(int);
121
122/* low-level stream commands -- in dsi_stream.c */
123extern size_t dsi_stream_write(DSI *, void *, const size_t);
124extern size_t dsi_stream_read(DSI *, void *, const size_t);
125extern int dsi_stream_send(DSI *, void *, size_t);
126extern int dsi_stream_receive(DSI *, void *, const size_t, size_t *);
127
128/* client writes -- dsi_write.c */
129extern size_t dsi_writeinit(DSI *, void *, const size_t);
130extern size_t dsi_write(DSI *, void *, const size_t);
131extern void dsi_writeflush(DSI *);
132#define dsi_wrtreply(a,b) dsi_cmdreply(a,b)
133
134/* client reads -- dsi_read.c */
135extern ssize_t dsi_readinit(DSI *, void *, const size_t, const size_t,
136 const int);
137extern ssize_t dsi_read(DSI *, void *, const size_t);
138extern void dsi_readdone(DSI *);
139
140/* some useful macros */
141#define dsi_serverID(x) ((x)->serverID++)
142#define dsi_send(x) do { \
143 (x)->header.dsi_len = htonl((x)->cmdlen); \
144 dsi_stream_send((x), (x)->commands, (x)->cmdlen); \
145} while (0)
146#define dsi_receive(x) (dsi_stream_receive((x), (x)->commands, \
147 DSI_CMDSIZ, &(x)->cmdlen))
148#endif /* atalk/dsi.h */
static void header(void)
Definition speedtest.c:570
Definition include/atalk/dsi.h:52
uint16_t serverID
Definition include/atalk/dsi.h:68
char noreply
Definition test/testsuite/dsi.h:59
size_t datalen
Definition include/atalk/dsi.h:71
struct sockaddr_storage server client
Definition include/atalk/dsi.h:59
size_t cmdlen
Definition include/atalk/dsi.h:71
struct itimerval timer savetimer
Definition test/testsuite/dsi.h:50
sigset_t sigblockset
Definition test/testsuite/dsi.h:49
off_t read_count
Definition include/atalk/dsi.h:72
pid_t(* proto_open)(struct DSI *)
Definition include/atalk/dsi.h:92
uint32_t datasize
Definition include/atalk/dsi.h:67
off_t write_count
Definition include/atalk/dsi.h:72
int serversock
Definition include/atalk/dsi.h:75
uint32_t server_quantum
Definition include/atalk/dsi.h:67
uint16_t clientID
Definition include/atalk/dsi.h:68
void(* proto_close)(struct DSI *)
Definition include/atalk/dsi.h:93
uint8_t data[DSI_DATASIZ]
Definition include/atalk/dsi.h:70
int socket
Definition include/atalk/dsi.h:74
char status[1400]
Definition include/atalk/dsi.h:56
uint32_t attn_quantum
Definition include/atalk/dsi.h:67
char child
Definition test/testsuite/dsi.h:59
char inited
Definition test/testsuite/dsi.h:59
struct itimerval timer
Definition include/atalk/dsi.h:60
const char * program
Definition test/testsuite/dsi.h:60
int statuslen
Definition include/atalk/dsi.h:55
uint8_t * commands
Definition include/atalk/dsi.h:69
int asleep
Definition test/testsuite/dsi.h:57
Definition include/atalk/dsi.h:36
uint8_t dsi_command
Definition include/atalk/dsi.h:38
uint32_t dsi_code
Definition include/atalk/dsi.h:41
uint32_t dsi_len
Definition include/atalk/dsi.h:44
uint16_t dsi_requestID
Definition include/atalk/dsi.h:39
uint32_t dsi_reserved
Definition include/atalk/dsi.h:45
uint8_t dsi_flags
Definition include/atalk/dsi.h:37
Definition cnid_metad.c:110
size_t dsi_write(DSI *, void *, const size_t)
Definition dsi_write.c:52
size_t dsi_stream_read(DSI *, void *, const size_t)
Definition dsi_stream.c:523
size_t dsi_writeinit(DSI *, void *, const size_t)
Definition dsi_write.c:26
void dsi_setstatus(DSI *, uint8_t *, const int)
int dsi_stream_send(DSI *, void *, size_t)
Definition dsi_stream.c:568
ssize_t dsi_readinit(DSI *, void *, const size_t, const size_t, const int)
Definition dsi_read.c:26
DSI * dsi_init(const char *, const char *, const char *, const int, const int, const uint32_t)
#define DSI_CMDSIZ
Definition test/testsuite/dsi.h:42
void dsi_writeflush(DSI *)
Definition dsi_write.c:70
int dsi_stream_receive(DSI *, void *, const size_t, size_t *)
void dsi_kill(int)
#define DSI_DATASIZ
Definition test/testsuite/dsi.h:43
size_t dsi_stream_write(DSI *, void *, const size_t)
ssize_t dsi_read(DSI *, void *, const size_t)
Definition dsi_read.c:54
void dsi_readdone(DSI *)
Definition dsi_read.c:48