3 Copyright 2001, 2002 Red Hat Inc.
5 Written by Egor Duda <deo@logos-m.ru>
7 This file is part of Cygwin.
9 This software is a copyrighted work licensed under the terms of the
10 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
17 #define CYGSERVER_PACKED __attribute__ ((packed))
19 #define CYGSERVER_PACKED
22 #define CYGWIN_SERVER_VERSION_MAJOR 1
23 #define CYGWIN_SERVER_VERSION_API 1
24 #define CYGWIN_SERVER_VERSION_MINOR 0
25 #define CYGWIN_SERVER_VERSION_PATCH 0
28 CYGSERVER_UNKNOWN = 0,
33 /*---------------------------------------------------------------------------*
34 * class client_request
35 *---------------------------------------------------------------------------*/
37 class transport_layer_base;
39 #ifndef __INSIDE_CYGWIN__
47 CYGSERVER_REQUEST_INVALID,
48 CYGSERVER_REQUEST_GET_VERSION,
49 CYGSERVER_REQUEST_SHUTDOWN,
50 CYGSERVER_REQUEST_ATTACH_TTY,
51 CYGSERVER_REQUEST_SHM,
52 CYGSERVER_REQUEST_LAST
60 request_code_t request_code;
65 header_t (request_code_t, size_t);
69 #ifndef __INSIDE_CYGWIN__
70 static void handle_request (transport_layer_base *, process_cache *);
73 client_request (request_code_t request_code,
76 virtual ~client_request ();
78 request_code_t request_code () const { return _header.request_code; }
80 ssize_t error_code () const { return _header.error_code; };
81 void error_code (ssize_t error_code) { _header.error_code = error_code; };
83 size_t msglen () const { return _header.msglen; };
84 void msglen (size_t len) { _header.msglen = len; };
89 virtual void send (transport_layer_base *);
96 #ifndef __INSIDE_CYGWIN__
97 void handle (transport_layer_base *, process_cache *);
98 virtual void serve (transport_layer_base *, process_cache *) = 0;
102 /*---------------------------------------------------------------------------*
103 * class client_request_get_version
104 *---------------------------------------------------------------------------*/
106 class client_request_get_version : public client_request
109 struct request_get_version
111 DWORD major, api, minor, patch;
115 client_request_get_version ();
116 bool check_version () const;
119 struct request_get_version version;
121 #ifndef __INSIDE_CYGWIN__
122 virtual void serve (transport_layer_base *, process_cache *);
126 /*---------------------------------------------------------------------------*
127 * class client_request_shutdown
129 * Nb. This whole class is only !__INSIDE_CYGWIN__ since it is used
130 * solely by cygserver itself.
131 *---------------------------------------------------------------------------*/
133 #ifndef __INSIDE_CYGWIN__
135 class client_request_shutdown : public client_request
138 client_request_shutdown ();
141 virtual void serve (transport_layer_base *, process_cache *);
144 #endif /* !__INSIDE_CYGWIN__ */
146 /*---------------------------------------------------------------------------*
147 * class client_request_attach_tty
148 *---------------------------------------------------------------------------*/
150 class client_request_attach_tty : public client_request
153 struct request_attach_tty
155 DWORD pid, master_pid;
156 HANDLE from_master, to_master;
160 #ifdef __INSIDE_CYGWIN__
161 client_request_attach_tty (DWORD nmaster_pid,
162 HANDLE nfrom_master, HANDLE nto_master);
164 client_request_attach_tty ();
167 HANDLE from_master () const { return req.from_master; };
168 HANDLE to_master () const { return req.to_master; };
171 virtual void send (transport_layer_base *);
174 struct request_attach_tty req;
176 #ifndef __INSIDE_CYGWIN__
177 virtual void serve (transport_layer_base *, process_cache *);
181 extern bool check_cygserver_available ();
182 extern void cygserver_init ();
184 #endif /* _CYGSERVER_H_ */