add systemd support
[platform/upstream/cups.git] / scheduler / client.h
1 /*
2  * "$Id: client.h 9652 2011-03-25 21:25:38Z mike $"
3  *
4  *   Client definitions for the CUPS scheduler.
5  *
6  *   Copyright 2007-2011 by Apple Inc.
7  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
8  *
9  *   These coded instructions, statements, and computer programs are the
10  *   property of Apple Inc. and are protected by Federal copyright
11  *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
12  *   which should have been included with this file.  If this file is
13  *   file is missing or damaged, see the license at "http://www.cups.org/".
14  */
15
16 #ifdef HAVE_AUTHORIZATION_H
17 #  include <Security/Authorization.h>
18 #endif /* HAVE_AUTHORIZATION_H */
19
20
21 /*
22  * HTTP client structure...
23  */
24
25 struct cupsd_client_s
26 {
27   http_t                http;           /* HTTP client connection */
28   ipp_t                 *request,       /* IPP request information */
29                         *response;      /* IPP response information */
30   cupsd_location_t      *best;          /* Best match for AAA */
31   struct timeval        start;          /* Request start time */
32   http_state_t          operation;      /* Request operation */
33   off_t                 bytes;          /* Bytes transferred for this request */
34   int                   type;           /* AuthType for username */
35   char                  username[256],  /* Username from Authorization: line */
36                         password[33],   /* Password from Authorization: line */
37                         uri[HTTP_MAX_URI],
38                                         /* Localized URL/URI for GET/PUT */
39                         *filename,      /* Filename of output file */
40                         *command,       /* Command to run */
41                         *options,       /* Options for command */
42                         *query_string;  /* QUERY_STRING environment variable */
43   int                   file;           /* Input/output file */
44   int                   file_ready;     /* Input ready on file/pipe? */
45   int                   pipe_pid;       /* Pipe process ID (or 0 if not a pipe) */
46   int                   sent_header,    /* Non-zero if sent HTTP header */
47                         got_fields,     /* Non-zero if all fields seen */
48                         header_used;    /* Number of header bytes used */
49   char                  header[2048];   /* Header from CGI program */
50   cups_lang_t           *language;      /* Language to use */
51 #ifdef HAVE_SSL
52   int                   auto_ssl;       /* Automatic test for SSL/TLS */
53 #endif /* HAVE_SSL */
54   http_addr_t           clientaddr;     /* Client address */
55   char                  servername[256];/* Server name for connection */
56   int                   serverport;     /* Server port for connection */
57 #ifdef HAVE_GSSAPI
58   int                   have_gss;       /* Have GSS credentials? */
59   uid_t                 gss_uid;        /* User ID for local prints */
60 #endif /* HAVE_GSSAPI */
61 #ifdef HAVE_AUTHORIZATION_H
62   AuthorizationRef      authref;        /* Authorization ref */
63 #endif /* HAVE_AUTHORIZATION_H */
64 };
65
66 #define HTTP(con) &((con)->http)
67
68
69 /*
70  * HTTP listener structure...
71  */
72
73 typedef struct
74 {
75   int                   fd;             /* File descriptor for this server */
76   http_addr_t           address;        /* Bind address of socket */
77   http_encryption_t     encryption;     /* To encrypt or not to encrypt... */
78 #ifdef HAVE_SYSTEMD
79   int                   is_systemd;     /* Is this a systemd socket? */
80 #endif /* HAVE_SYSTEMD */
81 } cupsd_listener_t;
82
83
84 /*
85  * Globals...
86  */
87
88 VAR int                 ListenBackLog   VALUE(SOMAXCONN),
89                                         /* Max backlog of pending connections */
90                         LocalPort       VALUE(631),
91                                         /* Local port to use */
92                         RemotePort      VALUE(0);
93                                         /* Remote port to use */
94 VAR http_encryption_t   LocalEncryption VALUE(HTTP_ENCRYPT_IF_REQUESTED);
95                                         /* Local port encryption to use */
96 VAR cups_array_t        *Listeners      VALUE(NULL);
97                                         /* Listening sockets */
98 VAR time_t              ListeningPaused VALUE(0);
99                                         /* Time when listening was paused */
100 VAR cups_array_t        *Clients        VALUE(NULL),
101                                         /* HTTP clients */
102                         *ActiveClients  VALUE(NULL);
103                                         /* Active HTTP clients */
104 VAR char                *ServerHeader   VALUE(NULL);
105                                         /* Server header in requests */
106 VAR int                 CGIPipes[2]     VALUE2(-1,-1);
107                                         /* Pipes for CGI error/debug output */
108 VAR cupsd_statbuf_t     *CGIStatusBuffer VALUE(NULL);
109                                         /* Status buffer for pipes */
110
111
112 /*
113  * Prototypes...
114  */
115
116 extern void     cupsdAcceptClient(cupsd_listener_t *lis);
117 extern void     cupsdCloseAllClients(void);
118 extern int      cupsdCloseClient(cupsd_client_t *con);
119 extern void     cupsdDeleteAllListeners(void);
120 extern int      cupsdFlushHeader(cupsd_client_t *con);
121 extern void     cupsdPauseListening(void);
122 extern int      cupsdProcessIPPRequest(cupsd_client_t *con);
123 extern void     cupsdReadClient(cupsd_client_t *con);
124 extern void     cupsdResumeListening(void);
125 extern int      cupsdSendCommand(cupsd_client_t *con, char *command,
126                                  char *options, int root);
127 extern int      cupsdSendError(cupsd_client_t *con, http_status_t code,
128                                int auth_type);
129 extern int      cupsdSendHeader(cupsd_client_t *con, http_status_t code,
130                                 char *type, int auth_type);
131 extern void     cupsdShutdownClient(cupsd_client_t *con);
132 extern void     cupsdStartListening(void);
133 extern void     cupsdStopListening(void);
134 extern void     cupsdUpdateCGI(void);
135 extern void     cupsdWriteClient(cupsd_client_t *con);
136
137
138 /*
139  * End of "$Id: client.h 9652 2011-03-25 21:25:38Z mike $".
140  */