]> git.ipfire.org Git - thirdparty/cups.git/blame - doc/help/api-httpipp.html
Merge changes from CUPS 1.4svn-r7874.
[thirdparty/cups.git] / doc / help / api-httpipp.html
CommitLineData
ef416fc2 1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
2<html>
3<!-- SECTION: Programming -->
4<head>
5a738aea
MS
5<title>HTTP and IPP APIs</title>
6<meta name="keywords" content="Programming">
7<meta name="creator" content="Mini-XML v2.5">
8<style type="text/css"><!--
9BODY {
10 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
11}
12
13H1, H2, H3, H4, H5, H6, P, TD, TH {
14 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
15}
16
17KBD {
18 font-family: monaco, courier, monospace;
19 font-weight: bold;
20}
21
22PRE {
23 font-family: monaco, courier, monospace;
24}
25
26PRE.command {
27 margin-left: 36pt;
28}
29
30PRE.example {
31 background: #eeeeee;
32 border: dotted thin #999999;
33 margin-left: 36pt;
34 padding: 10px;
35}
36
37PRE.command EM, PRE.example EM {
38 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
39}
40
41P.command {
42 font-family: monaco, courier, monospace;
43 margin-left: 36pt;
44}
45
46P.formula {
47 font-style: italic;
48 margin-left: 36pt;
49}
50
51BLOCKQUOTE {
52 background: #cccccc;
53 border: solid thin #999999;
54 padding: 10pt;
55}
56
57A:link, A:visited {
568fa3fa 58 font-weight: normal;
5a738aea 59 text-decoration: none;
5a738aea
MS
60}
61
62A:link:hover, A:visited:hover, A:active {
63 text-decoration: underline;
5a738aea
MS
64}
65
66SUB, SUP {
67 font-size: 50%;
68}
69
70DIV.table TABLE {
71 border: solid thin #999999;
72 border-collapse: collapse;
73 border-spacing: 0;
74 margin-left: auto;
75 margin-right: auto;
76}
77
78DIV.table CAPTION {
79 caption-side: top;
80 font-size: 120%;
81 font-style: italic;
82 font-weight: bold;
83 margin-left: auto;
84 margin-right: auto;
85}
86
87DIV.table TABLE TD {
88 border: solid thin #cccccc;
89 padding-top: 5pt;
90}
91
92DIV.table TABLE TH {
93 background: #cccccc;
94 border: none;
95 border-bottom: solid thin #999999;
96}
97
98DIV.figure TABLE {
99 margin-left: auto;
100 margin-right: auto;
101}
102
103DIV.figure CAPTION {
104 caption-side: bottom;
105 font-size: 120%;
106 font-style: italic;
107 font-weight: bold;
108 margin-left: auto;
109 margin-right: auto;
110}
111
112TH.label {
113 padding-top: 5pt;
114 text-align: right;
115 vertical-align: top;
116}
117
118HR {
119 border: solid thin;
120}
121
122SPAN.info {
123 background: #000000;
124 border: thin solid #000000;
125 color: #ffffff;
126 font-size: 80%;
127 font-style: italic;
128 font-weight: bold;
129 white-space: nowrap;
130}
131
132H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
133 float: right;
134 font-size: 100%;
135}
136
137H2.title, H3.title {
138 border-bottom: solid 2pt #000000;
139}
140
141DT {
142 margin-left: 36pt;
143 margin-top: 12pt;
144}
145
146DD {
147 margin-left: 54pt;
148}
149
150DL.category DT {
151 font-weight: bold;
152}
153
154P.summary {
155 margin-left: 36pt;
156 font-family: monaco, courier, monospace;
157}
158
159SPAN.message {
160 font-style: italic;
161 font-size: smaller;
162}
163
164DIV.summary TABLE {
165 border: solid thin #999999;
166 border-collapse: collapse;
167 border-spacing: 0;
168 margin: 10px;
169}
170
171DIV.summary TABLE TD, DIV.summary TABLE TH {
172 border: solid thin #999999;
173 padding: 5px;
174 text-align: left;
175 vertical-align: top;
176}
177
178DIV.summary TABLE THEAD TH {
179 background: #eeeeee;
180}
181
182/* API documentation styles... */
183div.body h1 {
184 margin: 0;
185}
186div.body h2 {
187 margin-top: 1.5em;
188}
189div.body h3, div.body h4, div.body h5 {
190 margin-bottom: 0.5em;
191 margin-top: 1.5em;
192}
193.class, .enumeration, .function, .struct, .typedef, .union {
194 border-bottom: solid thin #999999;
195 margin-bottom: 0;
196 margin-top: 2em;
197}
198.description {
199 margin-top: 0.5em;
200}
201code, p.code, pre, ul.code li {
202 font-family: monaco, courier, monospace;
203 font-size: 90%;
204}
205ul.code, ul.contents, ul.subcontents {
206 list-style-type: none;
207 margin: 0;
208 padding-left: 0;
209}
210ul.code li {
211 margin: 0;
212}
213ul.contents > li {
214 margin-top: 1em;
215}
216ul.contents li ul.code, ul.contents li ul.subcontents {
217 padding-left: 2em;
218}
219div.body dl {
220 margin-left: 0;
221 margin-top: 0;
222}
223div.body dt {
224 font-style: italic;
225 margin-left: 0;
226 margin-top: 0;
227}
228div.body dd {
229 margin-bottom: 0.5em;
230}
231
232/* This is just for the HTML files generated with the framedhelp target */
233div.contents {
234 background: #e8e8e8;
235 border: solid thin black;
236 padding: 10px;
237}
238div.contents h1 {
239 font-size: 110%;
240}
241div.contents h2 {
242 font-size: 100%;
243}
244div.contents ul.contents {
245 font-size: 80%;
246}
ac884b6a
MS
247div.contents ul.subcontents li {
248 margin-left: 1em;
249 text-indent: -1em;
250}
5a738aea 251--></style>
ef416fc2 252</head>
253<body>
5a738aea 254<div class='body'>
ef416fc2 255<!--
5a738aea
MS
256 "$Id: api-httpipp.header 7258 2008-01-28 00:15:05Z mike $"
257
258 HTTP and IPP API header for the Common UNIX Printing System (CUPS).
259
260 Copyright 2007-2008 by Apple Inc.
261 Copyright 1997-2006 by Easy Software Products, all rights reserved.
262
263 These coded instructions, statements, and computer programs are the
264 property of Apple Inc. and are protected by Federal copyright
265 law. Distribution and use rights are outlined in the file "LICENSE.txt"
266 which should have been included with this file. If this file is
267 file is missing or damaged, see the license at "http://www.cups.org/".
268-->
269
270<h1 class="title">HTTP and IPP APIs</h1>
271
272<div class='summary'><table summary='General Information'>
273<thead>
274<tr>
275 <th>Header</th>
276 <th>cups/cups.h</th>
277</tr>
278</thead>
279<tbody>
280<tr>
281 <th>Library</th>
282 <td>-lcups</td>
283</tr>
284<tr>
285 <th>See Also</th>
286 <td>Programming: <a href='api-overview.html'>Introduction to CUPS Programming</a><br>
287 Programming: <a href='api-cups.html'>CUPS API</a><br>
288 References: <a href='spec-ipp.html'>CUPS Implementation of IPP</a></td>
289</tr>
290</tbody>
291</table></div>
292<h2 class="title">Contents</h2>
293<ul class="contents">
294</li>
295<li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
296<li><a href="#CREATING_URI_STRINGS">Creating URI Strings</a></li>
297<li><a href="#SENDING_REQUESTS_WITH_FILES">Sending Requests with Files</a></li>
298<li><a href="#ASYNCHRONOUS_REQUEST_PROCESSING">Asynchronous Request Processing</a></li>
299</ul></li>
300<li><a href="#FUNCTIONS">Functions</a><ul class="code">
301<li><a href="#cupsDoAuthentication" title="Authenticate a request.">cupsDoAuthentication</a></li>
302<li><a href="#cupsDoFileRequest" title="Do an IPP request with a file.">cupsDoFileRequest</a></li>
303<li><a href="#cupsDoIORequest" title="Do an IPP request with file descriptors.">cupsDoIORequest</a></li>
304<li><a href="#cupsDoRequest" title="Do an IPP request.">cupsDoRequest</a></li>
305<li><a href="#cupsEncodeOptions" title="Encode printer options into IPP attributes.">cupsEncodeOptions</a></li>
306<li><a href="#cupsEncodeOptions2" title="Encode printer options into IPP attributes for a group.">cupsEncodeOptions2</a></li>
ae71f5de
MS
307<li><a href="#cupsGetDevices" title="Get available printer devices.">cupsGetDevices</a></li>
308<li><a href="#cupsGetFd" title="Get a file from the server.">cupsGetFd</a></li>
309<li><a href="#cupsGetFile" title="Get a file from the server.">cupsGetFile</a></li>
5a738aea 310<li><a href="#cupsGetResponse" title="Get a response to an IPP request.">cupsGetResponse</a></li>
ae71f5de
MS
311<li><a href="#cupsPutFd" title="Put a file on the server.">cupsPutFd</a></li>
312<li><a href="#cupsPutFile" title="Put a file on the server.">cupsPutFile</a></li>
5a738aea
MS
313<li><a href="#cupsReadResponseData" title="Read additional data after the IPP response.">cupsReadResponseData</a></li>
314<li><a href="#cupsSendRequest" title="Send an IPP request.">cupsSendRequest</a></li>
315<li><a href="#cupsWriteRequestData" title="Write additional data after an IPP request.">cupsWriteRequestData</a></li>
316<li><a href="#httpAddrAny" title="Check for the &quot;any&quot; address.">httpAddrAny</a></li>
317<li><a href="#httpAddrEqual" title="Compare two addresses.">httpAddrEqual</a></li>
318<li><a href="#httpAddrLength" title="Return the length of the address in bytes.">httpAddrLength</a></li>
319<li><a href="#httpAddrLocalhost" title="Check for the local loopback address.">httpAddrLocalhost</a></li>
320<li><a href="#httpAddrLookup" title="Lookup the hostname associated with the address.">httpAddrLookup</a></li>
321<li><a href="#httpAddrString" title="Convert an address to a numeric string.">httpAddrString</a></li>
322<li><a href="#httpAssembleURI" title="Assemble a uniform resource identifier from its
323components.">httpAssembleURI</a></li>
324<li><a href="#httpAssembleURIf" title="Assemble a uniform resource identifier from its
325components with a formatted resource.">httpAssembleURIf</a></li>
326<li><a href="#httpBlocking" title="Set blocking/non-blocking behavior on a connection.">httpBlocking</a></li>
327<li><a href="#httpCheck" title="Check to see if there is a pending response from the server.">httpCheck</a></li>
328<li><a href="#httpClearCookie" title="Clear the cookie value(s).">httpClearCookie</a></li>
329<li><a href="#httpClearFields" title="Clear HTTP request fields.">httpClearFields</a></li>
330<li><a href="#httpClose" title="Close an HTTP connection...">httpClose</a></li>
331<li><a href="#httpConnect" title="Connect to a HTTP server.">httpConnect</a></li>
332<li><a href="#httpConnectEncrypt" title="Connect to a HTTP server using encryption.">httpConnectEncrypt</a></li>
333<li><a href="#httpDecode64" title="Base64-decode a string.">httpDecode64</a></li>
334<li><a href="#httpDecode64_2" title="Base64-decode a string.">httpDecode64_2</a></li>
335<li><a href="#httpDelete" title="Send a DELETE request to the server.">httpDelete</a></li>
336<li><a href="#httpEncode64" title="Base64-encode a string.">httpEncode64</a></li>
337<li><a href="#httpEncode64_2" title="Base64-encode a string.">httpEncode64_2</a></li>
338<li><a href="#httpEncryption" title="Set the required encryption on the link.">httpEncryption</a></li>
339<li><a href="#httpError" title="Get the last error on a connection.">httpError</a></li>
340<li><a href="#httpFlush" title="Flush data from a HTTP connection.">httpFlush</a></li>
341<li><a href="#httpFlushWrite" title="Flush data in write buffer.">httpFlushWrite</a></li>
342<li><a href="#httpGet" title="Send a GET request to the server.">httpGet</a></li>
343<li><a href="#httpGetAuthString" title="Get the current authorization string.">httpGetAuthString</a></li>
344<li><a href="#httpGetBlocking" title="Get the blocking/non-block state of a connection.">httpGetBlocking</a></li>
345<li><a href="#httpGetCookie" title="Get any cookie data from the response.">httpGetCookie</a></li>
346<li><a href="#httpGetDateString" title="Get a formatted date/time string from a time value.">httpGetDateString</a></li>
347<li><a href="#httpGetDateString2" title="Get a formatted date/time string from a time value.">httpGetDateString2</a></li>
348<li><a href="#httpGetDateTime" title="Get a time value from a formatted date/time string.">httpGetDateTime</a></li>
349<li><a href="#httpGetFd" title="Get the file descriptor associated with a connection.">httpGetFd</a></li>
350<li><a href="#httpGetField" title="Get a field value from a request/response.">httpGetField</a></li>
351<li><a href="#httpGetHostByName" title="Lookup a hostname or IPv4 address, and return
352address records for the specified name.">httpGetHostByName</a></li>
353<li><a href="#httpGetHostname" title="Get the FQDN for the connection or local system.">httpGetHostname</a></li>
354<li><a href="#httpGetLength" title="Get the amount of data remaining from the
355content-length or transfer-encoding fields.">httpGetLength</a></li>
356<li><a href="#httpGetLength2" title="Get the amount of data remaining from the
357content-length or transfer-encoding fields.">httpGetLength2</a></li>
358<li><a href="#httpGetStatus" title="Get the status of the last HTTP request.">httpGetStatus</a></li>
359<li><a href="#httpGetSubField" title="Get a sub-field value.">httpGetSubField</a></li>
360<li><a href="#httpGetSubField2" title="Get a sub-field value.">httpGetSubField2</a></li>
361<li><a href="#httpGets" title="Get a line of text from a HTTP connection.">httpGets</a></li>
362<li><a href="#httpHead" title="Send a HEAD request to the server.">httpHead</a></li>
363<li><a href="#httpInitialize" title="Initialize the HTTP interface library and set the
364default HTTP proxy (if any).">httpInitialize</a></li>
365<li><a href="#httpMD5" title="Compute the MD5 sum of the username:group:password.">httpMD5</a></li>
366<li><a href="#httpMD5Final" title="Combine the MD5 sum of the username, group, and password
367with the server-supplied nonce value, method, and
368request-uri.">httpMD5Final</a></li>
369<li><a href="#httpMD5String" title="Convert an MD5 sum to a character string.">httpMD5String</a></li>
370<li><a href="#httpOptions" title="Send an OPTIONS request to the server.">httpOptions</a></li>
371<li><a href="#httpPost" title="Send a POST request to the server.">httpPost</a></li>
372<li><a href="#httpPut" title="Send a PUT request to the server.">httpPut</a></li>
373<li><a href="#httpRead" title="Read data from a HTTP connection.">httpRead</a></li>
374<li><a href="#httpRead2" title="Read data from a HTTP connection.">httpRead2</a></li>
375<li><a href="#httpReconnect" title="Reconnect to a HTTP server.">httpReconnect</a></li>
376<li><a href="#httpSeparate" title="Separate a Universal Resource Identifier into its
377components.">httpSeparate</a></li>
378<li><a href="#httpSeparate2" title="Separate a Universal Resource Identifier into its
379components.">httpSeparate2</a></li>
380<li><a href="#httpSeparateURI" title="Separate a Universal Resource Identifier into its
381components.">httpSeparateURI</a></li>
382<li><a href="#httpSetAuthString" title="Set the current authorization string.">httpSetAuthString</a></li>
383<li><a href="#httpSetCookie" title="Set the cookie value(s)...">httpSetCookie</a></li>
384<li><a href="#httpSetExpect" title="Set the Expect: header in a request.">httpSetExpect</a></li>
385<li><a href="#httpSetField" title="Set the value of an HTTP header.">httpSetField</a></li>
386<li><a href="#httpSetLength" title="Set the content-length and content-encoding.">httpSetLength</a></li>
387<li><a href="#httpStatus" title="Return a short string describing a HTTP status code.">httpStatus</a></li>
388<li><a href="#httpTrace" title="Send an TRACE request to the server.">httpTrace</a></li>
389<li><a href="#httpUpdate" title="Update the current HTTP state for incoming data.">httpUpdate</a></li>
390<li><a href="#httpWait" title="Wait for data available on a connection.">httpWait</a></li>
391<li><a href="#httpWrite" title="Write data to a HTTP connection.">httpWrite</a></li>
392<li><a href="#httpWrite2" title="Write data to a HTTP connection.">httpWrite2</a></li>
393<li><a href="#ippAddBoolean" title="Add a boolean attribute to an IPP message.">ippAddBoolean</a></li>
394<li><a href="#ippAddBooleans" title="Add an array of boolean values.">ippAddBooleans</a></li>
395<li><a href="#ippAddCollection" title="Add a collection value.">ippAddCollection</a></li>
396<li><a href="#ippAddCollections" title="Add an array of collection values.">ippAddCollections</a></li>
397<li><a href="#ippAddDate" title="Add a date attribute to an IPP message.">ippAddDate</a></li>
398<li><a href="#ippAddInteger" title="Add a integer attribute to an IPP message.">ippAddInteger</a></li>
399<li><a href="#ippAddIntegers" title="Add an array of integer values.">ippAddIntegers</a></li>
400<li><a href="#ippAddOctetString" title="Add an octetString value to an IPP message.">ippAddOctetString</a></li>
401<li><a href="#ippAddRange" title="Add a range of values to an IPP message.">ippAddRange</a></li>
402<li><a href="#ippAddRanges" title="Add ranges of values to an IPP message.">ippAddRanges</a></li>
403<li><a href="#ippAddResolution" title="Add a resolution value to an IPP message.">ippAddResolution</a></li>
404<li><a href="#ippAddResolutions" title="Add resolution values to an IPP message.">ippAddResolutions</a></li>
405<li><a href="#ippAddSeparator" title="Add a group separator to an IPP message.">ippAddSeparator</a></li>
406<li><a href="#ippAddString" title="Add a language-encoded string to an IPP message.">ippAddString</a></li>
407<li><a href="#ippAddStrings" title="Add language-encoded strings to an IPP message.">ippAddStrings</a></li>
408<li><a href="#ippDateToTime" title="Convert from RFC 1903 Date/Time format to UNIX time
409in seconds.">ippDateToTime</a></li>
410<li><a href="#ippDelete" title="Delete an IPP message.">ippDelete</a></li>
411<li><a href="#ippDeleteAttribute" title="Delete a single attribute in an IPP message.">ippDeleteAttribute</a></li>
412<li><a href="#ippErrorString" title="Return a name for the given status code.">ippErrorString</a></li>
413<li><a href="#ippErrorValue" title="Return a status code for the given name.">ippErrorValue</a></li>
414<li><a href="#ippFindAttribute" title="Find a named attribute in a request...">ippFindAttribute</a></li>
415<li><a href="#ippFindNextAttribute" title="Find the next named attribute in a request...">ippFindNextAttribute</a></li>
416<li><a href="#ippLength" title="Compute the length of an IPP message.">ippLength</a></li>
417<li><a href="#ippNew" title="Allocate a new IPP message.">ippNew</a></li>
418<li><a href="#ippNewRequest" title="Allocate a new IPP request message.">ippNewRequest</a></li>
419<li><a href="#ippOpString" title="Return a name for the given operation id.">ippOpString</a></li>
420<li><a href="#ippOpValue" title="Return an operation id for the given name.">ippOpValue</a></li>
421<li><a href="#ippPort" title="Return the default IPP port number.">ippPort</a></li>
422<li><a href="#ippRead" title="Read data for an IPP message from a HTTP connection.">ippRead</a></li>
423<li><a href="#ippReadFile" title="Read data for an IPP message from a file.">ippReadFile</a></li>
424<li><a href="#ippReadIO" title="Read data for an IPP message.">ippReadIO</a></li>
425<li><a href="#ippSetPort" title="Set the default port number.">ippSetPort</a></li>
06d4e77b
MS
426<li><a href="#ippTagString" title="Return the tag name corresponding to a tag value.">ippTagString</a></li>
427<li><a href="#ippTagValue" title="Return the tag value corresponding to a tag name.">ippTagValue</a></li>
5a738aea
MS
428<li><a href="#ippTimeToDate" title="Convert from UNIX time to RFC 1903 format.">ippTimeToDate</a></li>
429<li><a href="#ippWrite" title="Write data for an IPP message to a HTTP connection.">ippWrite</a></li>
430<li><a href="#ippWriteFile" title="Write data for an IPP message to a file.">ippWriteFile</a></li>
431<li><a href="#ippWriteIO" title="Write data for an IPP message.">ippWriteIO</a></li>
432</ul>
433<li><a href="#TYPES">Data Types</a><ul class="code">
434 <li><a href="#http_addrlist_t" title="Socket address list, which is
435used to enumerate all of the
436addresses that are associated
437with a hostname. ">http_addrlist_t</a></li>
438 <li><a href="#http_auth_t" title="HTTP authentication types">http_auth_t</a></li>
439 <li><a href="#http_encoding_t" title="HTTP transfer encoding values">http_encoding_t</a></li>
440 <li><a href="#http_encryption_t" title="HTTP encryption values">http_encryption_t</a></li>
79e1d494
MS
441 <li><a href="#http_field_t" title="HTTP field names">http_field_t</a></li>
442 <li><a href="#http_keepalive_t" title="Types and structures...">http_keepalive_t</a></li>
443 <li><a href="#http_status_t" title="HTTP status codes">http_status_t</a></li>
5a738aea 444 <li><a href="#http_t" title="HTTP connection type">http_t</a></li>
79e1d494
MS
445 <li><a href="#http_uri_coding_t" title="HTTP version numbers">http_uri_coding_t</a></li>
446 <li><a href="#http_uri_status_t" title="URI en/decode flags">http_uri_status_t</a></li>
447 <li><a href="#http_version_t" title="Socket address union, which
448makes using IPv6 and other
449address types easier and
450more portable. ">http_version_t</a></li>
5a738aea 451 <li><a href="#ipp_attribute_t" title="Attribute">ipp_attribute_t</a></li>
79e1d494 452 <li><a href="#ipp_finish_t" title="Orientation...">ipp_finish_t</a></li>
5a738aea 453 <li><a href="#ipp_iocb_t" title="IPP IO Callback Function ">ipp_iocb_t</a></li>
79e1d494
MS
454 <li><a href="#ipp_jstate_t" title="Printer States....">ipp_jstate_t</a></li>
455 <li><a href="#ipp_op_t" title="Old names for the operations">ipp_op_t</a></li>
456 <li><a href="#ipp_orient_t" title="Qualities...">ipp_orient_t</a></li>
457 <li><a href="#ipp_pstate_t" title="IPP states...">ipp_pstate_t</a></li>
458 <li><a href="#ipp_quality_t" title="Job States....">ipp_quality_t</a></li>
5a738aea 459 <li><a href="#ipp_request_t" title="Request Header">ipp_request_t</a></li>
79e1d494
MS
460 <li><a href="#ipp_res_t" title="Types and structures...">ipp_res_t</a></li>
461 <li><a href="#ipp_state_t" title="IPP operations...">ipp_state_t</a></li>
5a738aea
MS
462 <li><a href="#ipp_t" title="Attribute Value">ipp_t</a></li>
463 <li><a href="#ipp_uchar_t" title="IPP status codes...">ipp_uchar_t</a></li>
79e1d494 464 <li><a href="#ipp_tag_t" title="Format tags for attributes...">ipp_tag_t</a></li>
5a738aea
MS
465 <li><a href="#ipp_value_t" title="New in CUPS 1.1.19">ipp_value_t</a></li>
466</ul></li>
467<li><a href="#STRUCTURES">Structures</a><ul class="code">
468 <li><a href="#http_addrlist_s" title="Socket address list, which is
469used to enumerate all of the
470addresses that are associated
471with a hostname. ">http_addrlist_s</a></li>
472 <li><a href="#ipp_attribute_s" title="Attribute">ipp_attribute_s</a></li>
473 <li><a href="#ipp_s" title="IPP Request/Response/Notification">ipp_s</a></li>
474</ul></li>
475<li><a href="#UNIONS">Unions</a><ul class="code">
476 <li><a href="#ipp_request_u" title="Request Header">ipp_request_u</a></li>
477 <li><a href="#ipp_value_u" title="New in CUPS 1.1.19">ipp_value_u</a></li>
478</ul></li>
479<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
480 <li><a href="#http_auth_e" title="HTTP authentication types">http_auth_e</a></li>
481 <li><a href="#http_encoding_e" title="HTTP transfer encoding values">http_encoding_e</a></li>
482 <li><a href="#http_encryption_e" title="HTTP encryption values">http_encryption_e</a></li>
483 <li><a href="#http_field_e" title="HTTP field names">http_field_e</a></li>
484 <li><a href="#http_keepalive_e" title="Types and structures...">http_keepalive_e</a></li>
485 <li><a href="#http_state_e" title="">http_state_e</a></li>
486 <li><a href="#http_status_e" title="HTTP status codes">http_status_e</a></li>
487 <li><a href="#http_uri_coding_e" title="">http_uri_coding_e</a></li>
488 <li><a href="#http_uri_status_e" title="">http_uri_status_e</a></li>
489 <li><a href="#http_version_e" title="">http_version_e</a></li>
490 <li><a href="#ipp_finish_e" title="">ipp_finish_e</a></li>
491 <li><a href="#ipp_jstate_e" title="">ipp_jstate_e</a></li>
492 <li><a href="#ipp_op_e" title="">ipp_op_e</a></li>
493 <li><a href="#ipp_orient_e" title="">ipp_orient_e</a></li>
494 <li><a href="#ipp_pstate_e" title="">ipp_pstate_e</a></li>
495 <li><a href="#ipp_quality_e" title="">ipp_quality_e</a></li>
496 <li><a href="#ipp_res_e" title="Types and structures...">ipp_res_e</a></li>
497 <li><a href="#ipp_state_e" title="">ipp_state_e</a></li>
498 <li><a href="#ipp_status_e" title="IPP status codes...">ipp_status_e</a></li>
499 <li><a href="#ipp_tag_e" title="Format tags for attributes...">ipp_tag_e</a></li>
500</ul></li>
501</ul>
502<!--
66ab9486 503 "$Id: api-httpipp.shtml 7684 2008-06-23 16:47:38Z mike $"
ef416fc2 504
505 HTTP and IPP API introduction for the Common UNIX Printing System (CUPS).
506
5a738aea 507 Copyright 2007-2008 by Apple Inc.
bc44d920 508 Copyright 1997-2006 by Easy Software Products, all rights reserved.
ef416fc2 509
510 These coded instructions, statements, and computer programs are the
bc44d920 511 property of Apple Inc. and are protected by Federal copyright
512 law. Distribution and use rights are outlined in the file "LICENSE.txt"
513 which should have been included with this file. If this file is
514 file is missing or damaged, see the license at "http://www.cups.org/".
ef416fc2 515-->
516
5a738aea
MS
517<h2 class='title'><a name='OVERVIEW'>Overview</a></h2>
518
519<p>The CUPS HTTP and IPP APIs provide low-level access to the HTTP and IPP
520protocols and CUPS scheduler. They are typically used by monitoring and
521administration programs to perform specific functions not supported by the
522high-level CUPS API functions.</p>
523
524<p>The HTTP APIs use an opaque structure called
525<a href='#http_t'><code>http_t</code></a> to manage connections to
526a particular HTTP or IPP server. The
527<a href='#httpConnectEncrypt'><code>httpConnectEncrypt</code></a> function is
528used to create an instance of this structure for a particular server.
529The constant <code>CUPS_HTTP_DEFAULT</code> can be used with all of the
530<code>cups</code> functions to refer to the default CUPS server - the functions
531create a per-thread <a href='#http_t'><code>http_t</code></a> as needed.</p>
532
533<p>The IPP APIs use two structures for requests (messages sent to the CUPS
534scheduler) and responses (messages sent back to your application from the
535scheduler). The <a href='#ipp_t'><code>ipp_t</code></a> structure holds a
536complete request or response and is allocated using the
537<a href='#ippNew'><code>ippNew</code></a> or
538<a href='#ippNewRequest'><code>ippNewRequest</code></a> functions and
539freed using the <a href='#ippDelete'><code>ippDelete</code></a> function.</p>
540
541<p>The second structure is called
542<a href='#ipp_attribute_t'><code>ipp_attribute_t</code></a> and holds a
543single IPP attribute which consists of a group tag (<code>group_tag</code>), a
544value type tag (<code>value_tag</code>), the attribute name (<code>name</code>),
545and 1 or more values (<code>values[]</code>). Attributes are added to an
546<a href='#ipp_t'><code>ipp_t</code></a> structure using one of the
547<code>ippAdd</code> functions. For example, use
548<a href='#ippAddString'><code>ippAddString</code></a> to add a
549"requesting-user-name" string attribute to a request:</p>
550
551<pre class='example'>
552<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(IPP_GET_JOBS);
553
554<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
555 NULL, cupsUser());
556</pre>
ef416fc2 557
5a738aea
MS
558<p>Once you have created an IPP request, use the <code>cups</code>
559functions to send the request to and read the response from the server.
560For example, the <a href='#cupsDoRequest'><code>cupsDoRequest</code></a>
561function can be used for simple query operations that do not involve files:</p>
ef416fc2 562
5a738aea
MS
563<pre class='example'>
564#include &lt;cups/cups.h&gt;
ef416fc2 565
ef416fc2 566
5a738aea
MS
567<a href='#ipp_t'>ipp_t</a> *<a name='get_jobs'>get_jobs</a>(void)
568{
569 <a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(IPP_GET_JOBS);
ef416fc2 570
5a738aea
MS
571 <a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
572 NULL, cupsUser());
573
574 return (<a href='#cupsDoRequest'>cupsDoRequest</a>(CUPS_HTTP_DEFAULT, request, "/"));
575}
ef416fc2 576</pre>
577
5a738aea
MS
578<p>The <a href='#cupsDoRequest'><code>cupsDoRequest</code></a> function frees
579the request structure and returns an IPP response structure or NULL pointer if
580the request could not be sent to the server. Once you have a response from
581the server, you can either use the
582<a href='#ippFindAttribute'><code>ippFindAttribute</code></a> and
583<a href='#ippFindNextAttribute'><code>ippFindNextAttribute</code></a> functions
584to find specific attributes, for example:</p>
ef416fc2 585
5a738aea
MS
586<pre class='example'>
587<a href='#ipp_t'>ipp_t</a> *response;
588<a href='#ipp_attribute_t'>ipp_attribute_t</a> *attr;
bc44d920 589
5a738aea
MS
590attr = <a href='#ippFindAttribute'>ippFindAttribute</a>(response, "printer-state", IPP_TAG_ENUM);
591</pre>
592
593<p>You can also walk the list of attributes with a simple <code>for</code> loop
594like this:</p>
595
596<pre class='example'>
597<a href='#ipp_t'>ipp_t</a> *response;
598<a href='#ipp_attribute_t'>ipp_attribute_t</a> *attr;
599
600for (attr = response->attrs; attr != NULL; attr = attr->next)
601 if (attr->name == NULL)
602 puts("--SEPARATOR--");
603 else
604 puts(attr->name);
605</pre>
606
607<p>The <code>for</code> loop approach is normally used when collecting
608attributes for multiple objects (jobs, printers, etc.) in a response. Attributes
609with <code>NULL</code> names indicate a separator between the attributes of
610each object. For example, the following code will list the jobs returned from
611our previous <a href='#get_jobs'><code>get_jobs</code></a> example code:</p>
612
613<pre class='example'>
614<a href='#ipp_t'>ipp_t</a> *response = <a href='#get_jobs'>get_jobs</a>();
615
616if (response != NULL)
617{
618 <a href='#ipp_attribute_t'>ipp_attribute_t</a> *attr;
619 int job_id = 0;
620 char *job_name = NULL;
621 char *job_originating_user_name = NULL;
622
623 puts("Job ID Owner Title");
624 puts("------ ---------------- ---------------------------------");
625
626 for (attr = response->attrs; attr != NULL; attr = attr->next)
627 {
628 /* Attributes without names are separators between jobs */
629 if (attr->name == NULL)
630 {
631 if (job_id > 0 &amp;&amp; job_name != NULL &amp;&amp; job_originating_user_name != NULL)
632 printf("%5d %-16s %s\n", job_id, job_originating_user_name, job_name);
633
634 job_id = 0;
635 job_name = NULL;
636 job_originating_user_name = NULL;
637 continue;
638 }
639 else if (!strcmp(attr->name, "job-id") &amp;&amp; attr->value_tag == IPP_TAG_INTEGER)
640 job_id = attr->values[0].integer;
641 else if (!strcmp(attr->name, "job-name") &amp;&amp; attr->value_tag == IPP_TAG_NAME)
642 job_name = attr->values[0].string.text;
643 else if (!strcmp(attr->name, "job-originating-user-name") &amp;&amp;
644 attr->value_tag == IPP_TAG_NAME)
645 job_originating_user_name = attr->values[0].string.text;
646 }
647
648 if (job_id > 0 &amp;&amp; job_name != NULL &amp;&amp; job_originating_user_name != NULL)
649 printf("%5d %-16s %s\n", job_id, job_originating_user_name, job_name);
650}
651</pre>
652
653<h3><a name='CREATING_URI_STRINGS'>Creating URI Strings</a></h3>
654
655<p>To ensure proper encoding, the
656<a href='#httpAssembleURIf'><code>httpAssembleURIf</code></a> function must be
657used to format a "printer-uri" string for all printer-based requests:</p>
658
659<pre class='example'>
660const char *name = "Foo";
661char uri[1024];
662<a href='#ipp_t'>ipp_t</a> *request;
663
664<a href='#httpAssembleURIf'>httpAssembleURIf</a>(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, cupsServer(),
665 ippPort(), "/printers/%s", name);
666<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
667</pre>
668
669<h3><a name='SENDING_REQUESTS_WITH_FILES'>Sending Requests with Files</a></h3>
670
671<p>The <a href='#cupsDoFileRequest'><code>cupsDoFileRequest</code></a> and
672<a href='#cupsDoIORequest'><code>cupsDoIORequest</code></a> functions are
673used for requests involving files. The
674<a href='#cupsDoFileRequest'><code>cupsDoFileRequest</code></a> function
675attaches the named file to a request and is typically used when sending a print
676file or changing a printer's PPD file:</p>
677
678<pre class='example'>
679const char *filename = "/usr/share/cups/data/testprint.ps";
680const char *name = "Foo";
681char uri[1024];
682char resource[1024];
683<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(IPP_PRINT_JOB);
684<a href='#ipp_t'>ipp_t</a> *response;
685
686/* Use httpAssembleURIf for the printer-uri string */
687<a href='#httpAssembleURIf'>httpAssembleURIf</a>(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, cupsServer(),
688 ippPort(), "/printers/%s", name);
689<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
690<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
691 NULL, cupsUser());
692<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name",
693 NULL, "testprint.ps");
694
695/* Use snprintf for the resource path */
696snprintf(resource, sizeof(resource), "/printers/%s", name);
697
698response = <a href='#cupsDoFileRequest'>cupsDoFileRequest</a>(CUPS_HTTP_DEFAULT, request, resource, filename);
699</pre>
700
701<p>The <a href='#cupsDoIORequest'><code>cupsDoIORequest</code></a> function
702optionally attaches a file to the request and optionally saves a file in the
703response from the server. It is used when using a pipe for the request
704attachment or when using a request that returns a file, currently only
705<code>CUPS_GET_DOCUMENT</code> and <code>CUPS_GET_PPD</code>. For example,
706the following code will download the PPD file for the sample HP LaserJet
707printer driver:</p>
708
709<pre class='example'>
710char tempfile[1024];
711int tempfd;
712<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(CUPS_GET_PPD);
713<a href='#ipp_t'>ipp_t</a> *response;
714
715<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
716 NULL, "laserjet.ppd");
717
718tempfd = cupsTempFd(tempfile, sizeof(tempfile));
719
720response = <a href='#cupsDoIORequest'>cupsDoIORequest</a>(CUPS_HTTP_DEFAULT, request, "/", -1, tempfd);
721</pre>
722
723<p>The example passes <code>-1</code> for the input file descriptor to specify
724that no file is to be attached to the request. The PPD file attached to the
725response is written to the temporary file descriptor we created using the
726<code>cupsTempFd</code> function.</p>
727
728<h3><a name='ASYNCHRONOUS_REQUEST_PROCESSING'>Asynchronous Request Processing</a></h3>
729
730<p>The <a href='#cupsSendRequest'><code>cupsSendRequest</code></a> and
731<a href='#cupsGetResponse'><code>cupsGetResponse</code></a> support
732asynchronous communications with the server. Unlike the other request
733functions, the IPP request is not automatically freed, so remember to
734free your request with the <a href='#ippDelete'><code>ippDelete</code></a>
735function.</p>
736
737<p>File data is attached to the request using the
738<a href='#cupsWriteRequestData'><code>cupsWriteRequestData</code></a>
739function, while file data returned from the server is read using the
740<a href='#cupsReadResponseData'><code>cupsReadResponseData</code></a>
741function. We can rewrite the previous <code>CUPS_GET_PPD</code> example
742to use the asynchronous functions quite easily:</p>
743
744<pre class='example'>
745char tempfile[1024];
746int tempfd;
747<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(CUPS_GET_PPD);
748<a href='#ipp_t'>ipp_t</a> *response;
749
750<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
751 NULL, "laserjet.ppd");
752
753tempfd = cupsTempFd(tempfile, sizeof(tempfile));
754
755if (<a href='#cupsSendRequest'>cupsSendRequest</a>(CUPS_HTTP_DEFAULT, request, "/") == HTTP_CONTINUE)
756{
757 response = <a href='#cupsGetResponse'>cupsGetResponse</a>(CUPS_HTTP_DEFAULT, "/");
758
759 if (response != NULL)
760 {
761 ssize_t bytes;
762 char buffer[8192];
763
764 while ((bytes = <a href='#cupsReadResponseData'>cupsReadResponseData</a>(CUPS_HTTP_DEFAULT, buffer, sizeof(buffer))) > 0)
765 write(tempfd, buffer, bytes);
766 }
767}
768
769/* Free the request! */
770<a href='#ippDelete'>ippDelete</a>(request);
771</pre>
772
773<p>The <a href='#cupsSendRequest'><code>cupsSendRequest</code></a> function
774returns the initial HTTP request status, typically either
775<code>HTTP_CONTINUE</code> or <code>HTTP_UNAUTHORIZED</code>. The latter status
776is returned when the request requires authentication of some sort. The
777<a href='#cupsDoAuthentication'><code>cupsDoAuthentication</code></a> function
778must be called when your see <code>HTTP_UNAUTHORIZED</code> and the request
779re-sent. We can add authentication support to our example code by using a
780<code>do ... while</code> loop:</p>
781
782<pre class='example'>
783char tempfile[1024];
784int tempfd;
785<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(CUPS_GET_PPD);
786<a href='#ipp_t'>ipp_t</a> *response;
787http_status_t status;
788
789<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
790 NULL, "laserjet.ppd");
791
792tempfd = cupsTempFd(tempfile, sizeof(tempfile));
793
794/* Loop for authentication */
795do
796{
75bd9771 797 status = <a href='#cupsSendRequest'>cupsSendRequest</a>(CUPS_HTTP_DEFAULT, request, "/");
5a738aea
MS
798
799 if (status == HTTP_UNAUTHORIZED)
800 {
801 /* Try to authenticate, break out of the loop if that fails */
802 if (<a href='#cupsDoAuthentication'>cupsDoAuthentication</a>(CUPS_HTTP_DEFAULT, "POST", "/"))
803 break;
804 }
805}
806while (status != HTTP_CONTINUE &amp;&amp; status != HTTP_UNAUTHORIZED);
807
808if (status == HTTP_CONTINUE)
809{
810 response = <a href='#cupsGetResponse'>cupsGetResponse</a>(CUPS_HTTP_DEFAULT, "/");
811
812 if (response != NULL)
813 {
814 ssize_t bytes;
815 char buffer[8192];
816
817 while ((bytes = <a href='#cupsReadResponseData'>cupsReadResponseData</a>(CUPS_HTTP_DEFAULT, buffer, sizeof(buffer))) > 0)
818 write(tempfd, buffer, bytes);
819 }
820}
821
822/* Free the request! */
823<a href='#ippDelete'>ippDelete</a>(request);
824</pre>
825<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
826<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20&nbsp;</span><a name="cupsDoAuthentication">cupsDoAuthentication</a></h3>
827<p class="description">Authenticate a request.</p>
828<p class="code">
829int cupsDoAuthentication (<br>
830&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
831&nbsp;&nbsp;&nbsp;&nbsp;const char *method,<br>
832&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
833);</p>
834<h4 class="parameters">Parameters</h4>
835<dl>
836<dt>http</dt>
568fa3fa 837<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
5a738aea
MS
838<dt>method</dt>
839<dd class="description">Request method (&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;)</dd>
840<dt>resource</dt>
841<dd class="description">Resource path</dd>
842</dl>
843<h4 class="returnvalue">Return Value</h4>
844<p class="description">0 on success, -1 on error</p>
845<h4 class="discussion">Discussion</h4>
846<p class="discussion">This function should be called in response to a <code>HTTP_UNAUTHORIZED</code>
847status, prior to resubmitting your request.
848
849</p>
850<h3 class="function"><a name="cupsDoFileRequest">cupsDoFileRequest</a></h3>
851<p class="description">Do an IPP request with a file.</p>
852<p class="code">
853<a href="#ipp_t">ipp_t</a> *cupsDoFileRequest (<br>
854&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
855&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
856&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
857&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
858);</p>
859<h4 class="parameters">Parameters</h4>
860<dl>
861<dt>http</dt>
568fa3fa 862<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
5a738aea
MS
863<dt>request</dt>
864<dd class="description">IPP request</dd>
865<dt>resource</dt>
866<dd class="description">HTTP resource for POST</dd>
867<dt>filename</dt>
568fa3fa 868<dd class="description">File to send or <code>NULL</code> for none</dd>
5a738aea
MS
869</dl>
870<h4 class="returnvalue">Return Value</h4>
871<p class="description">Response data</p>
872<h4 class="discussion">Discussion</h4>
873<p class="discussion">This function sends the IPP request to the specified server, retrying
568fa3fa 874and authenticating as necessary. The request is freed with <a href="#ippDelete"><code>ippDelete</code></a>
5a738aea
MS
875after receiving a valid IPP response.</p>
876<h3 class="function"><span class="info">&nbsp;CUPS 1.3&nbsp;</span><a name="cupsDoIORequest">cupsDoIORequest</a></h3>
877<p class="description">Do an IPP request with file descriptors.</p>
878<p class="code">
879<a href="#ipp_t">ipp_t</a> *cupsDoIORequest (<br>
880&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
881&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
882&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
883&nbsp;&nbsp;&nbsp;&nbsp;int infile,<br>
884&nbsp;&nbsp;&nbsp;&nbsp;int outfile<br>
885);</p>
886<h4 class="parameters">Parameters</h4>
887<dl>
888<dt>http</dt>
568fa3fa 889<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
5a738aea
MS
890<dt>request</dt>
891<dd class="description">IPP request</dd>
892<dt>resource</dt>
893<dd class="description">HTTP resource for POST</dd>
894<dt>infile</dt>
895<dd class="description">File to read from or -1 for none</dd>
896<dt>outfile</dt>
897<dd class="description">File to write to or -1 for none</dd>
898</dl>
899<h4 class="returnvalue">Return Value</h4>
900<p class="description">Response data</p>
901<h4 class="discussion">Discussion</h4>
902<p class="discussion">This function sends the IPP request to the specified server, retrying
bc44d920 903and authenticating as necessary. The request is freed with ippDelete()
5a738aea
MS
904after receiving a valid IPP response.<br>
905<br>
906If &quot;infile&quot; is a valid file descriptor, cupsDoIORequest() copies
907all of the data from the file after the IPP request message.<br>
908<br>
909If &quot;outfile&quot; is a valid file descriptor, cupsDoIORequest() copies
bc44d920 910all of the data after the IPP response message to the file.
911
5a738aea
MS
912</p>
913<h3 class="function"><a name="cupsDoRequest">cupsDoRequest</a></h3>
914<p class="description">Do an IPP request.</p>
915<p class="code">
916<a href="#ipp_t">ipp_t</a> *cupsDoRequest (<br>
917&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
918&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
919&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
920);</p>
921<h4 class="parameters">Parameters</h4>
922<dl>
923<dt>http</dt>
568fa3fa 924<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
5a738aea
MS
925<dt>request</dt>
926<dd class="description">IPP request</dd>
927<dt>resource</dt>
928<dd class="description">HTTP resource for POST</dd>
929</dl>
930<h4 class="returnvalue">Return Value</h4>
931<p class="description">Response data</p>
932<h4 class="discussion">Discussion</h4>
933<p class="discussion">This function sends the IPP request to the specified server, retrying
ecdc0628 934and authenticating as necessary. The request is freed with ippDelete()
5a738aea
MS
935after receiving a valid IPP response.</p>
936<h3 class="function"><a name="cupsEncodeOptions">cupsEncodeOptions</a></h3>
937<p class="description">Encode printer options into IPP attributes.</p>
938<p class="code">
939void cupsEncodeOptions (<br>
940&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
941&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
942&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t *options<br>
943);</p>
944<h4 class="parameters">Parameters</h4>
945<dl>
946<dt>ipp</dt>
947<dd class="description">Request to add to</dd>
948<dt>num_options</dt>
949<dd class="description">Number of options</dd>
950<dt>options</dt>
951<dd class="description">Options</dd>
952</dl>
953<h4 class="discussion">Discussion</h4>
954<p class="discussion">This function adds operation, job, and then subscription attributes,
ecdc0628 955in that order. Use the cupsEncodeOptions2() function to add attributes
5a738aea
MS
956for a single group.</p>
957<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="cupsEncodeOptions2">cupsEncodeOptions2</a></h3>
958<p class="description">Encode printer options into IPP attributes for a group.</p>
959<p class="code">
960void cupsEncodeOptions2 (<br>
961&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
962&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
963&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t *options,<br>
79e1d494 964&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group_tag<br>
5a738aea
MS
965);</p>
966<h4 class="parameters">Parameters</h4>
967<dl>
968<dt>ipp</dt>
969<dd class="description">Request to add to</dd>
970<dt>num_options</dt>
971<dd class="description">Number of options</dd>
972<dt>options</dt>
973<dd class="description">Options</dd>
974<dt>group_tag</dt>
975<dd class="description">Group to encode</dd>
976</dl>
977<h4 class="discussion">Discussion</h4>
978<p class="discussion">This function only adds attributes for a single group. Call this
ecdc0628 979function multiple times for each group, or use cupsEncodeOptions()
980to add the standard groups.
ef416fc2 981
ae71f5de
MS
982</p>
983<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsGetDevices">cupsGetDevices</a></h3>
984<p class="description">Get available printer devices.</p>
985<p class="code">
986ipp_status_t cupsGetDevices (<br>
987&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
988&nbsp;&nbsp;&nbsp;&nbsp;int timeout,<br>
989&nbsp;&nbsp;&nbsp;&nbsp;const char *exclude_schemes,<br>
990&nbsp;&nbsp;&nbsp;&nbsp;cups_device_cb_t callback,<br>
991&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
992);</p>
993<h4 class="parameters">Parameters</h4>
994<dl>
995<dt>http</dt>
996<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
997<dt>timeout</dt>
998<dd class="description">Timeout in seconds or <code>CUPS_TIMEOUT_DEFAULT</code></dd>
999<dt>exclude_schemes</dt>
1000<dd class="description">Comma-separated URI schemes to exclude or <code>CUPS_EXCLUDE_NONE</code></dd>
1001<dt>callback</dt>
1002<dd class="description">Callback function</dd>
1003<dt>user_data</dt>
1004<dd class="description">User data pointer</dd>
1005</dl>
1006<h4 class="returnvalue">Return Value</h4>
1007<p class="description">Request status - <code>IPP_OK</code> on success.</p>
1008<h4 class="discussion">Discussion</h4>
1009<p class="discussion">This function sends a CUPS-Get-Devices request and streams the discovered
1010devices to the specified callback function. The &quot;timeout&quot; parameter controls
1011how long the request lasts, while the &quot;exclude_schemes&quot; parameter provides
1012a comma-delimited list of backends to omit from the request.
1013
1014</p>
1015<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20&nbsp;</span><a name="cupsGetFd">cupsGetFd</a></h3>
1016<p class="description">Get a file from the server.</p>
1017<p class="code">
79e1d494 1018<a href="#http_status_t">http_status_t</a> cupsGetFd (<br>
ae71f5de
MS
1019&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1020&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
1021&nbsp;&nbsp;&nbsp;&nbsp;int fd<br>
1022);</p>
1023<h4 class="parameters">Parameters</h4>
1024<dl>
1025<dt>http</dt>
1026<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
1027<dt>resource</dt>
1028<dd class="description">Resource name</dd>
1029<dt>fd</dt>
1030<dd class="description">File descriptor</dd>
1031</dl>
1032<h4 class="returnvalue">Return Value</h4>
1033<p class="description">HTTP status</p>
1034<h4 class="discussion">Discussion</h4>
1035<p class="discussion">This function returns <code>HTTP_OK</code> when the file is successfully retrieved.
1036
1037</p>
1038<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20&nbsp;</span><a name="cupsGetFile">cupsGetFile</a></h3>
1039<p class="description">Get a file from the server.</p>
1040<p class="code">
79e1d494 1041<a href="#http_status_t">http_status_t</a> cupsGetFile (<br>
ae71f5de
MS
1042&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1043&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
1044&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
1045);</p>
1046<h4 class="parameters">Parameters</h4>
1047<dl>
1048<dt>http</dt>
1049<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
1050<dt>resource</dt>
1051<dd class="description">Resource name</dd>
1052<dt>filename</dt>
1053<dd class="description">Filename</dd>
1054</dl>
1055<h4 class="returnvalue">Return Value</h4>
1056<p class="description">HTTP status</p>
1057<h4 class="discussion">Discussion</h4>
1058<p class="discussion">This function returns <code>HTTP_OK</code> when the file is successfully retrieved.
1059
5a738aea
MS
1060</p>
1061<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsGetResponse">cupsGetResponse</a></h3>
1062<p class="description">Get a response to an IPP request.</p>
1063<p class="code">
1064<a href="#ipp_t">ipp_t</a> *cupsGetResponse (<br>
1065&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1066&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
1067);</p>
1068<h4 class="parameters">Parameters</h4>
1069<dl>
1070<dt>http</dt>
568fa3fa 1071<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
5a738aea
MS
1072<dt>resource</dt>
1073<dd class="description">HTTP resource for POST</dd>
1074</dl>
1075<h4 class="returnvalue">Return Value</h4>
568fa3fa 1076<p class="description">Response or <code>NULL</code> on HTTP error</p>
5a738aea
MS
1077<h4 class="discussion">Discussion</h4>
1078<p class="discussion">Use this function to get the response for an IPP request sent using
1079cupsSendDocument() or cupsSendRequest(). For requests that return
1080additional data, use httpRead() after getting a successful response.
1081
ae71f5de
MS
1082</p>
1083<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20&nbsp;</span><a name="cupsPutFd">cupsPutFd</a></h3>
1084<p class="description">Put a file on the server.</p>
1085<p class="code">
79e1d494 1086<a href="#http_status_t">http_status_t</a> cupsPutFd (<br>
ae71f5de
MS
1087&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1088&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
1089&nbsp;&nbsp;&nbsp;&nbsp;int fd<br>
1090);</p>
1091<h4 class="parameters">Parameters</h4>
1092<dl>
1093<dt>http</dt>
1094<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
1095<dt>resource</dt>
1096<dd class="description">Resource name</dd>
1097<dt>fd</dt>
1098<dd class="description">File descriptor</dd>
1099</dl>
1100<h4 class="returnvalue">Return Value</h4>
1101<p class="description">HTTP status</p>
1102<h4 class="discussion">Discussion</h4>
1103<p class="discussion">This function returns <code>HTTP_CREATED</code> when the file is stored
1104successfully.
1105
1106</p>
1107<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20&nbsp;</span><a name="cupsPutFile">cupsPutFile</a></h3>
1108<p class="description">Put a file on the server.</p>
1109<p class="code">
79e1d494 1110<a href="#http_status_t">http_status_t</a> cupsPutFile (<br>
ae71f5de
MS
1111&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1112&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
1113&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
1114);</p>
1115<h4 class="parameters">Parameters</h4>
1116<dl>
1117<dt>http</dt>
1118<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
1119<dt>resource</dt>
1120<dd class="description">Resource name</dd>
1121<dt>filename</dt>
1122<dd class="description">Filename</dd>
1123</dl>
1124<h4 class="returnvalue">Return Value</h4>
1125<p class="description">HTTP status</p>
1126<h4 class="discussion">Discussion</h4>
1127<p class="discussion">This function returns <code>HTTP_CREATED</code> when the file is stored
1128successfully.
1129
5a738aea
MS
1130</p>
1131<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsReadResponseData">cupsReadResponseData</a></h3>
1132<p class="description">Read additional data after the IPP response.</p>
1133<p class="code">
1134ssize_t cupsReadResponseData (<br>
1135&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1136&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
1137&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
1138);</p>
1139<h4 class="parameters">Parameters</h4>
1140<dl>
1141<dt>http</dt>
568fa3fa 1142<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
5a738aea
MS
1143<dt>buffer</dt>
1144<dd class="description">Buffer to use</dd>
1145<dt>length</dt>
1146<dd class="description">Number of bytes to read</dd>
1147</dl>
1148<h4 class="returnvalue">Return Value</h4>
1149<p class="description">Bytes read, 0 on EOF, -1 on error</p>
1150<h4 class="discussion">Discussion</h4>
1151<p class="discussion">This function is used after cupsGetResponse() to read the PPD or document
1152files for CUPS_GET_PPD and CUPS_GET_DOCUMENT requests, respectively.
1153
1154</p>
1155<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsSendRequest">cupsSendRequest</a></h3>
1156<p class="description">Send an IPP request.</p>
1157<p class="code">
79e1d494 1158<a href="#http_status_t">http_status_t</a> cupsSendRequest (<br>
5a738aea
MS
1159&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1160&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
1161&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
1162&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
1163);</p>
1164<h4 class="parameters">Parameters</h4>
1165<dl>
1166<dt>http</dt>
568fa3fa 1167<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
5a738aea
MS
1168<dt>request</dt>
1169<dd class="description">IPP request</dd>
1170<dt>resource</dt>
1171<dd class="description">Resource path</dd>
1172<dt>length</dt>
ae71f5de 1173<dd class="description">Length of data to follow or <code>CUPS_LENGTH_VARIABLE</code></dd>
5a738aea
MS
1174</dl>
1175<h4 class="returnvalue">Return Value</h4>
1176<p class="description">Initial HTTP status</p>
1177<h4 class="discussion">Discussion</h4>
1178<p class="discussion">Use httpWrite() to write any additional data (document, PPD file, etc.)
1179for the request, cupsGetResponse() to get the IPP response, and httpRead()
1180to read any additional data following the response. Only one request can be
1181sent/queued at a time.<br>
1182<br>
1183Unlike cupsDoFileRequest(), cupsDoIORequest(), and cupsDoRequest(), the
1184request is not freed.
1185
1186</p>
1187<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsWriteRequestData">cupsWriteRequestData</a></h3>
1188<p class="description">Write additional data after an IPP request.</p>
1189<p class="code">
79e1d494 1190<a href="#http_status_t">http_status_t</a> cupsWriteRequestData (<br>
5a738aea
MS
1191&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1192&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
1193&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
1194);</p>
1195<h4 class="parameters">Parameters</h4>
1196<dl>
1197<dt>http</dt>
568fa3fa 1198<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
5a738aea
MS
1199<dt>buffer</dt>
1200<dd class="description">Bytes to write</dd>
1201<dt>length</dt>
1202<dd class="description">Number of bytes to write</dd>
1203</dl>
1204<h4 class="returnvalue">Return Value</h4>
568fa3fa 1205<p class="description"><code>HTTP_CONTINUE</code> if OK or HTTP status on error</p>
5a738aea 1206<h4 class="discussion">Discussion</h4>
568fa3fa
MS
1207<p class="discussion">This function is used after <a href="#cupsSendRequest"><code>cupsSendRequest</code></a> to provide a PPD and
1208after <a href="#cupsStartDocument"><code>cupsStartDocument</code></a> to provide a document file.
5a738aea
MS
1209
1210</p>
1211<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpAddrAny">httpAddrAny</a></h3>
1212<p class="description">Check for the &quot;any&quot; address.</p>
1213<p class="code">
1214int httpAddrAny (<br>
1215&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr<br>
1216);</p>
1217<h4 class="parameters">Parameters</h4>
1218<dl>
1219<dt>addr</dt>
1220<dd class="description">Address to check</dd>
1221</dl>
1222<h4 class="returnvalue">Return Value</h4>
1223<p class="description">1 if &quot;any&quot;, 0 otherwise</p>
1224<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpAddrEqual">httpAddrEqual</a></h3>
1225<p class="description">Compare two addresses.</p>
1226<p class="code">
1227int httpAddrEqual (<br>
1228&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr1,<br>
1229&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr2<br>
1230);</p>
1231<h4 class="parameters">Parameters</h4>
1232<dl>
1233<dt>addr1</dt>
1234<dd class="description">First address</dd>
1235<dt>addr2</dt>
1236<dd class="description">Second address</dd>
1237</dl>
1238<h4 class="returnvalue">Return Value</h4>
1239<p class="description">1 if equal, 0 if not</p>
1240<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpAddrLength">httpAddrLength</a></h3>
1241<p class="description">Return the length of the address in bytes.</p>
1242<p class="code">
1243int httpAddrLength (<br>
1244&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr<br>
1245);</p>
1246<h4 class="parameters">Parameters</h4>
1247<dl>
1248<dt>addr</dt>
1249<dd class="description">Address</dd>
1250</dl>
1251<h4 class="returnvalue">Return Value</h4>
1252<p class="description">Length in bytes</p>
1253<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpAddrLocalhost">httpAddrLocalhost</a></h3>
1254<p class="description">Check for the local loopback address.</p>
1255<p class="code">
1256int httpAddrLocalhost (<br>
1257&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr<br>
1258);</p>
1259<h4 class="parameters">Parameters</h4>
1260<dl>
1261<dt>addr</dt>
1262<dd class="description">Address to check</dd>
1263</dl>
1264<h4 class="returnvalue">Return Value</h4>
1265<p class="description">1 if local host, 0 otherwise</p>
1266<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpAddrLookup">httpAddrLookup</a></h3>
1267<p class="description">Lookup the hostname associated with the address.</p>
1268<p class="code">
1269char *httpAddrLookup (<br>
1270&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr,<br>
1271&nbsp;&nbsp;&nbsp;&nbsp;char *name,<br>
1272&nbsp;&nbsp;&nbsp;&nbsp;int namelen<br>
1273);</p>
1274<h4 class="parameters">Parameters</h4>
1275<dl>
1276<dt>addr</dt>
1277<dd class="description">Address to lookup</dd>
1278<dt>name</dt>
1279<dd class="description">Host name buffer</dd>
1280<dt>namelen</dt>
1281<dd class="description">Size of name buffer</dd>
1282</dl>
1283<h4 class="returnvalue">Return Value</h4>
1284<p class="description">Host name</p>
1285<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpAddrString">httpAddrString</a></h3>
1286<p class="description">Convert an address to a numeric string.</p>
1287<p class="code">
1288char *httpAddrString (<br>
1289&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr,<br>
1290&nbsp;&nbsp;&nbsp;&nbsp;char *s,<br>
1291&nbsp;&nbsp;&nbsp;&nbsp;int slen<br>
1292);</p>
1293<h4 class="parameters">Parameters</h4>
1294<dl>
1295<dt>addr</dt>
1296<dd class="description">Address to convert</dd>
1297<dt>s</dt>
1298<dd class="description">String buffer</dd>
1299<dt>slen</dt>
1300<dd class="description">Length of string</dd>
1301</dl>
1302<h4 class="returnvalue">Return Value</h4>
1303<p class="description">Numeric address string</p>
1304<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpAssembleURI">httpAssembleURI</a></h3>
1305<p class="description">Assemble a uniform resource identifier from its
1306components.</p>
1307<p class="code">
79e1d494
MS
1308<a href="#http_uri_status_t">http_uri_status_t</a> httpAssembleURI (<br>
1309&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_coding_t">http_uri_coding_t</a> encoding,<br>
5a738aea
MS
1310&nbsp;&nbsp;&nbsp;&nbsp;char *uri,<br>
1311&nbsp;&nbsp;&nbsp;&nbsp;int urilen,<br>
1312&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
1313&nbsp;&nbsp;&nbsp;&nbsp;const char *username,<br>
1314&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
1315&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
1316&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
1317);</p>
1318<h4 class="parameters">Parameters</h4>
1319<dl>
1320<dt>encoding</dt>
1321<dd class="description">Encoding flags</dd>
1322<dt>uri</dt>
1323<dd class="description">URI buffer</dd>
1324<dt>urilen</dt>
1325<dd class="description">Size of URI buffer</dd>
1326<dt>scheme</dt>
1327<dd class="description">Scheme name</dd>
1328<dt>username</dt>
1329<dd class="description">Username</dd>
1330<dt>host</dt>
1331<dd class="description">Hostname or address</dd>
1332<dt>port</dt>
1333<dd class="description">Port number</dd>
1334<dt>resource</dt>
1335<dd class="description">Resource</dd>
1336</dl>
1337<h4 class="returnvalue">Return Value</h4>
1338<p class="description">URI status</p>
1339<h4 class="discussion">Discussion</h4>
1340<p class="discussion">This function escapes reserved characters in the URI depending on the
ecdc0628 1341value of the &quot;encoding&quot; argument. You should use this function in
1342place of traditional string functions whenever you need to create a
1343URI string.
ef416fc2 1344
5a738aea
MS
1345</p>
1346<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpAssembleURIf">httpAssembleURIf</a></h3>
1347<p class="description">Assemble a uniform resource identifier from its
1348components with a formatted resource.</p>
1349<p class="code">
79e1d494
MS
1350<a href="#http_uri_status_t">http_uri_status_t</a> httpAssembleURIf (<br>
1351&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_coding_t">http_uri_coding_t</a> encoding,<br>
5a738aea
MS
1352&nbsp;&nbsp;&nbsp;&nbsp;char *uri,<br>
1353&nbsp;&nbsp;&nbsp;&nbsp;int urilen,<br>
1354&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
1355&nbsp;&nbsp;&nbsp;&nbsp;const char *username,<br>
1356&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
1357&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
1358&nbsp;&nbsp;&nbsp;&nbsp;const char *resourcef,<br>
1359&nbsp;&nbsp;&nbsp;&nbsp;...<br>
1360);</p>
1361<h4 class="parameters">Parameters</h4>
1362<dl>
1363<dt>encoding</dt>
1364<dd class="description">Encoding flags</dd>
1365<dt>uri</dt>
1366<dd class="description">URI buffer</dd>
1367<dt>urilen</dt>
1368<dd class="description">Size of URI buffer</dd>
1369<dt>scheme</dt>
1370<dd class="description">Scheme name</dd>
1371<dt>username</dt>
1372<dd class="description">Username</dd>
1373<dt>host</dt>
1374<dd class="description">Hostname or address</dd>
1375<dt>port</dt>
1376<dd class="description">Port number</dd>
1377<dt>resourcef</dt>
1378<dd class="description">Printf-style resource</dd>
1379<dt>...</dt>
1380<dd class="description">Additional arguments as needed</dd>
1381</dl>
1382<h4 class="returnvalue">Return Value</h4>
1383<p class="description">URI status</p>
1384<h4 class="discussion">Discussion</h4>
1385<p class="discussion">This function creates a formatted version of the resource string
ecdc0628 1386argument &quot;resourcef&quot; and escapes reserved characters in the URI
1387depending on the value of the &quot;encoding&quot; argument. You should use
1388this function in place of traditional string functions whenever
1389you need to create a URI string.
ef416fc2 1390
5a738aea
MS
1391</p>
1392<h3 class="function"><a name="httpBlocking">httpBlocking</a></h3>
1393<p class="description">Set blocking/non-blocking behavior on a connection.</p>
1394<p class="code">
1395void httpBlocking (<br>
1396&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1397&nbsp;&nbsp;&nbsp;&nbsp;int b<br>
1398);</p>
1399<h4 class="parameters">Parameters</h4>
1400<dl>
1401<dt>http</dt>
568fa3fa 1402<dd class="description">Connection to server</dd>
5a738aea
MS
1403<dt>b</dt>
1404<dd class="description">1 = blocking, 0 = non-blocking</dd>
1405</dl>
1406<h3 class="function"><a name="httpCheck">httpCheck</a></h3>
1407<p class="description">Check to see if there is a pending response from the server.</p>
1408<p class="code">
1409int httpCheck (<br>
1410&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1411);</p>
1412<h4 class="parameters">Parameters</h4>
1413<dl>
1414<dt>http</dt>
568fa3fa 1415<dd class="description">Connection to server</dd>
5a738aea
MS
1416</dl>
1417<h4 class="returnvalue">Return Value</h4>
1418<p class="description">0 = no data, 1 = data available</p>
1419<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19&nbsp;</span><a name="httpClearCookie">httpClearCookie</a></h3>
1420<p class="description">Clear the cookie value(s).</p>
1421<p class="code">
1422void httpClearCookie (<br>
1423&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1424);</p>
1425<h4 class="parameters">Parameters</h4>
1426<dl>
1427<dt>http</dt>
568fa3fa 1428<dd class="description">Connection to server</dd>
5a738aea
MS
1429</dl>
1430<h3 class="function"><a name="httpClearFields">httpClearFields</a></h3>
1431<p class="description">Clear HTTP request fields.</p>
1432<p class="code">
1433void httpClearFields (<br>
1434&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1435);</p>
1436<h4 class="parameters">Parameters</h4>
1437<dl>
1438<dt>http</dt>
568fa3fa 1439<dd class="description">Connection to server</dd>
5a738aea
MS
1440</dl>
1441<h3 class="function"><a name="httpClose">httpClose</a></h3>
1442<p class="description">Close an HTTP connection...</p>
1443<p class="code">
1444void httpClose (<br>
1445&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1446);</p>
1447<h4 class="parameters">Parameters</h4>
1448<dl>
1449<dt>http</dt>
568fa3fa 1450<dd class="description">Connection to server</dd>
5a738aea 1451</dl>
06d4e77b 1452<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpConnect">httpConnect</a></h3>
5a738aea
MS
1453<p class="description">Connect to a HTTP server.</p>
1454<p class="code">
1455<a href="#http_t">http_t</a> *httpConnect (<br>
1456&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
1457&nbsp;&nbsp;&nbsp;&nbsp;int port<br>
1458);</p>
1459<h4 class="parameters">Parameters</h4>
1460<dl>
1461<dt>host</dt>
1462<dd class="description">Host to connect to</dd>
1463<dt>port</dt>
1464<dd class="description">Port number</dd>
1465</dl>
1466<h4 class="returnvalue">Return Value</h4>
1467<p class="description">New HTTP connection</p>
06d4e77b
MS
1468<h4 class="discussion">Discussion</h4>
1469<p class="discussion">This function is deprecated - use <a href="#httpConnectEncrypt"><code>httpConnectEncrypt</code></a> instead.
1470
1471</p>
5a738aea
MS
1472<h3 class="function"><a name="httpConnectEncrypt">httpConnectEncrypt</a></h3>
1473<p class="description">Connect to a HTTP server using encryption.</p>
1474<p class="code">
1475<a href="#http_t">http_t</a> *httpConnectEncrypt (<br>
1476&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
1477&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
1478&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_encryption_t">http_encryption_t</a> encryption<br>
1479);</p>
1480<h4 class="parameters">Parameters</h4>
1481<dl>
1482<dt>host</dt>
1483<dd class="description">Host to connect to</dd>
1484<dt>port</dt>
1485<dd class="description">Port number</dd>
1486<dt>encryption</dt>
1487<dd class="description">Type of encryption to use</dd>
1488</dl>
1489<h4 class="returnvalue">Return Value</h4>
1490<p class="description">New HTTP connection</p>
1491<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpDecode64">httpDecode64</a></h3>
1492<p class="description">Base64-decode a string.</p>
1493<p class="code">
1494char *httpDecode64 (<br>
1495&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
1496&nbsp;&nbsp;&nbsp;&nbsp;const char *in<br>
1497);</p>
1498<h4 class="parameters">Parameters</h4>
1499<dl>
1500<dt>out</dt>
1501<dd class="description">String to write to</dd>
1502<dt>in</dt>
1503<dd class="description">String to read from</dd>
1504</dl>
1505<h4 class="returnvalue">Return Value</h4>
1506<p class="description">Decoded string</p>
1507<h4 class="discussion">Discussion</h4>
1508<p class="discussion">This function is deprecated. Use the httpDecode64_2() function instead
ecdc0628 1509which provides buffer length arguments.
1510
5a738aea
MS
1511</p>
1512<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21&nbsp;</span><a name="httpDecode64_2">httpDecode64_2</a></h3>
1513<p class="description">Base64-decode a string.</p>
1514<p class="code">
1515char *httpDecode64_2 (<br>
1516&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
1517&nbsp;&nbsp;&nbsp;&nbsp;int *outlen,<br>
1518&nbsp;&nbsp;&nbsp;&nbsp;const char *in<br>
1519);</p>
1520<h4 class="parameters">Parameters</h4>
1521<dl>
1522<dt>out</dt>
1523<dd class="description">String to write to</dd>
1524<dt>outlen</dt>
1525<dd class="description">Size of output string</dd>
1526<dt>in</dt>
1527<dd class="description">String to read from</dd>
1528</dl>
1529<h4 class="returnvalue">Return Value</h4>
1530<p class="description">Decoded string</p>
1531<h3 class="function"><a name="httpDelete">httpDelete</a></h3>
1532<p class="description">Send a DELETE request to the server.</p>
1533<p class="code">
1534int httpDelete (<br>
1535&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1536&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
1537);</p>
1538<h4 class="parameters">Parameters</h4>
1539<dl>
1540<dt>http</dt>
568fa3fa 1541<dd class="description">Connection to server</dd>
5a738aea
MS
1542<dt>uri</dt>
1543<dd class="description">URI to delete</dd>
1544</dl>
1545<h4 class="returnvalue">Return Value</h4>
1546<p class="description">Status of call (0 = success)</p>
1547<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpEncode64">httpEncode64</a></h3>
1548<p class="description">Base64-encode a string.</p>
1549<p class="code">
1550char *httpEncode64 (<br>
1551&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
1552&nbsp;&nbsp;&nbsp;&nbsp;const char *in<br>
1553);</p>
1554<h4 class="parameters">Parameters</h4>
1555<dl>
1556<dt>out</dt>
1557<dd class="description">String to write to</dd>
1558<dt>in</dt>
1559<dd class="description">String to read from</dd>
1560</dl>
1561<h4 class="returnvalue">Return Value</h4>
1562<p class="description">Encoded string</p>
1563<h4 class="discussion">Discussion</h4>
1564<p class="discussion">This function is deprecated. Use the httpEncode64_2() function instead
ecdc0628 1565which provides buffer length arguments.
1566
5a738aea
MS
1567</p>
1568<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21&nbsp;</span><a name="httpEncode64_2">httpEncode64_2</a></h3>
1569<p class="description">Base64-encode a string.</p>
1570<p class="code">
1571char *httpEncode64_2 (<br>
1572&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
1573&nbsp;&nbsp;&nbsp;&nbsp;int outlen,<br>
1574&nbsp;&nbsp;&nbsp;&nbsp;const char *in,<br>
1575&nbsp;&nbsp;&nbsp;&nbsp;int inlen<br>
1576);</p>
1577<h4 class="parameters">Parameters</h4>
1578<dl>
1579<dt>out</dt>
1580<dd class="description">String to write to</dd>
1581<dt>outlen</dt>
1582<dd class="description">Size of output string</dd>
1583<dt>in</dt>
1584<dd class="description">String to read from</dd>
1585<dt>inlen</dt>
1586<dd class="description">Size of input string</dd>
1587</dl>
1588<h4 class="returnvalue">Return Value</h4>
1589<p class="description">Encoded string</p>
1590<h3 class="function"><a name="httpEncryption">httpEncryption</a></h3>
1591<p class="description">Set the required encryption on the link.</p>
1592<p class="code">
1593int httpEncryption (<br>
1594&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1595&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_encryption_t">http_encryption_t</a> e<br>
1596);</p>
1597<h4 class="parameters">Parameters</h4>
1598<dl>
1599<dt>http</dt>
568fa3fa 1600<dd class="description">Connection to server</dd>
5a738aea
MS
1601<dt>e</dt>
1602<dd class="description">New encryption preference</dd>
1603</dl>
1604<h4 class="returnvalue">Return Value</h4>
1605<p class="description">-1 on error, 0 on success</p>
1606<h3 class="function"><a name="httpError">httpError</a></h3>
1607<p class="description">Get the last error on a connection.</p>
1608<p class="code">
1609int httpError (<br>
1610&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1611);</p>
1612<h4 class="parameters">Parameters</h4>
1613<dl>
1614<dt>http</dt>
568fa3fa 1615<dd class="description">Connection to server</dd>
5a738aea
MS
1616</dl>
1617<h4 class="returnvalue">Return Value</h4>
1618<p class="description">Error code (errno) value</p>
1619<h3 class="function"><a name="httpFlush">httpFlush</a></h3>
1620<p class="description">Flush data from a HTTP connection.</p>
1621<p class="code">
1622void httpFlush (<br>
1623&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1624);</p>
1625<h4 class="parameters">Parameters</h4>
1626<dl>
1627<dt>http</dt>
568fa3fa 1628<dd class="description">Connection to server</dd>
5a738aea
MS
1629</dl>
1630<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpFlushWrite">httpFlushWrite</a></h3>
1631<p class="description">Flush data in write buffer.</p>
1632<p class="code">
1633int httpFlushWrite (<br>
1634&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1635);</p>
1636<h4 class="parameters">Parameters</h4>
1637<dl>
1638<dt>http</dt>
568fa3fa 1639<dd class="description">Connection to server</dd>
5a738aea
MS
1640</dl>
1641<h4 class="returnvalue">Return Value</h4>
1642<p class="description">Bytes written or -1 on error</p>
1643<h3 class="function"><a name="httpGet">httpGet</a></h3>
1644<p class="description">Send a GET request to the server.</p>
1645<p class="code">
1646int httpGet (<br>
1647&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1648&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
1649);</p>
1650<h4 class="parameters">Parameters</h4>
1651<dl>
1652<dt>http</dt>
568fa3fa 1653<dd class="description">Connection to server</dd>
5a738aea
MS
1654<dt>uri</dt>
1655<dd class="description">URI to get</dd>
1656</dl>
1657<h4 class="returnvalue">Return Value</h4>
1658<p class="description">Status of call (0 = success)</p>
1659<h3 class="function"><span class="info">&nbsp;CUPS 1.3&nbsp;</span><a name="httpGetAuthString">httpGetAuthString</a></h3>
1660<p class="description">Get the current authorization string.</p>
1661<p class="code">
1662char *httpGetAuthString (<br>
1663&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1664);</p>
1665<h4 class="parameters">Parameters</h4>
1666<dl>
1667<dt>http</dt>
568fa3fa 1668<dd class="description">Connection to server</dd>
5a738aea
MS
1669</dl>
1670<h4 class="returnvalue">Return Value</h4>
1671<p class="description">Authorization string</p>
1672<h4 class="discussion">Discussion</h4>
1673<p class="discussion">The authorization string is set by cupsDoAuthentication() and
355e94dc
MS
1674httpSetAuthString(). Use httpGetAuthString() to retrieve the
1675string to use with httpSetField() for the HTTP_FIELD_AUTHORIZATION
1676value.
1677
5a738aea
MS
1678</p>
1679<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpGetBlocking">httpGetBlocking</a></h3>
1680<p class="description">Get the blocking/non-block state of a connection.</p>
1681<p class="code">
1682int httpGetBlocking (<br>
1683&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1684);</p>
1685<h4 class="parameters">Parameters</h4>
1686<dl>
1687<dt>http</dt>
568fa3fa 1688<dd class="description">Connection to server</dd>
5a738aea
MS
1689</dl>
1690<h4 class="returnvalue">Return Value</h4>
1691<p class="description">1 if blocking, 0 if non-blocking</p>
1692<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19&nbsp;</span><a name="httpGetCookie">httpGetCookie</a></h3>
1693<p class="description">Get any cookie data from the response.</p>
1694<p class="code">
1695const char *httpGetCookie (<br>
1696&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1697);</p>
1698<h4 class="parameters">Parameters</h4>
1699<dl>
1700<dt>http</dt>
1701<dd class="description">HTTP connecion</dd>
1702</dl>
1703<h4 class="returnvalue">Return Value</h4>
1704<p class="description">Cookie data or NULL</p>
1705<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetDateString">httpGetDateString</a></h3>
1706<p class="description">Get a formatted date/time string from a time value.</p>
1707<p class="code">
1708const char *httpGetDateString (<br>
1709&nbsp;&nbsp;&nbsp;&nbsp;time_t t<br>
1710);</p>
1711<h4 class="parameters">Parameters</h4>
1712<dl>
1713<dt>t</dt>
1714<dd class="description">UNIX time</dd>
1715</dl>
1716<h4 class="returnvalue">Return Value</h4>
1717<p class="description">Date/time string</p>
1718<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpGetDateString2">httpGetDateString2</a></h3>
1719<p class="description">Get a formatted date/time string from a time value.</p>
1720<p class="code">
1721const char *httpGetDateString2 (<br>
1722&nbsp;&nbsp;&nbsp;&nbsp;time_t t,<br>
1723&nbsp;&nbsp;&nbsp;&nbsp;char *s,<br>
1724&nbsp;&nbsp;&nbsp;&nbsp;int slen<br>
1725);</p>
1726<h4 class="parameters">Parameters</h4>
1727<dl>
1728<dt>t</dt>
1729<dd class="description">UNIX time</dd>
1730<dt>s</dt>
1731<dd class="description">String buffer</dd>
1732<dt>slen</dt>
1733<dd class="description">Size of string buffer</dd>
1734</dl>
1735<h4 class="returnvalue">Return Value</h4>
1736<p class="description">Date/time string</p>
1737<h3 class="function"><a name="httpGetDateTime">httpGetDateTime</a></h3>
1738<p class="description">Get a time value from a formatted date/time string.</p>
1739<p class="code">
1740time_t httpGetDateTime (<br>
1741&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
1742);</p>
1743<h4 class="parameters">Parameters</h4>
1744<dl>
1745<dt>s</dt>
1746<dd class="description">Date/time string</dd>
1747</dl>
1748<h4 class="returnvalue">Return Value</h4>
1749<p class="description">UNIX time</p>
1750<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpGetFd">httpGetFd</a></h3>
1751<p class="description">Get the file descriptor associated with a connection.</p>
1752<p class="code">
1753int httpGetFd (<br>
1754&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1755);</p>
1756<h4 class="parameters">Parameters</h4>
1757<dl>
1758<dt>http</dt>
568fa3fa 1759<dd class="description">Connection to server</dd>
5a738aea
MS
1760</dl>
1761<h4 class="returnvalue">Return Value</h4>
1762<p class="description">File descriptor or -1 if none</p>
1763<h3 class="function"><a name="httpGetField">httpGetField</a></h3>
1764<p class="description">Get a field value from a request/response.</p>
1765<p class="code">
1766const char *httpGetField (<br>
1767&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
79e1d494 1768&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field<br>
5a738aea
MS
1769);</p>
1770<h4 class="parameters">Parameters</h4>
1771<dl>
1772<dt>http</dt>
568fa3fa 1773<dd class="description">Connection to server</dd>
5a738aea
MS
1774<dt>field</dt>
1775<dd class="description">Field to get</dd>
1776</dl>
1777<h4 class="returnvalue">Return Value</h4>
1778<p class="description">Field value</p>
1779<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetHostByName">httpGetHostByName</a></h3>
1780<p class="description">Lookup a hostname or IPv4 address, and return
1781address records for the specified name.</p>
1782<p class="code">
1783struct hostent *httpGetHostByName (<br>
1784&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
1785);</p>
1786<h4 class="parameters">Parameters</h4>
1787<dl>
1788<dt>name</dt>
1789<dd class="description">Hostname or IP address</dd>
1790</dl>
1791<h4 class="returnvalue">Return Value</h4>
1792<p class="description">Host entry</p>
1793<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpGetHostname">httpGetHostname</a></h3>
1794<p class="description">Get the FQDN for the connection or local system.</p>
1795<p class="code">
1796const char *httpGetHostname (<br>
1797&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1798&nbsp;&nbsp;&nbsp;&nbsp;char *s,<br>
1799&nbsp;&nbsp;&nbsp;&nbsp;int slen<br>
1800);</p>
1801<h4 class="parameters">Parameters</h4>
1802<dl>
1803<dt>http</dt>
1804<dd class="description">HTTP connection or NULL</dd>
1805<dt>s</dt>
1806<dd class="description">String buffer for name</dd>
1807<dt>slen</dt>
1808<dd class="description">Size of buffer</dd>
1809</dl>
1810<h4 class="returnvalue">Return Value</h4>
1811<p class="description">FQDN for connection or system</p>
1812<h4 class="discussion">Discussion</h4>
1813<p class="discussion">When &quot;http&quot; points to a connected socket, return the hostname or
80ca4592 1814address that was used in the call to httpConnect() or httpConnectEncrypt().
1815Otherwise, return the FQDN for the local system using both gethostname()
1816and gethostbyname() to get the local hostname with domain.
ef416fc2 1817
5a738aea
MS
1818</p>
1819<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetLength">httpGetLength</a></h3>
1820<p class="description">Get the amount of data remaining from the
1821content-length or transfer-encoding fields.</p>
1822<p class="code">
1823int httpGetLength (<br>
1824&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1825);</p>
1826<h4 class="parameters">Parameters</h4>
1827<dl>
1828<dt>http</dt>
568fa3fa 1829<dd class="description">Connection to server</dd>
5a738aea
MS
1830</dl>
1831<h4 class="returnvalue">Return Value</h4>
1832<p class="description">Content length</p>
1833<h4 class="discussion">Discussion</h4>
1834<p class="discussion">This function is deprecated and will not return lengths larger than
ef416fc2 18352^31 - 1; use httpGetLength2() instead.
1836
5a738aea
MS
1837</p>
1838<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpGetLength2">httpGetLength2</a></h3>
1839<p class="description">Get the amount of data remaining from the
1840content-length or transfer-encoding fields.</p>
1841<p class="code">
1842off_t httpGetLength2 (<br>
1843&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1844);</p>
1845<h4 class="parameters">Parameters</h4>
1846<dl>
1847<dt>http</dt>
568fa3fa 1848<dd class="description">Connection to server</dd>
5a738aea
MS
1849</dl>
1850<h4 class="returnvalue">Return Value</h4>
1851<p class="description">Content length</p>
1852<h4 class="discussion">Discussion</h4>
1853<p class="discussion">This function returns the complete content length, even for
ecdc0628 1854content larger than 2^31 - 1.
1855
5a738aea
MS
1856</p>
1857<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpGetStatus">httpGetStatus</a></h3>
1858<p class="description">Get the status of the last HTTP request.</p>
1859<p class="code">
79e1d494 1860<a href="#http_status_t">http_status_t</a> httpGetStatus (<br>
5a738aea
MS
1861&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1862);</p>
1863<h4 class="parameters">Parameters</h4>
1864<dl>
1865<dt>http</dt>
568fa3fa 1866<dd class="description">Connection to server</dd>
5a738aea
MS
1867</dl>
1868<h4 class="returnvalue">Return Value</h4>
1869<p class="description">HTTP status</p>
1870<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetSubField">httpGetSubField</a></h3>
1871<p class="description">Get a sub-field value.</p>
1872<p class="code">
1873char *httpGetSubField (<br>
1874&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
79e1d494 1875&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
5a738aea
MS
1876&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
1877&nbsp;&nbsp;&nbsp;&nbsp;char *value<br>
1878);</p>
1879<h4 class="parameters">Parameters</h4>
1880<dl>
1881<dt>http</dt>
568fa3fa 1882<dd class="description">Connection to server</dd>
5a738aea
MS
1883<dt>field</dt>
1884<dd class="description">Field index</dd>
1885<dt>name</dt>
1886<dd class="description">Name of sub-field</dd>
1887<dt>value</dt>
1888<dd class="description">Value string</dd>
1889</dl>
1890<h4 class="returnvalue">Return Value</h4>
1891<p class="description">Value or NULL</p>
1892<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpGetSubField2">httpGetSubField2</a></h3>
1893<p class="description">Get a sub-field value.</p>
1894<p class="code">
1895char *httpGetSubField2 (<br>
1896&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
79e1d494 1897&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
5a738aea
MS
1898&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
1899&nbsp;&nbsp;&nbsp;&nbsp;char *value,<br>
1900&nbsp;&nbsp;&nbsp;&nbsp;int valuelen<br>
1901);</p>
1902<h4 class="parameters">Parameters</h4>
1903<dl>
1904<dt>http</dt>
568fa3fa 1905<dd class="description">Connection to server</dd>
5a738aea
MS
1906<dt>field</dt>
1907<dd class="description">Field index</dd>
1908<dt>name</dt>
1909<dd class="description">Name of sub-field</dd>
1910<dt>value</dt>
1911<dd class="description">Value string</dd>
1912<dt>valuelen</dt>
1913<dd class="description">Size of value buffer</dd>
1914</dl>
1915<h4 class="returnvalue">Return Value</h4>
1916<p class="description">Value or NULL</p>
1917<h3 class="function"><a name="httpGets">httpGets</a></h3>
1918<p class="description">Get a line of text from a HTTP connection.</p>
1919<p class="code">
1920char *httpGets (<br>
1921&nbsp;&nbsp;&nbsp;&nbsp;char *line,<br>
1922&nbsp;&nbsp;&nbsp;&nbsp;int length,<br>
1923&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
1924);</p>
1925<h4 class="parameters">Parameters</h4>
1926<dl>
1927<dt>line</dt>
1928<dd class="description">Line to read into</dd>
1929<dt>length</dt>
1930<dd class="description">Max length of buffer</dd>
1931<dt>http</dt>
568fa3fa 1932<dd class="description">Connection to server</dd>
5a738aea
MS
1933</dl>
1934<h4 class="returnvalue">Return Value</h4>
1935<p class="description">Line or NULL</p>
1936<h3 class="function"><a name="httpHead">httpHead</a></h3>
1937<p class="description">Send a HEAD request to the server.</p>
1938<p class="code">
1939int httpHead (<br>
1940&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
1941&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
1942);</p>
1943<h4 class="parameters">Parameters</h4>
1944<dl>
1945<dt>http</dt>
568fa3fa 1946<dd class="description">Connection to server</dd>
5a738aea
MS
1947<dt>uri</dt>
1948<dd class="description">URI for head</dd>
1949</dl>
1950<h4 class="returnvalue">Return Value</h4>
1951<p class="description">Status of call (0 = success)</p>
1952<h3 class="function"><a name="httpInitialize">httpInitialize</a></h3>
1953<p class="description">Initialize the HTTP interface library and set the
1954default HTTP proxy (if any).</p>
1955<p class="code">
1956void httpInitialize (void);</p>
1957<h3 class="function"><a name="httpMD5">httpMD5</a></h3>
1958<p class="description">Compute the MD5 sum of the username:group:password.</p>
1959<p class="code">
1960char *httpMD5 (<br>
1961&nbsp;&nbsp;&nbsp;&nbsp;const char *username,<br>
1962&nbsp;&nbsp;&nbsp;&nbsp;const char *realm,<br>
1963&nbsp;&nbsp;&nbsp;&nbsp;const char *passwd,<br>
1964&nbsp;&nbsp;&nbsp;&nbsp;char md5[33]<br>
1965);</p>
1966<h4 class="parameters">Parameters</h4>
1967<dl>
1968<dt>username</dt>
1969<dd class="description">User name</dd>
1970<dt>realm</dt>
1971<dd class="description">Realm name</dd>
1972<dt>passwd</dt>
1973<dd class="description">Password string</dd>
1974<dt>md5[33]</dt>
1975<dd class="description">MD5 string</dd>
1976</dl>
1977<h4 class="returnvalue">Return Value</h4>
1978<p class="description">MD5 sum</p>
1979<h3 class="function"><a name="httpMD5Final">httpMD5Final</a></h3>
1980<p class="description">Combine the MD5 sum of the username, group, and password
ef416fc2 1981with the server-supplied nonce value, method, and
5a738aea
MS
1982request-uri.</p>
1983<p class="code">
1984char *httpMD5Final (<br>
1985&nbsp;&nbsp;&nbsp;&nbsp;const char *nonce,<br>
1986&nbsp;&nbsp;&nbsp;&nbsp;const char *method,<br>
1987&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
1988&nbsp;&nbsp;&nbsp;&nbsp;char md5[33]<br>
1989);</p>
1990<h4 class="parameters">Parameters</h4>
1991<dl>
1992<dt>nonce</dt>
1993<dd class="description">Server nonce value</dd>
1994<dt>method</dt>
1995<dd class="description">METHOD (GET, POST, etc.)</dd>
1996<dt>resource</dt>
1997<dd class="description">Resource path</dd>
1998<dt>md5[33]</dt>
1999<dd class="description">MD5 sum</dd>
2000</dl>
2001<h4 class="returnvalue">Return Value</h4>
2002<p class="description">New sum</p>
2003<h3 class="function"><a name="httpMD5String">httpMD5String</a></h3>
2004<p class="description">Convert an MD5 sum to a character string.</p>
2005<p class="code">
2006char *httpMD5String (<br>
2007&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *sum,<br>
2008&nbsp;&nbsp;&nbsp;&nbsp;char md5[33]<br>
2009);</p>
2010<h4 class="parameters">Parameters</h4>
2011<dl>
2012<dt>sum</dt>
2013<dd class="description">MD5 sum data</dd>
2014<dt>md5[33]</dt>
2015<dd class="description">MD5 sum in hex</dd>
2016</dl>
2017<h4 class="returnvalue">Return Value</h4>
2018<p class="description">MD5 sum in hex</p>
2019<h3 class="function"><a name="httpOptions">httpOptions</a></h3>
2020<p class="description">Send an OPTIONS request to the server.</p>
2021<p class="code">
2022int httpOptions (<br>
2023&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2024&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
2025);</p>
2026<h4 class="parameters">Parameters</h4>
2027<dl>
2028<dt>http</dt>
568fa3fa 2029<dd class="description">Connection to server</dd>
5a738aea
MS
2030<dt>uri</dt>
2031<dd class="description">URI for options</dd>
2032</dl>
2033<h4 class="returnvalue">Return Value</h4>
2034<p class="description">Status of call (0 = success)</p>
2035<h3 class="function"><a name="httpPost">httpPost</a></h3>
2036<p class="description">Send a POST request to the server.</p>
2037<p class="code">
2038int httpPost (<br>
2039&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2040&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
2041);</p>
2042<h4 class="parameters">Parameters</h4>
2043<dl>
2044<dt>http</dt>
568fa3fa 2045<dd class="description">Connection to server</dd>
5a738aea
MS
2046<dt>uri</dt>
2047<dd class="description">URI for post</dd>
2048</dl>
2049<h4 class="returnvalue">Return Value</h4>
2050<p class="description">Status of call (0 = success)</p>
2051<h3 class="function"><a name="httpPut">httpPut</a></h3>
2052<p class="description">Send a PUT request to the server.</p>
2053<p class="code">
2054int httpPut (<br>
2055&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2056&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
2057);</p>
2058<h4 class="parameters">Parameters</h4>
2059<dl>
2060<dt>http</dt>
568fa3fa 2061<dd class="description">Connection to server</dd>
5a738aea
MS
2062<dt>uri</dt>
2063<dd class="description">URI to put</dd>
2064</dl>
2065<h4 class="returnvalue">Return Value</h4>
2066<p class="description">Status of call (0 = success)</p>
2067<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpRead">httpRead</a></h3>
2068<p class="description">Read data from a HTTP connection.</p>
2069<p class="code">
2070int httpRead (<br>
2071&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2072&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
2073&nbsp;&nbsp;&nbsp;&nbsp;int length<br>
2074);</p>
2075<h4 class="parameters">Parameters</h4>
2076<dl>
2077<dt>http</dt>
568fa3fa 2078<dd class="description">Connection to server</dd>
5a738aea
MS
2079<dt>buffer</dt>
2080<dd class="description">Buffer for data</dd>
2081<dt>length</dt>
2082<dd class="description">Maximum number of bytes</dd>
2083</dl>
2084<h4 class="returnvalue">Return Value</h4>
2085<p class="description">Number of bytes read</p>
2086<h4 class="discussion">Discussion</h4>
2087<p class="discussion">This function is deprecated. Use the httpRead2() function which can
ecdc0628 2088read more than 2GB of data.
2089
5a738aea
MS
2090</p>
2091<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpRead2">httpRead2</a></h3>
2092<p class="description">Read data from a HTTP connection.</p>
2093<p class="code">
2094ssize_t httpRead2 (<br>
2095&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2096&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
2097&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
2098);</p>
2099<h4 class="parameters">Parameters</h4>
2100<dl>
2101<dt>http</dt>
568fa3fa 2102<dd class="description">Connection to server</dd>
5a738aea
MS
2103<dt>buffer</dt>
2104<dd class="description">Buffer for data</dd>
2105<dt>length</dt>
2106<dd class="description">Maximum number of bytes</dd>
2107</dl>
2108<h4 class="returnvalue">Return Value</h4>
2109<p class="description">Number of bytes read</p>
2110<h3 class="function"><a name="httpReconnect">httpReconnect</a></h3>
2111<p class="description">Reconnect to a HTTP server.</p>
2112<p class="code">
2113int httpReconnect (<br>
2114&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
2115);</p>
2116<h4 class="parameters">Parameters</h4>
2117<dl>
2118<dt>http</dt>
568fa3fa 2119<dd class="description">Connection to server</dd>
5a738aea
MS
2120</dl>
2121<h4 class="returnvalue">Return Value</h4>
2122<p class="description">0 on success, non-zero on failure</p>
2123<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpSeparate">httpSeparate</a></h3>
2124<p class="description">Separate a Universal Resource Identifier into its
2125components.</p>
2126<p class="code">
2127void httpSeparate (<br>
2128&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
2129&nbsp;&nbsp;&nbsp;&nbsp;char *scheme,<br>
2130&nbsp;&nbsp;&nbsp;&nbsp;char *username,<br>
2131&nbsp;&nbsp;&nbsp;&nbsp;char *host,<br>
2132&nbsp;&nbsp;&nbsp;&nbsp;int *port,<br>
2133&nbsp;&nbsp;&nbsp;&nbsp;char *resource<br>
2134);</p>
2135<h4 class="parameters">Parameters</h4>
2136<dl>
2137<dt>uri</dt>
2138<dd class="description">Universal Resource Identifier</dd>
2139<dt>scheme</dt>
2140<dd class="description">Scheme [32] (http, https, etc.)</dd>
2141<dt>username</dt>
2142<dd class="description">Username [1024]</dd>
2143<dt>host</dt>
2144<dd class="description">Hostname [1024]</dd>
2145<dt>port</dt>
2146<dd class="description">Port number to use</dd>
2147<dt>resource</dt>
2148<dd class="description">Resource/filename [1024]</dd>
2149</dl>
2150<h4 class="discussion">Discussion</h4>
2151<p class="discussion">This function is deprecated; use the httpSeparateURI() function instead.
2152
2153</p>
2154<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21&nbsp;</span><a name="httpSeparate2">httpSeparate2</a></h3>
2155<p class="description">Separate a Universal Resource Identifier into its
2156components.</p>
2157<p class="code">
2158void httpSeparate2 (<br>
2159&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
2160&nbsp;&nbsp;&nbsp;&nbsp;char *scheme,<br>
2161&nbsp;&nbsp;&nbsp;&nbsp;int schemelen,<br>
2162&nbsp;&nbsp;&nbsp;&nbsp;char *username,<br>
2163&nbsp;&nbsp;&nbsp;&nbsp;int usernamelen,<br>
2164&nbsp;&nbsp;&nbsp;&nbsp;char *host,<br>
2165&nbsp;&nbsp;&nbsp;&nbsp;int hostlen,<br>
2166&nbsp;&nbsp;&nbsp;&nbsp;int *port,<br>
2167&nbsp;&nbsp;&nbsp;&nbsp;char *resource,<br>
2168&nbsp;&nbsp;&nbsp;&nbsp;int resourcelen<br>
2169);</p>
2170<h4 class="parameters">Parameters</h4>
2171<dl>
2172<dt>uri</dt>
2173<dd class="description">Universal Resource Identifier</dd>
2174<dt>scheme</dt>
2175<dd class="description">Scheme (http, https, etc.)</dd>
2176<dt>schemelen</dt>
2177<dd class="description">Size of scheme buffer</dd>
2178<dt>username</dt>
2179<dd class="description">Username</dd>
2180<dt>usernamelen</dt>
2181<dd class="description">Size of username buffer</dd>
2182<dt>host</dt>
2183<dd class="description">Hostname</dd>
2184<dt>hostlen</dt>
2185<dd class="description">Size of hostname buffer</dd>
2186<dt>port</dt>
2187<dd class="description">Port number to use</dd>
2188<dt>resource</dt>
2189<dd class="description">Resource/filename</dd>
2190<dt>resourcelen</dt>
2191<dd class="description">Size of resource buffer</dd>
2192</dl>
2193<h4 class="discussion">Discussion</h4>
2194<p class="discussion">This function is deprecated; use the httpSeparateURI() function instead.
2195
2196
2197</p>
2198<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpSeparateURI">httpSeparateURI</a></h3>
2199<p class="description">Separate a Universal Resource Identifier into its
2200components.</p>
2201<p class="code">
79e1d494
MS
2202<a href="#http_uri_status_t">http_uri_status_t</a> httpSeparateURI (<br>
2203&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_coding_t">http_uri_coding_t</a> decoding,<br>
5a738aea
MS
2204&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
2205&nbsp;&nbsp;&nbsp;&nbsp;char *scheme,<br>
2206&nbsp;&nbsp;&nbsp;&nbsp;int schemelen,<br>
2207&nbsp;&nbsp;&nbsp;&nbsp;char *username,<br>
2208&nbsp;&nbsp;&nbsp;&nbsp;int usernamelen,<br>
2209&nbsp;&nbsp;&nbsp;&nbsp;char *host,<br>
2210&nbsp;&nbsp;&nbsp;&nbsp;int hostlen,<br>
2211&nbsp;&nbsp;&nbsp;&nbsp;int *port,<br>
2212&nbsp;&nbsp;&nbsp;&nbsp;char *resource,<br>
2213&nbsp;&nbsp;&nbsp;&nbsp;int resourcelen<br>
2214);</p>
2215<h4 class="parameters">Parameters</h4>
2216<dl>
2217<dt>decoding</dt>
2218<dd class="description">Decoding flags</dd>
2219<dt>uri</dt>
2220<dd class="description">Universal Resource Identifier</dd>
2221<dt>scheme</dt>
2222<dd class="description">Scheme (http, https, etc.)</dd>
2223<dt>schemelen</dt>
2224<dd class="description">Size of scheme buffer</dd>
2225<dt>username</dt>
2226<dd class="description">Username</dd>
2227<dt>usernamelen</dt>
2228<dd class="description">Size of username buffer</dd>
2229<dt>host</dt>
2230<dd class="description">Hostname</dd>
2231<dt>hostlen</dt>
2232<dd class="description">Size of hostname buffer</dd>
2233<dt>port</dt>
2234<dd class="description">Port number to use</dd>
2235<dt>resource</dt>
2236<dd class="description">Resource/filename</dd>
2237<dt>resourcelen</dt>
2238<dd class="description">Size of resource buffer</dd>
2239</dl>
2240<h4 class="returnvalue">Return Value</h4>
2241<p class="description">Result of separation</p>
2242<h3 class="function"><span class="info">&nbsp;CUPS 1.3&nbsp;</span><a name="httpSetAuthString">httpSetAuthString</a></h3>
2243<p class="description">Set the current authorization string.</p>
2244<p class="code">
2245void httpSetAuthString (<br>
2246&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2247&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
2248&nbsp;&nbsp;&nbsp;&nbsp;const char *data<br>
2249);</p>
2250<h4 class="parameters">Parameters</h4>
2251<dl>
2252<dt>http</dt>
568fa3fa 2253<dd class="description">Connection to server</dd>
5a738aea
MS
2254<dt>scheme</dt>
2255<dd class="description">Auth scheme (NULL to clear it)</dd>
2256<dt>data</dt>
2257<dd class="description">Auth data (NULL for none)</dd>
2258</dl>
2259<h4 class="discussion">Discussion</h4>
2260<p class="discussion">This function just stores a copy of the current authorization string in
355e94dc
MS
2261the HTTP connection object. You must still call httpSetField() to set
2262HTTP_FIELD_AUTHORIZATION prior to issuing a HTTP request using httpGet(),
2263httpHead(), httpOptions(), httpPost, or httpPut().
2264
5a738aea
MS
2265</p>
2266<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19&nbsp;</span><a name="httpSetCookie">httpSetCookie</a></h3>
2267<p class="description">Set the cookie value(s)...</p>
2268<p class="code">
2269void httpSetCookie (<br>
2270&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2271&nbsp;&nbsp;&nbsp;&nbsp;const char *cookie<br>
2272);</p>
2273<h4 class="parameters">Parameters</h4>
2274<dl>
2275<dt>http</dt>
2276<dd class="description">Connection</dd>
2277<dt>cookie</dt>
2278<dd class="description">Cookie string</dd>
2279</dl>
2280<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpSetExpect">httpSetExpect</a></h3>
2281<p class="description">Set the Expect: header in a request.</p>
2282<p class="code">
2283void httpSetExpect (<br>
2284&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
79e1d494 2285&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_status_t">http_status_t</a> expect<br>
5a738aea
MS
2286);</p>
2287<h4 class="parameters">Parameters</h4>
2288<dl>
2289<dt>http</dt>
568fa3fa 2290<dd class="description">Connection to server</dd>
5a738aea
MS
2291<dt>expect</dt>
2292<dd class="description">HTTP status to expect (HTTP_CONTINUE)</dd>
2293</dl>
2294<h4 class="discussion">Discussion</h4>
2295<p class="discussion">Currently only HTTP_CONTINUE is supported for the &quot;expect&quot; argument.
2296
2297</p>
2298<h3 class="function"><a name="httpSetField">httpSetField</a></h3>
2299<p class="description">Set the value of an HTTP header.</p>
2300<p class="code">
2301void httpSetField (<br>
2302&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
79e1d494 2303&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
5a738aea
MS
2304&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
2305);</p>
2306<h4 class="parameters">Parameters</h4>
2307<dl>
2308<dt>http</dt>
568fa3fa 2309<dd class="description">Connection to server</dd>
5a738aea
MS
2310<dt>field</dt>
2311<dd class="description">Field index</dd>
2312<dt>value</dt>
2313<dd class="description">Value</dd>
2314</dl>
2315<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpSetLength">httpSetLength</a></h3>
2316<p class="description">Set the content-length and content-encoding.</p>
2317<p class="code">
2318void httpSetLength (<br>
2319&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2320&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
2321);</p>
2322<h4 class="parameters">Parameters</h4>
2323<dl>
2324<dt>http</dt>
568fa3fa 2325<dd class="description">Connection to server</dd>
5a738aea
MS
2326<dt>length</dt>
2327<dd class="description">Length (0 for chunked)</dd>
2328</dl>
2329<h3 class="function"><a name="httpStatus">httpStatus</a></h3>
2330<p class="description">Return a short string describing a HTTP status code.</p>
2331<p class="code">
2332const char *httpStatus (<br>
79e1d494 2333&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_status_t">http_status_t</a> status<br>
5a738aea
MS
2334);</p>
2335<h4 class="parameters">Parameters</h4>
2336<dl>
2337<dt>status</dt>
2338<dd class="description">HTTP status code</dd>
2339</dl>
2340<h4 class="returnvalue">Return Value</h4>
06d4e77b
MS
2341<p class="description">Localized status string</p>
2342<h4 class="discussion">Discussion</h4>
2343<p class="discussion">The returned string is localized to the current POSIX locale and is based
2344on the status strings defined in RFC 2616.</p>
5a738aea
MS
2345<h3 class="function"><a name="httpTrace">httpTrace</a></h3>
2346<p class="description">Send an TRACE request to the server.</p>
2347<p class="code">
2348int httpTrace (<br>
2349&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2350&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
2351);</p>
2352<h4 class="parameters">Parameters</h4>
2353<dl>
2354<dt>http</dt>
568fa3fa 2355<dd class="description">Connection to server</dd>
5a738aea
MS
2356<dt>uri</dt>
2357<dd class="description">URI for trace</dd>
2358</dl>
2359<h4 class="returnvalue">Return Value</h4>
2360<p class="description">Status of call (0 = success)</p>
2361<h3 class="function"><a name="httpUpdate">httpUpdate</a></h3>
2362<p class="description">Update the current HTTP state for incoming data.</p>
2363<p class="code">
79e1d494 2364<a href="#http_status_t">http_status_t</a> httpUpdate (<br>
5a738aea
MS
2365&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
2366);</p>
2367<h4 class="parameters">Parameters</h4>
2368<dl>
2369<dt>http</dt>
568fa3fa 2370<dd class="description">Connection to server</dd>
5a738aea
MS
2371</dl>
2372<h4 class="returnvalue">Return Value</h4>
2373<p class="description">HTTP status</p>
2374<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19&nbsp;</span><a name="httpWait">httpWait</a></h3>
2375<p class="description">Wait for data available on a connection.</p>
2376<p class="code">
2377int httpWait (<br>
2378&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2379&nbsp;&nbsp;&nbsp;&nbsp;int msec<br>
2380);</p>
2381<h4 class="parameters">Parameters</h4>
2382<dl>
2383<dt>http</dt>
568fa3fa 2384<dd class="description">Connection to server</dd>
5a738aea
MS
2385<dt>msec</dt>
2386<dd class="description">Milliseconds to wait</dd>
2387</dl>
2388<h4 class="returnvalue">Return Value</h4>
2389<p class="description">1 if data is available, 0 otherwise</p>
2390<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpWrite">httpWrite</a></h3>
2391<p class="description">Write data to a HTTP connection.</p>
2392<p class="code">
2393int httpWrite (<br>
2394&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2395&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
2396&nbsp;&nbsp;&nbsp;&nbsp;int length<br>
2397);</p>
2398<h4 class="parameters">Parameters</h4>
2399<dl>
2400<dt>http</dt>
568fa3fa 2401<dd class="description">Connection to server</dd>
5a738aea
MS
2402<dt>buffer</dt>
2403<dd class="description">Buffer for data</dd>
2404<dt>length</dt>
2405<dd class="description">Number of bytes to write</dd>
2406</dl>
2407<h4 class="returnvalue">Return Value</h4>
2408<p class="description">Number of bytes written</p>
2409<h4 class="discussion">Discussion</h4>
2410<p class="discussion">This function is deprecated. Use the httpWrite2() function which can
ecdc0628 2411write more than 2GB of data.
2412
5a738aea
MS
2413</p>
2414<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="httpWrite2">httpWrite2</a></h3>
2415<p class="description">Write data to a HTTP connection.</p>
2416<p class="code">
2417ssize_t httpWrite2 (<br>
2418&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2419&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
2420&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
2421);</p>
2422<h4 class="parameters">Parameters</h4>
2423<dl>
2424<dt>http</dt>
568fa3fa 2425<dd class="description">Connection to server</dd>
5a738aea
MS
2426<dt>buffer</dt>
2427<dd class="description">Buffer for data</dd>
2428<dt>length</dt>
2429<dd class="description">Number of bytes to write</dd>
2430</dl>
2431<h4 class="returnvalue">Return Value</h4>
2432<p class="description">Number of bytes written</p>
2433<h3 class="function"><a name="ippAddBoolean">ippAddBoolean</a></h3>
2434<p class="description">Add a boolean attribute to an IPP message.</p>
2435<p class="code">
2436<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddBoolean (<br>
2437&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2438&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea
MS
2439&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2440&nbsp;&nbsp;&nbsp;&nbsp;char value<br>
2441);</p>
2442<h4 class="parameters">Parameters</h4>
2443<dl>
2444<dt>ipp</dt>
2445<dd class="description">IPP message</dd>
2446<dt>group</dt>
2447<dd class="description">IPP group</dd>
2448<dt>name</dt>
2449<dd class="description">Name of attribute</dd>
2450<dt>value</dt>
2451<dd class="description">Value of attribute</dd>
2452</dl>
2453<h4 class="returnvalue">Return Value</h4>
2454<p class="description">New attribute</p>
2455<h3 class="function"><a name="ippAddBooleans">ippAddBooleans</a></h3>
2456<p class="description">Add an array of boolean values.</p>
2457<p class="code">
2458<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddBooleans (<br>
2459&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2460&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea
MS
2461&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2462&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
2463&nbsp;&nbsp;&nbsp;&nbsp;const char *values<br>
2464);</p>
2465<h4 class="parameters">Parameters</h4>
2466<dl>
2467<dt>ipp</dt>
2468<dd class="description">IPP message</dd>
2469<dt>group</dt>
2470<dd class="description">IPP group</dd>
2471<dt>name</dt>
2472<dd class="description">Name of attribute</dd>
2473<dt>num_values</dt>
2474<dd class="description">Number of values</dd>
2475<dt>values</dt>
2476<dd class="description">Values</dd>
2477</dl>
2478<h4 class="returnvalue">Return Value</h4>
2479<p class="description">New attribute</p>
2480<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19&nbsp;</span><a name="ippAddCollection">ippAddCollection</a></h3>
2481<p class="description">Add a collection value.</p>
2482<p class="code">
2483<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddCollection (<br>
2484&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2485&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea
MS
2486&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2487&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *value<br>
2488);</p>
2489<h4 class="parameters">Parameters</h4>
2490<dl>
2491<dt>ipp</dt>
2492<dd class="description">IPP message</dd>
2493<dt>group</dt>
2494<dd class="description">IPP group</dd>
2495<dt>name</dt>
2496<dd class="description">Name of attribute</dd>
2497<dt>value</dt>
2498<dd class="description">Value</dd>
2499</dl>
2500<h4 class="returnvalue">Return Value</h4>
2501<p class="description">New attribute</p>
2502<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19&nbsp;</span><a name="ippAddCollections">ippAddCollections</a></h3>
2503<p class="description">Add an array of collection values.</p>
2504<p class="code">
2505<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddCollections (<br>
2506&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2507&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea
MS
2508&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2509&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
2510&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_t">ipp_t</a> **values<br>
2511);</p>
2512<h4 class="parameters">Parameters</h4>
2513<dl>
2514<dt>ipp</dt>
2515<dd class="description">IPP message</dd>
2516<dt>group</dt>
2517<dd class="description">IPP group</dd>
2518<dt>name</dt>
2519<dd class="description">Name of attribute</dd>
2520<dt>num_values</dt>
2521<dd class="description">Number of values</dd>
2522<dt>values</dt>
2523<dd class="description">Values</dd>
2524</dl>
2525<h4 class="returnvalue">Return Value</h4>
2526<p class="description">New attribute</p>
2527<h3 class="function"><a name="ippAddDate">ippAddDate</a></h3>
2528<p class="description">Add a date attribute to an IPP message.</p>
2529<p class="code">
2530<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddDate (<br>
2531&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2532&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea
MS
2533&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2534&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_uchar_t">ipp_uchar_t</a> *value<br>
2535);</p>
2536<h4 class="parameters">Parameters</h4>
2537<dl>
2538<dt>ipp</dt>
2539<dd class="description">IPP message</dd>
2540<dt>group</dt>
2541<dd class="description">IPP group</dd>
2542<dt>name</dt>
2543<dd class="description">Name of attribute</dd>
2544<dt>value</dt>
2545<dd class="description">Value</dd>
2546</dl>
2547<h4 class="returnvalue">Return Value</h4>
2548<p class="description">New attribute</p>
2549<h3 class="function"><a name="ippAddInteger">ippAddInteger</a></h3>
2550<p class="description">Add a integer attribute to an IPP message.</p>
2551<p class="code">
2552<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddInteger (<br>
2553&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494
MS
2554&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
2555&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> type,<br>
5a738aea
MS
2556&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2557&nbsp;&nbsp;&nbsp;&nbsp;int value<br>
2558);</p>
2559<h4 class="parameters">Parameters</h4>
2560<dl>
2561<dt>ipp</dt>
2562<dd class="description">IPP message</dd>
2563<dt>group</dt>
2564<dd class="description">IPP group</dd>
2565<dt>type</dt>
2566<dd class="description">Type of attribute</dd>
2567<dt>name</dt>
2568<dd class="description">Name of attribute</dd>
2569<dt>value</dt>
2570<dd class="description">Value of attribute</dd>
2571</dl>
2572<h4 class="returnvalue">Return Value</h4>
2573<p class="description">New attribute</p>
2574<h3 class="function"><a name="ippAddIntegers">ippAddIntegers</a></h3>
2575<p class="description">Add an array of integer values.</p>
2576<p class="code">
2577<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddIntegers (<br>
2578&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494
MS
2579&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
2580&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> type,<br>
5a738aea
MS
2581&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2582&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
2583&nbsp;&nbsp;&nbsp;&nbsp;const int *values<br>
2584);</p>
2585<h4 class="parameters">Parameters</h4>
2586<dl>
2587<dt>ipp</dt>
2588<dd class="description">IPP message</dd>
2589<dt>group</dt>
2590<dd class="description">IPP group</dd>
2591<dt>type</dt>
2592<dd class="description">Type of attribute</dd>
2593<dt>name</dt>
2594<dd class="description">Name of attribute</dd>
2595<dt>num_values</dt>
2596<dd class="description">Number of values</dd>
2597<dt>values</dt>
2598<dd class="description">Values</dd>
2599</dl>
2600<h4 class="returnvalue">Return Value</h4>
2601<p class="description">New attribute</p>
2602<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="ippAddOctetString">ippAddOctetString</a></h3>
2603<p class="description">Add an octetString value to an IPP message.</p>
2604<p class="code">
2605<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddOctetString (<br>
2606&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2607&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea
MS
2608&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2609&nbsp;&nbsp;&nbsp;&nbsp;const void *data,<br>
2610&nbsp;&nbsp;&nbsp;&nbsp;int datalen<br>
2611);</p>
2612<h4 class="parameters">Parameters</h4>
2613<dl>
2614<dt>ipp</dt>
2615<dd class="description">IPP message</dd>
2616<dt>group</dt>
2617<dd class="description">IPP group</dd>
2618<dt>name</dt>
2619<dd class="description">Name of attribute</dd>
2620<dt>data</dt>
2621<dd class="description">octetString data</dd>
2622<dt>datalen</dt>
2623<dd class="description">Length of data in bytes</dd>
2624</dl>
2625<h4 class="returnvalue">Return Value</h4>
2626<p class="description">New attribute</p>
2627<h3 class="function"><a name="ippAddRange">ippAddRange</a></h3>
2628<p class="description">Add a range of values to an IPP message.</p>
2629<p class="code">
2630<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddRange (<br>
2631&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2632&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea
MS
2633&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2634&nbsp;&nbsp;&nbsp;&nbsp;int lower,<br>
2635&nbsp;&nbsp;&nbsp;&nbsp;int upper<br>
2636);</p>
2637<h4 class="parameters">Parameters</h4>
2638<dl>
2639<dt>ipp</dt>
2640<dd class="description">IPP message</dd>
2641<dt>group</dt>
2642<dd class="description">IPP group</dd>
2643<dt>name</dt>
2644<dd class="description">Name of attribute</dd>
2645<dt>lower</dt>
2646<dd class="description">Lower value</dd>
2647<dt>upper</dt>
2648<dd class="description">Upper value</dd>
2649</dl>
2650<h4 class="returnvalue">Return Value</h4>
2651<p class="description">New attribute</p>
2652<h3 class="function"><a name="ippAddRanges">ippAddRanges</a></h3>
2653<p class="description">Add ranges of values to an IPP message.</p>
2654<p class="code">
2655<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddRanges (<br>
2656&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2657&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea
MS
2658&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2659&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
2660&nbsp;&nbsp;&nbsp;&nbsp;const int *lower,<br>
2661&nbsp;&nbsp;&nbsp;&nbsp;const int *upper<br>
2662);</p>
2663<h4 class="parameters">Parameters</h4>
2664<dl>
2665<dt>ipp</dt>
2666<dd class="description">IPP message</dd>
2667<dt>group</dt>
2668<dd class="description">IPP group</dd>
2669<dt>name</dt>
2670<dd class="description">Name of attribute</dd>
2671<dt>num_values</dt>
2672<dd class="description">Number of values</dd>
2673<dt>lower</dt>
2674<dd class="description">Lower values</dd>
2675<dt>upper</dt>
2676<dd class="description">Upper values</dd>
2677</dl>
2678<h4 class="returnvalue">Return Value</h4>
2679<p class="description">New attribute</p>
2680<h3 class="function"><a name="ippAddResolution">ippAddResolution</a></h3>
2681<p class="description">Add a resolution value to an IPP message.</p>
2682<p class="code">
2683<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddResolution (<br>
2684&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2685&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea 2686&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
79e1d494 2687&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> units,<br>
5a738aea
MS
2688&nbsp;&nbsp;&nbsp;&nbsp;int xres,<br>
2689&nbsp;&nbsp;&nbsp;&nbsp;int yres<br>
2690);</p>
2691<h4 class="parameters">Parameters</h4>
2692<dl>
2693<dt>ipp</dt>
2694<dd class="description">IPP message</dd>
2695<dt>group</dt>
2696<dd class="description">IPP group</dd>
2697<dt>name</dt>
2698<dd class="description">Name of attribute</dd>
2699<dt>units</dt>
2700<dd class="description">Units for resolution</dd>
2701<dt>xres</dt>
2702<dd class="description">X resolution</dd>
2703<dt>yres</dt>
2704<dd class="description">Y resolution</dd>
2705</dl>
2706<h4 class="returnvalue">Return Value</h4>
2707<p class="description">New attribute</p>
2708<h3 class="function"><a name="ippAddResolutions">ippAddResolutions</a></h3>
2709<p class="description">Add resolution values to an IPP message.</p>
2710<p class="code">
2711<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddResolutions (<br>
2712&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494 2713&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
5a738aea
MS
2714&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2715&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
79e1d494 2716&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> units,<br>
5a738aea
MS
2717&nbsp;&nbsp;&nbsp;&nbsp;const int *xres,<br>
2718&nbsp;&nbsp;&nbsp;&nbsp;const int *yres<br>
2719);</p>
2720<h4 class="parameters">Parameters</h4>
2721<dl>
2722<dt>ipp</dt>
2723<dd class="description">IPP message</dd>
2724<dt>group</dt>
2725<dd class="description">IPP group</dd>
2726<dt>name</dt>
2727<dd class="description">Name of attribute</dd>
2728<dt>num_values</dt>
2729<dd class="description">Number of values</dd>
2730<dt>units</dt>
2731<dd class="description">Units for resolution</dd>
2732<dt>xres</dt>
2733<dd class="description">X resolutions</dd>
2734<dt>yres</dt>
2735<dd class="description">Y resolutions</dd>
2736</dl>
2737<h4 class="returnvalue">Return Value</h4>
2738<p class="description">New attribute</p>
2739<h3 class="function"><a name="ippAddSeparator">ippAddSeparator</a></h3>
2740<p class="description">Add a group separator to an IPP message.</p>
2741<p class="code">
2742<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddSeparator (<br>
2743&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
2744);</p>
2745<h4 class="parameters">Parameters</h4>
2746<dl>
2747<dt>ipp</dt>
2748<dd class="description">IPP message</dd>
2749</dl>
2750<h4 class="returnvalue">Return Value</h4>
2751<p class="description">New attribute</p>
2752<h3 class="function"><a name="ippAddString">ippAddString</a></h3>
2753<p class="description">Add a language-encoded string to an IPP message.</p>
2754<p class="code">
2755<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddString (<br>
2756&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494
MS
2757&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
2758&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> type,<br>
5a738aea
MS
2759&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2760&nbsp;&nbsp;&nbsp;&nbsp;const char *charset,<br>
2761&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
2762);</p>
2763<h4 class="parameters">Parameters</h4>
2764<dl>
2765<dt>ipp</dt>
2766<dd class="description">IPP message</dd>
2767<dt>group</dt>
2768<dd class="description">IPP group</dd>
2769<dt>type</dt>
2770<dd class="description">Type of attribute</dd>
2771<dt>name</dt>
2772<dd class="description">Name of attribute</dd>
2773<dt>charset</dt>
2774<dd class="description">Character set</dd>
2775<dt>value</dt>
2776<dd class="description">Value</dd>
2777</dl>
2778<h4 class="returnvalue">Return Value</h4>
2779<p class="description">New attribute</p>
2780<h3 class="function"><a name="ippAddStrings">ippAddStrings</a></h3>
2781<p class="description">Add language-encoded strings to an IPP message.</p>
2782<p class="code">
2783<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStrings (<br>
2784&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
79e1d494
MS
2785&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group,<br>
2786&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> type,<br>
5a738aea
MS
2787&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
2788&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
2789&nbsp;&nbsp;&nbsp;&nbsp;const char *charset,<br>
2790&nbsp;&nbsp;&nbsp;&nbsp;const char *const *values<br>
2791);</p>
2792<h4 class="parameters">Parameters</h4>
2793<dl>
2794<dt>ipp</dt>
2795<dd class="description">IPP message</dd>
2796<dt>group</dt>
2797<dd class="description">IPP group</dd>
2798<dt>type</dt>
2799<dd class="description">Type of attribute</dd>
2800<dt>name</dt>
2801<dd class="description">Name of attribute</dd>
2802<dt>num_values</dt>
2803<dd class="description">Number of values</dd>
2804<dt>charset</dt>
2805<dd class="description">Character set</dd>
2806<dt>values</dt>
2807<dd class="description">Values</dd>
2808</dl>
2809<h4 class="returnvalue">Return Value</h4>
2810<p class="description">New attribute</p>
2811<h3 class="function"><a name="ippDateToTime">ippDateToTime</a></h3>
2812<p class="description">Convert from RFC 1903 Date/Time format to UNIX time
2813in seconds.</p>
2814<p class="code">
2815time_t ippDateToTime (<br>
2816&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_uchar_t">ipp_uchar_t</a> *date<br>
2817);</p>
2818<h4 class="parameters">Parameters</h4>
2819<dl>
2820<dt>date</dt>
2821<dd class="description">RFC 1903 date info</dd>
2822</dl>
2823<h4 class="returnvalue">Return Value</h4>
2824<p class="description">UNIX time value</p>
2825<h3 class="function"><a name="ippDelete">ippDelete</a></h3>
2826<p class="description">Delete an IPP message.</p>
2827<p class="code">
2828void ippDelete (<br>
2829&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
2830);</p>
2831<h4 class="parameters">Parameters</h4>
2832<dl>
2833<dt>ipp</dt>
2834<dd class="description">IPP message</dd>
2835</dl>
2836<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19&nbsp;</span><a name="ippDeleteAttribute">ippDeleteAttribute</a></h3>
2837<p class="description">Delete a single attribute in an IPP message.</p>
2838<p class="code">
2839void ippDeleteAttribute (<br>
2840&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
2841&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
2842);</p>
2843<h4 class="parameters">Parameters</h4>
2844<dl>
2845<dt>ipp</dt>
2846<dd class="description">IPP message</dd>
2847<dt>attr</dt>
2848<dd class="description">Attribute to delete</dd>
2849</dl>
2850<h3 class="function"><a name="ippErrorString">ippErrorString</a></h3>
2851<p class="description">Return a name for the given status code.</p>
2852<p class="code">
2853const char *ippErrorString (<br>
2854&nbsp;&nbsp;&nbsp;&nbsp;ipp_status_t error<br>
2855);</p>
2856<h4 class="parameters">Parameters</h4>
2857<dl>
2858<dt>error</dt>
2859<dd class="description">Error status</dd>
2860</dl>
2861<h4 class="returnvalue">Return Value</h4>
2862<p class="description">Text string</p>
2863<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="ippErrorValue">ippErrorValue</a></h3>
2864<p class="description">Return a status code for the given name.</p>
2865<p class="code">
2866ipp_status_t ippErrorValue (<br>
2867&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
2868);</p>
2869<h4 class="parameters">Parameters</h4>
2870<dl>
2871<dt>name</dt>
2872<dd class="description">Name</dd>
2873</dl>
2874<h4 class="returnvalue">Return Value</h4>
2875<p class="description">IPP status code</p>
2876<h3 class="function"><a name="ippFindAttribute">ippFindAttribute</a></h3>
2877<p class="description">Find a named attribute in a request...</p>
2878<p class="code">
2879<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFindAttribute (<br>
2880&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
2881&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
79e1d494 2882&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> type<br>
5a738aea
MS
2883);</p>
2884<h4 class="parameters">Parameters</h4>
2885<dl>
2886<dt>ipp</dt>
2887<dd class="description">IPP message</dd>
2888<dt>name</dt>
2889<dd class="description">Name of attribute</dd>
2890<dt>type</dt>
2891<dd class="description">Type of attribute</dd>
2892</dl>
2893<h4 class="returnvalue">Return Value</h4>
2894<p class="description">Matching attribute</p>
2895<h3 class="function"><a name="ippFindNextAttribute">ippFindNextAttribute</a></h3>
2896<p class="description">Find the next named attribute in a request...</p>
2897<p class="code">
2898<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFindNextAttribute (<br>
2899&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
2900&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
79e1d494 2901&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> type<br>
5a738aea
MS
2902);</p>
2903<h4 class="parameters">Parameters</h4>
2904<dl>
2905<dt>ipp</dt>
2906<dd class="description">IPP message</dd>
2907<dt>name</dt>
2908<dd class="description">Name of attribute</dd>
2909<dt>type</dt>
2910<dd class="description">Type of attribute</dd>
2911</dl>
2912<h4 class="returnvalue">Return Value</h4>
2913<p class="description">Matching attribute</p>
2914<h3 class="function"><a name="ippLength">ippLength</a></h3>
2915<p class="description">Compute the length of an IPP message.</p>
2916<p class="code">
2917size_t ippLength (<br>
2918&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
2919);</p>
2920<h4 class="parameters">Parameters</h4>
2921<dl>
2922<dt>ipp</dt>
2923<dd class="description">IPP message</dd>
2924</dl>
2925<h4 class="returnvalue">Return Value</h4>
2926<p class="description">Size of IPP message</p>
2927<h3 class="function"><a name="ippNew">ippNew</a></h3>
2928<p class="description">Allocate a new IPP message.</p>
2929<p class="code">
2930<a href="#ipp_t">ipp_t</a> *ippNew (void);</p>
2931<h4 class="returnvalue">Return Value</h4>
2932<p class="description">New IPP message</p>
2933<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="ippNewRequest">ippNewRequest</a></h3>
2934<p class="description">Allocate a new IPP request message.</p>
2935<p class="code">
2936<a href="#ipp_t">ipp_t</a> *ippNewRequest (<br>
79e1d494 2937&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_op_t">ipp_op_t</a> op<br>
5a738aea
MS
2938);</p>
2939<h4 class="parameters">Parameters</h4>
2940<dl>
2941<dt>op</dt>
2942<dd class="description">Operation code</dd>
2943</dl>
2944<h4 class="returnvalue">Return Value</h4>
2945<p class="description">IPP request message</p>
2946<h4 class="discussion">Discussion</h4>
2947<p class="discussion">The new request message is initialized with the attributes-charset and
ecdc0628 2948attributes-natural-language attributes added. The
2949attributes-natural-language value is derived from the current locale.
2950
5a738aea
MS
2951</p>
2952<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="ippOpString">ippOpString</a></h3>
2953<p class="description">Return a name for the given operation id.</p>
2954<p class="code">
2955const char *ippOpString (<br>
79e1d494 2956&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_op_t">ipp_op_t</a> op<br>
5a738aea
MS
2957);</p>
2958<h4 class="parameters">Parameters</h4>
2959<dl>
2960<dt>op</dt>
2961<dd class="description">Operation ID</dd>
2962</dl>
2963<h4 class="returnvalue">Return Value</h4>
2964<p class="description">Name</p>
2965<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="ippOpValue">ippOpValue</a></h3>
2966<p class="description">Return an operation id for the given name.</p>
2967<p class="code">
79e1d494 2968<a href="#ipp_op_t">ipp_op_t</a> ippOpValue (<br>
5a738aea
MS
2969&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
2970);</p>
2971<h4 class="parameters">Parameters</h4>
2972<dl>
2973<dt>name</dt>
2974<dd class="description">Textual name</dd>
2975</dl>
2976<h4 class="returnvalue">Return Value</h4>
2977<p class="description">Operation ID</p>
2978<h3 class="function"><a name="ippPort">ippPort</a></h3>
2979<p class="description">Return the default IPP port number.</p>
2980<p class="code">
2981int ippPort (void);</p>
2982<h4 class="returnvalue">Return Value</h4>
2983<p class="description">Port number</p>
2984<h3 class="function"><a name="ippRead">ippRead</a></h3>
2985<p class="description">Read data for an IPP message from a HTTP connection.</p>
2986<p class="code">
79e1d494 2987<a href="#ipp_state_t">ipp_state_t</a> ippRead (<br>
5a738aea
MS
2988&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
2989&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
2990);</p>
2991<h4 class="parameters">Parameters</h4>
2992<dl>
2993<dt>http</dt>
2994<dd class="description">HTTP connection</dd>
2995<dt>ipp</dt>
2996<dd class="description">IPP data</dd>
2997</dl>
2998<h4 class="returnvalue">Return Value</h4>
2999<p class="description">Current state</p>
3000<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19&nbsp;</span><a name="ippReadFile">ippReadFile</a></h3>
3001<p class="description">Read data for an IPP message from a file.</p>
3002<p class="code">
79e1d494 3003<a href="#ipp_state_t">ipp_state_t</a> ippReadFile (<br>
5a738aea
MS
3004&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
3005&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
3006);</p>
3007<h4 class="parameters">Parameters</h4>
3008<dl>
3009<dt>fd</dt>
3010<dd class="description">HTTP data</dd>
3011<dt>ipp</dt>
3012<dd class="description">IPP data</dd>
3013</dl>
3014<h4 class="returnvalue">Return Value</h4>
3015<p class="description">Current state</p>
3016<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="ippReadIO">ippReadIO</a></h3>
3017<p class="description">Read data for an IPP message.</p>
3018<p class="code">
79e1d494 3019<a href="#ipp_state_t">ipp_state_t</a> ippReadIO (<br>
5a738aea
MS
3020&nbsp;&nbsp;&nbsp;&nbsp;void *src,<br>
3021&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_iocb_t">ipp_iocb_t</a> cb,<br>
3022&nbsp;&nbsp;&nbsp;&nbsp;int blocking,<br>
3023&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *parent,<br>
3024&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
3025);</p>
3026<h4 class="parameters">Parameters</h4>
3027<dl>
3028<dt>src</dt>
3029<dd class="description">Data source</dd>
3030<dt>cb</dt>
3031<dd class="description">Read callback function</dd>
3032<dt>blocking</dt>
3033<dd class="description">Use blocking IO?</dd>
3034<dt>parent</dt>
3035<dd class="description">Parent request, if any</dd>
3036<dt>ipp</dt>
3037<dd class="description">IPP data</dd>
3038</dl>
3039<h4 class="returnvalue">Return Value</h4>
3040<p class="description">Current state</p>
3041<h3 class="function"><a name="ippSetPort">ippSetPort</a></h3>
3042<p class="description">Set the default port number.</p>
3043<p class="code">
3044void ippSetPort (<br>
3045&nbsp;&nbsp;&nbsp;&nbsp;int p<br>
3046);</p>
3047<h4 class="parameters">Parameters</h4>
3048<dl>
3049<dt>p</dt>
3050<dd class="description">Port number to use</dd>
3051</dl>
06d4e77b
MS
3052<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="ippTagString">ippTagString</a></h3>
3053<p class="description">Return the tag name corresponding to a tag value.</p>
3054<p class="code">
3055const char *ippTagString (<br>
3056&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> tag<br>
3057);</p>
3058<h4 class="parameters">Parameters</h4>
3059<dl>
3060<dt>tag</dt>
3061<dd class="description">Tag value</dd>
3062</dl>
3063<h4 class="returnvalue">Return Value</h4>
3064<p class="description">Tag name</p>
3065<h4 class="discussion">Discussion</h4>
3066<p class="discussion">The returned names are defined in RFC 2911 and 3382.
3067
3068</p>
3069<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="ippTagValue">ippTagValue</a></h3>
3070<p class="description">Return the tag value corresponding to a tag name.</p>
3071<p class="code">
3072<a href="#ipp_tag_t">ipp_tag_t</a> ippTagValue (<br>
3073&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
3074);</p>
3075<h4 class="parameters">Parameters</h4>
3076<dl>
3077<dt>name</dt>
3078<dd class="description">Tag name</dd>
3079</dl>
3080<h4 class="returnvalue">Return Value</h4>
3081<p class="description">Tag value</p>
3082<h4 class="discussion">Discussion</h4>
3083<p class="discussion">The tag names are defined in RFC 2911 and 3382.
3084
3085</p>
5a738aea
MS
3086<h3 class="function"><a name="ippTimeToDate">ippTimeToDate</a></h3>
3087<p class="description">Convert from UNIX time to RFC 1903 format.</p>
3088<p class="code">
3089const <a href="#ipp_uchar_t">ipp_uchar_t</a> *ippTimeToDate (<br>
3090&nbsp;&nbsp;&nbsp;&nbsp;time_t t<br>
3091);</p>
3092<h4 class="parameters">Parameters</h4>
3093<dl>
3094<dt>t</dt>
3095<dd class="description">UNIX time value</dd>
3096</dl>
3097<h4 class="returnvalue">Return Value</h4>
3098<p class="description">RFC-1903 date/time data</p>
3099<h3 class="function"><a name="ippWrite">ippWrite</a></h3>
3100<p class="description">Write data for an IPP message to a HTTP connection.</p>
3101<p class="code">
79e1d494 3102<a href="#ipp_state_t">ipp_state_t</a> ippWrite (<br>
5a738aea
MS
3103&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
3104&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
3105);</p>
3106<h4 class="parameters">Parameters</h4>
3107<dl>
3108<dt>http</dt>
3109<dd class="description">HTTP connection</dd>
3110<dt>ipp</dt>
3111<dd class="description">IPP data</dd>
3112</dl>
3113<h4 class="returnvalue">Return Value</h4>
3114<p class="description">Current state</p>
3115<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19&nbsp;</span><a name="ippWriteFile">ippWriteFile</a></h3>
3116<p class="description">Write data for an IPP message to a file.</p>
3117<p class="code">
79e1d494 3118<a href="#ipp_state_t">ipp_state_t</a> ippWriteFile (<br>
5a738aea
MS
3119&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
3120&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
3121);</p>
3122<h4 class="parameters">Parameters</h4>
3123<dl>
3124<dt>fd</dt>
3125<dd class="description">HTTP data</dd>
3126<dt>ipp</dt>
3127<dd class="description">IPP data</dd>
3128</dl>
3129<h4 class="returnvalue">Return Value</h4>
3130<p class="description">Current state</p>
3131<h3 class="function"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="ippWriteIO">ippWriteIO</a></h3>
3132<p class="description">Write data for an IPP message.</p>
3133<p class="code">
79e1d494 3134<a href="#ipp_state_t">ipp_state_t</a> ippWriteIO (<br>
5a738aea
MS
3135&nbsp;&nbsp;&nbsp;&nbsp;void *dst,<br>
3136&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_iocb_t">ipp_iocb_t</a> cb,<br>
3137&nbsp;&nbsp;&nbsp;&nbsp;int blocking,<br>
3138&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *parent,<br>
3139&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
3140);</p>
3141<h4 class="parameters">Parameters</h4>
3142<dl>
3143<dt>dst</dt>
3144<dd class="description">Destination</dd>
3145<dt>cb</dt>
3146<dd class="description">Write callback function</dd>
3147<dt>blocking</dt>
3148<dd class="description">Use blocking IO?</dd>
3149<dt>parent</dt>
3150<dd class="description">Parent IPP message</dd>
3151<dt>ipp</dt>
3152<dd class="description">IPP data</dd>
3153</dl>
3154<h4 class="returnvalue">Return Value</h4>
3155<p class="description">Current state</p>
3156<h2 class="title"><a name="TYPES">Data Types</a></h2>
3157<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="http_addrlist_t">http_addrlist_t</a></h3>
3158<p class="description">Socket address list, which is
ef416fc2 3159used to enumerate all of the
3160addresses that are associated
5a738aea
MS
3161with a hostname. </p>
3162<p class="code">
3163typedef struct <a href="#http_addrlist_s">http_addrlist_s</a> / http_addrlist_t;
3164</p>
3165<h3 class="typedef"><a name="http_auth_t">http_auth_t</a></h3>
3166<p class="description">HTTP authentication types</p>
3167<p class="code">
3168typedef enum <a href="#http_auth_e">http_auth_e</a> http_auth_t;
3169</p>
3170<h3 class="typedef"><a name="http_encoding_t">http_encoding_t</a></h3>
3171<p class="description">HTTP transfer encoding values</p>
3172<p class="code">
3173typedef enum <a href="#http_encoding_e">http_encoding_e</a> http_encoding_t;
3174</p>
3175<h3 class="typedef"><a name="http_encryption_t">http_encryption_t</a></h3>
3176<p class="description">HTTP encryption values</p>
3177<p class="code">
3178typedef enum <a href="#http_encryption_e">http_encryption_e</a> http_encryption_t;
3179</p>
79e1d494
MS
3180<h3 class="typedef"><a name="http_field_t">http_field_t</a></h3>
3181<p class="description">HTTP field names</p>
3182<p class="code">
3183typedef enum <a href="#http_field_e">http_field_e</a> http_field_t;
3184</p>
3185<h3 class="typedef"><a name="http_keepalive_t">http_keepalive_t</a></h3>
3186<p class="description">Types and structures...</p>
3187<p class="code">
3188typedef enum <a href="#http_keepalive_e">http_keepalive_e</a> http_keepalive_t;
3189</p>
3190<h3 class="typedef"><a name="http_status_t">http_status_t</a></h3>
3191<p class="description">HTTP status codes</p>
3192<p class="code">
3193typedef enum <a href="#http_status_e">http_status_e</a> http_status_t;
3194</p>
5a738aea
MS
3195<h3 class="typedef"><a name="http_t">http_t</a></h3>
3196<p class="description">HTTP connection type</p>
3197<p class="code">
ecdc0628 3198typedef struct _http_s http_t;
5a738aea 3199</p>
79e1d494
MS
3200<h3 class="typedef"><a name="http_uri_coding_t">http_uri_coding_t</a></h3>
3201<p class="description">HTTP version numbers</p>
3202<p class="code">
3203typedef enum <a href="#http_uri_coding_e">http_uri_coding_e</a> http_uri_coding_t;
3204</p>
3205<h3 class="typedef"><a name="http_uri_status_t">http_uri_status_t</a></h3>
3206<p class="description">URI en/decode flags</p>
3207<p class="code">
3208typedef enum <a href="#http_uri_status_e">http_uri_status_e</a> http_uri_status_t;
3209</p>
3210<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="http_version_t">http_version_t</a></h3>
3211<p class="description">Socket address union, which
3212makes using IPv6 and other
3213address types easier and
3214more portable. </p>
3215<p class="code">
3216typedef enum <a href="#http_version_e">http_version_e</a> http_version_t;
3217</p>
5a738aea
MS
3218<h3 class="typedef"><a name="ipp_attribute_t">ipp_attribute_t</a></h3>
3219<p class="description">Attribute</p>
3220<p class="code">
3221typedef struct <a href="#ipp_attribute_s">ipp_attribute_s</a> ipp_attribute_t;
3222</p>
79e1d494
MS
3223<h3 class="typedef"><a name="ipp_finish_t">ipp_finish_t</a></h3>
3224<p class="description">Orientation...</p>
3225<p class="code">
3226typedef enum <a href="#ipp_finish_e">ipp_finish_e</a> ipp_finish_t;
3227</p>
5a738aea
MS
3228<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="ipp_iocb_t">ipp_iocb_t</a></h3>
3229<p class="description">IPP IO Callback Function </p>
3230<p class="code">
3231typedef ssize_t (*ipp_iocb_t)(void *, <a href="#ipp_uchar_t">ipp_uchar_t</a> *, size_t);
3232</p>
79e1d494
MS
3233<h3 class="typedef"><a name="ipp_jstate_t">ipp_jstate_t</a></h3>
3234<p class="description">Printer States....</p>
3235<p class="code">
3236typedef enum <a href="#ipp_jstate_e">ipp_jstate_e</a> ipp_jstate_t;
3237</p>
3238<h3 class="typedef"><a name="ipp_op_t">ipp_op_t</a></h3>
3239<p class="description">Old names for the operations</p>
3240<p class="code">
3241typedef enum <a href="#ipp_op_e">ipp_op_e</a> ipp_op_t;
3242</p>
3243<h3 class="typedef"><a name="ipp_orient_t">ipp_orient_t</a></h3>
3244<p class="description">Qualities...</p>
3245<p class="code">
3246typedef enum <a href="#ipp_orient_e">ipp_orient_e</a> ipp_orient_t;
3247</p>
3248<h3 class="typedef"><a name="ipp_pstate_t">ipp_pstate_t</a></h3>
3249<p class="description">IPP states...</p>
3250<p class="code">
3251typedef enum <a href="#ipp_pstate_e">ipp_pstate_e</a> ipp_pstate_t;
3252</p>
3253<h3 class="typedef"><a name="ipp_quality_t">ipp_quality_t</a></h3>
3254<p class="description">Job States....</p>
3255<p class="code">
3256typedef enum <a href="#ipp_quality_e">ipp_quality_e</a> ipp_quality_t;
3257</p>
5a738aea
MS
3258<h3 class="typedef"><a name="ipp_request_t">ipp_request_t</a></h3>
3259<p class="description">Request Header</p>
3260<p class="code">
3261typedef union <a href="#ipp_request_u">ipp_request_u</a> ipp_request_t;
3262</p>
79e1d494
MS
3263<h3 class="typedef"><a name="ipp_res_t">ipp_res_t</a></h3>
3264<p class="description">Types and structures...</p>
3265<p class="code">
3266typedef enum <a href="#ipp_res_e">ipp_res_e</a> ipp_res_t;
3267</p>
3268<h3 class="typedef"><a name="ipp_state_t">ipp_state_t</a></h3>
3269<p class="description">IPP operations...</p>
3270<p class="code">
3271typedef enum <a href="#ipp_state_e">ipp_state_e</a> ipp_state_t;
3272</p>
5a738aea
MS
3273<h3 class="typedef"><a name="ipp_t">ipp_t</a></h3>
3274<p class="description">Attribute Value</p>
3275<p class="code">
3276typedef struct <a href="#ipp_s">ipp_s</a> ipp_t;
3277</p>
3278<h3 class="typedef"><a name="ipp_uchar_t">ipp_uchar_t</a></h3>
3279<p class="description">IPP status codes...</p>
3280<p class="code">
ecdc0628 3281typedef typedef unsigned char ipp_uchar_t;
5a738aea 3282</p>
79e1d494
MS
3283<h3 class="typedef"><a name="ipp_tag_t">ipp_tag_t</a></h3>
3284<p class="description">Format tags for attributes...</p>
3285<p class="code">
3286typedef enum <a href="#ipp_tag_e">ipp_tag_e</a> ipp_tag_t;
3287</p>
5a738aea
MS
3288<h3 class="typedef"><a name="ipp_value_t">ipp_value_t</a></h3>
3289<p class="description">New in CUPS 1.1.19</p>
3290<p class="code">
3291typedef union <a href="#ipp_value_u">ipp_value_u</a> ipp_value_t;
3292</p>
3293<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
3294<h3 class="struct"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="http_addrlist_s">http_addrlist_s</a></h3>
3295<p class="description">Socket address list, which is
3296used to enumerate all of the
3297addresses that are associated
3298with a hostname. </p>
3299<p class="code">struct http_addrlist_s {<br>
3300&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addr_t">http_addr_t</a> addr;<br>
3301&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#http_addrlist_s">http_addrlist_s</a> *next;<br>
3302};</p>
3303<h4 class="members">Members</h4>
3304<dl>
3305<dt>addr </dt>
3306<dd class="description">Address</dd>
3307<dt>next </dt>
3308<dd class="description">Pointer to next address in list</dd>
3309</dl>
3310<h3 class="struct"><a name="ipp_attribute_s">ipp_attribute_s</a></h3>
3311<p class="description">Attribute</p>
3312<p class="code">struct ipp_attribute_s {<br>
3313&nbsp;&nbsp;&nbsp;&nbsp;char *name;<br>
3314&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#ipp_attribute_s">ipp_attribute_s</a> *next;<br>
3315&nbsp;&nbsp;&nbsp;&nbsp;int num_values;<br>
79e1d494 3316&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> group_tag, value_tag;<br>
5a738aea
MS
3317&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_value_t">ipp_value_t</a> values[1];<br>
3318};</p>
3319<h4 class="members">Members</h4>
3320<dl>
3321<dt>name </dt>
3322<dd class="description">Name of attribute</dd>
3323<dt>next </dt>
3324<dd class="description">Next attribute in list</dd>
3325<dt>num_values </dt>
3326<dd class="description">Number of values</dd>
3327<dt>value_tag </dt>
3328<dd class="description">What type of value is it?</dd>
3329<dt>values[1] </dt>
3330<dd class="description">Values</dd>
3331</dl>
3332<h3 class="struct"><a name="ipp_s">ipp_s</a></h3>
3333<p class="description">IPP Request/Response/Notification</p>
3334<p class="code">struct ipp_s {<br>
3335&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attrs;<br>
3336&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *current;<br>
79e1d494 3337&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_tag_t">ipp_tag_t</a> curtag;<br>
5a738aea
MS
3338&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *last;<br>
3339&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *prev;<br>
3340&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_request_t">ipp_request_t</a> request;<br>
79e1d494 3341&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_state_t">ipp_state_t</a> state;<br>
5a738aea
MS
3342};</p>
3343<h4 class="members">Members</h4>
3344<dl>
3345<dt>attrs </dt>
3346<dd class="description">Attributes</dd>
3347<dt>current </dt>
3348<dd class="description">Current attribute (for read/write)</dd>
3349<dt>curtag </dt>
3350<dd class="description">Current attribute group tag</dd>
3351<dt>last </dt>
3352<dd class="description">Last attribute in list</dd>
3353<dt>prev </dt>
3354<dd class="description">Previous attribute (for read)</dd>
3355<dt>request </dt>
3356<dd class="description">Request header</dd>
3357<dt>state </dt>
3358<dd class="description">State of request</dd>
3359</dl>
3360<h2 class="title"><a name="UNIONS">Unions</a></h2>
3361<h3 class="union"><a name="ipp_request_u">ipp_request_u</a></h3>
3362<p class="description">Request Header</p>
3363<p class="code">union ipp_request_u {<br>
3364};</p>
3365<h4 class="members">Members</h4>
3366<dl>
3367</dl>
3368<h3 class="union"><a name="ipp_value_u">ipp_value_u</a></h3>
3369<p class="description">New in CUPS 1.1.19</p>
3370<p class="code">union ipp_value_u {<br>
3371&nbsp;&nbsp;&nbsp;&nbsp;char boolean;<br>
3372&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *collection;<br>
3373&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_uchar_t">ipp_uchar_t</a> date[11];<br>
3374&nbsp;&nbsp;&nbsp;&nbsp;int integer;<br>
3375};</p>
3376<h4 class="members">Members</h4>
3377<dl>
3378<dt>boolean </dt>
3379<dd class="description">Boolean value</dd>
3380<dt>collection </dt>
3381<dd class="description">Collection value</dd>
3382<dt>date[11] </dt>
3383<dd class="description">Date/time value</dd>
3384<dt>integer </dt>
3385<dd class="description">Integer/enumerated value</dd>
3386</dl>
3387<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
3388<h3 class="enumeration"><a name="http_auth_e">http_auth_e</a></h3>
3389<p class="description">HTTP authentication types</p>
3390<h4 class="constants">Constants</h4>
3391<dl>
3392<dt>HTTP_AUTH_BASIC </dt>
3393<dd class="description">Basic authentication in use</dd>
3394<dt>HTTP_AUTH_MD5 </dt>
3395<dd class="description">Digest authentication in use</dd>
3396<dt>HTTP_AUTH_MD5_INT </dt>
3397<dd class="description">Digest authentication in use for body</dd>
3398<dt>HTTP_AUTH_MD5_SESS </dt>
3399<dd class="description">MD5-session authentication in use</dd>
3400<dt>HTTP_AUTH_MD5_SESS_INT </dt>
3401<dd class="description">MD5-session authentication in use for body</dd>
3402<dt>HTTP_AUTH_NEGOTIATE <span class="info">&nbsp;CUPS 1.3&nbsp;</span></dt>
3403<dd class="description">GSSAPI authentication in use </dd>
3404<dt>HTTP_AUTH_NONE </dt>
3405<dd class="description">No authentication in use</dd>
3406</dl>
3407<h3 class="enumeration"><a name="http_encoding_e">http_encoding_e</a></h3>
3408<p class="description">HTTP transfer encoding values</p>
3409<h4 class="constants">Constants</h4>
3410<dl>
3411<dt>HTTP_ENCODE_CHUNKED </dt>
3412<dd class="description">Data is chunked</dd>
3413<dt>HTTP_ENCODE_FIELDS </dt>
3414<dd class="description">Sending HTTP fields</dd>
3415<dt>HTTP_ENCODE_LENGTH </dt>
3416<dd class="description">Data is sent with Content-Length</dd>
3417</dl>
3418<h3 class="enumeration"><a name="http_encryption_e">http_encryption_e</a></h3>
3419<p class="description">HTTP encryption values</p>
3420<h4 class="constants">Constants</h4>
3421<dl>
3422<dt>HTTP_ENCRYPT_ALWAYS </dt>
3423<dd class="description">Always encrypt (SSL)</dd>
3424<dt>HTTP_ENCRYPT_IF_REQUESTED </dt>
3425<dd class="description">Encrypt if requested (TLS upgrade)</dd>
3426<dt>HTTP_ENCRYPT_NEVER </dt>
3427<dd class="description">Never encrypt</dd>
3428<dt>HTTP_ENCRYPT_REQUIRED </dt>
3429<dd class="description">Encryption is required (TLS upgrade)</dd>
3430</dl>
3431<h3 class="enumeration"><a name="http_field_e">http_field_e</a></h3>
3432<p class="description">HTTP field names</p>
3433<h4 class="constants">Constants</h4>
3434<dl>
3435<dt>HTTP_FIELD_ACCEPT_LANGUAGE </dt>
3436<dd class="description">Accept-Language field</dd>
3437<dt>HTTP_FIELD_ACCEPT_RANGES </dt>
3438<dd class="description">Accept-Ranges field</dd>
3439<dt>HTTP_FIELD_AUTHORIZATION </dt>
3440<dd class="description">Authorization field</dd>
3441<dt>HTTP_FIELD_CONNECTION </dt>
3442<dd class="description">Connection field</dd>
3443<dt>HTTP_FIELD_CONTENT_ENCODING </dt>
3444<dd class="description">Content-Encoding field</dd>
3445<dt>HTTP_FIELD_CONTENT_LANGUAGE </dt>
3446<dd class="description">Content-Language field</dd>
3447<dt>HTTP_FIELD_CONTENT_LENGTH </dt>
3448<dd class="description">Content-Length field</dd>
3449<dt>HTTP_FIELD_CONTENT_LOCATION </dt>
3450<dd class="description">Content-Location field</dd>
3451<dt>HTTP_FIELD_CONTENT_MD5 </dt>
3452<dd class="description">Content-MD5 field</dd>
3453<dt>HTTP_FIELD_CONTENT_RANGE </dt>
3454<dd class="description">Content-Range field</dd>
3455<dt>HTTP_FIELD_CONTENT_TYPE </dt>
3456<dd class="description">Content-Type field</dd>
3457<dt>HTTP_FIELD_CONTENT_VERSION </dt>
3458<dd class="description">Content-Version field</dd>
3459<dt>HTTP_FIELD_DATE </dt>
3460<dd class="description">Date field</dd>
3461<dt>HTTP_FIELD_HOST </dt>
3462<dd class="description">Host field</dd>
3463<dt>HTTP_FIELD_IF_MODIFIED_SINCE </dt>
3464<dd class="description">If-Modified-Since field</dd>
3465<dt>HTTP_FIELD_IF_UNMODIFIED_SINCE </dt>
3466<dd class="description">If-Unmodified-Since field</dd>
3467<dt>HTTP_FIELD_KEEP_ALIVE </dt>
3468<dd class="description">Keep-Alive field</dd>
3469<dt>HTTP_FIELD_LAST_MODIFIED </dt>
3470<dd class="description">Last-Modified field</dd>
3471<dt>HTTP_FIELD_LINK </dt>
3472<dd class="description">Link field</dd>
3473<dt>HTTP_FIELD_LOCATION </dt>
3474<dd class="description">Location field</dd>
3475<dt>HTTP_FIELD_MAX </dt>
3476<dd class="description">Maximum field index</dd>
3477<dt>HTTP_FIELD_RANGE </dt>
3478<dd class="description">Range field</dd>
3479<dt>HTTP_FIELD_REFERER </dt>
3480<dd class="description">Referer field</dd>
3481<dt>HTTP_FIELD_RETRY_AFTER </dt>
3482<dd class="description">Retry-After field</dd>
3483<dt>HTTP_FIELD_TRANSFER_ENCODING </dt>
3484<dd class="description">Transfer-Encoding field</dd>
3485<dt>HTTP_FIELD_UNKNOWN </dt>
3486<dd class="description">Unknown field</dd>
3487<dt>HTTP_FIELD_UPGRADE </dt>
3488<dd class="description">Upgrade field</dd>
3489<dt>HTTP_FIELD_USER_AGENT </dt>
3490<dd class="description">User-Agent field</dd>
3491<dt>HTTP_FIELD_WWW_AUTHENTICATE </dt>
3492<dd class="description">WWW-Authenticate field</dd>
3493</dl>
3494<h3 class="enumeration"><a name="http_keepalive_e">http_keepalive_e</a></h3>
3495<p class="description">Types and structures...</p>
3496<h4 class="constants">Constants</h4>
3497<dl>
3498<dt>HTTP_KEEPALIVE_OFF </dt>
3499<dd class="description">No keep alive support</dd>
3500<dt>HTTP_KEEPALIVE_ON </dt>
3501<dd class="description">Use keep alive</dd>
3502</dl>
3503<h3 class="enumeration"><a name="http_state_e">http_state_e</a></h3>
3504<p class="description"></p>
3505<h4 class="constants">Constants</h4>
3506<dl>
3507<dt>HTTP_CLOSE </dt>
3508<dd class="description">CLOSE command, waiting for blank line</dd>
3509<dt>HTTP_DELETE </dt>
3510<dd class="description">DELETE command, waiting for blank line</dd>
3511<dt>HTTP_GET </dt>
3512<dd class="description">GET command, waiting for blank line</dd>
3513<dt>HTTP_GET_SEND </dt>
3514<dd class="description">GET command, sending data</dd>
3515<dt>HTTP_HEAD </dt>
3516<dd class="description">HEAD command, waiting for blank line</dd>
3517<dt>HTTP_OPTIONS </dt>
3518<dd class="description">OPTIONS command, waiting for blank line</dd>
3519<dt>HTTP_POST </dt>
3520<dd class="description">POST command, waiting for blank line</dd>
3521<dt>HTTP_POST_RECV </dt>
3522<dd class="description">POST command, receiving data</dd>
3523<dt>HTTP_POST_SEND </dt>
3524<dd class="description">POST command, sending data</dd>
3525<dt>HTTP_PUT </dt>
3526<dd class="description">PUT command, waiting for blank line</dd>
3527<dt>HTTP_PUT_RECV </dt>
3528<dd class="description">PUT command, receiving data</dd>
3529<dt>HTTP_STATUS </dt>
3530<dd class="description">Command complete, sending status</dd>
3531<dt>HTTP_TRACE </dt>
3532<dd class="description">TRACE command, waiting for blank line</dd>
3533<dt>HTTP_WAITING </dt>
3534<dd class="description">Waiting for command</dd>
3535</dl>
3536<h3 class="enumeration"><a name="http_status_e">http_status_e</a></h3>
3537<p class="description">HTTP status codes</p>
3538<h4 class="constants">Constants</h4>
3539<dl>
3540<dt>HTTP_ACCEPTED </dt>
3541<dd class="description">DELETE command was successful</dd>
3542<dt>HTTP_BAD_GATEWAY </dt>
3543<dd class="description">Bad gateway</dd>
3544<dt>HTTP_BAD_REQUEST </dt>
3545<dd class="description">Bad request</dd>
3546<dt>HTTP_CONFLICT </dt>
3547<dd class="description">Request is self-conflicting</dd>
3548<dt>HTTP_CONTINUE </dt>
3549<dd class="description">Everything OK, keep going...</dd>
3550<dt>HTTP_CREATED </dt>
3551<dd class="description">PUT command was successful</dd>
3552<dt>HTTP_ERROR </dt>
3553<dd class="description">An error response from httpXxxx()</dd>
3554<dt>HTTP_EXPECTATION_FAILED </dt>
3555<dd class="description">The expectation given in an Expect header field was not met</dd>
3556<dt>HTTP_FORBIDDEN </dt>
3557<dd class="description">Forbidden to access this URI</dd>
3558<dt>HTTP_GATEWAY_TIMEOUT </dt>
3559<dd class="description">Gateway connection timed out</dd>
3560<dt>HTTP_GONE </dt>
3561<dd class="description">Server has gone away</dd>
3562<dt>HTTP_LENGTH_REQUIRED </dt>
3563<dd class="description">A content length or encoding is required</dd>
3564<dt>HTTP_METHOD_NOT_ALLOWED </dt>
3565<dd class="description">Method is not allowed</dd>
3566<dt>HTTP_MOVED_PERMANENTLY </dt>
3567<dd class="description">Document has moved permanently</dd>
3568<dt>HTTP_MOVED_TEMPORARILY </dt>
3569<dd class="description">Document has moved temporarily</dd>
3570<dt>HTTP_MULTIPLE_CHOICES </dt>
3571<dd class="description">Multiple files match request</dd>
3572<dt>HTTP_NOT_ACCEPTABLE </dt>
3573<dd class="description">Not Acceptable</dd>
3574<dt>HTTP_NOT_AUTHORITATIVE </dt>
3575<dd class="description">Information isn't authoritative</dd>
3576<dt>HTTP_NOT_FOUND </dt>
3577<dd class="description">URI was not found</dd>
3578<dt>HTTP_NOT_IMPLEMENTED </dt>
3579<dd class="description">Feature not implemented</dd>
3580<dt>HTTP_NOT_MODIFIED </dt>
3581<dd class="description">File not modified</dd>
3582<dt>HTTP_NOT_SUPPORTED </dt>
3583<dd class="description">HTTP version not supported</dd>
3584<dt>HTTP_NO_CONTENT </dt>
3585<dd class="description">Successful command, no new data</dd>
3586<dt>HTTP_OK </dt>
3587<dd class="description">OPTIONS/GET/HEAD/POST/TRACE command was successful</dd>
3588<dt>HTTP_PARTIAL_CONTENT </dt>
3589<dd class="description">Only a partial file was recieved/sent</dd>
3590<dt>HTTP_PAYMENT_REQUIRED </dt>
3591<dd class="description">Payment required</dd>
3592<dt>HTTP_PRECONDITION </dt>
3593<dd class="description">Precondition failed</dd>
3594<dt>HTTP_PROXY_AUTHENTICATION </dt>
3595<dd class="description">Proxy Authentication is Required</dd>
3596<dt>HTTP_REQUESTED_RANGE </dt>
3597<dd class="description">The requested range is not satisfiable</dd>
3598<dt>HTTP_REQUEST_TIMEOUT </dt>
3599<dd class="description">Request timed out</dd>
3600<dt>HTTP_REQUEST_TOO_LARGE </dt>
3601<dd class="description">Request entity too large</dd>
3602<dt>HTTP_RESET_CONTENT </dt>
3603<dd class="description">Content was reset/recreated</dd>
3604<dt>HTTP_SEE_OTHER </dt>
3605<dd class="description">See this other link...</dd>
3606<dt>HTTP_SERVER_ERROR </dt>
3607<dd class="description">Internal server error</dd>
3608<dt>HTTP_SERVICE_UNAVAILABLE </dt>
3609<dd class="description">Service is unavailable</dd>
3610<dt>HTTP_SWITCHING_PROTOCOLS </dt>
3611<dd class="description">HTTP upgrade to TLS/SSL</dd>
3612<dt>HTTP_UNAUTHORIZED </dt>
3613<dd class="description">Unauthorized to access host</dd>
3614<dt>HTTP_UNSUPPORTED_MEDIATYPE </dt>
3615<dd class="description">The requested media type is unsupported</dd>
3616<dt>HTTP_UPGRADE_REQUIRED </dt>
3617<dd class="description">Upgrade to SSL/TLS required</dd>
3618<dt>HTTP_URI_TOO_LONG </dt>
3619<dd class="description">URI too long</dd>
3620<dt>HTTP_USE_PROXY </dt>
3621<dd class="description">Must use a proxy to access this URI</dd>
3622</dl>
3623<h3 class="enumeration"><a name="http_uri_coding_e">http_uri_coding_e</a></h3>
3624<p class="description"></p>
3625<h4 class="constants">Constants</h4>
3626<dl>
3627<dt>HTTP_URI_CODING_ALL </dt>
3628<dd class="description">En/decode everything</dd>
3629<dt>HTTP_URI_CODING_HOSTNAME </dt>
3630<dd class="description">En/decode the hostname portion</dd>
3631<dt>HTTP_URI_CODING_MOST </dt>
3632<dd class="description">En/decode all but the query</dd>
3633<dt>HTTP_URI_CODING_NONE </dt>
3634<dd class="description">Don't en/decode anything</dd>
3635<dt>HTTP_URI_CODING_QUERY </dt>
3636<dd class="description">En/decode the query portion</dd>
3637<dt>HTTP_URI_CODING_RESOURCE </dt>
3638<dd class="description">En/decode the resource portion</dd>
3639<dt>HTTP_URI_CODING_USERNAME </dt>
3640<dd class="description">En/decode the username portion</dd>
3641</dl>
3642<h3 class="enumeration"><a name="http_uri_status_e">http_uri_status_e</a></h3>
3643<p class="description"></p>
3644<h4 class="constants">Constants</h4>
3645<dl>
3646<dt>HTTP_URI_BAD_ARGUMENTS </dt>
3647<dd class="description">Bad arguments to function (error)</dd>
3648<dt>HTTP_URI_BAD_HOSTNAME </dt>
3649<dd class="description">Bad hostname in URI (error)</dd>
3650<dt>HTTP_URI_BAD_PORT </dt>
3651<dd class="description">Bad port number in URI (error)</dd>
3652<dt>HTTP_URI_BAD_RESOURCE </dt>
3653<dd class="description">Bad resource in URI (error)</dd>
3654<dt>HTTP_URI_BAD_SCHEME </dt>
3655<dd class="description">Bad scheme in URI (error)</dd>
3656<dt>HTTP_URI_BAD_URI </dt>
3657<dd class="description">Bad/empty URI (error)</dd>
3658<dt>HTTP_URI_BAD_USERNAME </dt>
3659<dd class="description">Bad username in URI (error)</dd>
3660<dt>HTTP_URI_MISSING_RESOURCE </dt>
3661<dd class="description">Missing resource in URI (warning)</dd>
3662<dt>HTTP_URI_MISSING_SCHEME </dt>
3663<dd class="description">Missing scheme in URI (warning)</dd>
3664<dt>HTTP_URI_OK </dt>
3665<dd class="description">URI decoded OK</dd>
3666<dt>HTTP_URI_OVERFLOW </dt>
3667<dd class="description">URI buffer for httpAssembleURI is too small</dd>
3668<dt>HTTP_URI_UNKNOWN_SCHEME </dt>
3669<dd class="description">Unknown scheme in URI (warning)</dd>
3670</dl>
3671<h3 class="enumeration"><a name="http_version_e">http_version_e</a></h3>
3672<p class="description"></p>
3673<h4 class="constants">Constants</h4>
3674<dl>
3675<dt>HTTP_0_9 </dt>
3676<dd class="description">HTTP/0.9</dd>
3677<dt>HTTP_1_0 </dt>
3678<dd class="description">HTTP/1.0</dd>
3679<dt>HTTP_1_1 </dt>
3680<dd class="description">HTTP/1.1</dd>
3681</dl>
3682<h3 class="enumeration"><a name="ipp_finish_e">ipp_finish_e</a></h3>
3683<p class="description"></p>
3684<h4 class="constants">Constants</h4>
3685<dl>
3686<dt>IPP_FINISHINGS_BALE </dt>
3687<dd class="description">Bale (any type)</dd>
3688<dt>IPP_FINISHINGS_BIND </dt>
3689<dd class="description">Bind</dd>
3690<dt>IPP_FINISHINGS_BIND_BOTTOM </dt>
3691<dd class="description">Bind on bottom</dd>
3692<dt>IPP_FINISHINGS_BIND_LEFT </dt>
3693<dd class="description">Bind on left</dd>
3694<dt>IPP_FINISHINGS_BIND_RIGHT </dt>
3695<dd class="description">Bind on right</dd>
3696<dt>IPP_FINISHINGS_BIND_TOP </dt>
3697<dd class="description">Bind on top</dd>
3698<dt>IPP_FINISHINGS_BOOKLET_MAKER </dt>
3699<dd class="description">Fold to make booklet</dd>
3700<dt>IPP_FINISHINGS_COVER </dt>
3701<dd class="description">Add cover</dd>
3702<dt>IPP_FINISHINGS_EDGE_STITCH </dt>
3703<dd class="description">Stitch along any side</dd>
3704<dt>IPP_FINISHINGS_EDGE_STITCH_BOTTOM </dt>
3705<dd class="description">Stitch along bottom edge</dd>
3706<dt>IPP_FINISHINGS_EDGE_STITCH_LEFT </dt>
3707<dd class="description">Stitch along left side</dd>
3708<dt>IPP_FINISHINGS_EDGE_STITCH_RIGHT </dt>
3709<dd class="description">Stitch along right side</dd>
3710<dt>IPP_FINISHINGS_EDGE_STITCH_TOP </dt>
3711<dd class="description">Stitch along top edge</dd>
3712<dt>IPP_FINISHINGS_FOLD </dt>
3713<dd class="description">Fold (any type)</dd>
3714<dt>IPP_FINISHINGS_JOB_OFFSET </dt>
3715<dd class="description">Offset for binding (any type)</dd>
3716<dt>IPP_FINISHINGS_NONE </dt>
3717<dd class="description">No finishing</dd>
3718<dt>IPP_FINISHINGS_PUNCH </dt>
3719<dd class="description">Punch (any location/count)</dd>
3720<dt>IPP_FINISHINGS_SADDLE_STITCH </dt>
3721<dd class="description">Staple interior</dd>
3722<dt>IPP_FINISHINGS_STAPLE </dt>
3723<dd class="description">Staple (any location)</dd>
3724<dt>IPP_FINISHINGS_STAPLE_BOTTOM_LEFT </dt>
3725<dd class="description">Staple bottom left corner</dd>
3726<dt>IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT </dt>
3727<dd class="description">Staple bottom right corner</dd>
3728<dt>IPP_FINISHINGS_STAPLE_DUAL_BOTTOM </dt>
3729<dd class="description">Two staples on bottom</dd>
3730<dt>IPP_FINISHINGS_STAPLE_DUAL_LEFT </dt>
3731<dd class="description">Two staples on left</dd>
3732<dt>IPP_FINISHINGS_STAPLE_DUAL_RIGHT </dt>
3733<dd class="description">Two staples on right</dd>
3734<dt>IPP_FINISHINGS_STAPLE_DUAL_TOP </dt>
3735<dd class="description">Two staples on top</dd>
3736<dt>IPP_FINISHINGS_STAPLE_TOP_LEFT </dt>
3737<dd class="description">Staple top left corner</dd>
3738<dt>IPP_FINISHINGS_STAPLE_TOP_RIGHT </dt>
3739<dd class="description">Staple top right corner</dd>
3740<dt>IPP_FINISHINGS_TRIM </dt>
3741<dd class="description">Trim (any type)</dd>
3742</dl>
3743<h3 class="enumeration"><a name="ipp_jstate_e">ipp_jstate_e</a></h3>
3744<p class="description"></p>
3745<h4 class="constants">Constants</h4>
3746<dl>
3747<dt>IPP_JOB_ABORTED </dt>
3748<dd class="description">Job has aborted due to error</dd>
3749<dt>IPP_JOB_CANCELED </dt>
3750<dd class="description">Job has been canceled</dd>
3751<dt>IPP_JOB_COMPLETED </dt>
3752<dd class="description">Job has completed successfully</dd>
3753<dt>IPP_JOB_HELD </dt>
3754<dd class="description">Job is held for printing</dd>
3755<dt>IPP_JOB_PENDING </dt>
3756<dd class="description">Job is waiting to be printed</dd>
3757<dt>IPP_JOB_PROCESSING </dt>
3758<dd class="description">Job is currently printing</dd>
3759<dt>IPP_JOB_STOPPED </dt>
3760<dd class="description">Job has been stopped</dd>
3761</dl>
3762<h3 class="enumeration"><a name="ipp_op_e">ipp_op_e</a></h3>
3763<p class="description"></p>
3764<h4 class="constants">Constants</h4>
3765<dl>
3766<dt>CUPS_ACCEPT_JOBS </dt>
3767<dd class="description">Accept new jobs on a printer</dd>
3768<dt>CUPS_ADD_MODIFY_CLASS </dt>
3769<dd class="description">Add or modify a class</dd>
3770<dt>CUPS_ADD_MODIFY_PRINTER </dt>
3771<dd class="description">Add or modify a printer</dd>
3772<dt>CUPS_AUTHENTICATE_JOB <span class="info">&nbsp;CUPS 1.2&nbsp;</span></dt>
3773<dd class="description">Authenticate a job </dd>
3774<dt>CUPS_DELETE_CLASS </dt>
3775<dd class="description">Delete a class</dd>
3776<dt>CUPS_DELETE_PRINTER </dt>
3777<dd class="description">Delete a printer</dd>
3778<dt>CUPS_GET_CLASSES <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
3779<dd class="description">Get a list of classes </dd>
3780<dt>CUPS_GET_DEFAULT </dt>
3781<dd class="description">Get the default printer</dd>
3782<dt>CUPS_GET_DEVICES </dt>
3783<dd class="description">Get a list of supported devices</dd>
3784<dt>CUPS_GET_DOCUMENT <span class="info">&nbsp;CUPS 1.4&nbsp;</span></dt>
3785<dd class="description">Get a document file </dd>
3786<dt>CUPS_GET_PPD <span class="info">&nbsp;CUPS 1.3&nbsp;</span></dt>
3787<dd class="description">Get a PPD file </dd>
3788<dt>CUPS_GET_PPDS </dt>
3789<dd class="description">Get a list of supported drivers</dd>
3790<dt>CUPS_GET_PRINTERS </dt>
3791<dd class="description">Get a list of printers and/or classes</dd>
3792<dt>CUPS_MOVE_JOB </dt>
3793<dd class="description">Move a job to a different printer</dd>
3794<dt>CUPS_REJECT_JOBS </dt>
3795<dd class="description">Reject new jobs on a printer</dd>
3796<dt>CUPS_SET_DEFAULT </dt>
3797<dd class="description">Set the default printer</dd>
3798<dt>IPP_CANCEL_JOB </dt>
3799<dd class="description">Cancel a job</dd>
3800<dt>IPP_CANCEL_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2&nbsp;</span></dt>
3801<dd class="description">Cancel a subscription </dd>
3802<dt>IPP_CREATE_JOB </dt>
3803<dd class="description">Create an empty print job</dd>
3804<dt>IPP_CREATE_JOB_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2&nbsp;</span></dt>
3805<dd class="description">Create a job subscription </dd>
3806<dt>IPP_CREATE_PRINTER_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2&nbsp;</span></dt>
3807<dd class="description">Create a printer subscription </dd>
3808<dt>IPP_DISABLE_PRINTER </dt>
3809<dd class="description">Stop a printer</dd>
3810<dt>IPP_ENABLE_PRINTER </dt>
3811<dd class="description">Start a printer</dd>
3812<dt>IPP_GET_JOBS </dt>
3813<dd class="description">Get a list of jobs</dd>
3814<dt>IPP_GET_JOB_ATTRIBUTES </dt>
3815<dd class="description">Get job attributes</dd>
3816<dt>IPP_GET_NOTIFICATIONS <span class="info">&nbsp;CUPS 1.2&nbsp;</span></dt>
3817<dd class="description">Get notification events </dd>
3818<dt>IPP_GET_PRINTER_ATTRIBUTES </dt>
3819<dd class="description">Get printer attributes</dd>
3820<dt>IPP_GET_PRINTER_SUPPORTED_VALUES </dt>
3821<dd class="description">Get supported attribute values</dd>
3822<dt>IPP_GET_SUBSCRIPTIONS <span class="info">&nbsp;CUPS 1.2&nbsp;</span></dt>
3823<dd class="description">Get list of subscriptions </dd>
3824<dt>IPP_GET_SUBSCRIPTION_ATTRIBUTES <span class="info">&nbsp;CUPS 1.2&nbsp;</span></dt>
3825<dd class="description">Get subscription attributes </dd>
3826<dt>IPP_HOLD_JOB </dt>
3827<dd class="description">Hold a job for printing</dd>
3828<dt>IPP_PAUSE_PRINTER </dt>
3829<dd class="description">Stop a printer</dd>
3830<dt>IPP_PRINT_JOB </dt>
3831<dd class="description">Print a single file</dd>
3832<dt>IPP_PURGE_JOBS </dt>
3833<dd class="description">Cancel all jobs</dd>
3834<dt>IPP_RELEASE_JOB </dt>
3835<dd class="description">Release a job for printing</dd>
3836<dt>IPP_RENEW_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2&nbsp;</span></dt>
3837<dd class="description">Renew a printer subscription </dd>
3838<dt>IPP_RESTART_JOB </dt>
3839<dd class="description">Reprint a job</dd>
3840<dt>IPP_RESUME_PRINTER </dt>
3841<dd class="description">Start a printer</dd>
3842<dt>IPP_SEND_DOCUMENT </dt>
3843<dd class="description">Add a file to a job</dd>
3844<dt>IPP_SET_JOB_ATTRIBUTES </dt>
3845<dd class="description">Set job attributes</dd>
3846<dt>IPP_VALIDATE_JOB </dt>
3847<dd class="description">Validate job options</dd>
3848</dl>
3849<h3 class="enumeration"><a name="ipp_orient_e">ipp_orient_e</a></h3>
3850<p class="description"></p>
3851<h4 class="constants">Constants</h4>
3852<dl>
3853<dt>IPP_LANDSCAPE </dt>
3854<dd class="description">90 degrees counter-clockwise</dd>
3855<dt>IPP_PORTRAIT </dt>
3856<dd class="description">No rotation</dd>
3857<dt>IPP_REVERSE_LANDSCAPE </dt>
3858<dd class="description">90 degrees clockwise</dd>
3859<dt>IPP_REVERSE_PORTRAIT </dt>
3860<dd class="description">180 degrees</dd>
3861</dl>
3862<h3 class="enumeration"><a name="ipp_pstate_e">ipp_pstate_e</a></h3>
3863<p class="description"></p>
3864<h4 class="constants">Constants</h4>
3865<dl>
3866<dt>IPP_PRINTER_IDLE </dt>
3867<dd class="description">Printer is idle</dd>
3868<dt>IPP_PRINTER_PROCESSING </dt>
3869<dd class="description">Printer is working</dd>
3870<dt>IPP_PRINTER_STOPPED </dt>
3871<dd class="description">Printer is stopped</dd>
3872</dl>
3873<h3 class="enumeration"><a name="ipp_quality_e">ipp_quality_e</a></h3>
3874<p class="description"></p>
3875<h4 class="constants">Constants</h4>
3876<dl>
3877<dt>IPP_QUALITY_DRAFT </dt>
3878<dd class="description">Draft quality</dd>
3879<dt>IPP_QUALITY_HIGH </dt>
3880<dd class="description">High quality</dd>
3881<dt>IPP_QUALITY_NORMAL </dt>
3882<dd class="description">Normal quality</dd>
3883</dl>
3884<h3 class="enumeration"><a name="ipp_res_e">ipp_res_e</a></h3>
3885<p class="description">Types and structures...</p>
3886<h4 class="constants">Constants</h4>
3887<dl>
3888<dt>IPP_RES_PER_CM </dt>
3889<dd class="description">Pixels per centimeter</dd>
3890<dt>IPP_RES_PER_INCH </dt>
3891<dd class="description">Pixels per inch</dd>
3892</dl>
3893<h3 class="enumeration"><a name="ipp_state_e">ipp_state_e</a></h3>
3894<p class="description"></p>
3895<h4 class="constants">Constants</h4>
3896<dl>
3897<dt>IPP_ATTRIBUTE </dt>
3898<dd class="description">One or more attributes need to be sent/received</dd>
3899<dt>IPP_DATA </dt>
3900<dd class="description">IPP request data needs to be sent/received</dd>
3901<dt>IPP_ERROR </dt>
3902<dd class="description">An error occurred</dd>
3903<dt>IPP_HEADER </dt>
3904<dd class="description">The request header needs to be sent/received</dd>
3905<dt>IPP_IDLE </dt>
3906<dd class="description">Nothing is happening/request completed</dd>
3907</dl>
3908<h3 class="enumeration"><a name="ipp_status_e">ipp_status_e</a></h3>
3909<p class="description">IPP status codes...</p>
3910<h4 class="constants">Constants</h4>
3911<dl>
3912<dt>CUPS_SEE_OTHER </dt>
3913<dd class="description">cups-see-other</dd>
3914<dt>IPP_ATTRIBUTES </dt>
3915<dd class="description">client-error-attributes-or-values-not-supported</dd>
3916<dt>IPP_ATTRIBUTES_NOT_SETTABLE </dt>
3917<dd class="description">client-error-attributes-not-settable</dd>
3918<dt>IPP_BAD_REQUEST </dt>
3919<dd class="description">client-error-bad-request</dd>
3920<dt>IPP_CHARSET </dt>
3921<dd class="description">client-error-charset-not-supported</dd>
3922<dt>IPP_COMPRESSION_ERROR </dt>
3923<dd class="description">client-error-compression-error</dd>
3924<dt>IPP_COMPRESSION_NOT_SUPPORTED </dt>
3925<dd class="description">client-error-compression-not-supported</dd>
3926<dt>IPP_CONFLICT </dt>
3927<dd class="description">client-error-conflicting-attributes</dd>
3928<dt>IPP_DEVICE_ERROR </dt>
3929<dd class="description">server-error-device-error</dd>
3930<dt>IPP_DOCUMENT_ACCESS_ERROR </dt>
3931<dd class="description">client-error-document-access-error</dd>
3932<dt>IPP_DOCUMENT_FORMAT </dt>
3933<dd class="description">client-error-document-format-not-supported</dd>
3934<dt>IPP_DOCUMENT_FORMAT_ERROR </dt>
3935<dd class="description">client-error-document-format-error</dd>
3936<dt>IPP_ERROR_JOB_CANCELED </dt>
3937<dd class="description">server-error-job-canceled</dd>
3938<dt>IPP_FORBIDDEN </dt>
3939<dd class="description">client-error-forbidden</dd>
3940<dt>IPP_GONE </dt>
3941<dd class="description">client-error-gone</dd>
3942<dt>IPP_IGNORED_ALL_NOTIFICATIONS </dt>
3943<dd class="description">client-error-ignored-all-notifications</dd>
3944<dt>IPP_IGNORED_ALL_SUBSCRIPTIONS </dt>
3945<dd class="description">client-error-ignored-all-subscriptions</dd>
3946<dt>IPP_INTERNAL_ERROR </dt>
3947<dd class="description">server-error-internal-error</dd>
3948<dt>IPP_MULTIPLE_JOBS_NOT_SUPPORTED </dt>
3949<dd class="description">server-error-multiple-document-jobs-not-supported</dd>
3950<dt>IPP_NOT_ACCEPTING </dt>
3951<dd class="description">server-error-not-accepting-jobs</dd>
3952<dt>IPP_NOT_AUTHENTICATED </dt>
3953<dd class="description">client-error-not-authenticated</dd>
3954<dt>IPP_NOT_AUTHORIZED </dt>
3955<dd class="description">client-error-not-authorized</dd>
3956<dt>IPP_NOT_FOUND </dt>
3957<dd class="description">client-error-not-found</dd>
3958<dt>IPP_NOT_POSSIBLE </dt>
3959<dd class="description">client-error-not-possible</dd>
3960<dt>IPP_OK </dt>
3961<dd class="description">successful-ok</dd>
3962<dt>IPP_OK_BUT_CANCEL_SUBSCRIPTION </dt>
3963<dd class="description">successful-ok-but-cancel-subscription</dd>
3964<dt>IPP_OK_CONFLICT </dt>
3965<dd class="description">successful-ok-conflicting-attributes</dd>
3966<dt>IPP_OK_EVENTS_COMPLETE </dt>
3967<dd class="description">successful-ok-events-complete</dd>
3968<dt>IPP_OK_IGNORED_NOTIFICATIONS </dt>
3969<dd class="description">successful-ok-ignored-notifications</dd>
3970<dt>IPP_OK_IGNORED_SUBSCRIPTIONS </dt>
3971<dd class="description">successful-ok-ignored-subscriptions</dd>
3972<dt>IPP_OK_SUBST </dt>
3973<dd class="description">successful-ok-ignored-or-substituted-attributes</dd>
3974<dt>IPP_OK_TOO_MANY_EVENTS </dt>
3975<dd class="description">successful-ok-too-many-events</dd>
3976<dt>IPP_OPERATION_NOT_SUPPORTED </dt>
3977<dd class="description">server-error-operation-not-supported</dd>
3978<dt>IPP_PRINTER_BUSY </dt>
3979<dd class="description">server-error-busy</dd>
3980<dt>IPP_PRINTER_IS_DEACTIVATED </dt>
3981<dd class="description">server-error-printer-is-deactivated</dd>
3982<dt>IPP_PRINT_SUPPORT_FILE_NOT_FOUND </dt>
3983<dd class="description">client-error-print-support-file-not-found</dd>
3984<dt>IPP_REQUEST_ENTITY </dt>
3985<dd class="description">client-error-request-entity-too-large</dd>
3986<dt>IPP_REQUEST_VALUE </dt>
3987<dd class="description">client-error-request-value-too-long</dd>
3988<dt>IPP_SERVICE_UNAVAILABLE </dt>
3989<dd class="description">server-error-service-unavailable</dd>
3990<dt>IPP_TEMPORARY_ERROR </dt>
3991<dd class="description">server-error-temporary-error</dd>
3992<dt>IPP_TIMEOUT </dt>
3993<dd class="description">client-error-timeout</dd>
3994<dt>IPP_TOO_MANY_SUBSCRIPTIONS </dt>
3995<dd class="description">client-error-too-many-subscriptions</dd>
3996<dt>IPP_URI_SCHEME </dt>
3997<dd class="description">client-error-uri-scheme-not-supported</dd>
3998<dt>IPP_VERSION_NOT_SUPPORTED </dt>
3999<dd class="description">server-error-version-not-supported</dd>
4000</dl>
4001<h3 class="enumeration"><a name="ipp_tag_e">ipp_tag_e</a></h3>
4002<p class="description">Format tags for attributes...</p>
4003<h4 class="constants">Constants</h4>
4004<dl>
4005<dt>IPP_TAG_ADMINDEFINE </dt>
4006<dd class="description">Admin-defined value</dd>
4007<dt>IPP_TAG_BEGIN_COLLECTION </dt>
4008<dd class="description">Beginning of collection value</dd>
4009<dt>IPP_TAG_BOOLEAN </dt>
4010<dd class="description">Boolean value</dd>
4011<dt>IPP_TAG_CHARSET </dt>
4012<dd class="description">Character set value</dd>
4013<dt>IPP_TAG_COPY </dt>
4014<dd class="description">Bitflag for copied attribute values</dd>
4015<dt>IPP_TAG_DATE </dt>
4016<dd class="description">Date/time value</dd>
4017<dt>IPP_TAG_DEFAULT </dt>
4018<dd class="description">Default value</dd>
4019<dt>IPP_TAG_DELETEATTR </dt>
4020<dd class="description">Delete-attribute value</dd>
4021<dt>IPP_TAG_END </dt>
4022<dd class="description">End-of-attributes</dd>
4023<dt>IPP_TAG_END_COLLECTION </dt>
4024<dd class="description">End of collection value</dd>
4025<dt>IPP_TAG_ENUM </dt>
4026<dd class="description">Enumeration value</dd>
4027<dt>IPP_TAG_EVENT_NOTIFICATION </dt>
4028<dd class="description">Event group</dd>
4029<dt>IPP_TAG_INTEGER </dt>
4030<dd class="description">Integer value</dd>
4031<dt>IPP_TAG_JOB </dt>
4032<dd class="description">Job group</dd>
4033<dt>IPP_TAG_KEYWORD </dt>
4034<dd class="description">Keyword value</dd>
4035<dt>IPP_TAG_LANGUAGE </dt>
4036<dd class="description">Language value</dd>
4037<dt>IPP_TAG_MASK </dt>
4038<dd class="description">Mask for copied attribute values</dd>
4039<dt>IPP_TAG_MEMBERNAME </dt>
4040<dd class="description">Collection member name value</dd>
4041<dt>IPP_TAG_MIMETYPE </dt>
4042<dd class="description">MIME media type value</dd>
4043<dt>IPP_TAG_NAME </dt>
4044<dd class="description">Name value</dd>
4045<dt>IPP_TAG_NAMELANG </dt>
4046<dd class="description">Name-with-language value</dd>
4047<dt>IPP_TAG_NOTSETTABLE </dt>
4048<dd class="description">Not-settable value</dd>
4049<dt>IPP_TAG_NOVALUE </dt>
4050<dd class="description">No-value value</dd>
4051<dt>IPP_TAG_OPERATION </dt>
4052<dd class="description">Operation group</dd>
4053<dt>IPP_TAG_PRINTER </dt>
4054<dd class="description">Printer group</dd>
4055<dt>IPP_TAG_RANGE </dt>
4056<dd class="description">Range value</dd>
4057<dt>IPP_TAG_RESOLUTION </dt>
4058<dd class="description">Resolution value</dd>
4059<dt>IPP_TAG_STRING </dt>
4060<dd class="description">Octet string value</dd>
4061<dt>IPP_TAG_SUBSCRIPTION </dt>
4062<dd class="description">Subscription group</dd>
4063<dt>IPP_TAG_TEXT </dt>
4064<dd class="description">Text value</dd>
4065<dt>IPP_TAG_TEXTLANG </dt>
4066<dd class="description">Text-with-language value</dd>
4067<dt>IPP_TAG_UNKNOWN </dt>
4068<dd class="description">Unknown value</dd>
4069<dt>IPP_TAG_UNSUPPORTED_GROUP </dt>
4070<dd class="description">Unsupported attributes group</dd>
4071<dt>IPP_TAG_UNSUPPORTED_VALUE </dt>
4072<dd class="description">Unsupported value</dd>
4073<dt>IPP_TAG_URI </dt>
4074<dd class="description">URI value</dd>
4075<dt>IPP_TAG_URISCHEME </dt>
4076<dd class="description">URI scheme value</dd>
4077<dt>IPP_TAG_ZERO </dt>
4078<dd class="description">Zero tag - used for separators</dd>
4079</dl>
4080</div>
ef416fc2 4081</body>
4082</html>