1 /*
2  * Copyright 2000-2002 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #ifndef ISC_CTL_H
7 #define ISC_CTL_H
8 
9 #pragma ident	"%Z%%M%	%I%	%E% SMI"
10 
11 /*
12  * Copyright (c) 1998,1999 by Internet Software Consortium.
13  *
14  * Permission to use, copy, modify, and distribute this software for any
15  * purpose with or without fee is hereby granted, provided that the above
16  * copyright notice and this permission notice appear in all copies.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
19  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
20  * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
21  * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
22  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
23  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
24  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
25  * SOFTWARE.
26  */
27 
28 /*
29  * $Id: ctl.h,v 8.11 2001/08/10 02:40:49 marka Exp $
30  */
31 
32 #include <sys/types.h>
33 #include <sys/socket.h>
34 
35 #include <isc/eventlib.h>
36 
37 /* Macros. */
38 
39 #define	CTL_MORE	0x0001	/* More will be / should be sent. */
40 #define	CTL_EXIT	0x0002	/* Close connection after this. */
41 #define	CTL_DATA	0x0004	/* Go into / this is DATA mode. */
42 
43 /* Types. */
44 
45 struct ctl_cctx;
46 struct ctl_sctx;
47 struct ctl_sess;
48 struct ctl_verb;
49 
50 enum ctl_severity { ctl_debug, ctl_warning, ctl_error };
51 
52 typedef void (*ctl_logfunc)(enum ctl_severity, const char *fmt, ...);
53 
54 typedef void (*ctl_verbfunc)(struct ctl_sctx *, struct ctl_sess *,
55 			     const struct ctl_verb *, const char *rest,
56 			     u_int respflags, const void *respctx, void *uctx);
57 
58 typedef void (*ctl_srvrdone)(struct ctl_sctx *, struct ctl_sess *, void *);
59 
60 typedef void (*ctl_clntdone)(struct ctl_cctx *, void *, const char *, u_int);
61 
62 struct ctl_verb {
63 	const char *	name;
64 	ctl_verbfunc	func;
65 	const char *	help;
66 };
67 
68 /* General symbols. */
69 
70 #define	ctl_logger	__ctl_logger
71 
72 #ifdef __GNUC__
73 void			ctl_logger(enum ctl_severity, const char *, ...)
74 				__attribute__((__format__(__printf__, 2, 3)));
75 #else
76 void			ctl_logger(enum ctl_severity, const char *, ...);
77 #endif
78 
79 /* Client symbols. */
80 
81 #define	ctl_client	__ctl_client
82 #define	ctl_endclient	__ctl_endclient
83 #define	ctl_command	__ctl_command
84 
85 struct ctl_cctx *	ctl_client(evContext, const struct sockaddr *, size_t,
86 				   const struct sockaddr *, size_t,
87 				   ctl_clntdone, void *,
88 				   u_int, ctl_logfunc);
89 void			ctl_endclient(struct ctl_cctx *);
90 int			ctl_command(struct ctl_cctx *, const char *, size_t,
91 				    ctl_clntdone, void *);
92 
93 /* Server symbols. */
94 
95 #define	ctl_server	__ctl_server
96 #define	ctl_endserver	__ctl_endserver
97 #define	ctl_response	__ctl_response
98 #define	ctl_sendhelp	__ctl_sendhelp
99 #define ctl_getcsctx	__ctl_getcsctx
100 #define ctl_setcsctx	__ctl_setcsctx
101 
102 struct ctl_sctx *	ctl_server(evContext, const struct sockaddr *, size_t,
103 				   const struct ctl_verb *,
104 				   u_int, u_int,
105 				   u_int, int, int,
106 				   ctl_logfunc, void *);
107 void			ctl_endserver(struct ctl_sctx *);
108 void			ctl_response(struct ctl_sess *, u_int,
109 				     const char *, u_int, const void *,
110 				     ctl_srvrdone, void *,
111 				     const char *, size_t);
112 void			ctl_sendhelp(struct ctl_sess *, u_int);
113 void *			ctl_getcsctx(struct ctl_sess *);
114 void *			ctl_setcsctx(struct ctl_sess *, void *);
115 
116 #endif /*ISC_CTL_H*/
117