This commit was manufactured by cvs2svn to create branch 'XEmacs-21_4'.
[chise/xemacs-chise.git.1] / lib-src / gnuserv.h
1 /* -*-C-*-
2
3  Header file for the GNU Emacs server and client C code.
4
5  This file is part of GNU Emacs.
6
7  Copying is permitted under those conditions described by the GNU
8  General Public License.
9
10  Copyright (C) 1989 Free Software Foundation, Inc.
11
12  Author: Andy Norman (ange@hplb.hpl.hp.com), based on 
13          'etc/server.c' and 'etc/emacsclient.c' from the 18.52 GNU
14          Emacs distribution.
15
16  Please mail bugs and suggestions to the author at the above address.
17 */
18
19 /* HISTORY 
20  * 11-Nov-1990          bristor@simba   
21  *    Added EOT stuff.
22  */
23
24 /*
25  * This file incorporates new features added by Bob Weiner <weiner@mot.com>,
26  * Darrell Kindred <dkindred@cmu.edu> and Arup Mukherjee <arup@cmu.edu>.
27  * Please see the note at the end of the README file for details.
28  *
29  * (If gnuserv came bundled with your emacs, the README file is probably
30  * ../etc/gnuserv.README relative to the directory containing this file)
31  */
32
33 #if 0
34 static char header_rcsid [] = "!Header: gnuserv.h,v 2.4 95/02/16 11:58:11 arup alpha !";
35 #endif
36
37 #define USE_TMPDIR
38
39 #define NO_SHORTNAMES
40
41 #define PATCHLEVEL 2
42
43 #define NO_SHORTNAMES
44 /* gnuserv should not be compiled using SOCKS */
45 #define DO_NOT_SOCKSIFY
46 #include <config.h>
47 #undef read
48 #undef write
49 #undef open
50 #undef close
51 #undef signal
52
53 /* Define the communication method between server and clients:
54  *   You can have either or both kinds of sockets, but you can't mix
55  *   sockets with sysv ipc
56  */
57
58
59 #define INTERNET_DOMAIN_SOCKETS
60 #ifdef HAVE_SYS_UN_H
61 #define UNIX_DOMAIN_SOCKETS 
62 /* #define SYSV_IPC  */
63 #endif
64
65 /*
66  * Define additional authentication protocols to be used. These methods will
67  * be tried before falling back to the default gnuserv protocol (based on
68  * the GNU_SECURE environment variable). Currently, only MIT-MAGIC-COOKIE-1
69  * is also supported.
70  *
71  * Comment out the next line(s) if you don't want to enable the
72  * appropriate authentication protocol.
73  */
74
75 #if defined (HAVE_XAUTH)
76 #define AUTH_MAGIC_COOKIE
77 #endif /* HAVE_XAUTH */
78
79 /*
80  * stuff related to supporting MIT-MAGIC-COOKIE-1
81  */
82
83 #define MCOOKIE_SCREEN "999"     /* screen # to use as the gnuserv cookie */
84 #define MCOOKIE_NAME   "MAGIC-1" /* authentication protocol name */
85 #define MCOOKIE_X_NAME "MIT-MAGIC-COOKIE-1"  /* as needed by X */
86
87
88 #define DEFAUTH_NAME "GNU-SECURE"  /* name of default auth protocol */
89 #define AUTH_TIMEOUT  15           /* # seconds to wait for auth data */
90 #define AUTH_NAMESZ   15           /* max allows auth protocol name size */
91
92
93 /*
94  * Pick a default communication scheme, if none was specified.
95  */
96
97 #if !defined(SYSV_IPC) && !defined(UNIX_DOMAIN_SOCKETS) && !defined(INTERNET_DOMAIN_SOCKETS)
98
99 #ifdef HAVE_SYSVIPC
100 #define SYSV_IPC                /* SYSV systems use SYSV IPC by default */
101 #endif /* HAVE_SYSVIPC */
102
103 #ifdef BSD
104 #define UNIX_DOMAIN_SOCKETS     /* BSD systems use Unix Domain sockets by default */
105 #endif /* BSD */
106
107 #endif /* No communication method pre-defined */
108
109 #include <sys/types.h>
110 #include <sys/param.h>
111 #include <sys/stat.h>
112 #include <stdio.h>
113 #include <stdlib.h>
114 #include <string.h>
115 #include <signal.h>
116 #include <errno.h>
117
118 #ifdef HAVE_UNISTD_H
119 #include <unistd.h>
120 #endif
121
122 #ifdef HAVE_SYS_TIME_H
123 #include <sys/time.h>
124 #endif
125
126 /*
127  * If you are using SYSV_IPC, you might want to make the buffer size bigger
128  * since it limits the size of requests and responses. Don't make it bigger
129  * than your system's max message size though (usually a couple of k) or else
130  * msgsend will start failing. For sockets, using the system BUFSIZ is usually
131  * what you want. 
132  */
133
134 # define GSERV_BUFSZ BUFSIZ
135
136
137 #ifdef SYSV_IPC
138 #include <sys/ipc.h>
139 #include <sys/msg.h>
140
141 #define send_string(s,str) \
142   if (strlen(msgp->mtext) + strlen(str) < GSERV_BUFSZ) \
143      strcat(msgp->mtext,str); \
144   else \
145   { \
146     fprintf(stderr,"%s: not enough message buffer space\n",progname); \
147      exit(1); \
148   } \
149
150 #endif /* SYSV_IPC */
151
152 #if defined(INTERNET_DOMAIN_SOCKETS) || defined(UNIX_DOMAIN_SOCKETS)
153 #include <sys/socket.h>
154 #endif /* INTERNET_DOMAIN_SOCKETS || UNIX_DOMAIN_SOCKETS */
155
156 #ifdef INTERNET_DOMAIN_SOCKETS
157 #include <netdb.h>
158 #include <netinet/in.h>
159 #include <arpa/inet.h>
160 #define TABLE_SIZE 101          /* The number of entries in the hash table */
161 #define HASH(host) host         /* Rather simplistic hash function */
162 #define DEFAULT_PORT 21490      /* default port number to use is
163                                  * DEFAULT_PORT + uid */
164 #endif /* INTERNET_DOMAIN_SOCKETS */
165
166 #ifdef UNIX_DOMAIN_SOCKETS
167 #include <sys/un.h>
168 #define HIDE_UNIX_SOCKET        /* put the unix socket in a protected dir */
169 #endif /* UNIX_DOMAIN_SOCKETS */
170
171 /* On some platforms, we need to do the equivalent of "stty litout" to get
172  * characters like ^D to pass through to emacs.  This problem has only
173  * been observed under emacs18; fsf19 and lemacs are probably okay without it.
174  */
175 #ifndef DONT_USE_LITOUT
176 #if !defined(HAVE_TERMIO) && !defined(HAVE_TERMIOS) && !defined(VMS)
177 #if !defined(MSDOS) && !defined(BSD4_1)
178 #define USE_LITOUT
179 #endif
180 #endif
181 #endif
182
183
184 #define HOSTNAMSZ 255           /* max size of a hostname */
185 #define REPLYSIZ 300            /* max size of reply from server to client */
186 #undef FALSE
187 #define FALSE 0
188 #undef TRUE
189 #define TRUE 1
190
191 extern char *optarg;
192 extern int optind;
193 extern char *progname;
194 extern char *tmpdir;
195
196 /* The casts shut Sun's compiler up and are safe in the context these
197    are actually used. */
198 #define max2(x,y) (((int) (x) > (int) (y)) ? (x) : (y))
199 #define min2(x,y) (((int) (x) < (int) (y)) ? (x) : (y))
200
201 #ifndef _NFILE            /* rough guess at maximum number of open files */
202 #define _NFILE 20
203 #endif
204
205 #define EOT_STR "\004"
206 #define EOT_CHR '\004'
207
208 /* connection types */
209 #define CONN_UNIX     0
210 #define CONN_INTERNET 1
211 #define CONN_IPC      2
212
213 /* function declarations */
214 int make_connection (char *hostarg, int portarg, int *s);
215 #ifdef SYSV_IPC
216 void disconnect_from_ipc_server();
217 #endif
218 #if defined(INTERNET_DOMAIN_SOCKETS) || defined(UNIX_DOMAIN_SOCKETS)
219 void send_string (int s, const char *msg);
220 void disconnect_from_server (int s, int echo);
221 int read_line (int s, char *dest);
222 #endif
223 #ifdef INTERNET_DOMAIN_SOCKETS
224 int internet_addr (char *host);
225 #endif