1/*
2 * Copyright (c) 1990,1991 Regents of The University of Michigan.
3 * All Rights Reserved.
4 *
5 * Permission to use, copy, modify, and distribute this software and
6 * its documentation for any purpose and without fee is hereby granted,
7 * provided that the above copyright notice appears in all copies and
8 * that both that copyright notice and this permission notice appear
9 * in supporting documentation, and that the name of The University
10 * of Michigan not be used in advertising or publicity pertaining to
11 * distribution of the software without specific, written prior
12 * permission. This software is supplied as is without expressed or
13 * implied warranties of any kind.
14 *
15 *	Research Systems Unix Group
16 *	The University of Michigan
17 *	c/o Mike Clark
18 *	535 W. William Street
19 *	Ann Arbor, Michigan
20 *	+1-313-763-0525
21 *	netatalk@itd.umich.edu
22 */
23
24#ifndef _ATALK_ASP_H
25#define _ATALK_ASP_H 1
26
27#ifndef NO_DDP
28
29#include <sys/types.h>
30#include <sys/cdefs.h>
31#include <netatalk/endian.h>
32#include <netatalk/at.h>
33#include <atalk/atp.h>
34#include <atalk/afp.h>
35#include <atalk/server_child.h>
36
37#define ASP_HDRSIZ        4
38#define ASP_CMDSIZ        578
39
40#define ASP_MAXPACKETS    8
41#define ASP_CMDMAXSIZ     (ASP_CMDSIZ + ASP_HDRSIZ)
42#define ASP_DATASIZ       (ASP_CMDSIZ*ASP_MAXPACKETS)
43#define ASP_DATAMAXSIZ    ((ASP_CMDSIZ + ASP_HDRSIZ)*ASP_MAXPACKETS)
44
45typedef struct ASP {
46    ATP			asp_atp;
47    struct sockaddr_at	asp_sat;
48    u_int8_t	        asp_wss;
49    u_int8_t            asp_sid;
50    union {
51	struct {
52	    char			*as_status;
53	    int				as_slen;
54	}			asu_status;
55	u_int16_t		asu_seq;
56    }			asp_u;
57#define asp_status	asp_u.asu_status.as_status
58#define asp_slen	asp_u.asu_status.as_slen
59#define asp_seq		asp_u.asu_seq
60    int			asp_flags;
61    char		child, inited, *commands;
62    char                cmdbuf[ASP_CMDMAXSIZ];
63    char                data[ASP_DATAMAXSIZ];
64    size_t		cmdlen, datalen;
65    off_t 		read_count, write_count;
66} *ASP;
67
68#define ASPFL_SLS	1
69#define ASPFL_SSS	2
70
71#define ASPFUNC_CLOSE	1
72#define ASPFUNC_CMD	2
73#define ASPFUNC_STAT	3
74#define ASPFUNC_OPEN	4
75#define ASPFUNC_TICKLE	5
76#define ASPFUNC_WRITE	6
77#define ASPFUNC_WRTCONT	7
78#define ASPFUNC_ATTN	8
79
80#define ASPERR_OK	0x0000
81#define ASPERR_BADVERS	0xfbd6
82#define ASPERR_BUFSMALL	0xfbd5
83#define ASPERR_NOSESS	0xfbd4
84#define ASPERR_NOSERV	0xfbd3
85#define ASPERR_PARM	0xfbd2
86#define ASPERR_SERVBUSY	0xfbd1
87#define ASPERR_SESSCLOS	0xfbd0
88#define ASPERR_SIZERR	0xfbcf
89#define ASPERR_TOOMANY	0xfbce
90#define ASPERR_NOACK	0xfbcd
91
92extern ASP asp_init         (ATP);
93extern void asp_setstatus   (ASP, char *, const int);
94extern ASP asp_getsession   (ASP, server_child *, const int);
95extern int asp_close        (ASP);
96extern int asp_shutdown     (ASP);
97extern int asp_attention    (ASP, AFPUserBytes);
98extern int asp_getrequest   (ASP);
99extern int asp_cmdreply     (ASP, int);
100extern int asp_wrtcont      (ASP, char *, size_t *);
101#define asp_wrtreply(a,b)   asp_cmdreply((a), (b))
102extern void asp_kill        (int);
103extern int asp_tickle      (ASP, const u_int8_t, struct sockaddr_at *);
104extern void asp_stop_tickle (void);
105
106#endif  /* NO_DDP */
107#endif
108