Mercurial > hg > xemacs-beta
comparison lib-src/gnuserv.h @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children | 84b14dcb0985 |
comparison
equal
deleted
inserted
replaced
427:0a0253eac470 | 428:3ecd8885ac67 |
---|---|
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 <../src/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 |