diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-01-30 00:54:57 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:09:22 -0500 |
commit | 55d4d36993293fee914a009f1d8f05810e347f2b (patch) | |
tree | 587a9bafd1c8df901aad8766acb0fe9ef4c3d8c0 /source4/smbd/service.h | |
parent | 5540449f1cd9d9a6efab59f2bf47be4e1487ffc2 (diff) | |
download | samba-55d4d36993293fee914a009f1d8f05810e347f2b.tar.gz samba-55d4d36993293fee914a009f1d8f05810e347f2b.tar.bz2 samba-55d4d36993293fee914a009f1d8f05810e347f2b.zip |
r5102: This is a major simplification of the logic for controlling top level
servers in smbd. The old code still contained a fairly bit of legacy
from the time when smbd was only handling SMB connection. The new code
gets rid of all of the smb_server specific code in smbd/, and creates
a much simpler infrastructures for new server code.
Major changes include:
- simplified the process model code a lot.
- got rid of the top level server and service structures
completely. The top level context is now the event_context. This
got rid of service.h and server.h completely (they were the most
confusing parts of the old code)
- added service_stream.[ch] for the helper functions that are
specific to stream type services (services that handle streams, and
use a logically separate process per connection)
- got rid of the builtin idle_handler code in the service logic, as
none of the servers were using it, and it can easily be handled by
a server in future by adding its own timed_event to the event
context.
- fixed some major memory leaks in the rpc server code.
- added registration of servers, rather than hard coding our list of
possible servers. This allows for servers as modules in the future.
- temporarily disabled the winbind code until I add the helper
functions for that type of server
- added error checking on service startup. If a configured server
fails to startup then smbd doesn't startup.
- cleaned up the command line handling in smbd, removing unused options
(This used to be commit cf6a46c3cbde7b1eb1b86bd3882b953a2de3a42e)
Diffstat (limited to 'source4/smbd/service.h')
-rw-r--r-- | source4/smbd/service.h | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/source4/smbd/service.h b/source4/smbd/service.h deleted file mode 100644 index d5335b1cef..0000000000 --- a/source4/smbd/service.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - Unix SMB/CIFS implementation. - - SERVER SERVICE code - - Copyright (C) Stefan (metze) Metzmacher 2004 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef _SERVER_SERVICE_H -#define _SERVER_SERVICE_H - -struct event_context; -struct model_ops; -struct server_context; - -struct server_connection; -struct server_service; - -/* modules can use the following to determine if the interface has changed - * please increment the version number after each interface change - * with a comment and maybe update struct process_model_critical_sizes. - */ -/* version 1 - initial version - metze */ -#define SERVER_SERVICE_VERSION 1 - -struct server_service_ops { - /* the name of the server_service */ - const char *name; - - /* called at startup when the server_service is selected */ - void (*service_init)(struct server_service *service); -}; - -struct server_stream_socket; - -struct server_stream_ops { - /* the name of the server_service */ - const char *name; - - /* called at startup when the server_service is selected */ - void (*socket_init)(struct server_stream_socket *socket); - - /* function to accept new connection */ - void (*accept_connection)(struct server_connection *); - - void (*recv_handler)(struct server_connection *, struct timeval, uint16_t); - - void (*send_handler)(struct server_connection *, struct timeval, uint16_t); - - /* function to be called when the server is idle */ - void (*idle_handler)(struct server_connection *, struct timeval); - - /* function to close a connection */ - void (*close_connection)(struct server_connection *, const char *reason); -}; - -struct socket_context; - -struct server_stream_socket { - struct server_stream_socket *next,*prev; - struct { - const struct server_stream_ops *ops; - void *private_data; - } stream; - - struct { - struct event_context *ctx; - struct fd_event *fde; - } event; - - struct socket_context *socket; - - struct server_service *service; -}; - -struct server_service { - struct server_service *next,*prev; - struct { - const struct server_service_ops *ops; - void *private_data; - } service; - - struct server_context *server; -}; - -/* the concept of whether two operations are on the same server - connection or different connections is an important one in SMB, especially - for locking and share modes. We will use a servid_t to distinguish different - connections - - this means that (for example) a unique open file is distinguished by the triple - of - servid_t server; - uint16 tid; - uint16 fnum; -*/ -typedef uint32_t servid_t; - -struct server_connection { - struct server_connection *next,*prev; - struct { - void *private_data; - servid_t id; - } connection; - - struct { - struct event_context *ctx; - struct fd_event *fde; - struct timed_event *idle; - struct timeval idle_time; - } event; - - struct socket_context *socket; - - struct server_stream_socket *stream_socket; - - struct { - struct messaging_context *ctx; - } messaging; -}; - -struct server_task; - -struct server_task_ops { - /* the name of the server_task */ - const char *name; - - /* called at startup when the server_task is selected */ - void (*task_init)(struct server_task *task); -}; - -struct server_task { - struct server_task *next,*prev; - struct { - const struct server_task_ops *ops; - void *private_data; - servid_t id; - } task; - - struct { - struct event_context *ctx; - } event; - - struct { - struct messaging_context *ctx; - } messaging; - - struct server_service *service; -}; - -#endif /* _SERVER_SERVICE_H */ |