1 /* 2 * (c) Copyright 1992 by Panagiotis Tsirigotis 3 * (c) Sections Copyright 1998-2001 by Rob Braun 4 * All rights reserved. The file named COPYRIGHT specifies the terms 5 * and conditions for redistribution. 6 */ 7 8 #ifndef SERVER_H 9 #define SERVER_H 10 11 /* 12 * $Id: server.h,v 1.2 2003-08-06 06:12:10 bbraun Exp $ 13 */ 14 15 #include "config.h" 16 #include <sys/types.h> 17 #include <sys/wait.h> 18 #include <time.h> 19 20 #include "defs.h" 21 #include "pset.h" 22 23 #ifdef NO_POSIX_TYPES 24 typedef int pid_t ; 25 #endif 26 27 28 /* 29 * This struct describes running servers 30 */ 31 struct server 32 { 33 pid_t svr_pid ; 34 time_t svr_start_time ; 35 connection_s *svr_conn ; 36 struct service *svr_sp ; /* service that owns this server */ 37 int svr_fork_failures ; /* number of fork(2) failures */ 38 int svr_exit_status ; 39 bool_int svr_log_remote_user ; 40 bool_int svr_writes_to_log ; /* needed because a service may be */ 41 /* reconfigured between server */ 42 /* forking and exit */ 43 } ; 44 45 #define SERP( p ) ((struct server *)(p)) 46 47 #define SERVER_SERVICE( serp ) (serp)->svr_sp 48 #define SERVER_CONNECTION( serp) (connection_s *)(serp)->svr_conn 49 #define SERVER_CONNSERVICE( serp ) CONN_SERVICE( SERVER_CONNECTION( serp ) ) 50 #define SERVER_FD( serp ) CONN_DESCRIPTOR( (serp)->svr_conn ) 51 #define SERVER_PID( serp ) (serp)->svr_pid 52 #define SERVER_EXITSTATUS( serp ) (serp)->svr_exit_status 53 #define SERVER_STARTTIME( serp ) (serp)->svr_start_time 54 #define SERVER_LOGUSER( serp ) (serp)->svr_log_remote_user 55 #define SERVER_FORK_FAILURES( serp ) (serp)->svr_fork_failures 56 #define SERVER_WRITES_TO_LOG( serp ) (serp)->svr_writes_to_log 57 58 #define SERVER_FORKLIMIT( serp ) \ 59 ( (serp)->svr_fork_failures >= MAX_FORK_FAILURES ) 60 61 #define SERVER_SET_PID( serp, pid ) (serp)->svr_pid = (pid) 62 #define SERVER_SET_EXIT_STATUS( serp, status ) \ 63 (serp)->svr_exit_status = (status) 64 65 66 /* 67 * Macros for compatibility 68 */ 69 #ifndef OLD_WAIT 70 #define PROC_EXITED( s ) WIFEXITED( s ) 71 #define PROC_SIGNALED( s ) WIFSIGNALED( s ) 72 #define PROC_STOPPED( s ) WIFSTOPPED( s ) 73 #define PROC_EXITSTATUS( s ) WEXITSTATUS( s ) 74 #define PROC_TERMSIG( s ) WTERMSIG( s ) 75 #else 76 #define PROC_EXITED( s ) WIFEXITED( *(union wait *)&(s) ) 77 #define PROC_SIGNALED( s ) WIFSIGNALED( *(union wait *)&(s) ) 78 #define PROC_STOPPED( s ) WIFSTOPPED( *(union wait *)&(s) ) 79 #define PROC_EXITSTATUS( s ) (((union wait *)&(s))->w_T.w_Retcode) 80 #define PROC_TERMSIG( s ) (((union wait *)&(s))->w_T.w_Termsig) 81 #endif /* OLD_WAIT */ 82 83 void server_release(struct server *serp); 84 status_e server_run(struct service *sp,connection_s *cp); 85 status_e server_start(struct server *serp); 86 void server_dump(const struct server *serp,int fd); 87 void server_end(struct server *serp); 88 struct server *server_lookup(pid_t pid); 89 struct server *server_alloc( const struct server *init_serp ); 90 91 #endif /* SERVER_H */ 92 93