The Samba-Bugzilla – Attachment 7713 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]
patch to build against CUPS 1.6
0001-Use-ippGet-ippSet-accessors-for-IPP-API.patch (text/plain), 31.91 KB, created by
Jiri Popelka
on 2012-07-19 17:20:39 UTC
(
hide
)
Description:
patch to build against CUPS 1.6
Filename:
MIME Type:
Creator:
Jiri Popelka
Created:
2012-07-19 17:20:39 UTC
Size:
31.91 KB
patch
obsolete
>From c89b8df1972ec2ea921ad1c58d878dd506cad240 Mon Sep 17 00:00:00 2001 >From: Jiri Popelka <jpopelka@redhat.com> >Date: Thu, 19 Jul 2012 19:17:28 +0200 >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. >--- > source3/printing/print_cups.c | 191 ++++++++++++++++++------------ > source3/printing/print_iprint.c | 244 +++++++++++++++++++++++---------------- > 2 files changed, 259 insertions(+), 176 deletions(-) > >diff --git a/source3/printing/print_cups.c b/source3/printing/print_cups.c >index d6903bc..12b923a 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 { >@@ -903,8 +944,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(); > >@@ -973,7 +1014,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(talloc_tos(), snum), > ippErrorString(cupsLastError()))); >@@ -981,7 +1022,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")); >@@ -1103,8 +1144,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(); > >@@ -1132,9 +1173,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; > } > >@@ -1146,13 +1187,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; >@@ -1187,53 +1228,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); > } > > /* >@@ -1279,8 +1320,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"); >@@ -1306,9 +1347,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; > } > >@@ -1317,7 +1358,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; >@@ -1327,7 +1368,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; >@@ -1403,8 +1444,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(); > >@@ -1434,7 +1475,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(talloc_tos(), snum), > ippErrorString(cupsLastError()))); >@@ -1507,8 +1548,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(); > >@@ -1538,7 +1579,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(talloc_tos(), snum), > ippErrorString(cupsLastError()))); >diff --git a/source3/printing/print_iprint.c b/source3/printing/print_iprint.c >index 62073dd..7cb1999 100644 >--- a/source3/printing/print_iprint.c >+++ b/source3/printing/print_iprint.c >@@ -34,6 +34,49 @@ > #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 >+ >+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... > */ >@@ -94,8 +137,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(); > >@@ -116,12 +159,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); > /* >@@ -137,7 +180,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) >@@ -186,8 +229,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(); > >@@ -232,13 +275,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; >@@ -252,15 +295,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 >@@ -268,11 +311,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; > > /* >@@ -281,14 +324,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); > } > > /* >@@ -345,9 +388,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(); > >@@ -370,13 +412,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; >@@ -385,24 +427,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); > } > } > >@@ -468,8 +510,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(); > >@@ -495,7 +537,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 { >@@ -566,8 +608,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(); > >@@ -595,7 +637,7 @@ static int iprint_job_pause(int snum, struct printjob *pjob) > lp_printername(talloc_tos(), 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 { >@@ -666,8 +708,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(); > >@@ -695,7 +737,7 @@ static int iprint_job_resume(int snum, struct printjob *pjob) > lp_printername(talloc_tos(), 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 { >@@ -767,8 +809,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(); > >@@ -801,7 +843,7 @@ static int iprint_job_submit(int snum, struct printjob *pjob, > slprintf(uri, sizeof(uri) - 1, "/ipp/%s", lp_printername(talloc_tos(), 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(talloc_tos(), snum), > ippErrorString(cupsLastError()))); >@@ -821,9 +863,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); > } > } > >@@ -942,8 +984,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(); > >@@ -974,9 +1016,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; > } >@@ -986,7 +1028,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; >@@ -994,11 +1036,11 @@ 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-up-time", > IPP_TAG_INTEGER)) != NULL) >- printer_up_time = attr->values[0].integer; >+ printer_up_time = ippGetInteger(attr, 0); > > ippDelete(response); > response = NULL; >@@ -1015,8 +1057,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"); >@@ -1044,9 +1086,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; > } > >@@ -1058,13 +1100,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; >@@ -1099,30 +1141,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 >@@ -1132,22 +1174,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.10.4 >
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