summaryrefslogtreecommitdiff
path: root/scheduler
diff options
context:
space:
mode:
authorjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>2006-10-20 18:36:23 +0000
committerjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>2006-10-20 18:36:23 +0000
commit2abf387cae0cce4bf3a0a259ded28ef0269aec47 (patch)
treee62c740dbab4b00ffb2cb1db8c57194a7553648b /scheduler
parent07725fee410af68be5081d9b1af3536eff5326b8 (diff)
downloadcups-2abf387cae0cce4bf3a0a259ded28ef0269aec47.tar.gz
Load cups into easysw/current.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@224 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'scheduler')
-rw-r--r--scheduler/client.c26
-rw-r--r--scheduler/cups-lpd.c9
-rw-r--r--scheduler/dirsvc.c6
-rw-r--r--scheduler/ipp.c201
-rw-r--r--scheduler/job.c10
-rw-r--r--scheduler/log.c13
-rw-r--r--scheduler/subscriptions.c17
7 files changed, 122 insertions, 160 deletions
diff --git a/scheduler/client.c b/scheduler/client.c
index 762421f2d..85e2ac205 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -1,5 +1,5 @@
/*
- * "$Id: client.c 5972 2006-09-19 20:44:07Z mike $"
+ * "$Id: client.c 6027 2006-10-11 21:04:58Z mike $"
*
* Client routines for the Common UNIX Printing System (CUPS) scheduler.
*
@@ -796,7 +796,19 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
cupsdClearString(&con->command);
cupsdClearString(&con->options);
- if (con->language != NULL)
+ if (con->request)
+ {
+ ippDelete(con->request);
+ con->request = NULL;
+ }
+
+ if (con->response)
+ {
+ ippDelete(con->response);
+ con->response = NULL;
+ }
+
+ if (con->language)
{
cupsLangFree(con->language);
con->language = NULL;
@@ -1747,7 +1759,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
"CHUNKED" : "LENGTH",
CUPS_LLCAST con->http.data_remaining, con->file);
- if (con->request != NULL)
+ if (con->request)
{
/*
* Grab any request data from the connection...
@@ -2267,7 +2279,7 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
con->http.state != HTTP_POST_SEND)
return (1);
- if (con->response != NULL)
+ if (con->response)
{
ipp_state = ippWrite(HTTP(con), con->response);
bytes = ipp_state != IPP_ERROR && ipp_state != IPP_DATA;
@@ -2463,13 +2475,13 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
cupsdClearString(&con->filename);
}
- if (con->request != NULL)
+ if (con->request)
{
ippDelete(con->request);
con->request = NULL;
}
- if (con->response != NULL)
+ if (con->response)
{
ippDelete(con->response);
con->response = NULL;
@@ -4188,5 +4200,5 @@ write_file(cupsd_client_t *con, /* I - Client connection */
/*
- * End of "$Id: client.c 5972 2006-09-19 20:44:07Z mike $".
+ * End of "$Id: client.c 6027 2006-10-11 21:04:58Z mike $".
*/
diff --git a/scheduler/cups-lpd.c b/scheduler/cups-lpd.c
index caa6bef9a..e771c9eff 100644
--- a/scheduler/cups-lpd.c
+++ b/scheduler/cups-lpd.c
@@ -1,5 +1,5 @@
/*
- * "$Id: cups-lpd.c 5878 2006-08-24 15:55:42Z mike $"
+ * "$Id: cups-lpd.c 6022 2006-10-10 19:47:03Z mike $"
*
* Line Printer Daemon interface for the Common UNIX Printing System (CUPS).
*
@@ -150,8 +150,6 @@ main(int argc, /* I - Number of command-line arguments */
num_defaults = 0;
defaults = NULL;
hostlookups = 1;
- num_defaults = cupsAddOption("job-originating-host-name", hostname,
- num_defaults, &defaults);
for (i = 1; i < argc; i ++)
if (argv[i][0] == '-')
@@ -217,6 +215,9 @@ main(int argc, /* I - Number of command-line arguments */
hostip);
}
+ num_defaults = cupsAddOption("job-originating-host-name", hostname,
+ num_defaults, &defaults);
+
/*
* RFC1179 specifies that only 1 daemon command can be received for
* every connection.
@@ -1716,5 +1717,5 @@ smart_gets(char *s, /* I - Pointer to line buffer */
/*
- * End of "$Id: cups-lpd.c 5878 2006-08-24 15:55:42Z mike $".
+ * End of "$Id: cups-lpd.c 6022 2006-10-10 19:47:03Z mike $".
*/
diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c
index eb4f790f5..75b44a7eb 100644
--- a/scheduler/dirsvc.c
+++ b/scheduler/dirsvc.c
@@ -1,5 +1,5 @@
/*
- * "$Id: dirsvc.c 5940 2006-09-11 18:30:09Z mike $"
+ * "$Id: dirsvc.c 6003 2006-10-02 16:26:04Z mike $"
*
* Directory services routines for the Common UNIX Printing System (CUPS).
*
@@ -1062,7 +1062,7 @@ cupsdStartPolling(void)
* Don't do anything if we aren't polling...
*/
- if (NumPolled == 0)
+ if (NumPolled == 0 || BrowseSocket < 0)
{
PollPipe = -1;
PollStatusBuffer = NULL;
@@ -3181,5 +3181,5 @@ slp_url_callback(
/*
- * End of "$Id: dirsvc.c 5940 2006-09-11 18:30:09Z mike $".
+ * End of "$Id: dirsvc.c 6003 2006-10-02 16:26:04Z mike $".
*/
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
index 22a21f496..7b0e43247 100644
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ipp.c 5970 2006-09-19 20:11:08Z mike $"
+ * "$Id: ipp.c 6032 2006-10-12 19:19:47Z mike $"
*
* IPP routines for the Common UNIX Printing System (CUPS) scheduler.
*
@@ -71,7 +71,6 @@
* get_username() - Get the username associated with a request.
* hold_job() - Hold a print job.
* move_job() - Move a job to a new destination.
- * ppd_add_default() - Add a PPD default choice.
* ppd_parse_line() - Parse a PPD default line.
* print_job() - Print a file to a printer or class.
* read_ps_line() - Read a line from a PS file...
@@ -108,17 +107,6 @@
/*
- * PPD default choice structure...
- */
-
-typedef struct
-{
- char option[PPD_MAX_NAME]; /* Main keyword (option name) */
- char choice[PPD_MAX_NAME]; /* Option keyword (choice name) */
-} ppd_default_t;
-
-
-/*
* Local functions...
*/
@@ -178,8 +166,6 @@ static void get_subscriptions(cupsd_client_t *con, ipp_attribute_t *uri);
static const char *get_username(cupsd_client_t *con);
static void hold_job(cupsd_client_t *con, ipp_attribute_t *uri);
static void move_job(cupsd_client_t *con, ipp_attribute_t *uri);
-static int ppd_add_default(const char *option, const char *choice,
- int num_defaults, ppd_default_t **defaults);
static int ppd_parse_line(const char *line, char *option, int olen,
char *choice, int clen);
static void print_job(cupsd_client_t *con, ipp_attribute_t *uri);
@@ -1351,7 +1337,7 @@ add_job(cupsd_client_t *con, /* I - Client connection */
job->dtype = dtype;
job->attrs = con->request;
- con->request = NULL;
+ con->request = ippNewRequest(job->attrs->request.op.operation_id);
add_job_uuid(con, job);
apply_printer_defaults(printer, job);
@@ -3465,8 +3451,8 @@ copy_attrs(ipp_t *to, /* I - Destination request */
* Filter attributes as needed...
*/
- if (group != IPP_TAG_ZERO && fromattr->group_tag != group &&
- fromattr->group_tag != IPP_TAG_ZERO && !fromattr->name)
+ if ((group != IPP_TAG_ZERO && fromattr->group_tag != group &&
+ fromattr->group_tag != IPP_TAG_ZERO) || !fromattr->name)
continue;
if (!ra || cupsArrayFind(ra, fromattr->name))
@@ -3819,15 +3805,15 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
*envp[MAX_ENV]; /* Environment */
cups_file_t *src, /* Source file */
*dst; /* Destination file */
+ ppd_file_t *ppd; /* PPD file */
int bytes, /* Bytes from pipe */
total; /* Total bytes from pipe */
- char buffer[2048], /* Copy buffer */
- *ptr; /* Pointer into buffer */
+ char buffer[2048]; /* Copy buffer */
int i; /* Looping var */
char option[PPD_MAX_NAME], /* Option name */
choice[PPD_MAX_NAME]; /* Choice name */
int num_defaults; /* Number of default options */
- ppd_default_t *defaults; /* Default options */
+ cups_option_t *defaults; /* Default options */
char cups_protocol[PPD_MAX_LINE];
/* cupsProtocol attribute */
int have_letter, /* Have Letter size */
@@ -3968,41 +3954,14 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
* Read the source file and see what page sizes are supported...
*/
- if ((src = cupsFileOpen(tempfile, "rb")) == NULL)
+ if ((ppd = ppdOpenFile(tempfile)) == NULL)
{
unlink(tempfile);
return (-1);
}
- have_letter = 0;
- have_a4 = 0;
-
- while (cupsFileGets(src, buffer, sizeof(buffer)))
- if (!strncmp(buffer, "*PageSize ", 10))
- {
- /*
- * Strip UI text and command data from the end of the line...
- */
-
- if ((ptr = strchr(buffer + 10, '/')) != NULL)
- *ptr = '\0';
- if ((ptr = strchr(buffer + 10, ':')) != NULL)
- *ptr = '\0';
-
- for (ptr = buffer + 10; isspace(*ptr); ptr ++);
-
- /*
- * Look for Letter and A4 page sizes...
- */
-
- if (!strcmp(ptr, "Letter"))
- have_letter = 1;
-
- if (!strcmp(ptr, "A4"))
- have_a4 = 1;
- }
-
- cupsFileRewind(src);
+ have_letter = ppdPageSize(ppd, "Letter") != NULL;
+ have_a4 = ppdPageSize(ppd, "A4") != NULL;
/*
* Open the destination (if possible) and set the default options...
@@ -4027,8 +3986,21 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
if (!ppd_parse_line(buffer, option, sizeof(option),
choice, sizeof(choice)))
- num_defaults = ppd_add_default(option, choice, num_defaults,
+ {
+ ppd_option_t *ppdo; /* PPD option */
+
+
+ /*
+ * Only add the default if the default hasn't already been
+ * set and the choice exists in the new PPD...
+ */
+
+ if (!cupsGetOption(option, num_defaults, defaults) &&
+ (ppdo = ppdFindOption(ppd, option)) != NULL &&
+ ppdFindChoice(ppdo, choice))
+ num_defaults = cupsAddOption(option, choice, num_defaults,
&defaults);
+ }
}
else if (!strncmp(buffer, "*cupsProtocol:", 14))
strlcpy(cups_protocol, buffer, sizeof(cups_protocol));
@@ -4074,6 +4046,7 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
!strcasecmp(DefaultLanguage, "C") ||
!strcasecmp(DefaultLanguage, "POSIX") ||
!strcasecmp(DefaultLanguage, "en") ||
+ !strncasecmp(DefaultLanguage, "en.", 3) ||
!strncasecmp(DefaultLanguage, "en_US", 5) ||
!strncasecmp(DefaultLanguage, "en_CA", 5) ||
!strncasecmp(DefaultLanguage, "fr_CA", 5))
@@ -4084,14 +4057,14 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
if (have_letter)
{
- num_defaults = ppd_add_default("PageSize", "Letter", num_defaults,
- &defaults);
- num_defaults = ppd_add_default("PageRegion", "Letter", num_defaults,
- &defaults);
- num_defaults = ppd_add_default("PaperDimension", "Letter", num_defaults,
- &defaults);
- num_defaults = ppd_add_default("ImageableArea", "Letter", num_defaults,
- &defaults);
+ num_defaults = cupsAddOption("PageSize", "Letter", num_defaults,
+ &defaults);
+ num_defaults = cupsAddOption("PageRegion", "Letter", num_defaults,
+ &defaults);
+ num_defaults = cupsAddOption("PaperDimension", "Letter", num_defaults,
+ &defaults);
+ num_defaults = cupsAddOption("ImageableArea", "Letter", num_defaults,
+ &defaults);
}
}
else if (have_a4)
@@ -4100,26 +4073,37 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
* The rest default to "a4" size...
*/
- num_defaults = ppd_add_default("PageSize", "A4", num_defaults,
- &defaults);
- num_defaults = ppd_add_default("PageRegion", "A4", num_defaults,
- &defaults);
- num_defaults = ppd_add_default("PaperDimension", "A4", num_defaults,
- &defaults);
- num_defaults = ppd_add_default("ImageableArea", "A4", num_defaults,
- &defaults);
+ num_defaults = cupsAddOption("PageSize", "A4", num_defaults,
+ &defaults);
+ num_defaults = cupsAddOption("PageRegion", "A4", num_defaults,
+ &defaults);
+ num_defaults = cupsAddOption("PaperDimension", "A4", num_defaults,
+ &defaults);
+ num_defaults = cupsAddOption("ImageableArea", "A4", num_defaults,
+ &defaults);
}
}
+ ppdClose(ppd);
+
+ /*
+ * Open the source file for a copy...
+ */
+
+ if ((src = cupsFileOpen(tempfile, "rb")) == NULL)
+ {
+ cupsFreeOptions(num_defaults, defaults);
+ unlink(tempfile);
+ return (-1);
+ }
+
/*
* Open the destination file for a copy...
*/
if ((dst = cupsFileOpen(to, "wb")) == NULL)
{
- if (num_defaults > 0)
- free(defaults);
-
+ cupsFreeOptions(num_defaults, defaults);
cupsFileClose(src);
unlink(tempfile);
return (-1);
@@ -4140,17 +4124,17 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
if (!ppd_parse_line(buffer, option, sizeof(option),
choice, sizeof(choice)))
{
- for (i = 0; i < num_defaults; i ++)
- if (!strcmp(option, defaults[i].option))
- {
- /*
- * Substitute the previous choice...
- */
+ const char *val; /* Default option value */
- snprintf(buffer, sizeof(buffer), "*Default%s: %s", option,
- defaults[i].choice);
- break;
- }
+
+ if ((val = cupsGetOption(option, num_defaults, defaults)) != NULL)
+ {
+ /*
+ * Substitute the previous choice...
+ */
+
+ snprintf(buffer, sizeof(buffer), "*Default%s: %s", option, val);
+ }
}
}
@@ -4160,8 +4144,7 @@ copy_model(cupsd_client_t *con, /* I - Client connection */
if (cups_protocol[0])
cupsFilePrintf(dst, "%s\n", cups_protocol);
- if (num_defaults > 0)
- free(defaults);
+ cupsFreeOptions(num_defaults, defaults);
/*
* Close both files and return...
@@ -6576,56 +6559,6 @@ move_job(cupsd_client_t *con, /* I - Client connection */
/*
- * 'ppd_add_default()' - Add a PPD default choice.
- */
-
-static int /* O - Number of defaults */
-ppd_add_default(
- const char *option, /* I - Option name */
- const char *choice, /* I - Choice name */
- int num_defaults, /* I - Number of defaults */
- ppd_default_t **defaults) /* IO - Defaults */
-{
- int i; /* Looping var */
- ppd_default_t *temp; /* Temporary defaults array */
-
-
- /*
- * First check if the option already has a default value; the PPD spec
- * says that the first one is used...
- */
-
- for (i = 0, temp = *defaults; i < num_defaults; i ++)
- if (!strcmp(option, temp[i].option))
- return (num_defaults);
-
- /*
- * Now add the option...
- */
-
- if (num_defaults == 0)
- temp = malloc(sizeof(ppd_default_t));
- else
- temp = realloc(*defaults, (num_defaults + 1) * sizeof(ppd_default_t));
-
- if (!temp)
- {
- cupsdLogMessage(CUPSD_LOG_ERROR, "ppd_add_default: Unable to add default value for \"%s\" - %s",
- option, strerror(errno));
- return (num_defaults);
- }
-
- *defaults = temp;
- temp += num_defaults;
-
- strlcpy(temp->option, option, sizeof(temp->option));
- strlcpy(temp->choice, choice, sizeof(temp->choice));
-
- return (num_defaults + 1);
-}
-
-
-/*
* 'ppd_parse_line()' - Parse a PPD default line.
*/
@@ -9225,5 +9158,5 @@ validate_user(cupsd_job_t *job, /* I - Job */
/*
- * End of "$Id: ipp.c 5970 2006-09-19 20:11:08Z mike $".
+ * End of "$Id: ipp.c 6032 2006-10-12 19:19:47Z mike $".
*/
diff --git a/scheduler/job.c b/scheduler/job.c
index f8edfdf46..4fd52b0b5 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -1,5 +1,5 @@
/*
- * "$Id: job.c 5974 2006-09-20 18:42:37Z mike $"
+ * "$Id: job.c 6032 2006-10-12 19:19:47Z mike $"
*
* Job management routines for the Common UNIX Printing System (CUPS).
*
@@ -2626,6 +2626,9 @@ start_job(cupsd_job_t *job, /* I - Job ID */
* Add gziptoany filter to the front of the list...
*/
+ if (!filters)
+ filters = cupsArrayNew(NULL, NULL);
+
if (!cupsArrayInsert(filters, &gziptoany_filter))
{
cupsdLogMessage(CUPSD_LOG_ERROR,
@@ -2653,6 +2656,9 @@ start_job(cupsd_job_t *job, /* I - Job ID */
* Add port monitor to the end of the list...
*/
+ if (!filters)
+ filters = cupsArrayNew(NULL, NULL);
+
if (!cupsArrayAdd(filters, &port_monitor))
{
cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to add port monitor - %s",
@@ -3462,5 +3468,5 @@ unload_job(cupsd_job_t *job) /* I - Job */
/*
- * End of "$Id: job.c 5974 2006-09-20 18:42:37Z mike $".
+ * End of "$Id: job.c 6032 2006-10-12 19:19:47Z mike $".
*/
diff --git a/scheduler/log.c b/scheduler/log.c
index a53029f55..3839dc878 100644
--- a/scheduler/log.c
+++ b/scheduler/log.c
@@ -1,5 +1,5 @@
/*
- * "$Id: log.c 5493 2006-05-05 16:33:57Z mike $"
+ * "$Id: log.c 6027 2006-10-11 21:04:58Z mike $"
*
* Log file routines for the Common UNIX Printing System (CUPS).
*
@@ -362,11 +362,16 @@ cupsdLogRequest(cupsd_client_t *con, /* I - Request to log */
if (!strcmp(AccessLog, "syslog"))
{
- syslog(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT "\n",
+ syslog(LOG_INFO,
+ "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s\n",
con->http.hostname, con->username[0] != '\0' ? con->username : "-",
states[con->operation], con->uri,
con->http.version / 100, con->http.version % 100,
- code, CUPS_LLCAST con->bytes);
+ code, CUPS_LLCAST con->bytes,
+ con->request ?
+ ippOpString(con->request->request.op.operation_id) : "-",
+ con->response ?
+ ippErrorString(con->response->request.status.status_code) : "-");
return (1);
}
@@ -546,5 +551,5 @@ check_log_file(cups_file_t **lf, /* IO - Log file */
/*
- * End of "$Id: log.c 5493 2006-05-05 16:33:57Z mike $".
+ * End of "$Id: log.c 6027 2006-10-11 21:04:58Z mike $".
*/
diff --git a/scheduler/subscriptions.c b/scheduler/subscriptions.c
index f3a320594..d0e05d9be 100644
--- a/scheduler/subscriptions.c
+++ b/scheduler/subscriptions.c
@@ -1,5 +1,5 @@
/*
- * "$Id: subscriptions.c 5878 2006-08-24 15:55:42Z mike $"
+ * "$Id: subscriptions.c 5991 2006-09-29 02:26:29Z mike $"
*
* Subscription routines for the Common UNIX Printing System (CUPS) scheduler.
*
@@ -50,6 +50,11 @@
#include "cupsd.h"
#ifdef HAVE_DBUS
# include <dbus/dbus.h>
+# ifdef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND
+# define dbus_message_append_iter_init dbus_message_iter_init_append
+# define dbus_message_iter_append_string(i,v) dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, v)
+# define dbus_message_iter_append_uint32(i,v) dbus_message_iter_append_basic(i, DBUS_TYPE_UINT32, v)
+# endif /* HAVE_DBUS_MESSAGE_ITER_INIT_APPEND */
#endif /* HAVE_DBUS */
@@ -1355,13 +1360,13 @@ cupsd_send_dbus(cupsd_eventmask_t event,/* I - Event to send */
message = dbus_message_new_signal("/com/redhat/PrinterSpooler",
"com.redhat.PrinterSpooler", what);
- dbus_message_iter_init_append(message, &iter);
+ dbus_message_append_iter_init(message, &iter);
if (dest)
- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &(dest->name));
+ dbus_message_iter_append_string(&iter, &(dest->name));
if (job)
{
- dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &(job->id));
- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &(job->username));
+ dbus_message_iter_append_uint32(&iter, &(job->id));
+ dbus_message_iter_append_string(&iter, &(job->username));
}
dbus_connection_send(con, message, NULL);
@@ -1622,5 +1627,5 @@ cupsd_start_notifier(
/*
- * End of "$Id: subscriptions.c 5878 2006-08-24 15:55:42Z mike $".
+ * End of "$Id: subscriptions.c 5991 2006-09-29 02:26:29Z mike $".
*/