diff options
author | jlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2006-10-20 18:36:23 +0000 |
---|---|---|
committer | jlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2006-10-20 18:36:23 +0000 |
commit | 2abf387cae0cce4bf3a0a259ded28ef0269aec47 (patch) | |
tree | e62c740dbab4b00ffb2cb1db8c57194a7553648b /scheduler | |
parent | 07725fee410af68be5081d9b1af3536eff5326b8 (diff) | |
download | cups-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.c | 26 | ||||
-rw-r--r-- | scheduler/cups-lpd.c | 9 | ||||
-rw-r--r-- | scheduler/dirsvc.c | 6 | ||||
-rw-r--r-- | scheduler/ipp.c | 201 | ||||
-rw-r--r-- | scheduler/job.c | 10 | ||||
-rw-r--r-- | scheduler/log.c | 13 | ||||
-rw-r--r-- | scheduler/subscriptions.c | 17 |
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 $". */ |