]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - scheduler/client.h
Changelog.
[thirdparty/cups.git] / scheduler / client.h
index a8d908c7974c8a49447700bbe67c62e4ecec1117..2935971357eca062046728764daf9a8d57c7d25d 100644 (file)
@@ -1,52 +1,69 @@
 /*
- * "$Id: client.h,v 1.33 2004/08/23 18:00:59 mike Exp $"
+ * "$Id$"
  *
- *   Client definitions for the Common UNIX Printing System (CUPS) scheduler.
+ *   Client definitions for the CUPS scheduler.
  *
- *   Copyright 1997-2004 by Easy Software Products, all rights reserved.
+ *   Copyright 2007-2011 by Apple Inc.
+ *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
- *   property of Easy Software Products and are protected by Federal
- *   copyright law.  Distribution and use rights are outlined in the file
- *   "LICENSE.txt" which should have been included with this file.  If this
- *   file is missing or damaged please contact Easy Software Products
- *   at:
- *
- *       Attn: CUPS Licensing Information
- *       Easy Software Products
- *       44141 Airport View Drive, Suite 204
- *       Hollywood, Maryland 20636 USA
- *
- *       Voice: (301) 373-9600
- *       EMail: cups-info@cups.org
- *         WWW: http://www.cups.org
+ *   property of Apple Inc. and are protected by Federal copyright
+ *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+ *   which should have been included with this file.  If this file is
+ *   file is missing or damaged, see the license at "http://www.cups.org/".
  */
 
+#ifdef HAVE_AUTHORIZATION_H
+#  include <Security/Authorization.h>
+#endif /* HAVE_AUTHORIZATION_H */
+
+
 /*
  * HTTP client structure...
  */
 
-typedef struct
+struct cupsd_client_s
 {
-  http_t       http;                   /* HTTP client connection */
-  ipp_t                *request,               /* IPP request information */
-               *response;              /* IPP response information */
-  time_t       start;                  /* Request start time */
-  http_state_t operation;              /* Request operation */
-  int          bytes;                  /* Bytes transferred for this request */
-  char         username[33],           /* Username from Authorization: line */
-               password[33],           /* Password from Authorization: line */
-               uri[HTTP_MAX_URI],      /* Localized URL/URI for GET/PUT */
-               *filename,              /* Filename of output file */
-               *command,               /* Command to run */
-               *options;               /* Options for command */
-  int          file;                   /* Input/output file */
-  int          file_ready;             /* Input ready on file/pipe? */
-  int          pipe_pid;               /* Pipe process ID (or 0 if not a pipe) */
-  int          got_fields,             /* Non-zero if all fields seen */
-               field_col;              /* Column within line */
-  cups_lang_t  *language;              /* Language to use */
-} client_t;
+  http_t               http;           /* HTTP client connection */
+  ipp_t                        *request,       /* IPP request information */
+                       *response;      /* IPP response information */
+  cupsd_location_t     *best;          /* Best match for AAA */
+  struct timeval       start;          /* Request start time */
+  http_state_t         operation;      /* Request operation */
+  off_t                        bytes;          /* Bytes transferred for this request */
+  int                  type;           /* AuthType for username */
+  char                 username[HTTP_MAX_VALUE],
+                                       /* Username from Authorization: line */
+                       password[HTTP_MAX_VALUE],
+                                       /* Password from Authorization: line */
+                       uri[HTTP_MAX_URI],
+                                       /* Localized URL/URI for GET/PUT */
+                       *filename,      /* Filename of output file */
+                       *command,       /* Command to run */
+                       *options,       /* Options for command */
+                       *query_string;  /* QUERY_STRING environment variable */
+  int                  file;           /* Input/output file */
+  int                  file_ready;     /* Input ready on file/pipe? */
+  int                  pipe_pid;       /* Pipe process ID (or 0 if not a pipe) */
+  int                  sent_header,    /* Non-zero if sent HTTP header */
+                       got_fields,     /* Non-zero if all fields seen */
+                       header_used;    /* Number of header bytes used */
+  char                 header[2048];   /* Header from CGI program */
+  cups_lang_t          *language;      /* Language to use */
+#ifdef HAVE_SSL
+  int                  auto_ssl;       /* Automatic test for SSL/TLS */
+#endif /* HAVE_SSL */
+  http_addr_t          clientaddr;     /* Client address */
+  char                 servername[256];/* Server name for connection */
+  int                  serverport;     /* Server port for connection */
+#ifdef HAVE_GSSAPI
+  int                  have_gss;       /* Have GSS credentials? */
+  uid_t                        gss_uid;        /* User ID for local prints */
+#endif /* HAVE_GSSAPI */
+#ifdef HAVE_AUTHORIZATION_H
+  AuthorizationRef     authref;        /* Authorization ref */
+#endif /* HAVE_AUTHORIZATION_H */
+};
 
 #define HTTP(con) &((con)->http)
 
