diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2003-11-19 18:49:41 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2003-11-19 18:49:41 +0000 |
commit | 282113ba894449ed17e85b296cf0760d5206ac8d (patch) | |
tree | 830bd7ad49e085ea8cde78fea68848fbbca09880 /winsup/cygserver/client.cc | |
parent | 64cfc6f213541f0e9e8e57011af8a56aca8c8216 (diff) | |
download | cygnal-282113ba894449ed17e85b296cf0760d5206ac8d.tar.gz cygnal-282113ba894449ed17e85b296cf0760d5206ac8d.tar.bz2 cygnal-282113ba894449ed17e85b296cf0760d5206ac8d.zip |
Don't use safe_new but new throughout. Fix copyright dates
throughout.
* Makefile.in: Accomodate all new files and name changes.
Add a *.d dependency.
(sbindir): Add.
(etcdir): Drop in favor of more appropriate sysconfdir definition.
(sysconfdir): Add.
(CXXFLAGS): Add -MMD flag. Add SYSCONFDIR definition.
(.SUFFIXES): Add.
(install): Add action items.
(libclean): New target.
(fullclean): Ditto.
* bsd_helper.cc: New file.
* bsd_helper.h: Ditto.
* bsd_log.cc: Ditto.
* bsd_log.h: Ditto.
* bsd_mutex.cc: Ditto.
* bsd_mutex.h: Ditto.
* client.cc: Rearrange to build as less as possible if
__INSIDE_CYGWIN__.
(client_request::handle_request): Add Message Queue and Semaphore
handling.
* cygserver.cc: Rearrange to build as less as possible if
__INSIDE_CYGWIN__. Use new debug/log/panic logging functions.
(DEF_CONFIG_FILE): New definition for configuration file. Use
throughout.
(getfunc): Remove.
(__cygserver__printf): Remove.
(client_request_attach_tty::serve): Return error if impersonation
fails.
(print_usage): Pump up help message.
(print_version): Add output of default configuration file.
(main): Accommodate new options. Allow overwrite of threading options
from config file. Call several new initialization functions. Drop
printing dots. Don't define SIGHANDLE inline.
* cygserver.conf: New file.
* cygserver_process.h: Rename to process.h.
* cygserver_transport.h: Rename to transport.h.
* cygserver_transport_pipes.h: Rename to transport_pipes.h.
* cygserver_transport_sockets.h: Rename to transport_sockets.h.
* msg.cc: Rewrite.
* sem.cc: Rewrite.
* shm.cc: Rewrite.
* sysv_msg.cc: New file, derived from FreeBSD version 1.52.
* sysv_sem.cc: New file, derived from FreeBSD version 1.66.
* sysv_shm.cc: New file, derived from FreeBSD version 1.89.
* threaded_queue.cc: Rearrange to build as less as possible if
__INSIDE_CYGWIN__.
* transport.cc (transport_layer_base::impersonate_client): Define bool.
(transport_layer_base::revert_to_self): Ditto.
* transport.h (transport_layer_base::impersonate_client): Declare bool.
(transport_layer_base::revert_to_self): Ditto.
* transport_pipes.cc (transport_layer_pipes::transport_layer_pipes):
Don't call init_security.
(init_security): Remove.
(transport_layer_pipes::accept): Use global sec_all_nih.
(transport_layer_pipes::connect): Ditto.
(transport_layer_pipes::impersonate_client): Define bool.
(transport_layer_pipes::revert_to_self): Ditt.
* transport_pipes.h (transport_layer_pipes::impersonate_client): Declare
bool.
(transport_layer_pipes::revert_to_self): Ditto.
* woutsup.h: Include bsd compatibility headers.
(SIGHANDLE): Add definition.
(__cygserver__printf): Remove definition.
(__noop_printf): Ditto.
(debug_printf): Define using debug.
(syscall_printf): Define using log.
(system_printf): Ditto.
Drop all other _printf definitions.
Diffstat (limited to 'winsup/cygserver/client.cc')
-rw-r--r-- | winsup/cygserver/client.cc | 190 |
1 files changed, 103 insertions, 87 deletions
diff --git a/winsup/cygserver/client.cc b/winsup/cygserver/client.cc index 600ddbd67..d8f7ac55a 100644 --- a/winsup/cygserver/client.cc +++ b/winsup/cygserver/client.cc @@ -1,6 +1,6 @@ -/* cygserver_client.cc +/* client.cc - Copyright 2001, 2002 Red Hat Inc. + Copyright 2001, 2002, 2003 Red Hat Inc. Written by Egor Duda <deo@logos-m.ru> @@ -22,11 +22,12 @@ details. */ #include <unistd.h> #include "cygerrno.h" +#include "cygserver_msg.h" +#include "cygserver_sem.h" #include "cygserver_shm.h" -#include "safe_memory.h" #include "cygserver.h" -#include "cygserver_transport.h" +#include "transport.h" int cygserver_running = CYGSERVER_UNKNOWN; // Nb: inherited by children. @@ -48,6 +49,8 @@ client_request_get_version::client_request_get_version () * the first numbers match, that is). */ +#ifdef __INSIDE_CYGWIN__ + bool client_request_get_version::check_version () const { @@ -71,8 +74,6 @@ client_request_get_version::check_version () const return ok; } -#ifdef __INSIDE_CYGWIN__ - client_request_attach_tty::client_request_attach_tty (DWORD nmaster_pid, HANDLE nfrom_master, HANDLE nto_master) @@ -87,15 +88,6 @@ client_request_attach_tty::client_request_attach_tty (DWORD nmaster_pid, "from_master = %lu, to_master = %lu"), req.pid, req.master_pid, req.from_master, req.to_master); } - -#else /* !__INSIDE_CYGWIN__ */ - -client_request_attach_tty::client_request_attach_tty () - : client_request (CYGSERVER_REQUEST_ATTACH_TTY, &req, sizeof (req)) -{ - // verbose: syscall_printf ("created"); -} - #endif /* __INSIDE_CYGWIN__ */ /* @@ -230,7 +222,12 @@ client_request::send (transport_layer_base * const conn) // sizeof (_header), msglen ()); } -#ifndef __INSIDE_CYGWIN__ +#ifdef __OUTSIDE_CYGWIN__ + +client_request_attach_tty::client_request_attach_tty () + : client_request (CYGSERVER_REQUEST_ATTACH_TTY, &req, sizeof (req)) +{ +} /* * client_request::handle_request () @@ -277,16 +274,22 @@ client_request::handle_request (transport_layer_base *const conn, switch (header.request_code) { case CYGSERVER_REQUEST_GET_VERSION: - req = safe_new0 (client_request_get_version); + req = new client_request_get_version; break; case CYGSERVER_REQUEST_SHUTDOWN: - req = safe_new0 (client_request_shutdown); + req = new client_request_shutdown; break; case CYGSERVER_REQUEST_ATTACH_TTY: - req = safe_new0 (client_request_attach_tty); + req = new client_request_attach_tty; + break; + case CYGSERVER_REQUEST_MSG: + req = new client_request_msg; + break; + case CYGSERVER_REQUEST_SEM: + req = new client_request_sem; break; case CYGSERVER_REQUEST_SHM: - req = safe_new0 (client_request_shm); + req = new client_request_shm; break; default: syscall_printf ("unknown request code %d received: request ignored", @@ -299,74 +302,9 @@ client_request::handle_request (transport_layer_base *const conn, req->msglen (header.msglen); req->handle (conn, cache); - safe_delete (req); - -#ifndef DEBUGGING - printf ("."); // A little noise when we're being quiet. -#endif -} - -#endif /* !__INSIDE_CYGWIN__ */ - -client_request::client_request (request_code_t const id, - void * const buf, - size_t const buflen) - : _header (id, buflen), - _buf (buf), - _buflen (buflen) -{ - assert ((!_buf && !_buflen) || (_buf && _buflen)); -} - -client_request::~client_request () -{} - -int -client_request::make_request () -{ - assert (cygserver_running == CYGSERVER_UNKNOWN \ - || cygserver_running == CYGSERVER_OK \ - || cygserver_running == CYGSERVER_UNAVAIL); - - if (cygserver_running == CYGSERVER_UNKNOWN) - cygserver_init (); - - assert (cygserver_running == CYGSERVER_OK \ - || cygserver_running == CYGSERVER_UNAVAIL); - - /* Don't retry every request if the server's not there */ - if (cygserver_running == CYGSERVER_UNAVAIL) - { - syscall_printf ("cygserver un-available"); - error_code (ENOSYS); - return -1; - } - - transport_layer_base *const transport = create_server_transport (); - - assert (transport); - - if (transport->connect () == -1) - { - if (errno) - error_code (errno); - else - error_code (ENOSYS); - safe_delete (transport); - return -1; - } - - // verbose: debug_printf ("connected to server %p", transport); - - send (transport); - - safe_delete (transport); - - return 0; + delete req; } -#ifndef __INSIDE_CYGWIN__ - /* * client_request::handle () * @@ -470,7 +408,84 @@ client_request::handle (transport_layer_base *const conn, // sizeof (_header), msglen ()); } -#endif /* !__INSIDE_CYGWIN__ */ +/* The server side implementation of make_request. Very simple. */ +int +client_request::make_request () +{ + transport_layer_base *const transport = create_server_transport (); + assert (transport); + if (transport->connect () == -1) + { + if (errno) + error_code (errno); + else + error_code (ENOSYS); + delete transport; + return -1; + } + send (transport); + delete transport; + return 0; +} +#endif /* __OUTSIDE_CYGWIN__ */ + +client_request::client_request (request_code_t const id, + void * const buf, + size_t const buflen) + : _header (id, buflen), + _buf (buf), + _buflen (buflen) +{ + assert ((!_buf && !_buflen) || (_buf && _buflen)); +} + +client_request::~client_request () +{} + +#ifdef __INSIDE_CYGWIN__ +int +client_request::make_request () +{ + assert (cygserver_running == CYGSERVER_UNKNOWN \ + || cygserver_running == CYGSERVER_OK \ + || cygserver_running == CYGSERVER_UNAVAIL); + + if (cygserver_running == CYGSERVER_UNKNOWN) + cygserver_init (); + + assert (cygserver_running == CYGSERVER_OK \ + || cygserver_running == CYGSERVER_UNAVAIL); + + /* Don't retry every request if the server's not there */ + if (cygserver_running == CYGSERVER_UNAVAIL) + { + syscall_printf ("cygserver un-available"); + error_code (ENOSYS); + return -1; + } + + transport_layer_base *const transport = create_server_transport (); + + assert (transport); + + if (transport->connect () == -1) + { + if (errno) + error_code (errno); + else + error_code (ENOSYS); + delete transport; + return -1; + } + + // verbose: debug_printf ("connected to server %p", transport); + + send (transport); + + delete transport; + + return 0; +} bool check_cygserver_available () @@ -523,3 +538,4 @@ cygserver_init () if (!check_cygserver_available ()) cygserver_running = CYGSERVER_UNAVAIL; } +#endif /* __INSIDE_CYGWIN__ */ |