3 Copyright 2001, 2002, 2003, 2004, 2008, 2012, 2013 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 4
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_MSG
,
52 CYGSERVER_REQUEST_SEM
,
53 CYGSERVER_REQUEST_SHM
,
54 CYGSERVER_REQUEST_SETPWD
,
55 CYGSERVER_REQUEST_LAST
63 request_code_t request_code
;
68 header_t (request_code_t
, size_t);
72 #ifndef __INSIDE_CYGWIN__
73 static void handle_request (transport_layer_base
*, process_cache
*);
76 client_request (request_code_t request_code
,
79 virtual ~client_request ();
81 request_code_t
request_code () const { return _header
.request_code
; }
83 int error_code () const { return _header
.error_code
; };
84 void error_code (int error_code
) { _header
.error_code
= error_code
; };
86 size_t msglen () const { return _header
.msglen
; };
87 void msglen (size_t len
) { _header
.msglen
= len
; };
92 virtual void send (transport_layer_base
*);
99 #ifndef __INSIDE_CYGWIN__
100 void handle (transport_layer_base
*, process_cache
*);
101 virtual void serve (transport_layer_base
*, process_cache
*) = 0;
105 /*---------------------------------------------------------------------------*
106 * class client_request_get_version
107 *---------------------------------------------------------------------------*/
109 class client_request_get_version
: public client_request
112 struct request_get_version
114 DWORD major
, api
, minor
, patch
;
118 client_request_get_version ();
119 bool check_version () const;
122 struct request_get_version version
;
124 #ifndef __INSIDE_CYGWIN__
125 virtual void serve (transport_layer_base
*, process_cache
*);
129 /*---------------------------------------------------------------------------*
130 * class client_request_shutdown
132 * Nb. This whole class is only !__INSIDE_CYGWIN__ since it is used
133 * solely by cygserver itself.
134 *---------------------------------------------------------------------------*/
136 #ifndef __INSIDE_CYGWIN__
138 class client_request_shutdown
: public client_request
141 client_request_shutdown ();
144 virtual void serve (transport_layer_base
*, process_cache
*);
147 #endif /* !__INSIDE_CYGWIN__ */
149 /*---------------------------------------------------------------------------*
150 * class client_request_attach_tty
151 *---------------------------------------------------------------------------*/
153 class client_request_attach_tty
: public client_request
156 struct request_attach_tty
158 DWORD pid
, master_pid
;
159 HANDLE from_master
, to_master
;
163 #ifdef __INSIDE_CYGWIN__
164 client_request_attach_tty (DWORD nmaster_pid
,
165 HANDLE nfrom_master
, HANDLE nto_master
);
167 client_request_attach_tty ();
170 HANDLE
from_master () const { return req
.from_master
; };
171 HANDLE
to_master () const { return req
.to_master
; };
174 virtual void send (transport_layer_base
*);
177 struct request_attach_tty req
;
179 #ifndef __INSIDE_CYGWIN__
180 virtual void serve (transport_layer_base
*, process_cache
*);
184 #ifndef __INSIDE_CYGWIN__
185 extern PSID admininstrator_group_sid
;
188 extern bool check_cygserver_available ();
189 extern void cygserver_init ();
191 #endif /* _CYGSERVER_H_ */