@@ -58,9 +75,9 @@ typedef struct
 typedef struct
 {
   int                  fd;             /* File descriptor for this server */
-  struct sockaddr_in   address;        /* Bind address of socket */
+  http_addr_t          address;        /* Bind address of socket */
   http_encryption_t    encryption;     /* To encrypt or not to encrypt... */
-} listener_t;
+} cupsd_listener_t;
 
 
 /*
@@ -69,50 +86,59 @@ typedef struct
 
 VAR int                        ListenBackLog   VALUE(SOMAXCONN),
                                        /* Max backlog of pending connections */
-                       LocalPort       VALUE(631);
+                       LocalPort       VALUE(631),
                                        /* Local port to use */
+                       RemotePort      VALUE(0);
+                                       /* Remote port to use */
 VAR http_encryption_t  LocalEncryption VALUE(HTTP_ENCRYPT_IF_REQUESTED);
                                        /* Local port encryption to use */
-VAR int                        NumListeners    VALUE(0);
-                                       /* Number of listening sockets */
-VAR listener_t         *Listeners      VALUE(NULL);
+VAR cups_array_t       *Listeners      VALUE(NULL);
                                        /* Listening sockets */
-VAR int                        NumClients      VALUE(0);
-                                       /* Number of HTTP clients */
-VAR client_t           *Clients        VALUE(NULL);
+VAR time_t             ListeningPaused VALUE(0);
+                                       /* Time when listening was paused */
+VAR cups_array_t       *Clients        VALUE(NULL),
                                        /* HTTP clients */
-VAR struct sockaddr_in ServerAddr;     /* Server IP address */
+                       *ActiveClients  VALUE(NULL);
+                                       /* Active HTTP clients */
 VAR char               *ServerHeader   VALUE(NULL);
                                        /* Server header in requests */
 VAR int                        CGIPipes[2]     VALUE2(-1,-1);
                                        /* Pipes for CGI error/debug output */
+VAR cupsd_statbuf_t    *CGIStatusBuffer VALUE(NULL);
+                                       /* Status buffer for pipes */
 
 
 /*
  * Prototypes...
  */
 
-extern void    AcceptClient(listener_t *lis);
-extern void    CloseAllClients(void);
-extern int     CloseClient(client_t *con);
-extern int     EncryptClient(client_t *con);
-extern int     IsCGI(client_t *con, const char *filename,
-                     struct stat *filestats, mime_type_t *type);
-extern void    PauseListening(void);
-extern int     ProcessIPPRequest(client_t *con);
-extern int     ReadClient(client_t *con);
-extern void    ResumeListening(void);
-extern int     SendCommand(client_t *con, char *command, char *options);
-extern int     SendError(client_t *con, http_status_t code);
-extern int     SendFile(client_t *con, http_status_t code, char *filename,
-                        char *type, struct stat *filestats);
-extern int     SendHeader(client_t *con, http_status_t code, char *type);
-extern void    ShutdownClient(client_t *con);
-extern void    StartListening(void);
-extern void    StopListening(void);
-extern void    UpdateCGI(void);
-extern int     WriteClient(client_t *con);
+extern void    cupsdAcceptClient(cupsd_listener_t *lis);
+extern void    cupsdCloseAllClients(void);
+extern int     cupsdCloseClient(cupsd_client_t *con);
+extern void    cupsdDeleteAllListeners(void);
+extern int     cupsdFlushHeader(cupsd_client_t *con);
+extern void    cupsdPauseListening(void);
+extern int     cupsdProcessIPPRequest(cupsd_client_t *con);
+extern void    cupsdReadClient(cupsd_client_t *con);
+extern void    cupsdResumeListening(void);
+extern int     cupsdSendCommand(cupsd_client_t *con, char *command,
+                                char *options, int root);
+extern int     cupsdSendError(cupsd_client_t *con, http_status_t code,
+                              int auth_type);
+extern int     cupsdSendHeader(cupsd_client_t *con, http_status_t code,
+                               char *type, int auth_type);
+extern void    cupsdShutdownClient(cupsd_client_t *con);
+extern void    cupsdStartListening(void);
+extern void    cupsdStopListening(void);
+extern void    cupsdUpdateCGI(void);
+extern void    cupsdWriteClient(cupsd_client_t *con);
+
+#ifdef HAVE_SSL
+extern int     cupsdEndTLS(cupsd_client_t *con);
+extern int     cupsdStartTLS(cupsd_client_t *con);
+#endif /* HAVE_SSL */
+
 
 /*
- * End of "$Id: client.h,v 1.33 2004/08/23 18:00:59 mike Exp $".
+ * End of "$Id$".
  */