The Samba-Bugzilla – Attachment 7714 Details for
Bug 9055
doesn't build against CUPS 1.6
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
git-am patchset for 3.6.next.
0001-Use-ippGet-ippSet-accessors-for-IPP-API.patch (text/plain), 32.20 KB, created by
Jeremy Allison
on 2012-07-20 18:54:59 UTC
(
hide
)
Description:
git-am patchset for 3.6.next.
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2012-07-20 18:54:59 UTC
Size:
32.20 KB
patch
obsolete
>From 504319e360de3993da645a8bc8c96799526ce31e Mon Sep 17 00:00:00 2001 >From: Jiri Popelka <jpopelka@redhat.com> >Date: Fri, 20 Jul 2012 11:53:31 -0700 >Subject: [PATCH] Use ippGet/ippSet (accessors) for IPP API. > >CUPS 1.6 makes various structures private and >introduces these ippGet and ippSet functions >for all of the fields in these structures. >http://www.cups.org/str.php?L3928 > >We define our own accessors when CUPS < 1.6. > >Modified for 3.6.x by Jeremy Allison. > >Signed-off-by: Jeremy Allison <jra@samba.org> >--- > source3/printing/print_cups.c | 191 ++++++++++++++++++------------ > source3/printing/print_iprint.c | 247 +++++++++++++++++++++++---------------- > 2 files changed, 261 insertions(+), 177 deletions(-) > >diff --git a/source3/printing/print_cups.c b/source3/printing/print_cups.c >index ff19de2..b47c562 100644 >--- a/source3/printing/print_cups.c >+++ b/source3/printing/print_cups.c >@@ -31,6 +31,47 @@ > #include <cups/cups.h> > #include <cups/language.h> > >+#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5) >+#define HAVE_CUPS_1_6 1 >+#endif >+ >+#ifndef HAVE_CUPS_1_6 >+#define ippGetGroupTag(attr) attr->group_tag >+#define ippGetName(attr) attr->name >+#define ippGetValueTag(attr) attr->value_tag >+#define ippGetStatusCode(ipp) ipp->request.status.status_code >+#define ippGetInteger(attr, element) attr->values[element].integer >+#define ippGetString(attr, element, language) attr->values[element].string.text >+ >+static ipp_attribute_t * >+ippFirstAttribute(ipp_t *ipp) >+{ >+ if (!ipp) >+ return (NULL); >+ return (ipp->current = ipp->attrs); >+} >+ >+static ipp_attribute_t * >+ippNextAttribute(ipp_t *ipp) >+{ >+ if (!ipp || !ipp->current) >+ return (NULL); >+ return (ipp->current = ipp->current->next); >+} >+ >+static int ippSetOperation(ipp_t *ipp, ipp_op_t op) >+{ >+ ipp->request.op.operation_id = op; >+ return (1); >+} >+ >+static int ippSetRequestId(ipp_t *ipp, int request_id) >+{ >+ ipp->request.any.request_id = request_id; >+ return (1); >+} >+#endif >+ > static SIG_ATOMIC_T gotalarm; > > /*************************************************************** >@@ -167,13 +208,13 @@ static bool process_cups_printers_response(TALLOC_CTX *mem_ctx, > struct pcap_printer *printer; > bool ret_ok = false; > >- for (attr = response->attrs; attr != NULL;) { >+ for (attr = ippFirstAttribute(response); attr != NULL;) { > /* > * Skip leading attributes until we hit a printer... > */ > >- while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) >- attr = attr->next; >+ while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_PRINTER) >+ attr = ippNextAttribute(response); > > if (attr == NULL) > break; >@@ -185,39 +226,39 @@ static bool process_cups_printers_response(TALLOC_CTX *mem_ctx, > name = NULL; > info = NULL; > >- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { >+ while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_PRINTER) { > size_t size; >- if (strcmp(attr->name, "printer-name") == 0 && >- attr->value_tag == IPP_TAG_NAME) { >+ if (strcmp(ippGetName(attr), "printer-name") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_NAME) { > if (!pull_utf8_talloc(mem_ctx, > &name, >- attr->values[0].string.text, >+ ippGetString(attr, 0, NULL), > &size)) { > goto err_out; > } > } > >- if (strcmp(attr->name, "printer-info") == 0 && >- attr->value_tag == IPP_TAG_TEXT) { >+ if (strcmp(ippGetName(attr), "printer-info") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_TEXT) { > if (!pull_utf8_talloc(mem_ctx, > &info, >- attr->values[0].string.text, >+ ippGetString(attr, 0, NULL), > &size)) { > goto err_out; > } > } > >- if (strcmp(attr->name, "printer-location") == 0 && >- attr->value_tag == IPP_TAG_TEXT) { >+ if (strcmp(ippGetName(attr), "printer-location") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_TEXT) { > if (!pull_utf8_talloc(mem_ctx, > &location, >- attr->values[0].string.text, >+ ippGetString(attr, 0, NULL), > &size)) { > goto err_out; > } > } > >- attr = attr->next; >+ attr = ippNextAttribute(response); > } > > /* >@@ -297,8 +338,8 @@ static bool cups_cache_reload_async(int fd) > > request = ippNew(); > >- request->request.op.operation_id = CUPS_GET_PRINTERS; >- request->request.op.request_id = 1; >+ ippSetOperation(request, CUPS_GET_PRINTERS); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -339,8 +380,8 @@ static bool cups_cache_reload_async(int fd) > > request = ippNew(); > >- request->request.op.operation_id = CUPS_GET_CLASSES; >- request->request.op.request_id = 1; >+ ippSetOperation(request, CUPS_GET_CLASSES); >+ ippSetRequestId(request, 1); > > ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, > "attributes-charset", NULL, "utf-8"); >@@ -603,8 +644,8 @@ static int cups_job_delete(const char *sharename, const char *lprm_command, stru > > request = ippNew(); > >- request->request.op.operation_id = IPP_CANCEL_JOB; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_CANCEL_JOB); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -630,7 +671,7 @@ static int cups_job_delete(const char *sharename, const char *lprm_command, stru > */ > > if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to cancel job %d - %s\n", pjob->sysjob, > ippErrorString(cupsLastError()))); > } else { >@@ -700,8 +741,8 @@ static int cups_job_pause(int snum, struct printjob *pjob) > > request = ippNew(); > >- request->request.op.operation_id = IPP_HOLD_JOB; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_HOLD_JOB); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -726,7 +767,7 @@ static int cups_job_pause(int snum, struct printjob *pjob) > */ > > if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to hold job %d - %s\n", pjob->sysjob, > ippErrorString(cupsLastError()))); > } else { >@@ -796,8 +837,8 @@ static int cups_job_resume(int snum, struct printjob *pjob) > > request = ippNew(); > >- request->request.op.operation_id = IPP_RELEASE_JOB; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_RELEASE_JOB); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -822,7 +863,7 @@ static int cups_job_resume(int snum, struct printjob *pjob) > */ > > if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to release job %d - %s\n", pjob->sysjob, > ippErrorString(cupsLastError()))); > } else { >@@ -902,8 +943,8 @@ static int cups_job_submit(int snum, struct printjob *pjob) > > request = ippNew(); > >- request->request.op.operation_id = IPP_PRINT_JOB; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_PRINT_JOB); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -979,7 +1020,7 @@ static int cups_job_submit(int snum, struct printjob *pjob) > goto out; > } > if ((response = cupsDoFileRequest(http, request, uri, pjob->filename)) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to print file to %s - %s\n", > lp_printername(snum), > ippErrorString(cupsLastError()))); >@@ -987,7 +1028,7 @@ static int cups_job_submit(int snum, struct printjob *pjob) > ret = 0; > attr_job_id = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER); > if(attr_job_id) { >- pjob->sysjob = attr_job_id->values[0].integer; >+ pjob->sysjob = ippGetInteger(attr_job_id, 0); > DEBUG(5,("cups_job_submit: job-id %d\n", pjob->sysjob)); > } else { > DEBUG(0,("Missing job-id attribute in IPP response")); >@@ -1109,8 +1150,8 @@ static int cups_queue_get(const char *sharename, > > request = ippNew(); > >- request->request.op.operation_id = IPP_GET_JOBS; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_GET_JOBS); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -1138,9 +1179,9 @@ static int cups_queue_get(const char *sharename, > goto out; > } > >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to get jobs for %s - %s\n", uri, >- ippErrorString(response->request.status.status_code))); >+ ippErrorString(ippGetStatusCode(response)))); > goto out; > } > >@@ -1152,13 +1193,13 @@ static int cups_queue_get(const char *sharename, > qalloc = 0; > queue = NULL; > >- for (attr = response->attrs; attr != NULL; attr = attr->next) { >+ for (attr = ippFirstAttribute(response); attr != NULL; attr = ippNextAttribute(response)) { > /* > * Skip leading attributes until we hit a job... > */ > >- while (attr != NULL && attr->group_tag != IPP_TAG_JOB) >- attr = attr->next; >+ while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_JOB) >+ attr = ippNextAttribute(response); > > if (attr == NULL) > break; >@@ -1193,53 +1234,53 @@ static int cups_queue_get(const char *sharename, > user_name = NULL; > job_name = NULL; > >- while (attr != NULL && attr->group_tag == IPP_TAG_JOB) { >- if (attr->name == NULL) { >- attr = attr->next; >+ while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_JOB) { >+ if (ippGetName(attr) == NULL) { >+ attr = ippNextAttribute(response); > break; > } > >- if (strcmp(attr->name, "job-id") == 0 && >- attr->value_tag == IPP_TAG_INTEGER) >- job_id = attr->values[0].integer; >+ if (strcmp(ippGetName(attr), "job-id") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_INTEGER) >+ job_id = ippGetInteger(attr, 0); > >- if (strcmp(attr->name, "job-k-octets") == 0 && >- attr->value_tag == IPP_TAG_INTEGER) >- job_k_octets = attr->values[0].integer; >+ if (strcmp(ippGetName(attr), "job-k-octets") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_INTEGER) >+ job_k_octets = ippGetInteger(attr, 0); > >- if (strcmp(attr->name, "job-priority") == 0 && >- attr->value_tag == IPP_TAG_INTEGER) >- job_priority = attr->values[0].integer; >+ if (strcmp(ippGetName(attr), "job-priority") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_INTEGER) >+ job_priority = ippGetInteger(attr, 0); > >- if (strcmp(attr->name, "job-state") == 0 && >- attr->value_tag == IPP_TAG_ENUM) >- job_status = (ipp_jstate_t)(attr->values[0].integer); >+ if (strcmp(ippGetName(attr), "job-state") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_ENUM) >+ job_status = (ipp_jstate_t)ippGetInteger(attr, 0); > >- if (strcmp(attr->name, "time-at-creation") == 0 && >- attr->value_tag == IPP_TAG_INTEGER) >- job_time = attr->values[0].integer; >+ if (strcmp(ippGetName(attr), "time-at-creation") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_INTEGER) >+ job_time = ippGetInteger(attr, 0); > >- if (strcmp(attr->name, "job-name") == 0 && >- attr->value_tag == IPP_TAG_NAME) { >+ if (strcmp(ippGetName(attr), "job-name") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_NAME) { > if (!pull_utf8_talloc(frame, > &job_name, >- attr->values[0].string.text, >+ ippGetString(attr, 0, NULL), > &size)) { > goto out; > } > } > >- if (strcmp(attr->name, "job-originating-user-name") == 0 && >- attr->value_tag == IPP_TAG_NAME) { >+ if (strcmp(ippGetName(attr), "job-originating-user-name") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_NAME) { > if (!pull_utf8_talloc(frame, > &user_name, >- attr->values[0].string.text, >+ ippGetString(attr, 0, NULL), > &size)) { > goto out; > } > } > >- attr = attr->next; >+ attr = ippNextAttribute(response); > } > > /* >@@ -1285,8 +1326,8 @@ static int cups_queue_get(const char *sharename, > > request = ippNew(); > >- request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_GET_PRINTER_ATTRIBUTES); >+ ippSetRequestId(request, 1); > > ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, > "attributes-charset", NULL, "utf-8"); >@@ -1312,9 +1353,9 @@ static int cups_queue_get(const char *sharename, > goto out; > } > >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to get printer status for %s - %s\n", printername, >- ippErrorString(response->request.status.status_code))); >+ ippErrorString(ippGetStatusCode(response)))); > goto out; > } > >@@ -1323,7 +1364,7 @@ static int cups_queue_get(const char *sharename, > */ > > if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) { >- if (attr->values[0].integer == IPP_PRINTER_STOPPED) >+ if (ippGetInteger(attr, 0) == IPP_PRINTER_STOPPED) > status->status = LPSTAT_STOPPED; > else > status->status = LPSTAT_OK; >@@ -1333,7 +1374,7 @@ static int cups_queue_get(const char *sharename, > IPP_TAG_TEXT)) != NULL) { > char *msg = NULL; > if (!pull_utf8_talloc(frame, &msg, >- attr->values[0].string.text, >+ ippGetString(attr, 0, NULL), > &size)) { > SAFE_FREE(queue); > qcount = 0; >@@ -1409,8 +1450,8 @@ static int cups_queue_pause(int snum) > > request = ippNew(); > >- request->request.op.operation_id = IPP_PAUSE_PRINTER; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_PAUSE_PRINTER); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -1440,7 +1481,7 @@ static int cups_queue_pause(int snum) > */ > > if ((response = cupsDoRequest(http, request, "/admin/")) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to pause printer %s - %s\n", > lp_printername(snum), > ippErrorString(cupsLastError()))); >@@ -1513,8 +1554,8 @@ static int cups_queue_resume(int snum) > > request = ippNew(); > >- request->request.op.operation_id = IPP_RESUME_PRINTER; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_RESUME_PRINTER); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -1544,7 +1585,7 @@ static int cups_queue_resume(int snum) > */ > > if ((response = cupsDoRequest(http, request, "/admin/")) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to resume printer %s - %s\n", > lp_printername(snum), > ippErrorString(cupsLastError()))); >diff --git a/source3/printing/print_iprint.c b/source3/printing/print_iprint.c >index 1392cba..86e94ef 100644 >--- a/source3/printing/print_iprint.c >+++ b/source3/printing/print_iprint.c >@@ -34,6 +34,50 @@ > #define NOVELL_SERVER_VERSION_STRING "iprintserverversion=" > #define NOVELL_SERVER_VERSION_OES_SP1 33554432 > >+#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5) >+#define HAVE_CUPS_1_6 1 >+#endif >+ >+#ifndef HAVE_CUPS_1_6 >+#define ippGetCount(attr) attr->num_values >+#define ippGetGroupTag(attr) attr->group_tag >+#define ippGetName(attr) attr->name >+#define ippGetValueTag(attr) attr->value_tag >+#define ippGetStatusCode(ipp) ipp->request.status.status_code >+#define ippGetBoolean(attr, element) attr->values[element].boolean >+#define ippGetInteger(attr, element) attr->values[element].integer >+#define ippGetString(attr, element, language) attr->values[element].string.text >+#define ippGetDate(attr, element) attr->values[element].date >+ >+static ipp_attribute_t * >+ippFirstAttribute(ipp_t *ipp) >+{ >+ if (!ipp) >+ return (NULL); >+ return (ipp->current = ipp->attrs); >+} >+ >+static ipp_attribute_t * >+ippNextAttribute(ipp_t *ipp) >+{ >+ if (!ipp || !ipp->current) >+ return (NULL); >+ return (ipp->current = ipp->current->next); >+} >+ >+static int ippSetOperation(ipp_t *ipp, ipp_op_t op) >+{ >+ ipp->request.op.operation_id = op; >+ return (1); >+} >+ >+static int ippSetRequestId(ipp_t *ipp, int request_id) >+{ >+ ipp->request.any.request_id = request_id; >+ return (1); >+} >+#endif >+ > /* > * 'iprint_passwd_cb()' - The iPrint password callback... > */ >@@ -92,8 +136,8 @@ static int iprint_get_server_version(http_t *http, char* serviceUri) > > request = ippNew(); > >- request->request.op.operation_id = (ipp_op_t)OPERATION_NOVELL_MGMT; >- request->request.op.request_id = 1; >+ ippSetOperation(request, (ipp_op_t)OPERATION_NOVELL_MGMT); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -114,12 +158,12 @@ static int iprint_get_server_version(http_t *http, char* serviceUri) > */ > > if (((response = cupsDoRequest(http, request, "/ipp/")) == NULL) || >- (response->request.status.status_code >= IPP_OK_CONFLICT)) >+ (ippGetStatusCode(response) >= IPP_OK_CONFLICT)) > goto out; > > if (((attr = ippFindAttribute(response, "server-version", > IPP_TAG_STRING)) != NULL)) { >- if ((ver = strstr(attr->values[0].string.text, >+ if ((ver = strstr(ippGetString(attr, 0, NULL), > NOVELL_SERVER_VERSION_STRING)) != NULL) { > ver += strlen(NOVELL_SERVER_VERSION_STRING); > /* >@@ -135,7 +179,7 @@ static int iprint_get_server_version(http_t *http, char* serviceUri) > serverVersion = 0; > } > >- if ((os = strstr(attr->values[0].string.text, >+ if ((os = strstr(ippGetString(attr, 0, NULL), > NOVELL_SERVER_SYSNAME)) != NULL) { > os += strlen(NOVELL_SERVER_SYSNAME); > if ((temp = strchr(os,'<')) != NULL) >@@ -184,8 +228,8 @@ static int iprint_cache_add_printer(http_t *http, > > request = ippNew(); > >- request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES; >- request->request.op.request_id = reqId; >+ ippSetOperation(request, IPP_GET_PRINTER_ATTRIBUTES); >+ ippSetRequestId(request, reqId); > > language = cupsLangDefault(); > >@@ -230,13 +274,13 @@ static int iprint_cache_add_printer(http_t *http, > goto out; > } > >- for (attr = response->attrs; attr != NULL;) { >+ for (attr = ippFirstAttribute(response); attr != NULL;) { > /* > * Skip leading attributes until we hit a printer... > */ > >- while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) >- attr = attr->next; >+ while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_PRINTER) >+ attr = ippNextAttribute(response); > > if (attr == NULL) > break; >@@ -250,15 +294,15 @@ static int iprint_cache_add_printer(http_t *http, > smb_enabled= 1; > secure = 0; > >- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { >- if (strcmp(attr->name, "printer-name") == 0 && >- attr->value_tag == IPP_TAG_NAME) >- name = attr->values[0].string.text; >+ while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_PRINTER) { >+ if (strcmp(ippGetName(attr), "printer-name") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_NAME) >+ name = ippGetString(attr, 0, NULL); > >- if (strcmp(attr->name, "printer-info") == 0 && >- (attr->value_tag == IPP_TAG_TEXT || >- attr->value_tag == IPP_TAG_TEXTLANG)) >- info = attr->values[0].string.text; >+ if (strcmp(ippGetName(attr), "printer-info") == 0 && >+ (ippGetValueTag(attr) == IPP_TAG_TEXT || >+ ippGetValueTag(attr) == IPP_TAG_TEXTLANG)) >+ info = ippGetString(attr, 0, NULL); > > /* > * If the smb-enabled attribute is present and the >@@ -266,11 +310,11 @@ static int iprint_cache_add_printer(http_t *http, > * If the attribute is not present, assume that the > * printer should show up > */ >- if (!strcmp(attr->name, "smb-enabled") && >- ((attr->value_tag == IPP_TAG_INTEGER && >- !attr->values[0].integer) || >- (attr->value_tag == IPP_TAG_BOOLEAN && >- !attr->values[0].boolean))) >+ if (!strcmp(ippGetName(attr), "smb-enabled") && >+ ((ippGetValueTag(attr) == IPP_TAG_INTEGER && >+ !ippGetInteger(attr, 0)) || >+ (ippGetValueTag(attr) == IPP_TAG_BOOLEAN && >+ !ippGetBoolean(attr, 0)))) > smb_enabled = 0; > > /* >@@ -279,14 +323,14 @@ static int iprint_cache_add_printer(http_t *http, > * If the attribute is not present, assume that the > * printer should show up > */ >- if (!strcmp(attr->name, "security-enabled") && >- ((attr->value_tag == IPP_TAG_INTEGER && >- attr->values[0].integer) || >- (attr->value_tag == IPP_TAG_BOOLEAN && >- attr->values[0].boolean))) >+ if (!strcmp(ippGetName(attr), "security-enabled") && >+ ((ippGetValueTag(attr) == IPP_TAG_INTEGER && >+ ippGetInteger(attr, 0)) || >+ (ippGetValueTag(attr) == IPP_TAG_BOOLEAN && >+ ippGetBoolean(attr, 0)))) > secure = 1; > >- attr = attr->next; >+ attr = ippNextAttribute(response); > } > > /* >@@ -343,9 +387,8 @@ bool iprint_cache_reload(void) > > request = ippNew(); > >- request->request.op.operation_id = >- (ipp_op_t)OPERATION_NOVELL_LIST_PRINTERS; >- request->request.op.request_id = 1; >+ ippSetOperation(request, (ipp_op_t)OPERATION_NOVELL_LIST_PRINTERS); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -368,13 +411,13 @@ bool iprint_cache_reload(void) > goto out; > } > >- for (attr = response->attrs; attr != NULL;) { >+ for (attr = ippFirstAttribute(response); attr != NULL;) { > /* > * Skip leading attributes until we hit a printer... > */ > >- while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) >- attr = attr->next; >+ while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_PRINTER) >+ attr = ippNextAttribute(response); > > if (attr == NULL) > break; >@@ -383,24 +426,24 @@ bool iprint_cache_reload(void) > * Pull the needed attributes from this printer... > */ > >- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) >+ while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_PRINTER) > { >- if (strcmp(attr->name, "printer-name") == 0 && >- (attr->value_tag == IPP_TAG_URI || >- attr->value_tag == IPP_TAG_NAME || >- attr->value_tag == IPP_TAG_TEXT || >- attr->value_tag == IPP_TAG_NAMELANG || >- attr->value_tag == IPP_TAG_TEXTLANG)) >+ if (strcmp(ippGetName(attr), "printer-name") == 0 && >+ (ippGetValueTag(attr) == IPP_TAG_URI || >+ ippGetValueTag(attr) == IPP_TAG_NAME || >+ ippGetValueTag(attr) == IPP_TAG_TEXT || >+ ippGetValueTag(attr) == IPP_TAG_NAMELANG || >+ ippGetValueTag(attr) == IPP_TAG_TEXTLANG)) > { >- for (i = 0; i<attr->num_values; i++) >+ for (i = 0; i<ippGetCount(attr); i++) > { >- char *url = attr->values[i].string.text; >+ char *url = ippGetString(attr, i, NULL); > if (!url || !strlen(url)) > continue; > iprint_cache_add_printer(http, i+2, url); > } > } >- attr = attr->next; >+ attr = ippNextAttribute(response); > } > } > >@@ -466,8 +509,8 @@ static int iprint_job_delete(const char *sharename, const char *lprm_command, st > > request = ippNew(); > >- request->request.op.operation_id = IPP_CANCEL_JOB; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_CANCEL_JOB); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -493,7 +536,7 @@ static int iprint_job_delete(const char *sharename, const char *lprm_command, st > slprintf(httpPath, sizeof(httpPath) - 1, "/ipp/%s", sharename); > > if ((response = cupsDoRequest(http, request, httpPath)) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to cancel job %d - %s\n", pjob->sysjob, > ippErrorString(cupsLastError()))); > } else { >@@ -564,8 +607,8 @@ static int iprint_job_pause(int snum, struct printjob *pjob) > > request = ippNew(); > >- request->request.op.operation_id = IPP_HOLD_JOB; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_HOLD_JOB); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -593,7 +636,7 @@ static int iprint_job_pause(int snum, struct printjob *pjob) > lp_printername(snum)); > > if ((response = cupsDoRequest(http, request, httpPath)) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to hold job %d - %s\n", pjob->sysjob, > ippErrorString(cupsLastError()))); > } else { >@@ -664,8 +707,8 @@ static int iprint_job_resume(int snum, struct printjob *pjob) > > request = ippNew(); > >- request->request.op.operation_id = IPP_RELEASE_JOB; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_RELEASE_JOB); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -693,7 +736,7 @@ static int iprint_job_resume(int snum, struct printjob *pjob) > lp_printername(snum)); > > if ((response = cupsDoRequest(http, request, httpPath)) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to release job %d - %s\n", pjob->sysjob, > ippErrorString(cupsLastError()))); > } else { >@@ -763,8 +806,8 @@ static int iprint_job_submit(int snum, struct printjob *pjob) > > request = ippNew(); > >- request->request.op.operation_id = IPP_PRINT_JOB; >- request->request.op.request_id = 1; >+ ippSetOperation(request, IPP_PRINT_JOB); >+ ippSetRequestId(request, 1); > > language = cupsLangDefault(); > >@@ -797,7 +840,7 @@ static int iprint_job_submit(int snum, struct printjob *pjob) > slprintf(uri, sizeof(uri) - 1, "/ipp/%s", lp_printername(snum)); > > if ((response = cupsDoFileRequest(http, request, uri, pjob->filename)) != NULL) { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to print file to %s - %s\n", > lp_printername(snum), > ippErrorString(cupsLastError()))); >@@ -817,9 +860,9 @@ static int iprint_job_submit(int snum, struct printjob *pjob) > if ( ret == 0 ) { > > attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER); >- if (attr != NULL && attr->group_tag == IPP_TAG_JOB) >+ if (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_JOB) > { >- pjob->sysjob = attr->values[0].integer; >+ pjob->sysjob = ippGetInteger(attr, 0); > } > } > >@@ -939,8 +982,8 @@ static int iprint_queue_get(const char *sharename, > > request = ippNew(); > >- request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES; >- request->request.op.request_id = 2; >+ ippSetOperation(request, IPP_GET_PRINTER_ATTRIBUTES); >+ ippSetRequestId(request, 2); > > language = cupsLangDefault(); > >@@ -971,9 +1014,9 @@ static int iprint_queue_get(const char *sharename, > goto out; > } > >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to get printer status for %s - %s\n", printername, >- ippErrorString(response->request.status.status_code))); >+ ippErrorString(ippGetStatusCode(response)))); > *q = queue; > goto out; > } >@@ -983,7 +1026,7 @@ static int iprint_queue_get(const char *sharename, > */ > > if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) { >- if (attr->values[0].integer == IPP_PRINTER_STOPPED) >+ if (ippGetInteger(attr, 0) == IPP_PRINTER_STOPPED) > status->status = LPSTAT_STOPPED; > else > status->status = LPSTAT_OK; >@@ -991,15 +1034,15 @@ static int iprint_queue_get(const char *sharename, > > if ((attr = ippFindAttribute(response, "printer-state-message", > IPP_TAG_TEXT)) != NULL) >- fstrcpy(status->message, attr->values[0].string.text); >+ fstrcpy(status->message, ippGetString(attr, 0, NULL)); > > if ((attr = ippFindAttribute(response, "printer-current-time", > IPP_TAG_DATE)) != NULL) >- printer_current_time = ippDateToTime(attr->values[0].date); >+ printer_current_time = ippDateToTime(ippGetDate(attr, 0)); > > if ((attr = ippFindAttribute(response, "printer-up-time", > IPP_TAG_INTEGER)) != NULL) >- printer_up_time = attr->values[0].integer; >+ printer_up_time = ippGetInteger(attr, 0); > > ippDelete(response); > response = NULL; >@@ -1016,8 +1059,8 @@ static int iprint_queue_get(const char *sharename, > > request = ippNew(); > >- request->request.op.operation_id = IPP_GET_JOBS; >- request->request.op.request_id = 3; >+ ippSetOperation(request, IPP_GET_JOBS); >+ ippSetRequestId(request, 3); > > ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, > "attributes-charset", NULL, "utf-8"); >@@ -1045,9 +1088,9 @@ static int iprint_queue_get(const char *sharename, > goto out; > } > >- if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to get jobs for %s - %s\n", uri, >- ippErrorString(response->request.status.status_code))); >+ ippErrorString(ippGetStatusCode(response)))); > goto out; > } > >@@ -1059,13 +1102,13 @@ static int iprint_queue_get(const char *sharename, > qalloc = 0; > queue = NULL; > >- for (attr = response->attrs; attr != NULL; attr = attr->next) { >+ for (attr = ippFirstAttribute(response); attr != NULL; attr = ippNextAttribute(response)) { > /* > * Skip leading attributes until we hit a job... > */ > >- while (attr != NULL && attr->group_tag != IPP_TAG_JOB) >- attr = attr->next; >+ while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_JOB) >+ attr = ippNextAttribute(response); > > if (attr == NULL) > break; >@@ -1100,30 +1143,30 @@ static int iprint_queue_get(const char *sharename, > user_name = NULL; > job_name = NULL; > >- while (attr != NULL && attr->group_tag == IPP_TAG_JOB) { >- if (attr->name == NULL) { >- attr = attr->next; >+ while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_JOB) { >+ if (ippGetName(attr) == NULL) { >+ attr = ippNextAttribute(response); > break; > } > >- if (strcmp(attr->name, "job-id") == 0 && >- attr->value_tag == IPP_TAG_INTEGER) >- job_id = attr->values[0].integer; >+ if (strcmp(ippGetName(attr), "job-id") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_INTEGER) >+ job_id = ippGetInteger(attr, 0); > >- if (strcmp(attr->name, "job-k-octets") == 0 && >- attr->value_tag == IPP_TAG_INTEGER) >- job_k_octets = attr->values[0].integer; >+ if (strcmp(ippGetName(attr), "job-k-octets") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_INTEGER) >+ job_k_octets = ippGetInteger(attr, 0); > >- if (strcmp(attr->name, "job-priority") == 0 && >- attr->value_tag == IPP_TAG_INTEGER) >- job_priority = attr->values[0].integer; >+ if (strcmp(ippGetName(attr), "job-priority") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_INTEGER) >+ job_priority = ippGetInteger(attr, 0); > >- if (strcmp(attr->name, "job-state") == 0 && >- attr->value_tag == IPP_TAG_ENUM) >- job_status = (ipp_jstate_t)(attr->values[0].integer); >+ if (strcmp(ippGetName(attr), "job-state") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_ENUM) >+ job_status = (ipp_jstate_t)ippGetInteger(attr, 0); > >- if (strcmp(attr->name, "time-at-creation") == 0 && >- attr->value_tag == IPP_TAG_INTEGER) >+ if (strcmp(ippGetName(attr), "time-at-creation") == 0 && >+ ippGetValueTag(attr) == IPP_TAG_INTEGER) > { > /* > * If jobs times are in Unix time, the accuracy of the job >@@ -1133,22 +1176,22 @@ static int iprint_queue_get(const char *sharename, > */ > > if (jobUseUnixTime) >- job_time = attr->values[0].integer; >+ job_time = ippGetInteger(attr, 0); > else >- job_time = time(NULL) - printer_up_time + attr->values[0].integer; >+ job_time = time(NULL) - printer_up_time + ippGetInteger(attr, 0); > } > >- if (strcmp(attr->name, "job-name") == 0 && >- (attr->value_tag == IPP_TAG_NAMELANG || >- attr->value_tag == IPP_TAG_NAME)) >- job_name = attr->values[0].string.text; >+ if (strcmp(ippGetName(attr), "job-name") == 0 && >+ (ippGetValueTag(attr) == IPP_TAG_NAMELANG || >+ ippGetValueTag(attr) == IPP_TAG_NAME)) >+ job_name = ippGetString(attr, 0, NULL); > >- if (strcmp(attr->name, "job-originating-user-name") == 0 && >- (attr->value_tag == IPP_TAG_NAMELANG || >- attr->value_tag == IPP_TAG_NAME)) >- user_name = attr->values[0].string.text; >+ if (strcmp(ippGetName(attr), "job-originating-user-name") == 0 && >+ (ippGetValueTag(attr) == IPP_TAG_NAMELANG || >+ ippGetValueTag(attr) == IPP_TAG_NAME)) >+ user_name = ippGetString(attr, 0, NULL); > >- attr = attr->next; >+ attr = ippNextAttribute(response); > } > > /* >-- >1.7.7.3 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 9055
:
7713
|
7714
|
7720