]> git.ipfire.org Git - thirdparty/cups.git/blame - doc/help/api-httpipp.html
Load cups into easysw/current.
[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>
5 <title>HTTP and IPP APIs</title>
6 <meta name='keywords' content='Programming'>
7 <meta name='creator' content='Mini-XML v2.3'>
8 <style type='text/css'><!--
9 h1, h2, h3, p { font-family: sans-serif; text-align: justify; }
10 tt, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; }
11 pre { font-weight: bold; color: #7f0000; margin-left: 2em; }
12 span.info { background: #000000; border: solid thin #000000; color: #ffffff; font-size: 80%; font-style: italic; font-weight: bold; white-space: nowrap; }
13 h3 span.info { float: right; font-size: 100%; }
14 h1.title, h2.title, h3.title { border-bottom: solid 2px #000000; }
15 --></style>
16</head>
17<body>
18<!--
f7faf1f5 19 "$Id: api-httpipp.shtml 5138 2006-02-21 10:49:06Z mike $"
ef416fc2 20
21 HTTP and IPP API introduction for the Common UNIX Printing System (CUPS).
22
ecdc0628 23 Copyright 1997-2006 by Easy Software Products.
ef416fc2 24
25 These coded instructions, statements, and computer programs are the
26 property of Easy Software Products and are protected by Federal
27 copyright law. Distribution and use rights are outlined in the file
28 "LICENSE.txt" which should have been included with this file. If this
29 file is missing or damaged please contact Easy Software Products
30 at:
31
32 Attn: CUPS Licensing Information
33 Easy Software Products
34 44141 Airport View Drive, Suite 204
35 Hollywood, Maryland 20636 USA
36
37 Voice: (301) 373-9600
38 EMail: cups-info@cups.org
39 WWW: http://www.cups.org
40-->
41
42<h2 class='title'>Introduction</h2>
43
ecdc0628 44<p>The CUPS HTTP and IPP APIs provide low-level access to the
45HTTP and IPP protocols and CUPS scheduler. They are typically
46used by monitoring and administration programs to perform
47specific functions not supported by the high-level CUPS API
48functions.</p>
ef416fc2 49
50<h2 class='title'>General Usage</h2>
51
52<p>The <var>&lt;cups/cups.h&gt;</var> header file must be included to
53use the HTTP and IPP functions.</p>
54
55<p>Programs using these functions must be linked to the CUPS
56library: <var>libcups.a</var>, <var>libcups.so.2</var>,
57<var>libcups.2.dylib</var>, <var>libcups_s.a</var>, or
58<var>libcups2.lib</var> depending on the platform. The following
59command compiles <var>myprogram.c</var> using GCC and the CUPS
60library:</p>
61
62<pre class='command'>
63<kbd>gcc -o myprogram myprogram.c -lcups</kbd>
64</pre>
65
66<h2 class='title'>Compatibility</h2>
67
68<p>Unless otherwise specified, the HTTP and IPP API functions
69require CUPS 1.1 or higher.</p>
70<h2 class='title'>Contents</h2>
71<ul>
72 <li><a href='#ENUMERATIONS'>Enumerations</a></li>
73 <li><a href='#FUNCTIONS'>Functions</a></li>
74 <li><a href='#STRUCTURES'>Structures</a></li>
75 <li><a href='#TYPES'>Types</a></li>
ecdc0628 76 <li><a href='#UNIONS'>Unions</a></li>
ef416fc2 77</ul>
78<!-- NEW PAGE -->
79<h2 class='title'><a name='ENUMERATIONS'>Enumerations</a></h2>
80<ul>
ef416fc2 81 <li><a href='#http_auth_e'><tt>http_auth_e</tt></a> </li>
82 <li><a href='#http_encoding_e'><tt>http_encoding_e</tt></a> </li>
83 <li><a href='#http_encryption_e'><tt>http_encryption_e</tt></a> </li>
84 <li><a href='#http_field_e'><tt>http_field_e</tt></a> </li>
85 <li><a href='#http_keepalive_e'><tt>http_keepalive_e</tt></a> </li>
86 <li><a href='#http_status_e'><tt>http_status_e</tt></a> </li>
ecdc0628 87 <li><a href='#ipp_res_e'><tt>ipp_res_e</tt></a> </li>
88 <li><a href='#ipp_status_e'><tt>ipp_status_e</tt></a> </li>
89 <li><a href='#ipp_tag_e'><tt>ipp_tag_e</tt></a> </li>
ef416fc2 90</ul>
91<!-- NEW PAGE -->
ef416fc2 92<h3 class='title'><a name='http_auth_e'>http_auth_e</a></h3>
93<h4>Description</h4>
94<p>HTTP authentication types</p>
95<h4>Values</h4>
96<div class='table'><table align='center' border='1' width='80%'>
97<thead><tr><th>Name</th><th>Description</th></tr></thead>
98<tbody>
99<tr><td><tt>HTTP_AUTH_BASIC</tt> </td><td>Basic authentication in use</td></tr>
100<tr><td><tt>HTTP_AUTH_MD5</tt> </td><td>Digest authentication in use</td></tr>
101<tr><td><tt>HTTP_AUTH_MD5_INT</tt> </td><td>Digest authentication in use for body</td></tr>
102<tr><td><tt>HTTP_AUTH_MD5_SESS</tt> </td><td>MD5-session authentication in use</td></tr>
103<tr><td><tt>HTTP_AUTH_MD5_SESS_INT</tt> </td><td>MD5-session authentication in use for body</td></tr>
f7deaa1a 104<tr><td><tt>HTTP_AUTH_NEGOTIATE</tt> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></td><td>GSSAPI authentication in use </td></tr>
ef416fc2 105<tr><td><tt>HTTP_AUTH_NONE</tt> </td><td>No authentication in use</td></tr>
106</tbody></table></div>
107<!-- NEW PAGE -->
108<h3 class='title'><a name='http_encoding_e'>http_encoding_e</a></h3>
109<h4>Description</h4>
110<p>HTTP transfer encoding values</p>
111<h4>Values</h4>
112<div class='table'><table align='center' border='1' width='80%'>
113<thead><tr><th>Name</th><th>Description</th></tr></thead>
114<tbody>
115<tr><td><tt>HTTP_ENCODE_CHUNKED</tt> </td><td>Data is chunked</td></tr>
2abf387c 116<tr><td><tt>HTTP_ENCODE_FIELDS</tt> </td><td>Sending HTTP fields</td></tr>
ef416fc2 117<tr><td><tt>HTTP_ENCODE_LENGTH</tt> </td><td>Data is sent with Content-Length</td></tr>
118</tbody></table></div>
119<!-- NEW PAGE -->
120<h3 class='title'><a name='http_encryption_e'>http_encryption_e</a></h3>
121<h4>Description</h4>
122<p>HTTP encryption values</p>
123<h4>Values</h4>
124<div class='table'><table align='center' border='1' width='80%'>
125<thead><tr><th>Name</th><th>Description</th></tr></thead>
126<tbody>
127<tr><td><tt>HTTP_ENCRYPT_ALWAYS</tt> </td><td>Always encrypt (SSL)</td></tr>
128<tr><td><tt>HTTP_ENCRYPT_IF_REQUESTED</tt> </td><td>Encrypt if requested (TLS upgrade)</td></tr>
129<tr><td><tt>HTTP_ENCRYPT_NEVER</tt> </td><td>Never encrypt</td></tr>
130<tr><td><tt>HTTP_ENCRYPT_REQUIRED</tt> </td><td>Encryption is required (TLS upgrade)</td></tr>
131</tbody></table></div>
132<!-- NEW PAGE -->
133<h3 class='title'><a name='http_field_e'>http_field_e</a></h3>
134<h4>Description</h4>
135<p>HTTP field names</p>
136<h4>Values</h4>
137<div class='table'><table align='center' border='1' width='80%'>
138<thead><tr><th>Name</th><th>Description</th></tr></thead>
139<tbody>
140<tr><td><tt>HTTP_FIELD_ACCEPT_LANGUAGE</tt> </td><td>Accept-Language field</td></tr>
141<tr><td><tt>HTTP_FIELD_ACCEPT_RANGES</tt> </td><td>Accept-Ranges field</td></tr>
142<tr><td><tt>HTTP_FIELD_AUTHORIZATION</tt> </td><td>Authorization field</td></tr>
143<tr><td><tt>HTTP_FIELD_CONNECTION</tt> </td><td>Connection field</td></tr>
144<tr><td><tt>HTTP_FIELD_CONTENT_ENCODING</tt> </td><td>Content-Encoding field</td></tr>
145<tr><td><tt>HTTP_FIELD_CONTENT_LANGUAGE</tt> </td><td>Content-Language field</td></tr>
146<tr><td><tt>HTTP_FIELD_CONTENT_LENGTH</tt> </td><td>Content-Length field</td></tr>
147<tr><td><tt>HTTP_FIELD_CONTENT_LOCATION</tt> </td><td>Content-Location field</td></tr>
148<tr><td><tt>HTTP_FIELD_CONTENT_MD5</tt> </td><td>Content-MD5 field</td></tr>
149<tr><td><tt>HTTP_FIELD_CONTENT_RANGE</tt> </td><td>Content-Range field</td></tr>
150<tr><td><tt>HTTP_FIELD_CONTENT_TYPE</tt> </td><td>Content-Type field</td></tr>
151<tr><td><tt>HTTP_FIELD_CONTENT_VERSION</tt> </td><td>Content-Version field</td></tr>
152<tr><td><tt>HTTP_FIELD_DATE</tt> </td><td>Date field</td></tr>
153<tr><td><tt>HTTP_FIELD_HOST</tt> </td><td>Host field</td></tr>
154<tr><td><tt>HTTP_FIELD_IF_MODIFIED_SINCE</tt> </td><td>If-Modified-Since field</td></tr>
155<tr><td><tt>HTTP_FIELD_IF_UNMODIFIED_SINCE</tt> </td><td>If-Unmodified-Since field</td></tr>
156<tr><td><tt>HTTP_FIELD_KEEP_ALIVE</tt> </td><td>Keep-Alive field</td></tr>
157<tr><td><tt>HTTP_FIELD_LAST_MODIFIED</tt> </td><td>Last-Modified field</td></tr>
158<tr><td><tt>HTTP_FIELD_LINK</tt> </td><td>Link field</td></tr>
159<tr><td><tt>HTTP_FIELD_LOCATION</tt> </td><td>Location field</td></tr>
160<tr><td><tt>HTTP_FIELD_MAX</tt> </td><td>Maximum field index</td></tr>
161<tr><td><tt>HTTP_FIELD_RANGE</tt> </td><td>Range field</td></tr>
162<tr><td><tt>HTTP_FIELD_REFERER</tt> </td><td>Referer field</td></tr>
163<tr><td><tt>HTTP_FIELD_RETRY_AFTER</tt> </td><td>Retry-After field</td></tr>
164<tr><td><tt>HTTP_FIELD_TRANSFER_ENCODING</tt> </td><td>Transfer-Encoding field</td></tr>
165<tr><td><tt>HTTP_FIELD_UNKNOWN</tt> </td><td>Unknown field</td></tr>
166<tr><td><tt>HTTP_FIELD_UPGRADE</tt> </td><td>Upgrade field</td></tr>
167<tr><td><tt>HTTP_FIELD_USER_AGENT</tt> </td><td>User-Agent field</td></tr>
168<tr><td><tt>HTTP_FIELD_WWW_AUTHENTICATE</tt> </td><td>WWW-Authenticate field</td></tr>
169</tbody></table></div>
170<!-- NEW PAGE -->
171<h3 class='title'><a name='http_keepalive_e'>http_keepalive_e</a></h3>
172<h4>Description</h4>
173<p>Types and structures...</p>
174<h4>Values</h4>
175<div class='table'><table align='center' border='1' width='80%'>
176<thead><tr><th>Name</th><th>Description</th></tr></thead>
177<tbody>
178<tr><td><tt>HTTP_KEEPALIVE_OFF</tt> </td><td>No keep alive support</td></tr>
179<tr><td><tt>HTTP_KEEPALIVE_ON</tt> </td><td>Use keep alive</td></tr>
180</tbody></table></div>
181<!-- NEW PAGE -->
182<h3 class='title'><a name='http_status_e'>http_status_e</a></h3>
183<h4>Description</h4>
184<p>HTTP status codes</p>
185<h4>Values</h4>
186<div class='table'><table align='center' border='1' width='80%'>
187<thead><tr><th>Name</th><th>Description</th></tr></thead>
188<tbody>
189<tr><td><tt>HTTP_ACCEPTED</tt> </td><td>DELETE command was successful</td></tr>
190<tr><td><tt>HTTP_BAD_GATEWAY</tt> </td><td>Bad gateway</td></tr>
191<tr><td><tt>HTTP_BAD_REQUEST</tt> </td><td>Bad request</td></tr>
192<tr><td><tt>HTTP_CONFLICT</tt> </td><td>Request is self-conflicting</td></tr>
193<tr><td><tt>HTTP_CONTINUE</tt> </td><td>Everything OK, keep going...</td></tr>
194<tr><td><tt>HTTP_CREATED</tt> </td><td>PUT command was successful</td></tr>
195<tr><td><tt>HTTP_ERROR</tt> </td><td>An error response from httpXxxx()</td></tr>
80ca4592 196<tr><td><tt>HTTP_EXPECTATION_FAILED</tt> </td><td>The expectation given in an Expect header field was not met</td></tr>
ef416fc2 197<tr><td><tt>HTTP_FORBIDDEN</tt> </td><td>Forbidden to access this URI</td></tr>
198<tr><td><tt>HTTP_GATEWAY_TIMEOUT</tt> </td><td>Gateway connection timed out</td></tr>
199<tr><td><tt>HTTP_GONE</tt> </td><td>Server has gone away</td></tr>
200<tr><td><tt>HTTP_LENGTH_REQUIRED</tt> </td><td>A content length or encoding is required</td></tr>
201<tr><td><tt>HTTP_METHOD_NOT_ALLOWED</tt> </td><td>Method is not allowed</td></tr>
202<tr><td><tt>HTTP_MOVED_PERMANENTLY</tt> </td><td>Document has moved permanently</td></tr>
203<tr><td><tt>HTTP_MOVED_TEMPORARILY</tt> </td><td>Document has moved temporarily</td></tr>
204<tr><td><tt>HTTP_MULTIPLE_CHOICES</tt> </td><td>Multiple files match request</td></tr>
205<tr><td><tt>HTTP_NOT_ACCEPTABLE</tt> </td><td>Not Acceptable</td></tr>
206<tr><td><tt>HTTP_NOT_AUTHORITATIVE</tt> </td><td>Information isn't authoritative</td></tr>
207<tr><td><tt>HTTP_NOT_FOUND</tt> </td><td>URI was not found</td></tr>
208<tr><td><tt>HTTP_NOT_IMPLEMENTED</tt> </td><td>Feature not implemented</td></tr>
209<tr><td><tt>HTTP_NOT_MODIFIED</tt> </td><td>File not modified</td></tr>
210<tr><td><tt>HTTP_NOT_SUPPORTED</tt> </td><td>HTTP version not supported</td></tr>
211<tr><td><tt>HTTP_NO_CONTENT</tt> </td><td>Successful command, no new data</td></tr>
212<tr><td><tt>HTTP_OK</tt> </td><td>OPTIONS/GET/HEAD/POST/TRACE command was successful</td></tr>
213<tr><td><tt>HTTP_PARTIAL_CONTENT</tt> </td><td>Only a partial file was recieved/sent</td></tr>
214<tr><td><tt>HTTP_PAYMENT_REQUIRED</tt> </td><td>Payment required</td></tr>
215<tr><td><tt>HTTP_PRECONDITION</tt> </td><td>Precondition failed</td></tr>
216<tr><td><tt>HTTP_PROXY_AUTHENTICATION</tt> </td><td>Proxy Authentication is Required</td></tr>
80ca4592 217<tr><td><tt>HTTP_REQUESTED_RANGE</tt> </td><td>The requested range is not satisfiable</td></tr>
ef416fc2 218<tr><td><tt>HTTP_REQUEST_TIMEOUT</tt> </td><td>Request timed out</td></tr>
219<tr><td><tt>HTTP_REQUEST_TOO_LARGE</tt> </td><td>Request entity too large</td></tr>
220<tr><td><tt>HTTP_RESET_CONTENT</tt> </td><td>Content was reset/recreated</td></tr>
221<tr><td><tt>HTTP_SEE_OTHER</tt> </td><td>See this other link...</td></tr>
222<tr><td><tt>HTTP_SERVER_ERROR</tt> </td><td>Internal server error</td></tr>
223<tr><td><tt>HTTP_SERVICE_UNAVAILABLE</tt> </td><td>Service is unavailable</td></tr>
224<tr><td><tt>HTTP_SWITCHING_PROTOCOLS</tt> </td><td>HTTP upgrade to TLS/SSL</td></tr>
225<tr><td><tt>HTTP_UNAUTHORIZED</tt> </td><td>Unauthorized to access host</td></tr>
226<tr><td><tt>HTTP_UNSUPPORTED_MEDIATYPE</tt> </td><td>The requested media type is unsupported</td></tr>
227<tr><td><tt>HTTP_UPGRADE_REQUIRED</tt> </td><td>Upgrade to SSL/TLS required</td></tr>
228<tr><td><tt>HTTP_URI_TOO_LONG</tt> </td><td>URI too long</td></tr>
229<tr><td><tt>HTTP_USE_PROXY</tt> </td><td>Must use a proxy to access this URI</td></tr>
230</tbody></table></div>
231<!-- NEW PAGE -->
ecdc0628 232<h3 class='title'><a name='ipp_res_e'>ipp_res_e</a></h3>
233<h4>Description</h4>
234<p>Types and structures...</p>
235<h4>Values</h4>
236<div class='table'><table align='center' border='1' width='80%'>
237<thead><tr><th>Name</th><th>Description</th></tr></thead>
238<tbody>
239<tr><td><tt>IPP_RES_PER_CM</tt> </td><td>Pixels per centimeter</td></tr>
240<tr><td><tt>IPP_RES_PER_INCH</tt> </td><td>Pixels per inch</td></tr>
241</tbody></table></div>
242<!-- NEW PAGE -->
243<h3 class='title'><a name='ipp_status_e'>ipp_status_e</a></h3>
244<h4>Description</h4>
245<p>IPP status codes...</p>
246<h4>Values</h4>
247<div class='table'><table align='center' border='1' width='80%'>
248<thead><tr><th>Name</th><th>Description</th></tr></thead>
249<tbody>
250<tr><td><tt>IPP_ATTRIBUTES</tt> </td><td>client-error-attributes-or-values-not-supported</td></tr>
251<tr><td><tt>IPP_ATTRIBUTES_NOT_SETTABLE</tt> </td><td>client-error-attributes-not-settable</td></tr>
252<tr><td><tt>IPP_BAD_REQUEST</tt> </td><td>client-error-bad-request</td></tr>
253<tr><td><tt>IPP_CHARSET</tt> </td><td>client-error-charset-not-supported</td></tr>
254<tr><td><tt>IPP_COMPRESSION_ERROR</tt> </td><td>client-error-compression-error</td></tr>
255<tr><td><tt>IPP_COMPRESSION_NOT_SUPPORTED</tt> </td><td>client-error-compression-not-supported</td></tr>
256<tr><td><tt>IPP_CONFLICT</tt> </td><td>client-error-conflicting-attributes</td></tr>
257<tr><td><tt>IPP_DEVICE_ERROR</tt> </td><td>server-error-device-error</td></tr>
258<tr><td><tt>IPP_DOCUMENT_ACCESS_ERROR</tt> </td><td>client-error-document-access-error</td></tr>
259<tr><td><tt>IPP_DOCUMENT_FORMAT</tt> </td><td>client-error-document-format-not-supported</td></tr>
260<tr><td><tt>IPP_DOCUMENT_FORMAT_ERROR</tt> </td><td>client-error-document-format-error</td></tr>
2abf387c 261<tr><td><tt>IPP_ERROR_JOB_CANCELED</tt> </td><td>server-error-job-canceled</td></tr>
ecdc0628 262<tr><td><tt>IPP_FORBIDDEN</tt> </td><td>client-error-forbidden</td></tr>
263<tr><td><tt>IPP_GONE</tt> </td><td>client-error-gone</td></tr>
264<tr><td><tt>IPP_IGNORED_ALL_NOTIFICATIONS</tt> </td><td>client-error-ignored-all-notifications</td></tr>
265<tr><td><tt>IPP_IGNORED_ALL_SUBSCRIPTIONS</tt> </td><td>client-error-ignored-all-subscriptions</td></tr>
266<tr><td><tt>IPP_INTERNAL_ERROR</tt> </td><td>server-error-internal-error</td></tr>
267<tr><td><tt>IPP_MULTIPLE_JOBS_NOT_SUPPORTED</tt> </td><td>server-error-multiple-document-jobs-not-supported</td></tr>
268<tr><td><tt>IPP_NOT_ACCEPTING</tt> </td><td>server-error-not-accepting-jobs</td></tr>
269<tr><td><tt>IPP_NOT_AUTHENTICATED</tt> </td><td>client-error-not-authenticated</td></tr>
270<tr><td><tt>IPP_NOT_AUTHORIZED</tt> </td><td>client-error-not-authorized</td></tr>
271<tr><td><tt>IPP_NOT_FOUND</tt> </td><td>client-error-not-found</td></tr>
272<tr><td><tt>IPP_NOT_POSSIBLE</tt> </td><td>client-error-not-possible</td></tr>
273<tr><td><tt>IPP_OK</tt> </td><td>successful-ok</td></tr>
274<tr><td><tt>IPP_OK_BUT_CANCEL_SUBSCRIPTION</tt> </td><td>successful-ok-but-cancel-subscription</td></tr>
275<tr><td><tt>IPP_OK_CONFLICT</tt> </td><td>successful-ok-conflicting-attributes</td></tr>
276<tr><td><tt>IPP_OK_EVENTS_COMPLETE</tt> </td><td>successful-ok-events-complete</td></tr>
277<tr><td><tt>IPP_OK_IGNORED_NOTIFICATIONS</tt> </td><td>successful-ok-ignored-notifications</td></tr>
278<tr><td><tt>IPP_OK_IGNORED_SUBSCRIPTIONS</tt> </td><td>successful-ok-ignored-subscriptions</td></tr>
279<tr><td><tt>IPP_OK_SUBST</tt> </td><td>successful-ok-ignored-or-substituted-attributes</td></tr>
280<tr><td><tt>IPP_OK_TOO_MANY_EVENTS</tt> </td><td>successful-ok-too-many-events</td></tr>
281<tr><td><tt>IPP_OPERATION_NOT_SUPPORTED</tt> </td><td>server-error-operation-not-supported</td></tr>
282<tr><td><tt>IPP_PRINTER_BUSY</tt> </td><td>server-error-busy</td></tr>
283<tr><td><tt>IPP_PRINTER_IS_DEACTIVATED</tt> </td><td>server-error-printer-is-deactivated</td></tr>
284<tr><td><tt>IPP_PRINT_SUPPORT_FILE_NOT_FOUND</tt> </td><td>client-error-print-support-file-not-found</td></tr>
285<tr><td><tt>IPP_REDIRECTION_OTHER_SITE</tt> </td><td></td></tr>
286<tr><td><tt>IPP_REQUEST_ENTITY</tt> </td><td>client-error-request-entity-too-large</td></tr>
287<tr><td><tt>IPP_REQUEST_VALUE</tt> </td><td>client-error-request-value-too-long</td></tr>
288<tr><td><tt>IPP_SERVICE_UNAVAILABLE</tt> </td><td>server-error-service-unavailable</td></tr>
289<tr><td><tt>IPP_TEMPORARY_ERROR</tt> </td><td>server-error-temporary-error</td></tr>
290<tr><td><tt>IPP_TIMEOUT</tt> </td><td>client-error-timeout</td></tr>
291<tr><td><tt>IPP_TOO_MANY_SUBSCRIPTIONS</tt> </td><td>client-error-too-many-subscriptions</td></tr>
292<tr><td><tt>IPP_URI_SCHEME</tt> </td><td>client-error-uri-scheme-not-supported</td></tr>
293<tr><td><tt>IPP_VERSION_NOT_SUPPORTED</tt> </td><td>server-error-version-not-supported</td></tr>
294</tbody></table></div>
295<!-- NEW PAGE -->
296<h3 class='title'><a name='ipp_tag_e'>ipp_tag_e</a></h3>
297<h4>Description</h4>
298<p>Format tags for attributes...</p>
299<h4>Values</h4>
300<div class='table'><table align='center' border='1' width='80%'>
301<thead><tr><th>Name</th><th>Description</th></tr></thead>
302<tbody>
303<tr><td><tt>IPP_TAG_ADMINDEFINE</tt> </td><td>Admin-defined value</td></tr>
304<tr><td><tt>IPP_TAG_BEGIN_COLLECTION</tt> </td><td>Beginning of collection value</td></tr>
305<tr><td><tt>IPP_TAG_BOOLEAN</tt> </td><td>Boolean value</td></tr>
306<tr><td><tt>IPP_TAG_CHARSET</tt> </td><td>Character set value</td></tr>
307<tr><td><tt>IPP_TAG_COPY</tt> </td><td>Bitflag for copied attribute values</td></tr>
308<tr><td><tt>IPP_TAG_DATE</tt> </td><td>Date/time value</td></tr>
309<tr><td><tt>IPP_TAG_DEFAULT</tt> </td><td>Default value</td></tr>
310<tr><td><tt>IPP_TAG_DELETEATTR</tt> </td><td>Delete-attribute value</td></tr>
311<tr><td><tt>IPP_TAG_END</tt> </td><td>End-of-attributes</td></tr>
312<tr><td><tt>IPP_TAG_END_COLLECTION</tt> </td><td>End of collection value</td></tr>
313<tr><td><tt>IPP_TAG_ENUM</tt> </td><td>Enumeration value</td></tr>
314<tr><td><tt>IPP_TAG_EVENT_NOTIFICATION</tt> </td><td>Event group</td></tr>
315<tr><td><tt>IPP_TAG_INTEGER</tt> </td><td>Integer value</td></tr>
316<tr><td><tt>IPP_TAG_JOB</tt> </td><td>Job group</td></tr>
317<tr><td><tt>IPP_TAG_KEYWORD</tt> </td><td>Keyword value</td></tr>
318<tr><td><tt>IPP_TAG_LANGUAGE</tt> </td><td>Language value</td></tr>
319<tr><td><tt>IPP_TAG_MASK</tt> </td><td>Mask for copied attribute values</td></tr>
320<tr><td><tt>IPP_TAG_MEMBERNAME</tt> </td><td>Collection member name value</td></tr>
321<tr><td><tt>IPP_TAG_MIMETYPE</tt> </td><td>MIME media type value</td></tr>
322<tr><td><tt>IPP_TAG_NAME</tt> </td><td>Name value</td></tr>
323<tr><td><tt>IPP_TAG_NAMELANG</tt> </td><td>Name-with-language value</td></tr>
324<tr><td><tt>IPP_TAG_NOTSETTABLE</tt> </td><td>Not-settable value</td></tr>
325<tr><td><tt>IPP_TAG_NOVALUE</tt> </td><td>No-value value</td></tr>
326<tr><td><tt>IPP_TAG_OPERATION</tt> </td><td>Operation group</td></tr>
327<tr><td><tt>IPP_TAG_PRINTER</tt> </td><td>Printer group</td></tr>
328<tr><td><tt>IPP_TAG_RANGE</tt> </td><td>Range value</td></tr>
329<tr><td><tt>IPP_TAG_RESOLUTION</tt> </td><td>Resolution value</td></tr>
330<tr><td><tt>IPP_TAG_STRING</tt> </td><td>Octet string value</td></tr>
331<tr><td><tt>IPP_TAG_SUBSCRIPTION</tt> </td><td>Subscription group</td></tr>
332<tr><td><tt>IPP_TAG_TEXT</tt> </td><td>Text value</td></tr>
333<tr><td><tt>IPP_TAG_TEXTLANG</tt> </td><td>Text-with-language value</td></tr>
334<tr><td><tt>IPP_TAG_UNKNOWN</tt> </td><td>Unknown value</td></tr>
335<tr><td><tt>IPP_TAG_UNSUPPORTED_GROUP</tt> </td><td>Unsupported attributes group</td></tr>
336<tr><td><tt>IPP_TAG_UNSUPPORTED_VALUE</tt> </td><td>Unsupported value</td></tr>
337<tr><td><tt>IPP_TAG_URI</tt> </td><td>URI value</td></tr>
338<tr><td><tt>IPP_TAG_URISCHEME</tt> </td><td>URI scheme value</td></tr>
339<tr><td><tt>IPP_TAG_ZERO</tt> </td><td>Zero tag - used for separators</td></tr>
340</tbody></table></div>
341<!-- NEW PAGE -->
ef416fc2 342<h2 class='title'><a name='FUNCTIONS'>Functions</a></h2>
343<ul>
ef416fc2 344 <li><a href='#cupsDoAuthentication'><tt>cupsDoAuthentication()</tt></a> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></li>
345 <li><a href='#cupsDoFileRequest'><tt>cupsDoFileRequest()</tt></a> </li>
ecdc0628 346 <li><a href='#cupsDoRequest'><tt>cupsDoRequest()</tt></a> </li>
ef416fc2 347 <li><a href='#cupsEncodeOptions'><tt>cupsEncodeOptions()</tt></a> </li>
348 <li><a href='#cupsEncodeOptions2'><tt>cupsEncodeOptions2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 349 <li><a href='#httpAddrAny'><tt>httpAddrAny()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
350 <li><a href='#httpAddrEqual'><tt>httpAddrEqual()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
351 <li><a href='#httpAddrLength'><tt>httpAddrLength()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
352 <li><a href='#httpAddrLocalhost'><tt>httpAddrLocalhost()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
353 <li><a href='#httpAddrLookup'><tt>httpAddrLookup()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
354 <li><a href='#httpAddrString'><tt>httpAddrString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
355 <li><a href='#httpAssembleURI'><tt>httpAssembleURI()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
356 <li><a href='#httpAssembleURIf'><tt>httpAssembleURIf()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ecdc0628 357 <li><a href='#httpBlocking'><tt>httpBlocking()</tt></a> </li>
ef416fc2 358 <li><a href='#httpCheck'><tt>httpCheck()</tt></a> </li>
359 <li><a href='#httpClearCookie'><tt>httpClearCookie()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
ecdc0628 360 <li><a href='#httpClearFields'><tt>httpClearFields()</tt></a> </li>
ef416fc2 361 <li><a href='#httpClose'><tt>httpClose()</tt></a> </li>
362 <li><a href='#httpConnect'><tt>httpConnect()</tt></a> </li>
363 <li><a href='#httpConnectEncrypt'><tt>httpConnectEncrypt()</tt></a> </li>
ecdc0628 364 <li><a href='#httpDecode64'><tt>httpDecode64()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
ef416fc2 365 <li><a href='#httpDecode64_2'><tt>httpDecode64_2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
366 <li><a href='#httpDelete'><tt>httpDelete()</tt></a> </li>
ecdc0628 367 <li><a href='#httpEncode64'><tt>httpEncode64()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
ef416fc2 368 <li><a href='#httpEncode64_2'><tt>httpEncode64_2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
369 <li><a href='#httpEncryption'><tt>httpEncryption()</tt></a> </li>
ecdc0628 370 <li><a href='#httpError'><tt>httpError()</tt></a> </li>
ef416fc2 371 <li><a href='#httpFlush'><tt>httpFlush()</tt></a> </li>
372 <li><a href='#httpFlushWrite'><tt>httpFlushWrite()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
373 <li><a href='#httpGet'><tt>httpGet()</tt></a> </li>
ecdc0628 374 <li><a href='#httpGetBlocking'><tt>httpGetBlocking()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
80ca4592 375 <li><a href='#httpGetCookie'><tt>httpGetCookie()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
ef416fc2 376 <li><a href='#httpGetDateString'><tt>httpGetDateString()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
377 <li><a href='#httpGetDateString2'><tt>httpGetDateString2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
378 <li><a href='#httpGetDateTime'><tt>httpGetDateTime()</tt></a> </li>
ecdc0628 379 <li><a href='#httpGetFd'><tt>httpGetFd()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
380 <li><a href='#httpGetField'><tt>httpGetField()</tt></a> </li>
ef416fc2 381 <li><a href='#httpGetHostByName'><tt>httpGetHostByName()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
382 <li><a href='#httpGetHostname'><tt>httpGetHostname()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ecdc0628 383 <li><a href='#httpGetLength'><tt>httpGetLength()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
384 <li><a href='#httpGetLength2'><tt>httpGetLength2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
385 <li><a href='#httpGetStatus'><tt>httpGetStatus()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 386 <li><a href='#httpGetSubField'><tt>httpGetSubField()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
387 <li><a href='#httpGetSubField2'><tt>httpGetSubField2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
388 <li><a href='#httpGets'><tt>httpGets()</tt></a> </li>
389 <li><a href='#httpHead'><tt>httpHead()</tt></a> </li>
390 <li><a href='#httpInitialize'><tt>httpInitialize()</tt></a> </li>
391 <li><a href='#httpMD5'><tt>httpMD5()</tt></a> </li>
392 <li><a href='#httpMD5Final'><tt>httpMD5Final()</tt></a> </li>
393 <li><a href='#httpMD5String'><tt>httpMD5String()</tt></a> </li>
394 <li><a href='#httpOptions'><tt>httpOptions()</tt></a> </li>
395 <li><a href='#httpPost'><tt>httpPost()</tt></a> </li>
ef416fc2 396 <li><a href='#httpPut'><tt>httpPut()</tt></a> </li>
ecdc0628 397 <li><a href='#httpRead'><tt>httpRead()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
398 <li><a href='#httpRead2'><tt>httpRead2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 399 <li><a href='#httpReconnect'><tt>httpReconnect()</tt></a> </li>
ecdc0628 400 <li><a href='#httpSeparate'><tt>httpSeparate()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
ef416fc2 401 <li><a href='#httpSeparate2'><tt>httpSeparate2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
402 <li><a href='#httpSeparateURI'><tt>httpSeparateURI()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
403 <li><a href='#httpSetCookie'><tt>httpSetCookie()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
80ca4592 404 <li><a href='#httpSetExpect'><tt>httpSetExpect()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 405 <li><a href='#httpSetField'><tt>httpSetField()</tt></a> </li>
406 <li><a href='#httpSetLength'><tt>httpSetLength()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
407 <li><a href='#httpStatus'><tt>httpStatus()</tt></a> </li>
408 <li><a href='#httpTrace'><tt>httpTrace()</tt></a> </li>
409 <li><a href='#httpUpdate'><tt>httpUpdate()</tt></a> </li>
410 <li><a href='#httpWait'><tt>httpWait()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
ecdc0628 411 <li><a href='#httpWrite'><tt>httpWrite()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
412 <li><a href='#httpWrite2'><tt>httpWrite2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 413 <li><a href='#ippAddBoolean'><tt>ippAddBoolean()</tt></a> </li>
414 <li><a href='#ippAddBooleans'><tt>ippAddBooleans()</tt></a> </li>
415 <li><a href='#ippAddCollection'><tt>ippAddCollection()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
416 <li><a href='#ippAddCollections'><tt>ippAddCollections()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
417 <li><a href='#ippAddDate'><tt>ippAddDate()</tt></a> </li>
418 <li><a href='#ippAddInteger'><tt>ippAddInteger()</tt></a> </li>
ecdc0628 419 <li><a href='#ippAddIntegers'><tt>ippAddIntegers()</tt></a> </li>
420 <li><a href='#ippAddOctetString'><tt>ippAddOctetString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
421 <li><a href='#ippAddRange'><tt>ippAddRange()</tt></a> </li>
422 <li><a href='#ippAddRanges'><tt>ippAddRanges()</tt></a> </li>
423 <li><a href='#ippAddResolution'><tt>ippAddResolution()</tt></a> </li>
424 <li><a href='#ippAddResolutions'><tt>ippAddResolutions()</tt></a> </li>
425 <li><a href='#ippAddSeparator'><tt>ippAddSeparator()</tt></a> </li>
426 <li><a href='#ippAddString'><tt>ippAddString()</tt></a> </li>
427 <li><a href='#ippAddStrings'><tt>ippAddStrings()</tt></a> </li>
428 <li><a href='#ippDateToTime'><tt>ippDateToTime()</tt></a> </li>
429 <li><a href='#ippDelete'><tt>ippDelete()</tt></a> </li>
430 <li><a href='#ippDeleteAttribute'><tt>ippDeleteAttribute()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
431 <li><a href='#ippErrorString'><tt>ippErrorString()</tt></a> </li>
432 <li><a href='#ippErrorValue'><tt>ippErrorValue()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
433 <li><a href='#ippFindAttribute'><tt>ippFindAttribute()</tt></a> </li>
434 <li><a href='#ippFindNextAttribute'><tt>ippFindNextAttribute()</tt></a> </li>
435 <li><a href='#ippLength'><tt>ippLength()</tt></a> </li>
436 <li><a href='#ippNew'><tt>ippNew()</tt></a> </li>
437 <li><a href='#ippNewRequest'><tt>ippNewRequest()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
438 <li><a href='#ippOpString'><tt>ippOpString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
439 <li><a href='#ippOpValue'><tt>ippOpValue()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
440 <li><a href='#ippPort'><tt>ippPort()</tt></a> </li>
441 <li><a href='#ippRead'><tt>ippRead()</tt></a> </li>
442 <li><a href='#ippReadFile'><tt>ippReadFile()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
443 <li><a href='#ippReadIO'><tt>ippReadIO()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
444 <li><a href='#ippSetPort'><tt>ippSetPort()</tt></a> </li>
445 <li><a href='#ippTimeToDate'><tt>ippTimeToDate()</tt></a> </li>
446 <li><a href='#ippWrite'><tt>ippWrite()</tt></a> </li>
447 <li><a href='#ippWriteFile'><tt>ippWriteFile()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
448 <li><a href='#ippWriteIO'><tt>ippWriteIO()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
449</ul>
ef416fc2 450<!-- NEW PAGE -->
ecdc0628 451<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span><a name='cupsDoAuthentication'>cupsDoAuthentication()</a></h3>
ef416fc2 452<h4>Description</h4>
ecdc0628 453<p>Authenticate a request.
454
455This function should be called in response to a HTTP_UNAUTHORIZED
456status, prior to resubmitting your request.
ef416fc2 457
458</p>
459<h4>Syntax</h4>
460<pre>
461int
ecdc0628 462cupsDoAuthentication(
ef416fc2 463 <a href='#http_t'>http_t</a> * http,
ecdc0628 464 const char * method,
465 const char * resource);
ef416fc2 466</pre>
467<h4>Arguments</h4>
468<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
469<thead><tr><th>Name</th><th>Description</th></tr></thead>
470<tbody>
ecdc0628 471<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
472<tr><td><tt>method</tt></td><td>Request method (GET, POST, PUT)</td></tr>
473<tr><td><tt>resource</tt></td><td>Resource path</td></tr>
ef416fc2 474</tbody></table></div>
475<h4>Returns</h4>
ecdc0628 476<p>0 on success, -1 on error</p>
ef416fc2 477<!-- NEW PAGE -->
ecdc0628 478<h3 class='title'><a name='cupsDoFileRequest'>cupsDoFileRequest()</a></h3>
ef416fc2 479<h4>Description</h4>
ecdc0628 480<p>Do an IPP request with a file.
ef416fc2 481
ecdc0628 482This function sends the IPP request to the specified server, retrying
483and authenticating as necessary. The request is freed with ippDelete()
484after receiving a valid IPP response.</p>
ef416fc2 485<h4>Syntax</h4>
486<pre>
ecdc0628 487<a href='#ipp_t'>ipp_t</a> *
488cupsDoFileRequest(
ef416fc2 489 <a href='#http_t'>http_t</a> * http,
ecdc0628 490 <a href='#ipp_t'>ipp_t</a> * request,
491 const char * resource,
492 const char * filename);
ef416fc2 493</pre>
494<h4>Arguments</h4>
495<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
496<thead><tr><th>Name</th><th>Description</th></tr></thead>
497<tbody>
498<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
ecdc0628 499<tr><td><tt>request</tt></td><td>IPP request</td></tr>
500<tr><td><tt>resource</tt></td><td>HTTP resource for POST</td></tr>
501<tr><td><tt>filename</tt></td><td>File to send or NULL for none</td></tr>
ef416fc2 502</tbody></table></div>
503<h4>Returns</h4>
ecdc0628 504<p>Response data</p>
ef416fc2 505<!-- NEW PAGE -->
ecdc0628 506<h3 class='title'><a name='cupsDoRequest'>cupsDoRequest()</a></h3>
ef416fc2 507<h4>Description</h4>
ecdc0628 508<p>Do an IPP request.
ef416fc2 509
ecdc0628 510This function sends the IPP request to the specified server, retrying
511and authenticating as necessary. The request is freed with ippDelete()
512after receiving a valid IPP response.</p>
ef416fc2 513<h4>Syntax</h4>
514<pre>
ecdc0628 515<a href='#ipp_t'>ipp_t</a> *
516cupsDoRequest(
ef416fc2 517 <a href='#http_t'>http_t</a> * http,
ecdc0628 518 <a href='#ipp_t'>ipp_t</a> * request,
519 const char * resource);
ef416fc2 520</pre>
521<h4>Arguments</h4>
522<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
523<thead><tr><th>Name</th><th>Description</th></tr></thead>
524<tbody>
525<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
ecdc0628 526<tr><td><tt>request</tt></td><td>IPP request</td></tr>
527<tr><td><tt>resource</tt></td><td>HTTP resource for POST</td></tr>
ef416fc2 528</tbody></table></div>
529<h4>Returns</h4>
ecdc0628 530<p>Response data</p>
ef416fc2 531<!-- NEW PAGE -->
ecdc0628 532<h3 class='title'><a name='cupsEncodeOptions'>cupsEncodeOptions()</a></h3>
ef416fc2 533<h4>Description</h4>
ecdc0628 534<p>Encode printer options into IPP attributes.
ef416fc2 535
ecdc0628 536This function adds operation, job, and then subscription attributes,
537in that order. Use the cupsEncodeOptions2() function to add attributes
538for a single group.</p>
ef416fc2 539<h4>Syntax</h4>
540<pre>
541void
ecdc0628 542cupsEncodeOptions(
543 <a href='#ipp_t'>ipp_t</a> * ipp,
544 int num_options,
545 cups_option_t * options);
ef416fc2 546</pre>
547<h4>Arguments</h4>
548<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
549<thead><tr><th>Name</th><th>Description</th></tr></thead>
550<tbody>
ecdc0628 551<tr><td><tt>ipp</tt></td><td>Request to add to</td></tr>
552<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
553<tr><td><tt>options</tt></td><td>Options</td></tr>
ef416fc2 554</tbody></table></div>
555<h4>Returns</h4>
556<p>Nothing.</p>
557<!-- NEW PAGE -->
ecdc0628 558<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='cupsEncodeOptions2'>cupsEncodeOptions2()</a></h3>
ef416fc2 559<h4>Description</h4>
ecdc0628 560<p>Encode printer options into IPP attributes for a group.
ef416fc2 561
ecdc0628 562This function only adds attributes for a single group. Call this
563function multiple times for each group, or use cupsEncodeOptions()
564to add the standard groups.
ef416fc2 565
566</p>
567<h4>Syntax</h4>
568<pre>
ef416fc2 569void
ecdc0628 570cupsEncodeOptions2(
571 <a href='#ipp_t'>ipp_t</a> * ipp,
572 int num_options,
573 cups_option_t * options,
574 ipp_tag_t group_tag);
ef416fc2 575</pre>
576<h4>Arguments</h4>
577<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
578<thead><tr><th>Name</th><th>Description</th></tr></thead>
579<tbody>
ecdc0628 580<tr><td><tt>ipp</tt></td><td>Request to add to</td></tr>
581<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
582<tr><td><tt>options</tt></td><td>Options</td></tr>
583<tr><td><tt>group_tag</tt></td><td>Group to encode</td></tr>
ef416fc2 584</tbody></table></div>
585<h4>Returns</h4>
586<p>Nothing.</p>
587<!-- NEW PAGE -->
ef416fc2 588<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrAny'>httpAddrAny()</a></h3>
589<h4>Description</h4>
590<p>Check for the &quot;any&quot; address.
591
592</p>
593<h4>Syntax</h4>
594<pre>
595int
596httpAddrAny(
597 const <a href='#http_addr_t'>http_addr_t</a> * addr);
598</pre>
599<h4>Arguments</h4>
600<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
601<thead><tr><th>Name</th><th>Description</th></tr></thead>
602<tbody>
603<tr><td><tt>addr</tt></td><td>Address to check</td></tr>
604</tbody></table></div>
605<h4>Returns</h4>
606<p>1 if &quot;any&quot;, 0 otherwise</p>
607<!-- NEW PAGE -->
608<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrEqual'>httpAddrEqual()</a></h3>
609<h4>Description</h4>
610<p>Compare two addresses.
611
612</p>
613<h4>Syntax</h4>
614<pre>
615int
616httpAddrEqual(
617 const <a href='#http_addr_t'>http_addr_t</a> * addr1,
618 const <a href='#http_addr_t'>http_addr_t</a> * addr2);
619</pre>
620<h4>Arguments</h4>
621<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
622<thead><tr><th>Name</th><th>Description</th></tr></thead>
623<tbody>
624<tr><td><tt>addr1</tt></td><td>First address</td></tr>
625<tr><td><tt>addr2</tt></td><td>Second address</td></tr>
626</tbody></table></div>
627<h4>Returns</h4>
ecdc0628 628<p>1 if equal, 0 if not</p>
ef416fc2 629<!-- NEW PAGE -->
630<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrLength'>httpAddrLength()</a></h3>
631<h4>Description</h4>
632<p>Return the length of the address in bytes.
633
634</p>
635<h4>Syntax</h4>
636<pre>
637int
638httpAddrLength(
639 const <a href='#http_addr_t'>http_addr_t</a> * addr);
640</pre>
641<h4>Arguments</h4>
642<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
643<thead><tr><th>Name</th><th>Description</th></tr></thead>
644<tbody>
645<tr><td><tt>addr</tt></td><td>Address</td></tr>
646</tbody></table></div>
647<h4>Returns</h4>
648<p>Length in bytes</p>
649<!-- NEW PAGE -->
650<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrLocalhost'>httpAddrLocalhost()</a></h3>
651<h4>Description</h4>
652<p>Check for the local loopback address.
653
654</p>
655<h4>Syntax</h4>
656<pre>
657int
658httpAddrLocalhost(
659 const <a href='#http_addr_t'>http_addr_t</a> * addr);
660</pre>
661<h4>Arguments</h4>
662<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
663<thead><tr><th>Name</th><th>Description</th></tr></thead>
664<tbody>
665<tr><td><tt>addr</tt></td><td>Address to check</td></tr>
666</tbody></table></div>
667<h4>Returns</h4>
668<p>1 if local host, 0 otherwise</p>
669<!-- NEW PAGE -->
670<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrLookup'>httpAddrLookup()</a></h3>
671<h4>Description</h4>
672<p>Lookup the hostname associated with the address.
673
674</p>
675<h4>Syntax</h4>
676<pre>
ecdc0628 677char *
ef416fc2 678httpAddrLookup(
679 const <a href='#http_addr_t'>http_addr_t</a> * addr,
ecdc0628 680 char * name,
ef416fc2 681 int namelen);
682</pre>
683<h4>Arguments</h4>
684<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
685<thead><tr><th>Name</th><th>Description</th></tr></thead>
686<tbody>
687<tr><td><tt>addr</tt></td><td>Address to lookup</td></tr>
688<tr><td><tt>name</tt></td><td>Host name buffer</td></tr>
689<tr><td><tt>namelen</tt></td><td>Size of name buffer</td></tr>
690</tbody></table></div>
691<h4>Returns</h4>
692<p>Host name</p>
693<!-- NEW PAGE -->
694<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrString'>httpAddrString()</a></h3>
695<h4>Description</h4>
ecdc0628 696<p>Convert an address to a numeric string.
ef416fc2 697
698</p>
699<h4>Syntax</h4>
700<pre>
ecdc0628 701char *
ef416fc2 702httpAddrString(
703 const <a href='#http_addr_t'>http_addr_t</a> * addr,
ecdc0628 704 char * s,
ef416fc2 705 int slen);
706</pre>
707<h4>Arguments</h4>
708<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
709<thead><tr><th>Name</th><th>Description</th></tr></thead>
710<tbody>
711<tr><td><tt>addr</tt></td><td>Address to convert</td></tr>
712<tr><td><tt>s</tt></td><td>String buffer</td></tr>
713<tr><td><tt>slen</tt></td><td>Length of string</td></tr>
714</tbody></table></div>
715<h4>Returns</h4>
ecdc0628 716<p>Numeric address string</p>
ef416fc2 717<!-- NEW PAGE -->
718<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAssembleURI'>httpAssembleURI()</a></h3>
719<h4>Description</h4>
720<p>Assemble a uniform resource identifier from its
721components.
722
ecdc0628 723This function escapes reserved characters in the URI depending on the
724value of the &quot;encoding&quot; argument. You should use this function in
725place of traditional string functions whenever you need to create a
726URI string.
ef416fc2 727
728</p>
729<h4>Syntax</h4>
730<pre>
731http_uri_status_t
732httpAssembleURI(
ecdc0628 733 http_uri_coding_t encoding,
734 char * uri,
ef416fc2 735 int urilen,
ecdc0628 736 const char * scheme,
737 const char * username,
738 const char * host,
ef416fc2 739 int port,
ecdc0628 740 const char * resource);
ef416fc2 741</pre>
742<h4>Arguments</h4>
743<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
744<thead><tr><th>Name</th><th>Description</th></tr></thead>
745<tbody>
ecdc0628 746<tr><td><tt>encoding</tt></td><td>Encoding flags</td></tr>
ef416fc2 747<tr><td><tt>uri</tt></td><td>URI buffer</td></tr>
748<tr><td><tt>urilen</tt></td><td>Size of URI buffer</td></tr>
749<tr><td><tt>scheme</tt></td><td>Scheme name</td></tr>
750<tr><td><tt>username</tt></td><td>Username</td></tr>
751<tr><td><tt>host</tt></td><td>Hostname or address</td></tr>
752<tr><td><tt>port</tt></td><td>Port number</td></tr>
753<tr><td><tt>resource</tt></td><td>Resource</td></tr>
754</tbody></table></div>
755<h4>Returns</h4>
756<p>URI status</p>
757<!-- NEW PAGE -->
758<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAssembleURIf'>httpAssembleURIf()</a></h3>
759<h4>Description</h4>
760<p>Assemble a uniform resource identifier from its
761components with a formatted resource.
762
763This function creates a formatted version of the resource string
ecdc0628 764argument &quot;resourcef&quot; and escapes reserved characters in the URI
765depending on the value of the &quot;encoding&quot; argument. You should use
766this function in place of traditional string functions whenever
767you need to create a URI string.
ef416fc2 768
769</p>
770<h4>Syntax</h4>
771<pre>
772http_uri_status_t
773httpAssembleURIf(
ecdc0628 774 http_uri_coding_t encoding,
775 char * uri,
ef416fc2 776 int urilen,
ecdc0628 777 const char * scheme,
778 const char * username,
779 const char * host,
ef416fc2 780 int port,
ecdc0628 781 const char * resourcef,
ef416fc2 782 ...);
783</pre>
784<h4>Arguments</h4>
785<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
786<thead><tr><th>Name</th><th>Description</th></tr></thead>
787<tbody>
ecdc0628 788<tr><td><tt>encoding</tt></td><td>Encoding flags</td></tr>
ef416fc2 789<tr><td><tt>uri</tt></td><td>URI buffer</td></tr>
790<tr><td><tt>urilen</tt></td><td>Size of URI buffer</td></tr>
791<tr><td><tt>scheme</tt></td><td>Scheme name</td></tr>
792<tr><td><tt>username</tt></td><td>Username</td></tr>
793<tr><td><tt>host</tt></td><td>Hostname or address</td></tr>
794<tr><td><tt>port</tt></td><td>Port number</td></tr>
795<tr><td><tt>resourcef</tt></td><td>Printf-style resource</td></tr>
796<tr><td><tt>...</tt></td><td>Additional arguments as needed</td></tr>
797</tbody></table></div>
798<h4>Returns</h4>
799<p>URI status</p>
800<!-- NEW PAGE -->
ecdc0628 801<h3 class='title'><a name='httpBlocking'>httpBlocking()</a></h3>
802<h4>Description</h4>
803<p>Set blocking/non-blocking behavior on a connection.</p>
804<h4>Syntax</h4>
805<pre>
806void
807httpBlocking(
808 <a href='#http_t'>http_t</a> * http,
809 int b);
810</pre>
811<h4>Arguments</h4>
812<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
813<thead><tr><th>Name</th><th>Description</th></tr></thead>
814<tbody>
815<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
816<tr><td><tt>b</tt></td><td>1 = blocking, 0 = non-blocking</td></tr>
817</tbody></table></div>
818<h4>Returns</h4>
819<p>Nothing.</p>
820<!-- NEW PAGE -->
ef416fc2 821<h3 class='title'><a name='httpCheck'>httpCheck()</a></h3>
822<h4>Description</h4>
823<p>Check to see if there is a pending response from the server.</p>
824<h4>Syntax</h4>
825<pre>
826int
827httpCheck(
828 <a href='#http_t'>http_t</a> * http);
829</pre>
830<h4>Arguments</h4>
831<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
832<thead><tr><th>Name</th><th>Description</th></tr></thead>
833<tbody>
834<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
835</tbody></table></div>
836<h4>Returns</h4>
837<p>0 = no data, 1 = data available</p>
838<!-- NEW PAGE -->
839<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpClearCookie'>httpClearCookie()</a></h3>
840<h4>Description</h4>
841<p>Clear the cookie value(s).
842
843</p>
844<h4>Syntax</h4>
845<pre>
846void
847httpClearCookie(
848 <a href='#http_t'>http_t</a> * http);
849</pre>
850<h4>Arguments</h4>
851<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
852<thead><tr><th>Name</th><th>Description</th></tr></thead>
853<tbody>
ecdc0628 854<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
855</tbody></table></div>
856<h4>Returns</h4>
857<p>Nothing.</p>
858<!-- NEW PAGE -->
859<h3 class='title'><a name='httpClearFields'>httpClearFields()</a></h3>
860<h4>Description</h4>
861<p>Clear HTTP request fields.</p>
862<h4>Syntax</h4>
863<pre>
864void
865httpClearFields(
866 <a href='#http_t'>http_t</a> * http);
867</pre>
868<h4>Arguments</h4>
869<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
870<thead><tr><th>Name</th><th>Description</th></tr></thead>
871<tbody>
872<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 873</tbody></table></div>
874<h4>Returns</h4>
875<p>Nothing.</p>
876<!-- NEW PAGE -->
877<h3 class='title'><a name='httpClose'>httpClose()</a></h3>
878<h4>Description</h4>
879<p>Close an HTTP connection...</p>
880<h4>Syntax</h4>
881<pre>
882void
883httpClose(
884 <a href='#http_t'>http_t</a> * http);
885</pre>
886<h4>Arguments</h4>
887<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
888<thead><tr><th>Name</th><th>Description</th></tr></thead>
889<tbody>
ecdc0628 890<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 891</tbody></table></div>
892<h4>Returns</h4>
893<p>Nothing.</p>
894<!-- NEW PAGE -->
895<h3 class='title'><a name='httpConnect'>httpConnect()</a></h3>
896<h4>Description</h4>
897<p>Connect to a HTTP server.</p>
898<h4>Syntax</h4>
899<pre>
900<a href='#http_t'>http_t</a> *
901httpConnect(
ecdc0628 902 const char * host,
ef416fc2 903 int port);
904</pre>
905<h4>Arguments</h4>
906<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
907<thead><tr><th>Name</th><th>Description</th></tr></thead>
908<tbody>
909<tr><td><tt>host</tt></td><td>Host to connect to</td></tr>
910<tr><td><tt>port</tt></td><td>Port number</td></tr>
911</tbody></table></div>
912<h4>Returns</h4>
913<p>New HTTP connection</p>
914<!-- NEW PAGE -->
915<h3 class='title'><a name='httpConnectEncrypt'>httpConnectEncrypt()</a></h3>
916<h4>Description</h4>
917<p>Connect to a HTTP server using encryption.</p>
918<h4>Syntax</h4>
919<pre>
920<a href='#http_t'>http_t</a> *
921httpConnectEncrypt(
ecdc0628 922 const char * host,
ef416fc2 923 int port,
924 <a href='#http_encryption_t'>http_encryption_t</a> encryption);
925</pre>
926<h4>Arguments</h4>
927<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
928<thead><tr><th>Name</th><th>Description</th></tr></thead>
929<tbody>
930<tr><td><tt>host</tt></td><td>Host to connect to</td></tr>
931<tr><td><tt>port</tt></td><td>Port number</td></tr>
932<tr><td><tt>encryption</tt></td><td>Type of encryption to use</td></tr>
933</tbody></table></div>
934<h4>Returns</h4>
935<p>New HTTP connection</p>
936<!-- NEW PAGE -->
ecdc0628 937<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpDecode64'>httpDecode64()</a></h3>
ef416fc2 938<h4>Description</h4>
ecdc0628 939<p>Base64-decode a string.
940
941This function is deprecated. Use the httpDecode64_2() function instead
942which provides buffer length arguments.
943
944</p>
ef416fc2 945<h4>Syntax</h4>
946<pre>
ecdc0628 947char *
ef416fc2 948httpDecode64(
ecdc0628 949 char * out,
950 const char * in);
ef416fc2 951</pre>
952<h4>Arguments</h4>
953<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
954<thead><tr><th>Name</th><th>Description</th></tr></thead>
955<tbody>
956<tr><td><tt>out</tt></td><td>String to write to</td></tr>
957<tr><td><tt>in</tt></td><td>String to read from</td></tr>
958</tbody></table></div>
959<h4>Returns</h4>
960<p>Decoded string</p>
961<!-- NEW PAGE -->
962<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='httpDecode64_2'>httpDecode64_2()</a></h3>
963<h4>Description</h4>
964<p>Base64-decode a string.
965
966</p>
967<h4>Syntax</h4>
968<pre>
ecdc0628 969char *
ef416fc2 970httpDecode64_2(
ecdc0628 971 char * out,
ef416fc2 972 int * outlen,
ecdc0628 973 const char * in);
ef416fc2 974</pre>
975<h4>Arguments</h4>
976<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
977<thead><tr><th>Name</th><th>Description</th></tr></thead>
978<tbody>
979<tr><td><tt>out</tt></td><td>String to write to</td></tr>
980<tr><td><tt>outlen</tt></td><td>Size of output string</td></tr>
981<tr><td><tt>in</tt></td><td>String to read from</td></tr>
982</tbody></table></div>
983<h4>Returns</h4>
984<p>Decoded string</p>
985<!-- NEW PAGE -->
986<h3 class='title'><a name='httpDelete'>httpDelete()</a></h3>
987<h4>Description</h4>
988<p>Send a DELETE request to the server.</p>
989<h4>Syntax</h4>
990<pre>
991int
992httpDelete(
993 <a href='#http_t'>http_t</a> * http,
ecdc0628 994 const char * uri);
ef416fc2 995</pre>
996<h4>Arguments</h4>
997<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
998<thead><tr><th>Name</th><th>Description</th></tr></thead>
999<tbody>
ecdc0628 1000<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1001<tr><td><tt>uri</tt></td><td>URI to delete</td></tr>
1002</tbody></table></div>
1003<h4>Returns</h4>
1004<p>Status of call (0 = success)</p>
1005<!-- NEW PAGE -->
ecdc0628 1006<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpEncode64'>httpEncode64()</a></h3>
ef416fc2 1007<h4>Description</h4>
ecdc0628 1008<p>Base64-encode a string.
1009
1010This function is deprecated. Use the httpEncode64_2() function instead
1011which provides buffer length arguments.
1012
1013</p>
ef416fc2 1014<h4>Syntax</h4>
1015<pre>
ecdc0628 1016char *
ef416fc2 1017httpEncode64(
ecdc0628 1018 char * out,
1019 const char * in);
ef416fc2 1020</pre>
1021<h4>Arguments</h4>
1022<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1023<thead><tr><th>Name</th><th>Description</th></tr></thead>
1024<tbody>
1025<tr><td><tt>out</tt></td><td>String to write to</td></tr>
1026<tr><td><tt>in</tt></td><td>String to read from</td></tr>
1027</tbody></table></div>
1028<h4>Returns</h4>
1029<p>Encoded string</p>
1030<!-- NEW PAGE -->
1031<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='httpEncode64_2'>httpEncode64_2()</a></h3>
1032<h4>Description</h4>
1033<p>Base64-encode a string.
1034
1035</p>
1036<h4>Syntax</h4>
1037<pre>
ecdc0628 1038char *
ef416fc2 1039httpEncode64_2(
ecdc0628 1040 char * out,
ef416fc2 1041 int outlen,
ecdc0628 1042 const char * in,
ef416fc2 1043 int inlen);
1044</pre>
1045<h4>Arguments</h4>
1046<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1047<thead><tr><th>Name</th><th>Description</th></tr></thead>
1048<tbody>
1049<tr><td><tt>out</tt></td><td>String to write to</td></tr>
1050<tr><td><tt>outlen</tt></td><td>Size of output string</td></tr>
1051<tr><td><tt>in</tt></td><td>String to read from</td></tr>
1052<tr><td><tt>inlen</tt></td><td>Size of input string</td></tr>
1053</tbody></table></div>
1054<h4>Returns</h4>
1055<p>Encoded string</p>
1056<!-- NEW PAGE -->
1057<h3 class='title'><a name='httpEncryption'>httpEncryption()</a></h3>
1058<h4>Description</h4>
1059<p>Set the required encryption on the link.</p>
1060<h4>Syntax</h4>
1061<pre>
1062int
1063httpEncryption(
1064 <a href='#http_t'>http_t</a> * http,
1065 <a href='#http_encryption_t'>http_encryption_t</a> e);
1066</pre>
1067<h4>Arguments</h4>
1068<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1069<thead><tr><th>Name</th><th>Description</th></tr></thead>
1070<tbody>
ecdc0628 1071<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1072<tr><td><tt>e</tt></td><td>New encryption preference</td></tr>
1073</tbody></table></div>
1074<h4>Returns</h4>
1075<p>-1 on error, 0 on success</p>
1076<!-- NEW PAGE -->
ecdc0628 1077<h3 class='title'><a name='httpError'>httpError()</a></h3>
1078<h4>Description</h4>
1079<p>Get the last error on a connection.</p>
1080<h4>Syntax</h4>
1081<pre>
1082int
1083httpError(
1084 <a href='#http_t'>http_t</a> * http);
1085</pre>
1086<h4>Arguments</h4>
1087<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1088<thead><tr><th>Name</th><th>Description</th></tr></thead>
1089<tbody>
1090<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
1091</tbody></table></div>
1092<h4>Returns</h4>
1093<p>Error code (errno) value</p>
1094<!-- NEW PAGE -->
ef416fc2 1095<h3 class='title'><a name='httpFlush'>httpFlush()</a></h3>
1096<h4>Description</h4>
1097<p>Flush data from a HTTP connection.</p>
1098<h4>Syntax</h4>
1099<pre>
1100void
1101httpFlush(
1102 <a href='#http_t'>http_t</a> * http);
1103</pre>
1104<h4>Arguments</h4>
1105<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1106<thead><tr><th>Name</th><th>Description</th></tr></thead>
1107<tbody>
ecdc0628 1108<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1109</tbody></table></div>
1110<h4>Returns</h4>
1111<p>Nothing.</p>
1112<!-- NEW PAGE -->
1113<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpFlushWrite'>httpFlushWrite()</a></h3>
1114<h4>Description</h4>
1115<p>Flush data in write buffer.
1116
1117</p>
1118<h4>Syntax</h4>
1119<pre>
1120int
1121httpFlushWrite(
1122 <a href='#http_t'>http_t</a> * http);
1123</pre>
1124<h4>Arguments</h4>
1125<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1126<thead><tr><th>Name</th><th>Description</th></tr></thead>
1127<tbody>
ecdc0628 1128<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
1129</tbody></table></div>
1130<h4>Returns</h4>
1131<p>Bytes written or -1 on error</p>
1132<!-- NEW PAGE -->
1133<h3 class='title'><a name='httpGet'>httpGet()</a></h3>
1134<h4>Description</h4>
1135<p>Send a GET request to the server.</p>
1136<h4>Syntax</h4>
1137<pre>
1138int
1139httpGet(
1140 <a href='#http_t'>http_t</a> * http,
1141 const char * uri);
1142</pre>
1143<h4>Arguments</h4>
1144<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1145<thead><tr><th>Name</th><th>Description</th></tr></thead>
1146<tbody>
1147<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
1148<tr><td><tt>uri</tt></td><td>URI to get</td></tr>
1149</tbody></table></div>
1150<h4>Returns</h4>
1151<p>Status of call (0 = success)</p>
1152<!-- NEW PAGE -->
1153<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetBlocking'>httpGetBlocking()</a></h3>
1154<h4>Description</h4>
1155<p>Get the blocking/non-block state of a connection.
1156
1157</p>
1158<h4>Syntax</h4>
1159<pre>
1160int
1161httpGetBlocking(
1162 <a href='#http_t'>http_t</a> * http);
1163</pre>
1164<h4>Arguments</h4>
1165<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1166<thead><tr><th>Name</th><th>Description</th></tr></thead>
1167<tbody>
1168<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1169</tbody></table></div>
1170<h4>Returns</h4>
ecdc0628 1171<p>1 if blocking, 0 if non-blocking</p>
ef416fc2 1172<!-- NEW PAGE -->
80ca4592 1173<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpGetCookie'>httpGetCookie()</a></h3>
ef416fc2 1174<h4>Description</h4>
80ca4592 1175<p>Get any cookie data from the response.
1176
1177</p>
ef416fc2 1178<h4>Syntax</h4>
1179<pre>
ecdc0628 1180const char *
1181httpGetCookie(
1182 <a href='#http_t'>http_t</a> * http);
ef416fc2 1183</pre>
1184<h4>Arguments</h4>
1185<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1186<thead><tr><th>Name</th><th>Description</th></tr></thead>
1187<tbody>
ecdc0628 1188<tr><td><tt>http</tt></td><td>HTTP connecion</td></tr>
ef416fc2 1189</tbody></table></div>
1190<h4>Returns</h4>
ecdc0628 1191<p>Cookie data or NULL</p>
ef416fc2 1192<!-- NEW PAGE -->
1193<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetDateString'>httpGetDateString()</a></h3>
1194<h4>Description</h4>
1195<p>Get a formatted date/time string from a time value.
1196
1197</p>
1198<h4>Syntax</h4>
1199<pre>
ecdc0628 1200const char *
ef416fc2 1201httpGetDateString(
1202 time_t t);
1203</pre>
1204<h4>Arguments</h4>
1205<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1206<thead><tr><th>Name</th><th>Description</th></tr></thead>
1207<tbody>
1208<tr><td><tt>t</tt></td><td>UNIX time</td></tr>
1209</tbody></table></div>
1210<h4>Returns</h4>
1211<p>Date/time string</p>
1212<!-- NEW PAGE -->
1213<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetDateString2'>httpGetDateString2()</a></h3>
1214<h4>Description</h4>
1215<p>Get a formatted date/time string from a time value.
1216
1217</p>
1218<h4>Syntax</h4>
1219<pre>
ecdc0628 1220const char *
ef416fc2 1221httpGetDateString2(
1222 time_t t,
ecdc0628 1223 char * s,
ef416fc2 1224 int slen);
1225</pre>
1226<h4>Arguments</h4>
1227<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1228<thead><tr><th>Name</th><th>Description</th></tr></thead>
1229<tbody>
1230<tr><td><tt>t</tt></td><td>UNIX time</td></tr>
1231<tr><td><tt>s</tt></td><td>String buffer</td></tr>
1232<tr><td><tt>slen</tt></td><td>Size of string buffer</td></tr>
1233</tbody></table></div>
1234<h4>Returns</h4>
1235<p>Date/time string</p>
1236<!-- NEW PAGE -->
1237<h3 class='title'><a name='httpGetDateTime'>httpGetDateTime()</a></h3>
1238<h4>Description</h4>
1239<p>Get a time value from a formatted date/time string.</p>
1240<h4>Syntax</h4>
1241<pre>
1242time_t
1243httpGetDateTime(
ecdc0628 1244 const char * s);
ef416fc2 1245</pre>
1246<h4>Arguments</h4>
1247<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1248<thead><tr><th>Name</th><th>Description</th></tr></thead>
1249<tbody>
1250<tr><td><tt>s</tt></td><td>Date/time string</td></tr>
1251</tbody></table></div>
1252<h4>Returns</h4>
1253<p>UNIX time</p>
1254<!-- NEW PAGE -->
ecdc0628 1255<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetFd'>httpGetFd()</a></h3>
1256<h4>Description</h4>
1257<p>Get the file descriptor associated with a connection.
1258
1259</p>
1260<h4>Syntax</h4>
1261<pre>
1262int
1263httpGetFd(
1264 <a href='#http_t'>http_t</a> * http);
1265</pre>
1266<h4>Arguments</h4>
1267<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1268<thead><tr><th>Name</th><th>Description</th></tr></thead>
1269<tbody>
1270<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
1271</tbody></table></div>
1272<h4>Returns</h4>
1273<p>File descriptor or -1 if none</p>
1274<!-- NEW PAGE -->
1275<h3 class='title'><a name='httpGetField'>httpGetField()</a></h3>
1276<h4>Description</h4>
1277<p>Get a field value from a request/response.</p>
1278<h4>Syntax</h4>
1279<pre>
1280const char *
1281httpGetField(
1282 <a href='#http_t'>http_t</a> * http,
1283 http_field_t field);
1284</pre>
1285<h4>Arguments</h4>
1286<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1287<thead><tr><th>Name</th><th>Description</th></tr></thead>
1288<tbody>
1289<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
1290<tr><td><tt>field</tt></td><td>Field to get</td></tr>
1291</tbody></table></div>
1292<h4>Returns</h4>
1293<p>Field value</p>
1294<!-- NEW PAGE -->
ef416fc2 1295<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetHostByName'>httpGetHostByName()</a></h3>
1296<h4>Description</h4>
1297<p>Lookup a hostname or IPv4 address, and return
1298address records for the specified name.
1299
1300</p>
1301<h4>Syntax</h4>
1302<pre>
1303struct hostent *
1304httpGetHostByName(
ecdc0628 1305 const char * name);
ef416fc2 1306</pre>
1307<h4>Arguments</h4>
1308<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1309<thead><tr><th>Name</th><th>Description</th></tr></thead>
1310<tbody>
1311<tr><td><tt>name</tt></td><td>Hostname or IP address</td></tr>
1312</tbody></table></div>
1313<h4>Returns</h4>
1314<p>Host entry</p>
1315<!-- NEW PAGE -->
1316<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetHostname'>httpGetHostname()</a></h3>
1317<h4>Description</h4>
80ca4592 1318<p>Get the FQDN for the connection or local system.
ef416fc2 1319
80ca4592 1320When &quot;http&quot; points to a connected socket, return the hostname or
1321address that was used in the call to httpConnect() or httpConnectEncrypt().
1322Otherwise, return the FQDN for the local system using both gethostname()
1323and gethostbyname() to get the local hostname with domain.
ef416fc2 1324
1325</p>
1326<h4>Syntax</h4>
1327<pre>
ecdc0628 1328const char *
ef416fc2 1329httpGetHostname(
80ca4592 1330 <a href='#http_t'>http_t</a> * http,
ecdc0628 1331 char * s,
ef416fc2 1332 int slen);
1333</pre>
1334<h4>Arguments</h4>
1335<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1336<thead><tr><th>Name</th><th>Description</th></tr></thead>
1337<tbody>
80ca4592 1338<tr><td><tt>http</tt></td><td>HTTP connection or NULL</td></tr>
ef416fc2 1339<tr><td><tt>s</tt></td><td>String buffer for name</td></tr>
1340<tr><td><tt>slen</tt></td><td>Size of buffer</td></tr>
1341</tbody></table></div>
1342<h4>Returns</h4>
80ca4592 1343<p>FQDN for connection or system</p>
ef416fc2 1344<!-- NEW PAGE -->
ecdc0628 1345<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetLength'>httpGetLength()</a></h3>
ef416fc2 1346<h4>Description</h4>
1347<p>Get the amount of data remaining from the
1348content-length or transfer-encoding fields.
1349
1350This function is deprecated and will not return lengths larger than
13512^31 - 1; use httpGetLength2() instead.
1352
1353</p>
1354<h4>Syntax</h4>
1355<pre>
1356int
1357httpGetLength(
1358 <a href='#http_t'>http_t</a> * http);
1359</pre>
1360<h4>Arguments</h4>
1361<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1362<thead><tr><th>Name</th><th>Description</th></tr></thead>
1363<tbody>
ecdc0628 1364<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1365</tbody></table></div>
1366<h4>Returns</h4>
1367<p>Content length</p>
1368<!-- NEW PAGE -->
ecdc0628 1369<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetLength2'>httpGetLength2()</a></h3>
ef416fc2 1370<h4>Description</h4>
1371<p>Get the amount of data remaining from the
1372content-length or transfer-encoding fields.
1373
1374This function returns the complete content length, even for
ecdc0628 1375content larger than 2^31 - 1.
1376
1377</p>
ef416fc2 1378<h4>Syntax</h4>
1379<pre>
1380off_t
1381httpGetLength2(
1382 <a href='#http_t'>http_t</a> * http);
1383</pre>
1384<h4>Arguments</h4>
1385<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1386<thead><tr><th>Name</th><th>Description</th></tr></thead>
1387<tbody>
ecdc0628 1388<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1389</tbody></table></div>
1390<h4>Returns</h4>
1391<p>Content length</p>
1392<!-- NEW PAGE -->
ecdc0628 1393<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetStatus'>httpGetStatus()</a></h3>
1394<h4>Description</h4>
1395<p>Get the status of the last HTTP request.
1396
1397</p>
1398<h4>Syntax</h4>
1399<pre>
1400http_status_t
1401httpGetStatus(
1402 <a href='#http_t'>http_t</a> * http);
1403</pre>
1404<h4>Arguments</h4>
1405<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1406<thead><tr><th>Name</th><th>Description</th></tr></thead>
1407<tbody>
1408<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
1409</tbody></table></div>
1410<h4>Returns</h4>
1411<p>HTTP status</p>
1412<!-- NEW PAGE -->
ef416fc2 1413<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetSubField'>httpGetSubField()</a></h3>
1414<h4>Description</h4>
1415<p>Get a sub-field value.
1416
1417</p>
1418<h4>Syntax</h4>
1419<pre>
ecdc0628 1420char *
ef416fc2 1421httpGetSubField(
1422 <a href='#http_t'>http_t</a> * http,
1423 http_field_t field,
ecdc0628 1424 const char * name,
1425 char * value);
ef416fc2 1426</pre>
1427<h4>Arguments</h4>
1428<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1429<thead><tr><th>Name</th><th>Description</th></tr></thead>
1430<tbody>
ecdc0628 1431<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1432<tr><td><tt>field</tt></td><td>Field index</td></tr>
1433<tr><td><tt>name</tt></td><td>Name of sub-field</td></tr>
1434<tr><td><tt>value</tt></td><td>Value string</td></tr>
1435</tbody></table></div>
1436<h4>Returns</h4>
1437<p>Value or NULL</p>
1438<!-- NEW PAGE -->
1439<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetSubField2'>httpGetSubField2()</a></h3>
1440<h4>Description</h4>
1441<p>Get a sub-field value.
1442
1443</p>
1444<h4>Syntax</h4>
1445<pre>
ecdc0628 1446char *
ef416fc2 1447httpGetSubField2(
1448 <a href='#http_t'>http_t</a> * http,
1449 http_field_t field,
ecdc0628 1450 const char * name,
1451 char * value,
ef416fc2 1452 int valuelen);
1453</pre>
1454<h4>Arguments</h4>
1455<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1456<thead><tr><th>Name</th><th>Description</th></tr></thead>
1457<tbody>
ecdc0628 1458<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1459<tr><td><tt>field</tt></td><td>Field index</td></tr>
1460<tr><td><tt>name</tt></td><td>Name of sub-field</td></tr>
1461<tr><td><tt>value</tt></td><td>Value string</td></tr>
1462<tr><td><tt>valuelen</tt></td><td>Size of value buffer</td></tr>
1463</tbody></table></div>
1464<h4>Returns</h4>
1465<p>Value or NULL</p>
1466<!-- NEW PAGE -->
1467<h3 class='title'><a name='httpGets'>httpGets()</a></h3>
1468<h4>Description</h4>
1469<p>Get a line of text from a HTTP connection.</p>
1470<h4>Syntax</h4>
1471<pre>
ecdc0628 1472char *
ef416fc2 1473httpGets(
ecdc0628 1474 char * line,
ef416fc2 1475 int length,
1476 <a href='#http_t'>http_t</a> * http);
1477</pre>
1478<h4>Arguments</h4>
1479<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1480<thead><tr><th>Name</th><th>Description</th></tr></thead>
1481<tbody>
1482<tr><td><tt>line</tt></td><td>Line to read into</td></tr>
1483<tr><td><tt>length</tt></td><td>Max length of buffer</td></tr>
ecdc0628 1484<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1485</tbody></table></div>
1486<h4>Returns</h4>
1487<p>Line or NULL</p>
1488<!-- NEW PAGE -->
1489<h3 class='title'><a name='httpHead'>httpHead()</a></h3>
1490<h4>Description</h4>
1491<p>Send a HEAD request to the server.</p>
1492<h4>Syntax</h4>
1493<pre>
1494int
1495httpHead(
1496 <a href='#http_t'>http_t</a> * http,
ecdc0628 1497 const char * uri);
ef416fc2 1498</pre>
1499<h4>Arguments</h4>
1500<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1501<thead><tr><th>Name</th><th>Description</th></tr></thead>
1502<tbody>
ecdc0628 1503<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1504<tr><td><tt>uri</tt></td><td>URI for head</td></tr>
1505</tbody></table></div>
1506<h4>Returns</h4>
1507<p>Status of call (0 = success)</p>
1508<!-- NEW PAGE -->
1509<h3 class='title'><a name='httpInitialize'>httpInitialize()</a></h3>
1510<h4>Description</h4>
1511<p>Initialize the HTTP interface library and set the
1512default HTTP proxy (if any).</p>
1513<h4>Syntax</h4>
1514<pre>
1515void
1516httpInitialize(void);
1517</pre>
1518<h4>Arguments</h4>
1519<p>None.</p>
1520<h4>Returns</h4>
1521<p>Nothing.</p>
1522<!-- NEW PAGE -->
1523<h3 class='title'><a name='httpMD5'>httpMD5()</a></h3>
1524<h4>Description</h4>
1525<p>Compute the MD5 sum of the username:group:password.</p>
1526<h4>Syntax</h4>
1527<pre>
ecdc0628 1528char *
ef416fc2 1529httpMD5(
ecdc0628 1530 const char * username,
1531 const char * realm,
1532 const char * passwd,
1533 char md5[33]);
ef416fc2 1534</pre>
1535<h4>Arguments</h4>
1536<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1537<thead><tr><th>Name</th><th>Description</th></tr></thead>
1538<tbody>
1539<tr><td><tt>username</tt></td><td>User name</td></tr>
1540<tr><td><tt>realm</tt></td><td>Realm name</td></tr>
1541<tr><td><tt>passwd</tt></td><td>Password string</td></tr>
1542<tr><td><tt>md5[33]</tt></td><td>MD5 string</td></tr>
1543</tbody></table></div>
1544<h4>Returns</h4>
1545<p>MD5 sum</p>
1546<!-- NEW PAGE -->
1547<h3 class='title'><a name='httpMD5Final'>httpMD5Final()</a></h3>
1548<h4>Description</h4>
1549<p>Combine the MD5 sum of the username, group, and password
1550with the server-supplied nonce value, method, and
1551request-uri.</p>
1552<h4>Syntax</h4>
1553<pre>
ecdc0628 1554char *
ef416fc2 1555httpMD5Final(
ecdc0628 1556 const char * nonce,
1557 const char * method,
1558 const char * resource,
1559 char md5[33]);
ef416fc2 1560</pre>
1561<h4>Arguments</h4>
1562<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1563<thead><tr><th>Name</th><th>Description</th></tr></thead>
1564<tbody>
1565<tr><td><tt>nonce</tt></td><td>Server nonce value</td></tr>
1566<tr><td><tt>method</tt></td><td>METHOD (GET, POST, etc.)</td></tr>
1567<tr><td><tt>resource</tt></td><td>Resource path</td></tr>
1568<tr><td><tt>md5[33]</tt></td><td>MD5 sum</td></tr>
1569</tbody></table></div>
1570<h4>Returns</h4>
1571<p>New sum</p>
1572<!-- NEW PAGE -->
1573<h3 class='title'><a name='httpMD5String'>httpMD5String()</a></h3>
1574<h4>Description</h4>
1575<p>Convert an MD5 sum to a character string.</p>
1576<h4>Syntax</h4>
1577<pre>
ecdc0628 1578char *
ef416fc2 1579httpMD5String(
ecdc0628 1580 const unsigned char * sum,
1581 char md5[33]);
ef416fc2 1582</pre>
1583<h4>Arguments</h4>
1584<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1585<thead><tr><th>Name</th><th>Description</th></tr></thead>
1586<tbody>
1587<tr><td><tt>sum</tt></td><td>MD5 sum data</td></tr>
1588<tr><td><tt>md5[33]</tt></td><td>MD5 sum in hex</td></tr>
1589</tbody></table></div>
1590<h4>Returns</h4>
1591<p>MD5 sum in hex</p>
1592<!-- NEW PAGE -->
1593<h3 class='title'><a name='httpOptions'>httpOptions()</a></h3>
1594<h4>Description</h4>
1595<p>Send an OPTIONS request to the server.</p>
1596<h4>Syntax</h4>
1597<pre>
1598int
1599httpOptions(
1600 <a href='#http_t'>http_t</a> * http,
ecdc0628 1601 const char * uri);
ef416fc2 1602</pre>
1603<h4>Arguments</h4>
1604<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1605<thead><tr><th>Name</th><th>Description</th></tr></thead>
1606<tbody>
ecdc0628 1607<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1608<tr><td><tt>uri</tt></td><td>URI for options</td></tr>
1609</tbody></table></div>
1610<h4>Returns</h4>
1611<p>Status of call (0 = success)</p>
1612<!-- NEW PAGE -->
1613<h3 class='title'><a name='httpPost'>httpPost()</a></h3>
1614<h4>Description</h4>
1615<p>Send a POST request to the server.</p>
1616<h4>Syntax</h4>
1617<pre>
1618int
1619httpPost(
1620 <a href='#http_t'>http_t</a> * http,
ecdc0628 1621 const char * uri);
ef416fc2 1622</pre>
1623<h4>Arguments</h4>
1624<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1625<thead><tr><th>Name</th><th>Description</th></tr></thead>
1626<tbody>
ecdc0628 1627<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1628<tr><td><tt>uri</tt></td><td>URI for post</td></tr>
1629</tbody></table></div>
1630<h4>Returns</h4>
1631<p>Status of call (0 = success)</p>
1632<!-- NEW PAGE -->
ecdc0628 1633<h3 class='title'><a name='httpPut'>httpPut()</a></h3>
ef416fc2 1634<h4>Description</h4>
ecdc0628 1635<p>Send a PUT request to the server.</p>
ef416fc2 1636<h4>Syntax</h4>
1637<pre>
1638int
ecdc0628 1639httpPut(
ef416fc2 1640 <a href='#http_t'>http_t</a> * http,
ecdc0628 1641 const char * uri);
ef416fc2 1642</pre>
1643<h4>Arguments</h4>
1644<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1645<thead><tr><th>Name</th><th>Description</th></tr></thead>
1646<tbody>
ecdc0628 1647<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
1648<tr><td><tt>uri</tt></td><td>URI to put</td></tr>
ef416fc2 1649</tbody></table></div>
1650<h4>Returns</h4>
ecdc0628 1651<p>Status of call (0 = success)</p>
ef416fc2 1652<!-- NEW PAGE -->
ecdc0628 1653<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpRead'>httpRead()</a></h3>
ef416fc2 1654<h4>Description</h4>
ecdc0628 1655<p>Read data from a HTTP connection.
1656
1657This function is deprecated. Use the httpRead2() function which can
1658read more than 2GB of data.
1659
1660</p>
ef416fc2 1661<h4>Syntax</h4>
1662<pre>
1663int
ecdc0628 1664httpRead(
ef416fc2 1665 <a href='#http_t'>http_t</a> * http,
ecdc0628 1666 char * buffer,
1667 int length);
ef416fc2 1668</pre>
1669<h4>Arguments</h4>
1670<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1671<thead><tr><th>Name</th><th>Description</th></tr></thead>
1672<tbody>
ecdc0628 1673<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
1674<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
1675<tr><td><tt>length</tt></td><td>Maximum number of bytes</td></tr>
ef416fc2 1676</tbody></table></div>
1677<h4>Returns</h4>
ecdc0628 1678<p>Number of bytes read</p>
ef416fc2 1679<!-- NEW PAGE -->
ecdc0628 1680<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpRead2'>httpRead2()</a></h3>
ef416fc2 1681<h4>Description</h4>
ecdc0628 1682<p>Read data from a HTTP connection.
1683
1684</p>
ef416fc2 1685<h4>Syntax</h4>
1686<pre>
ecdc0628 1687ssize_t
1688httpRead2(
ef416fc2 1689 <a href='#http_t'>http_t</a> * http,
ecdc0628 1690 char * buffer,
1691 size_t length);
ef416fc2 1692</pre>
1693<h4>Arguments</h4>
1694<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1695<thead><tr><th>Name</th><th>Description</th></tr></thead>
1696<tbody>
ecdc0628 1697<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1698<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
1699<tr><td><tt>length</tt></td><td>Maximum number of bytes</td></tr>
1700</tbody></table></div>
1701<h4>Returns</h4>
1702<p>Number of bytes read</p>
1703<!-- NEW PAGE -->
1704<h3 class='title'><a name='httpReconnect'>httpReconnect()</a></h3>
1705<h4>Description</h4>
ecdc0628 1706<p>Reconnect to a HTTP server.</p>
ef416fc2 1707<h4>Syntax</h4>
1708<pre>
1709int
1710httpReconnect(
1711 <a href='#http_t'>http_t</a> * http);
1712</pre>
1713<h4>Arguments</h4>
1714<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1715<thead><tr><th>Name</th><th>Description</th></tr></thead>
1716<tbody>
ecdc0628 1717<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1718</tbody></table></div>
1719<h4>Returns</h4>
1720<p>0 on success, non-zero on failure</p>
1721<!-- NEW PAGE -->
ecdc0628 1722<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpSeparate'>httpSeparate()</a></h3>
ef416fc2 1723<h4>Description</h4>
1724<p>Separate a Universal Resource Identifier into its
ecdc0628 1725components.
1726
1727This function is deprecated; use the httpSeparateURI() function instead.
1728
1729</p>
ef416fc2 1730<h4>Syntax</h4>
1731<pre>
1732void
1733httpSeparate(
ecdc0628 1734 const char * uri,
1735 char * scheme,
1736 char * username,
1737 char * host,
ef416fc2 1738 int * port,
ecdc0628 1739 char * resource);
ef416fc2 1740</pre>
1741<h4>Arguments</h4>
1742<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1743<thead><tr><th>Name</th><th>Description</th></tr></thead>
1744<tbody>
1745<tr><td><tt>uri</tt></td><td>Universal Resource Identifier</td></tr>
1746<tr><td><tt>scheme</tt></td><td>Scheme [32] (http, https, etc.)</td></tr>
1747<tr><td><tt>username</tt></td><td>Username [1024]</td></tr>
1748<tr><td><tt>host</tt></td><td>Hostname [1024]</td></tr>
1749<tr><td><tt>port</tt></td><td>Port number to use</td></tr>
1750<tr><td><tt>resource</tt></td><td>Resource/filename [1024]</td></tr>
1751</tbody></table></div>
1752<h4>Returns</h4>
1753<p>Nothing.</p>
1754<!-- NEW PAGE -->
1755<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='httpSeparate2'>httpSeparate2()</a></h3>
1756<h4>Description</h4>
1757<p>Separate a Universal Resource Identifier into its
1758components.
1759
ecdc0628 1760This function is deprecated; use the httpSeparateURI() function instead.
1761
1762
ef416fc2 1763</p>
1764<h4>Syntax</h4>
1765<pre>
1766void
1767httpSeparate2(
ecdc0628 1768 const char * uri,
1769 char * scheme,
ef416fc2 1770 int schemelen,
ecdc0628 1771 char * username,
ef416fc2 1772 int usernamelen,
ecdc0628 1773 char * host,
ef416fc2 1774 int hostlen,
1775 int * port,
ecdc0628 1776 char * resource,
ef416fc2 1777 int resourcelen);
1778</pre>
1779<h4>Arguments</h4>
1780<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1781<thead><tr><th>Name</th><th>Description</th></tr></thead>
1782<tbody>
1783<tr><td><tt>uri</tt></td><td>Universal Resource Identifier</td></tr>
1784<tr><td><tt>scheme</tt></td><td>Scheme (http, https, etc.)</td></tr>
1785<tr><td><tt>schemelen</tt></td><td>Size of scheme buffer</td></tr>
1786<tr><td><tt>username</tt></td><td>Username</td></tr>
1787<tr><td><tt>usernamelen</tt></td><td>Size of username buffer</td></tr>
1788<tr><td><tt>host</tt></td><td>Hostname</td></tr>
1789<tr><td><tt>hostlen</tt></td><td>Size of hostname buffer</td></tr>
1790<tr><td><tt>port</tt></td><td>Port number to use</td></tr>
1791<tr><td><tt>resource</tt></td><td>Resource/filename</td></tr>
1792<tr><td><tt>resourcelen</tt></td><td>Size of resource buffer</td></tr>
1793</tbody></table></div>
1794<h4>Returns</h4>
1795<p>Nothing.</p>
1796<!-- NEW PAGE -->
1797<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpSeparateURI'>httpSeparateURI()</a></h3>
1798<h4>Description</h4>
1799<p>Separate a Universal Resource Identifier into its
1800components.
1801
1802</p>
1803<h4>Syntax</h4>
1804<pre>
1805http_uri_status_t
1806httpSeparateURI(
ecdc0628 1807 http_uri_coding_t decoding,
1808 const char * uri,
1809 char * scheme,
ef416fc2 1810 int schemelen,
ecdc0628 1811 char * username,
ef416fc2 1812 int usernamelen,
ecdc0628 1813 char * host,
ef416fc2 1814 int hostlen,
1815 int * port,
ecdc0628 1816 char * resource,
ef416fc2 1817 int resourcelen);
1818</pre>
1819<h4>Arguments</h4>
1820<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1821<thead><tr><th>Name</th><th>Description</th></tr></thead>
1822<tbody>
ecdc0628 1823<tr><td><tt>decoding</tt></td><td>Decoding flags</td></tr>
ef416fc2 1824<tr><td><tt>uri</tt></td><td>Universal Resource Identifier</td></tr>
1825<tr><td><tt>scheme</tt></td><td>Scheme (http, https, etc.)</td></tr>
1826<tr><td><tt>schemelen</tt></td><td>Size of scheme buffer</td></tr>
1827<tr><td><tt>username</tt></td><td>Username</td></tr>
1828<tr><td><tt>usernamelen</tt></td><td>Size of username buffer</td></tr>
1829<tr><td><tt>host</tt></td><td>Hostname</td></tr>
1830<tr><td><tt>hostlen</tt></td><td>Size of hostname buffer</td></tr>
1831<tr><td><tt>port</tt></td><td>Port number to use</td></tr>
1832<tr><td><tt>resource</tt></td><td>Resource/filename</td></tr>
1833<tr><td><tt>resourcelen</tt></td><td>Size of resource buffer</td></tr>
1834</tbody></table></div>
1835<h4>Returns</h4>
1836<p>Result of separation</p>
1837<!-- NEW PAGE -->
1838<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpSetCookie'>httpSetCookie()</a></h3>
1839<h4>Description</h4>
1840<p>Set the cookie value(s)...
1841
1842</p>
1843<h4>Syntax</h4>
1844<pre>
1845void
1846httpSetCookie(
1847 <a href='#http_t'>http_t</a> * http,
ecdc0628 1848 const char * cookie);
ef416fc2 1849</pre>
1850<h4>Arguments</h4>
1851<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1852<thead><tr><th>Name</th><th>Description</th></tr></thead>
1853<tbody>
1854<tr><td><tt>http</tt></td><td>Connection</td></tr>
1855<tr><td><tt>cookie</tt></td><td>Cookie string</td></tr>
1856</tbody></table></div>
1857<h4>Returns</h4>
1858<p>Nothing.</p>
1859<!-- NEW PAGE -->
80ca4592 1860<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpSetExpect'>httpSetExpect()</a></h3>
1861<h4>Description</h4>
1862<p>Set the Expect: header in a request.
1863
1864Currently only HTTP_CONTINUE is supported for the &quot;expect&quot; argument.
1865
1866</p>
1867<h4>Syntax</h4>
1868<pre>
1869void
1870httpSetExpect(
1871 <a href='#http_t'>http_t</a> * http,
1872 http_status_t expect);
1873</pre>
1874<h4>Arguments</h4>
1875<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1876<thead><tr><th>Name</th><th>Description</th></tr></thead>
1877<tbody>
1878<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
1879<tr><td><tt>expect</tt></td><td>HTTP status to expect (HTTP_CONTINUE)</td></tr>
1880</tbody></table></div>
1881<h4>Returns</h4>
1882<p>Nothing.</p>
1883<!-- NEW PAGE -->
ef416fc2 1884<h3 class='title'><a name='httpSetField'>httpSetField()</a></h3>
1885<h4>Description</h4>
1886<p>Set the value of an HTTP header.</p>
1887<h4>Syntax</h4>
1888<pre>
1889void
1890httpSetField(
1891 <a href='#http_t'>http_t</a> * http,
1892 http_field_t field,
ecdc0628 1893 const char * value);
ef416fc2 1894</pre>
1895<h4>Arguments</h4>
1896<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1897<thead><tr><th>Name</th><th>Description</th></tr></thead>
1898<tbody>
ecdc0628 1899<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1900<tr><td><tt>field</tt></td><td>Field index</td></tr>
1901<tr><td><tt>value</tt></td><td>Value</td></tr>
1902</tbody></table></div>
1903<h4>Returns</h4>
1904<p>Nothing.</p>
1905<!-- NEW PAGE -->
1906<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpSetLength'>httpSetLength()</a></h3>
1907<h4>Description</h4>
1908<p>Set the content-length and content-encoding.
1909
1910</p>
1911<h4>Syntax</h4>
1912<pre>
1913void
1914httpSetLength(
1915 <a href='#http_t'>http_t</a> * http,
1916 size_t length);
1917</pre>
1918<h4>Arguments</h4>
1919<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1920<thead><tr><th>Name</th><th>Description</th></tr></thead>
1921<tbody>
ecdc0628 1922<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1923<tr><td><tt>length</tt></td><td>Length (0 for chunked)</td></tr>
1924</tbody></table></div>
1925<h4>Returns</h4>
1926<p>Nothing.</p>
1927<!-- NEW PAGE -->
1928<h3 class='title'><a name='httpStatus'>httpStatus()</a></h3>
1929<h4>Description</h4>
1930<p>Return a short string describing a HTTP status code.</p>
1931<h4>Syntax</h4>
1932<pre>
ecdc0628 1933const char *
ef416fc2 1934httpStatus(
1935 http_status_t status);
1936</pre>
1937<h4>Arguments</h4>
1938<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1939<thead><tr><th>Name</th><th>Description</th></tr></thead>
1940<tbody>
1941<tr><td><tt>status</tt></td><td>HTTP status code</td></tr>
1942</tbody></table></div>
1943<h4>Returns</h4>
1944<p>String or NULL</p>
1945<!-- NEW PAGE -->
1946<h3 class='title'><a name='httpTrace'>httpTrace()</a></h3>
1947<h4>Description</h4>
1948<p>Send an TRACE request to the server.</p>
1949<h4>Syntax</h4>
1950<pre>
1951int
1952httpTrace(
1953 <a href='#http_t'>http_t</a> * http,
ecdc0628 1954 const char * uri);
ef416fc2 1955</pre>
1956<h4>Arguments</h4>
1957<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1958<thead><tr><th>Name</th><th>Description</th></tr></thead>
1959<tbody>
ecdc0628 1960<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1961<tr><td><tt>uri</tt></td><td>URI for trace</td></tr>
1962</tbody></table></div>
1963<h4>Returns</h4>
1964<p>Status of call (0 = success)</p>
1965<!-- NEW PAGE -->
1966<h3 class='title'><a name='httpUpdate'>httpUpdate()</a></h3>
1967<h4>Description</h4>
1968<p>Update the current HTTP state for incoming data.</p>
1969<h4>Syntax</h4>
1970<pre>
1971http_status_t
1972httpUpdate(
1973 <a href='#http_t'>http_t</a> * http);
1974</pre>
1975<h4>Arguments</h4>
1976<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1977<thead><tr><th>Name</th><th>Description</th></tr></thead>
1978<tbody>
ecdc0628 1979<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 1980</tbody></table></div>
1981<h4>Returns</h4>
1982<p>HTTP status</p>
1983<!-- NEW PAGE -->
1984<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpWait'>httpWait()</a></h3>
1985<h4>Description</h4>
1986<p>Wait for data available on a connection.
1987
1988</p>
1989<h4>Syntax</h4>
1990<pre>
1991int
1992httpWait(
1993 <a href='#http_t'>http_t</a> * http,
1994 int msec);
1995</pre>
1996<h4>Arguments</h4>
1997<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
1998<thead><tr><th>Name</th><th>Description</th></tr></thead>
1999<tbody>
ecdc0628 2000<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 2001<tr><td><tt>msec</tt></td><td>Milliseconds to wait</td></tr>
2002</tbody></table></div>
2003<h4>Returns</h4>
2004<p>1 if data is available, 0 otherwise</p>
2005<!-- NEW PAGE -->
ecdc0628 2006<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpWrite'>httpWrite()</a></h3>
ef416fc2 2007<h4>Description</h4>
ecdc0628 2008<p>Write data to a HTTP connection.
2009
2010This function is deprecated. Use the httpWrite2() function which can
2011write more than 2GB of data.
2012
2013</p>
ef416fc2 2014<h4>Syntax</h4>
2015<pre>
2016int
2017httpWrite(
2018 <a href='#http_t'>http_t</a> * http,
ecdc0628 2019 const char * buffer,
ef416fc2 2020 int length);
2021</pre>
2022<h4>Arguments</h4>
2023<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2024<thead><tr><th>Name</th><th>Description</th></tr></thead>
2025<tbody>
ecdc0628 2026<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
2027<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
2028<tr><td><tt>length</tt></td><td>Number of bytes to write</td></tr>
2029</tbody></table></div>
2030<h4>Returns</h4>
2031<p>Number of bytes written</p>
2032<!-- NEW PAGE -->
2033<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpWrite2'>httpWrite2()</a></h3>
2034<h4>Description</h4>
2035<p>Write data to a HTTP connection.
2036
2037</p>
2038<h4>Syntax</h4>
2039<pre>
2040ssize_t
2041httpWrite2(
2042 <a href='#http_t'>http_t</a> * http,
2043 const char * buffer,
2044 size_t length);
2045</pre>
2046<h4>Arguments</h4>
2047<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2048<thead><tr><th>Name</th><th>Description</th></tr></thead>
2049<tbody>
2050<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
ef416fc2 2051<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
2052<tr><td><tt>length</tt></td><td>Number of bytes to write</td></tr>
2053</tbody></table></div>
2054<h4>Returns</h4>
2055<p>Number of bytes written</p>
2056<!-- NEW PAGE -->
2057<h3 class='title'><a name='ippAddBoolean'>ippAddBoolean()</a></h3>
2058<h4>Description</h4>
ecdc0628 2059<p>Add a boolean attribute to an IPP message.</p>
ef416fc2 2060<h4>Syntax</h4>
2061<pre>
2062<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2063ippAddBoolean(
2064 <a href='#ipp_t'>ipp_t</a> * ipp,
2065 ipp_tag_t group,
ecdc0628 2066 const char * name,
2067 char value);
ef416fc2 2068</pre>
2069<h4>Arguments</h4>
2070<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2071<thead><tr><th>Name</th><th>Description</th></tr></thead>
2072<tbody>
ecdc0628 2073<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2074<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2075<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2076<tr><td><tt>value</tt></td><td>Value of attribute</td></tr>
2077</tbody></table></div>
2078<h4>Returns</h4>
2079<p>New attribute</p>
2080<!-- NEW PAGE -->
2081<h3 class='title'><a name='ippAddBooleans'>ippAddBooleans()</a></h3>
2082<h4>Description</h4>
2083<p>Add an array of boolean values.</p>
2084<h4>Syntax</h4>
2085<pre>
2086<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2087ippAddBooleans(
2088 <a href='#ipp_t'>ipp_t</a> * ipp,
2089 ipp_tag_t group,
ecdc0628 2090 const char * name,
ef416fc2 2091 int num_values,
ecdc0628 2092 const char * values);
ef416fc2 2093</pre>
2094<h4>Arguments</h4>
2095<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2096<thead><tr><th>Name</th><th>Description</th></tr></thead>
2097<tbody>
ecdc0628 2098<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2099<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2100<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2101<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
2102<tr><td><tt>values</tt></td><td>Values</td></tr>
2103</tbody></table></div>
2104<h4>Returns</h4>
2105<p>New attribute</p>
2106<!-- NEW PAGE -->
2107<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippAddCollection'>ippAddCollection()</a></h3>
2108<h4>Description</h4>
2109<p>Add a collection value.
2110
2111</p>
2112<h4>Syntax</h4>
2113<pre>
2114<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2115ippAddCollection(
2116 <a href='#ipp_t'>ipp_t</a> * ipp,
2117 ipp_tag_t group,
ecdc0628 2118 const char * name,
ef416fc2 2119 <a href='#ipp_t'>ipp_t</a> * value);
2120</pre>
2121<h4>Arguments</h4>
2122<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2123<thead><tr><th>Name</th><th>Description</th></tr></thead>
2124<tbody>
ecdc0628 2125<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2126<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2127<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2128<tr><td><tt>value</tt></td><td>Value</td></tr>
2129</tbody></table></div>
2130<h4>Returns</h4>
2131<p>New attribute</p>
2132<!-- NEW PAGE -->
2133<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippAddCollections'>ippAddCollections()</a></h3>
2134<h4>Description</h4>
2135<p>Add an array of collection values.
2136
2137</p>
2138<h4>Syntax</h4>
2139<pre>
2140<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2141ippAddCollections(
2142 <a href='#ipp_t'>ipp_t</a> * ipp,
2143 ipp_tag_t group,
ecdc0628 2144 const char * name,
ef416fc2 2145 int num_values,
2146 const <a href='#ipp_t'>ipp_t</a> ** values);
2147</pre>
2148<h4>Arguments</h4>
2149<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2150<thead><tr><th>Name</th><th>Description</th></tr></thead>
2151<tbody>
ecdc0628 2152<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2153<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2154<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2155<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
2156<tr><td><tt>values</tt></td><td>Values</td></tr>
2157</tbody></table></div>
2158<h4>Returns</h4>
2159<p>New attribute</p>
2160<!-- NEW PAGE -->
2161<h3 class='title'><a name='ippAddDate'>ippAddDate()</a></h3>
2162<h4>Description</h4>
ecdc0628 2163<p>Add a date attribute to an IPP message.</p>
ef416fc2 2164<h4>Syntax</h4>
2165<pre>
2166<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2167ippAddDate(
2168 <a href='#ipp_t'>ipp_t</a> * ipp,
2169 ipp_tag_t group,
ecdc0628 2170 const char * name,
ef416fc2 2171 const <a href='#ipp_uchar_t'>ipp_uchar_t</a> * value);
2172</pre>
2173<h4>Arguments</h4>
2174<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2175<thead><tr><th>Name</th><th>Description</th></tr></thead>
2176<tbody>
ecdc0628 2177<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2178<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2179<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2180<tr><td><tt>value</tt></td><td>Value</td></tr>
2181</tbody></table></div>
2182<h4>Returns</h4>
2183<p>New attribute</p>
2184<!-- NEW PAGE -->
2185<h3 class='title'><a name='ippAddInteger'>ippAddInteger()</a></h3>
2186<h4>Description</h4>
ecdc0628 2187<p>Add a integer attribute to an IPP message.</p>
ef416fc2 2188<h4>Syntax</h4>
2189<pre>
2190<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2191ippAddInteger(
2192 <a href='#ipp_t'>ipp_t</a> * ipp,
2193 ipp_tag_t group,
2194 ipp_tag_t type,
ecdc0628 2195 const char * name,
ef416fc2 2196 int value);
2197</pre>
2198<h4>Arguments</h4>
2199<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2200<thead><tr><th>Name</th><th>Description</th></tr></thead>
2201<tbody>
ecdc0628 2202<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2203<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2204<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
2205<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2206<tr><td><tt>value</tt></td><td>Value of attribute</td></tr>
2207</tbody></table></div>
2208<h4>Returns</h4>
2209<p>New attribute</p>
2210<!-- NEW PAGE -->
2211<h3 class='title'><a name='ippAddIntegers'>ippAddIntegers()</a></h3>
2212<h4>Description</h4>
2213<p>Add an array of integer values.</p>
2214<h4>Syntax</h4>
2215<pre>
2216<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2217ippAddIntegers(
2218 <a href='#ipp_t'>ipp_t</a> * ipp,
2219 ipp_tag_t group,
2220 ipp_tag_t type,
ecdc0628 2221 const char * name,
ef416fc2 2222 int num_values,
2223 const int * values);
2224</pre>
2225<h4>Arguments</h4>
2226<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2227<thead><tr><th>Name</th><th>Description</th></tr></thead>
2228<tbody>
ecdc0628 2229<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2230<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2231<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
2232<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2233<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
2234<tr><td><tt>values</tt></td><td>Values</td></tr>
2235</tbody></table></div>
2236<h4>Returns</h4>
2237<p>New attribute</p>
2238<!-- NEW PAGE -->
2239<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippAddOctetString'>ippAddOctetString()</a></h3>
2240<h4>Description</h4>
ecdc0628 2241<p>Add an octetString value to an IPP message.
ef416fc2 2242
2243</p>
2244<h4>Syntax</h4>
2245<pre>
2246<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2247ippAddOctetString(
2248 <a href='#ipp_t'>ipp_t</a> * ipp,
2249 ipp_tag_t group,
ecdc0628 2250 const char * name,
ef416fc2 2251 const void * data,
2252 int datalen);
2253</pre>
2254<h4>Arguments</h4>
2255<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2256<thead><tr><th>Name</th><th>Description</th></tr></thead>
2257<tbody>
ecdc0628 2258<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2259<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2260<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2261<tr><td><tt>data</tt></td><td>octetString data</td></tr>
2262<tr><td><tt>datalen</tt></td><td>Length of data in bytes</td></tr>
2263</tbody></table></div>
2264<h4>Returns</h4>
2265<p>New attribute</p>
2266<!-- NEW PAGE -->
2267<h3 class='title'><a name='ippAddRange'>ippAddRange()</a></h3>
2268<h4>Description</h4>
ecdc0628 2269<p>Add a range of values to an IPP message.</p>
ef416fc2 2270<h4>Syntax</h4>
2271<pre>
2272<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2273ippAddRange(
2274 <a href='#ipp_t'>ipp_t</a> * ipp,
2275 ipp_tag_t group,
ecdc0628 2276 const char * name,
ef416fc2 2277 int lower,
2278 int upper);
2279</pre>
2280<h4>Arguments</h4>
2281<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2282<thead><tr><th>Name</th><th>Description</th></tr></thead>
2283<tbody>
ecdc0628 2284<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2285<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2286<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2287<tr><td><tt>lower</tt></td><td>Lower value</td></tr>
2288<tr><td><tt>upper</tt></td><td>Upper value</td></tr>
2289</tbody></table></div>
2290<h4>Returns</h4>
2291<p>New attribute</p>
2292<!-- NEW PAGE -->
2293<h3 class='title'><a name='ippAddRanges'>ippAddRanges()</a></h3>
2294<h4>Description</h4>
ecdc0628 2295<p>Add ranges of values to an IPP message.</p>
ef416fc2 2296<h4>Syntax</h4>
2297<pre>
2298<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2299ippAddRanges(
2300 <a href='#ipp_t'>ipp_t</a> * ipp,
2301 ipp_tag_t group,
ecdc0628 2302 const char * name,
ef416fc2 2303 int num_values,
2304 const int * lower,
2305 const int * upper);
2306</pre>
2307<h4>Arguments</h4>
2308<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2309<thead><tr><th>Name</th><th>Description</th></tr></thead>
2310<tbody>
ecdc0628 2311<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2312<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2313<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2314<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
2315<tr><td><tt>lower</tt></td><td>Lower values</td></tr>
2316<tr><td><tt>upper</tt></td><td>Upper values</td></tr>
2317</tbody></table></div>
2318<h4>Returns</h4>
2319<p>New attribute</p>
2320<!-- NEW PAGE -->
2321<h3 class='title'><a name='ippAddResolution'>ippAddResolution()</a></h3>
2322<h4>Description</h4>
ecdc0628 2323<p>Add a resolution value to an IPP message.</p>
ef416fc2 2324<h4>Syntax</h4>
2325<pre>
2326<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2327ippAddResolution(
2328 <a href='#ipp_t'>ipp_t</a> * ipp,
2329 ipp_tag_t group,
ecdc0628 2330 const char * name,
ef416fc2 2331 ipp_res_t units,
2332 int xres,
2333 int yres);
2334</pre>
2335<h4>Arguments</h4>
2336<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2337<thead><tr><th>Name</th><th>Description</th></tr></thead>
2338<tbody>
ecdc0628 2339<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2340<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2341<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2342<tr><td><tt>units</tt></td><td>Units for resolution</td></tr>
2343<tr><td><tt>xres</tt></td><td>X resolution</td></tr>
2344<tr><td><tt>yres</tt></td><td>Y resolution</td></tr>
2345</tbody></table></div>
2346<h4>Returns</h4>
2347<p>New attribute</p>
2348<!-- NEW PAGE -->
2349<h3 class='title'><a name='ippAddResolutions'>ippAddResolutions()</a></h3>
2350<h4>Description</h4>
ecdc0628 2351<p>Add resolution values to an IPP message.</p>
ef416fc2 2352<h4>Syntax</h4>
2353<pre>
2354<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2355ippAddResolutions(
2356 <a href='#ipp_t'>ipp_t</a> * ipp,
2357 ipp_tag_t group,
ecdc0628 2358 const char * name,
ef416fc2 2359 int num_values,
2360 ipp_res_t units,
2361 const int * xres,
2362 const int * yres);
2363</pre>
2364<h4>Arguments</h4>
2365<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2366<thead><tr><th>Name</th><th>Description</th></tr></thead>
2367<tbody>
ecdc0628 2368<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2369<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2370<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2371<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
2372<tr><td><tt>units</tt></td><td>Units for resolution</td></tr>
2373<tr><td><tt>xres</tt></td><td>X resolutions</td></tr>
2374<tr><td><tt>yres</tt></td><td>Y resolutions</td></tr>
2375</tbody></table></div>
2376<h4>Returns</h4>
2377<p>New attribute</p>
2378<!-- NEW PAGE -->
2379<h3 class='title'><a name='ippAddSeparator'>ippAddSeparator()</a></h3>
2380<h4>Description</h4>
ecdc0628 2381<p>Add a group separator to an IPP message.</p>
ef416fc2 2382<h4>Syntax</h4>
2383<pre>
2384<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2385ippAddSeparator(
2386 <a href='#ipp_t'>ipp_t</a> * ipp);
2387</pre>
2388<h4>Arguments</h4>
2389<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2390<thead><tr><th>Name</th><th>Description</th></tr></thead>
2391<tbody>
ecdc0628 2392<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2393</tbody></table></div>
2394<h4>Returns</h4>
2395<p>New attribute</p>
2396<!-- NEW PAGE -->
2397<h3 class='title'><a name='ippAddString'>ippAddString()</a></h3>
2398<h4>Description</h4>
ecdc0628 2399<p>Add a language-encoded string to an IPP message.</p>
ef416fc2 2400<h4>Syntax</h4>
2401<pre>
2402<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2403ippAddString(
2404 <a href='#ipp_t'>ipp_t</a> * ipp,
2405 ipp_tag_t group,
2406 ipp_tag_t type,
ecdc0628 2407 const char * name,
2408 const char * charset,
2409 const char * value);
ef416fc2 2410</pre>
2411<h4>Arguments</h4>
2412<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2413<thead><tr><th>Name</th><th>Description</th></tr></thead>
2414<tbody>
ecdc0628 2415<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2416<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2417<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
2418<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2419<tr><td><tt>charset</tt></td><td>Character set</td></tr>
2420<tr><td><tt>value</tt></td><td>Value</td></tr>
2421</tbody></table></div>
2422<h4>Returns</h4>
2423<p>New attribute</p>
2424<!-- NEW PAGE -->
2425<h3 class='title'><a name='ippAddStrings'>ippAddStrings()</a></h3>
2426<h4>Description</h4>
ecdc0628 2427<p>Add language-encoded strings to an IPP message.</p>
ef416fc2 2428<h4>Syntax</h4>
2429<pre>
2430<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2431ippAddStrings(
2432 <a href='#ipp_t'>ipp_t</a> * ipp,
2433 ipp_tag_t group,
2434 ipp_tag_t type,
ecdc0628 2435 const char * name,
ef416fc2 2436 int num_values,
ecdc0628 2437 const char * charset,
2438 const char *const * values);
ef416fc2 2439</pre>
2440<h4>Arguments</h4>
2441<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2442<thead><tr><th>Name</th><th>Description</th></tr></thead>
2443<tbody>
ecdc0628 2444<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2445<tr><td><tt>group</tt></td><td>IPP group</td></tr>
2446<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
2447<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2448<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
2449<tr><td><tt>charset</tt></td><td>Character set</td></tr>
2450<tr><td><tt>values</tt></td><td>Values</td></tr>
2451</tbody></table></div>
2452<h4>Returns</h4>
2453<p>New attribute</p>
2454<!-- NEW PAGE -->
2455<h3 class='title'><a name='ippDateToTime'>ippDateToTime()</a></h3>
2456<h4>Description</h4>
2457<p>Convert from RFC 1903 Date/Time format to UNIX time
2458in seconds.</p>
2459<h4>Syntax</h4>
2460<pre>
2461time_t
2462ippDateToTime(
2463 const <a href='#ipp_uchar_t'>ipp_uchar_t</a> * date);
2464</pre>
2465<h4>Arguments</h4>
2466<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2467<thead><tr><th>Name</th><th>Description</th></tr></thead>
2468<tbody>
2469<tr><td><tt>date</tt></td><td>RFC 1903 date info</td></tr>
2470</tbody></table></div>
2471<h4>Returns</h4>
2472<p>UNIX time value</p>
2473<!-- NEW PAGE -->
2474<h3 class='title'><a name='ippDelete'>ippDelete()</a></h3>
2475<h4>Description</h4>
ecdc0628 2476<p>Delete an IPP message.</p>
ef416fc2 2477<h4>Syntax</h4>
2478<pre>
2479void
2480ippDelete(
2481 <a href='#ipp_t'>ipp_t</a> * ipp);
2482</pre>
2483<h4>Arguments</h4>
2484<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2485<thead><tr><th>Name</th><th>Description</th></tr></thead>
2486<tbody>
ecdc0628 2487<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2488</tbody></table></div>
2489<h4>Returns</h4>
2490<p>Nothing.</p>
2491<!-- NEW PAGE -->
2492<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippDeleteAttribute'>ippDeleteAttribute()</a></h3>
2493<h4>Description</h4>
ecdc0628 2494<p>Delete a single attribute in an IPP message.
ef416fc2 2495
2496</p>
2497<h4>Syntax</h4>
2498<pre>
2499void
2500ippDeleteAttribute(
2501 <a href='#ipp_t'>ipp_t</a> * ipp,
2502 <a href='#ipp_attribute_t'>ipp_attribute_t</a> * attr);
2503</pre>
2504<h4>Arguments</h4>
2505<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2506<thead><tr><th>Name</th><th>Description</th></tr></thead>
2507<tbody>
ecdc0628 2508<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2509<tr><td><tt>attr</tt></td><td>Attribute to delete</td></tr>
2510</tbody></table></div>
2511<h4>Returns</h4>
2512<p>Nothing.</p>
2513<!-- NEW PAGE -->
2514<h3 class='title'><a name='ippErrorString'>ippErrorString()</a></h3>
2515<h4>Description</h4>
2516<p>Return a name for the given status code.</p>
2517<h4>Syntax</h4>
2518<pre>
ecdc0628 2519const char *
ef416fc2 2520ippErrorString(
2521 ipp_status_t error);
2522</pre>
2523<h4>Arguments</h4>
2524<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2525<thead><tr><th>Name</th><th>Description</th></tr></thead>
2526<tbody>
2527<tr><td><tt>error</tt></td><td>Error status</td></tr>
2528</tbody></table></div>
2529<h4>Returns</h4>
2530<p>Text string</p>
2531<!-- NEW PAGE -->
2532<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippErrorValue'>ippErrorValue()</a></h3>
2533<h4>Description</h4>
2534<p>Return a status code for the given name.
2535
2536</p>
2537<h4>Syntax</h4>
2538<pre>
2539ipp_status_t
2540ippErrorValue(
ecdc0628 2541 const char * name);
ef416fc2 2542</pre>
2543<h4>Arguments</h4>
2544<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2545<thead><tr><th>Name</th><th>Description</th></tr></thead>
2546<tbody>
2547<tr><td><tt>name</tt></td><td>Name</td></tr>
2548</tbody></table></div>
2549<h4>Returns</h4>
2550<p>IPP status code</p>
2551<!-- NEW PAGE -->
2552<h3 class='title'><a name='ippFindAttribute'>ippFindAttribute()</a></h3>
2553<h4>Description</h4>
2554<p>Find a named attribute in a request...</p>
2555<h4>Syntax</h4>
2556<pre>
2557<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2558ippFindAttribute(
2559 <a href='#ipp_t'>ipp_t</a> * ipp,
ecdc0628 2560 const char * name,
ef416fc2 2561 ipp_tag_t type);
2562</pre>
2563<h4>Arguments</h4>
2564<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2565<thead><tr><th>Name</th><th>Description</th></tr></thead>
2566<tbody>
ecdc0628 2567<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2568<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2569<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
2570</tbody></table></div>
2571<h4>Returns</h4>
2572<p>Matching attribute</p>
2573<!-- NEW PAGE -->
2574<h3 class='title'><a name='ippFindNextAttribute'>ippFindNextAttribute()</a></h3>
2575<h4>Description</h4>
2576<p>Find the next named attribute in a request...</p>
2577<h4>Syntax</h4>
2578<pre>
2579<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
2580ippFindNextAttribute(
2581 <a href='#ipp_t'>ipp_t</a> * ipp,
ecdc0628 2582 const char * name,
ef416fc2 2583 ipp_tag_t type);
2584</pre>
2585<h4>Arguments</h4>
2586<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2587<thead><tr><th>Name</th><th>Description</th></tr></thead>
2588<tbody>
ecdc0628 2589<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2590<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
2591<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
2592</tbody></table></div>
2593<h4>Returns</h4>
2594<p>Matching attribute</p>
2595<!-- NEW PAGE -->
2596<h3 class='title'><a name='ippLength'>ippLength()</a></h3>
2597<h4>Description</h4>
ecdc0628 2598<p>Compute the length of an IPP message.</p>
ef416fc2 2599<h4>Syntax</h4>
2600<pre>
2601size_t
2602ippLength(
2603 <a href='#ipp_t'>ipp_t</a> * ipp);
2604</pre>
2605<h4>Arguments</h4>
2606<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2607<thead><tr><th>Name</th><th>Description</th></tr></thead>
2608<tbody>
ecdc0628 2609<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
ef416fc2 2610</tbody></table></div>
2611<h4>Returns</h4>
ecdc0628 2612<p>Size of IPP message</p>
ef416fc2 2613<!-- NEW PAGE -->
2614<h3 class='title'><a name='ippNew'>ippNew()</a></h3>
2615<h4>Description</h4>
ecdc0628 2616<p>Allocate a new IPP message.</p>
ef416fc2 2617<h4>Syntax</h4>
2618<pre>
2619<a href='#ipp_t'>ipp_t</a> *
2620ippNew(void);
2621</pre>
2622<h4>Arguments</h4>
2623<p>None.</p>
2624<h4>Returns</h4>
ecdc0628 2625<p>New IPP message</p>
2626<!-- NEW PAGE -->
2627<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippNewRequest'>ippNewRequest()</a></h3>
2628<h4>Description</h4>
2629<p>Allocate a new IPP request message.
2630
2631The new request message is initialized with the attributes-charset and
2632attributes-natural-language attributes added. The
2633attributes-natural-language value is derived from the current locale.
2634
2635</p>
2636<h4>Syntax</h4>
2637<pre>
2638<a href='#ipp_t'>ipp_t</a> *
2639ippNewRequest(
2640 ipp_op_t op);
2641</pre>
2642<h4>Arguments</h4>
2643<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2644<thead><tr><th>Name</th><th>Description</th></tr></thead>
2645<tbody>
2646<tr><td><tt>op</tt></td><td>Operation code</td></tr>
2647</tbody></table></div>
2648<h4>Returns</h4>
2649<p>IPP request message</p>
ef416fc2 2650<!-- NEW PAGE -->
2651<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippOpString'>ippOpString()</a></h3>
2652<h4>Description</h4>
2653<p>Return a name for the given operation id.
2654
2655</p>
2656<h4>Syntax</h4>
2657<pre>
ecdc0628 2658const char *
ef416fc2 2659ippOpString(
2660 ipp_op_t op);
2661</pre>
2662<h4>Arguments</h4>
2663<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2664<thead><tr><th>Name</th><th>Description</th></tr></thead>
2665<tbody>
2666<tr><td><tt>op</tt></td><td>Operation ID</td></tr>
2667</tbody></table></div>
2668<h4>Returns</h4>
2669<p>Name</p>
2670<!-- NEW PAGE -->
2671<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippOpValue'>ippOpValue()</a></h3>
2672<h4>Description</h4>
2673<p>Return an operation id for the given name.
2674
2675</p>
2676<h4>Syntax</h4>
2677<pre>
2678ipp_op_t
2679ippOpValue(
ecdc0628 2680 const char * name);
ef416fc2 2681</pre>
2682<h4>Arguments</h4>
2683<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2684<thead><tr><th>Name</th><th>Description</th></tr></thead>
2685<tbody>
2686<tr><td><tt>name</tt></td><td>Textual name</td></tr>
2687</tbody></table></div>
2688<h4>Returns</h4>
2689<p>Operation ID</p>
2690<!-- NEW PAGE -->
2691<h3 class='title'><a name='ippPort'>ippPort()</a></h3>
2692<h4>Description</h4>
2693<p>Return the default IPP port number.</p>
2694<h4>Syntax</h4>
2695<pre>
2696int
2697ippPort(void);
2698</pre>
2699<h4>Arguments</h4>
2700<p>None.</p>
2701<h4>Returns</h4>
2702<p>Port number</p>
2703<!-- NEW PAGE -->
2704<h3 class='title'><a name='ippRead'>ippRead()</a></h3>
2705<h4>Description</h4>
ecdc0628 2706<p>Read data for an IPP message from a HTTP connection.</p>
ef416fc2 2707<h4>Syntax</h4>
2708<pre>
2709ipp_state_t
2710ippRead(
2711 <a href='#http_t'>http_t</a> * http,
2712 <a href='#ipp_t'>ipp_t</a> * ipp);
2713</pre>
2714<h4>Arguments</h4>
2715<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2716<thead><tr><th>Name</th><th>Description</th></tr></thead>
2717<tbody>
2718<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
2719<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
2720</tbody></table></div>
2721<h4>Returns</h4>
2722<p>Current state</p>
2723<!-- NEW PAGE -->
2724<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippReadFile'>ippReadFile()</a></h3>
2725<h4>Description</h4>
ecdc0628 2726<p>Read data for an IPP message from a file.
ef416fc2 2727
2728</p>
2729<h4>Syntax</h4>
2730<pre>
2731ipp_state_t
2732ippReadFile(
2733 int fd,
2734 <a href='#ipp_t'>ipp_t</a> * ipp);
2735</pre>
2736<h4>Arguments</h4>
2737<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2738<thead><tr><th>Name</th><th>Description</th></tr></thead>
2739<tbody>
2740<tr><td><tt>fd</tt></td><td>HTTP data</td></tr>
2741<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
2742</tbody></table></div>
2743<h4>Returns</h4>
2744<p>Current state</p>
2745<!-- NEW PAGE -->
ecdc0628 2746<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippReadIO'>ippReadIO()</a></h3>
ef416fc2 2747<h4>Description</h4>
ecdc0628 2748<p>Read data for an IPP message.
ef416fc2 2749
2750</p>
2751<h4>Syntax</h4>
2752<pre>
2753ipp_state_t
2754ippReadIO(
2755 void * src,
2756 <a href='#ipp_iocb_t'>ipp_iocb_t</a> cb,
2757 int blocking,
2758 <a href='#ipp_t'>ipp_t</a> * parent,
2759 <a href='#ipp_t'>ipp_t</a> * ipp);
2760</pre>
2761<h4>Arguments</h4>
2762<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2763<thead><tr><th>Name</th><th>Description</th></tr></thead>
2764<tbody>
2765<tr><td><tt>src</tt></td><td>Data source</td></tr>
2766<tr><td><tt>cb</tt></td><td>Read callback function</td></tr>
2767<tr><td><tt>blocking</tt></td><td>Use blocking IO?</td></tr>
2768<tr><td><tt>parent</tt></td><td>Parent request, if any</td></tr>
2769<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
2770</tbody></table></div>
2771<h4>Returns</h4>
2772<p>Current state</p>
2773<!-- NEW PAGE -->
2774<h3 class='title'><a name='ippSetPort'>ippSetPort()</a></h3>
2775<h4>Description</h4>
2776<p>Set the default port number.</p>
2777<h4>Syntax</h4>
2778<pre>
2779void
2780ippSetPort(
2781 int p);
2782</pre>
2783<h4>Arguments</h4>
2784<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2785<thead><tr><th>Name</th><th>Description</th></tr></thead>
2786<tbody>
2787<tr><td><tt>p</tt></td><td>Port number to use</td></tr>
2788</tbody></table></div>
2789<h4>Returns</h4>
2790<p>Nothing.</p>
2791<!-- NEW PAGE -->
2792<h3 class='title'><a name='ippTimeToDate'>ippTimeToDate()</a></h3>
2793<h4>Description</h4>
2794<p>Convert from UNIX time to RFC 1903 format.</p>
2795<h4>Syntax</h4>
2796<pre>
2797const <a href='#ipp_uchar_t'>ipp_uchar_t</a> *
2798ippTimeToDate(
2799 time_t t);
2800</pre>
2801<h4>Arguments</h4>
2802<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2803<thead><tr><th>Name</th><th>Description</th></tr></thead>
2804<tbody>
2805<tr><td><tt>t</tt></td><td>UNIX time value</td></tr>
2806</tbody></table></div>
2807<h4>Returns</h4>
2808<p>RFC-1903 date/time data</p>
2809<!-- NEW PAGE -->
2810<h3 class='title'><a name='ippWrite'>ippWrite()</a></h3>
2811<h4>Description</h4>
ecdc0628 2812<p>Write data for an IPP message to a HTTP connection.</p>
ef416fc2 2813<h4>Syntax</h4>
2814<pre>
2815ipp_state_t
2816ippWrite(
2817 <a href='#http_t'>http_t</a> * http,
2818 <a href='#ipp_t'>ipp_t</a> * ipp);
2819</pre>
2820<h4>Arguments</h4>
2821<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2822<thead><tr><th>Name</th><th>Description</th></tr></thead>
2823<tbody>
2824<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
2825<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
2826</tbody></table></div>
2827<h4>Returns</h4>
2828<p>Current state</p>
2829<!-- NEW PAGE -->
2830<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippWriteFile'>ippWriteFile()</a></h3>
2831<h4>Description</h4>
ecdc0628 2832<p>Write data for an IPP message to a file.
ef416fc2 2833
2834</p>
2835<h4>Syntax</h4>
2836<pre>
2837ipp_state_t
2838ippWriteFile(
2839 int fd,
2840 <a href='#ipp_t'>ipp_t</a> * ipp);
2841</pre>
2842<h4>Arguments</h4>
2843<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2844<thead><tr><th>Name</th><th>Description</th></tr></thead>
2845<tbody>
2846<tr><td><tt>fd</tt></td><td>HTTP data</td></tr>
2847<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
2848</tbody></table></div>
2849<h4>Returns</h4>
2850<p>Current state</p>
2851<!-- NEW PAGE -->
ecdc0628 2852<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippWriteIO'>ippWriteIO()</a></h3>
ef416fc2 2853<h4>Description</h4>
ecdc0628 2854<p>Write data for an IPP message.
ef416fc2 2855
2856</p>
2857<h4>Syntax</h4>
2858<pre>
2859ipp_state_t
2860ippWriteIO(
2861 void * dst,
2862 <a href='#ipp_iocb_t'>ipp_iocb_t</a> cb,
2863 int blocking,
2864 <a href='#ipp_t'>ipp_t</a> * parent,
2865 <a href='#ipp_t'>ipp_t</a> * ipp);
2866</pre>
2867<h4>Arguments</h4>
2868<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
2869<thead><tr><th>Name</th><th>Description</th></tr></thead>
2870<tbody>
2871<tr><td><tt>dst</tt></td><td>Destination</td></tr>
2872<tr><td><tt>cb</tt></td><td>Write callback function</td></tr>
2873<tr><td><tt>blocking</tt></td><td>Use blocking IO?</td></tr>
ecdc0628 2874<tr><td><tt>parent</tt></td><td>Parent IPP message</td></tr>
ef416fc2 2875<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
2876</tbody></table></div>
2877<h4>Returns</h4>
2878<p>Current state</p>
2879<!-- NEW PAGE -->
2880<h2 class='title'><a name='STRUCTURES'>Structures</a></h2>
2881<ul>
ef416fc2 2882 <li><a href='#http_addrlist_s'><tt>http_addrlist_s</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 2883 <li><a href='#ipp_attribute_s'><tt>ipp_attribute_s</tt></a> </li>
ecdc0628 2884 <li><a href='#ipp_s'><tt>ipp_s</tt></a> </li>
ef416fc2 2885</ul>
2886<!-- NEW PAGE -->
ef416fc2 2887<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='http_addrlist_s'>http_addrlist_s</a></h3>
2888<h4>Description</h4>
2889<p>Socket address list, which is
2890used to enumerate all of the
2891addresses that are associated
2892with a hostname. </p>
2893<h4>Definition</h4>
2894<pre>
2895struct http_addrlist_s
2896{
2897 <a href='#http_addr_t'>http_addr_t</a> addr;
2898 struct <a href='#http_addrlist_s'>http_addrlist_s</a> * next;
2899};
2900</pre>
2901<h4>Members</h4>
2902<div class='table'><table align='center' border='1' width='80%'>
2903<thead><tr><th>Name</th><th>Description</th></tr></thead>
2904<tbody>
2905<tr><td><tt>addr</tt> </td><td>Address</td></tr>
2906<tr><td><tt>next</tt> </td><td>Pointer to next address in list</td></tr>
2907</tbody></table></div>
2908<!-- NEW PAGE -->
ef416fc2 2909<h3 class='title'><a name='ipp_attribute_s'>ipp_attribute_s</a></h3>
2910<h4>Description</h4>
2911<p>Attribute</p>
2912<h4>Definition</h4>
2913<pre>
2914struct ipp_attribute_s
2915{
ecdc0628 2916 char * name;
ef416fc2 2917 struct <a href='#ipp_attribute_s'>ipp_attribute_s</a> * next;
2918 int num_values;
2919 ipp_tag_t group_tag, value_tag;
2920 <a href='#ipp_value_t'>ipp_value_t</a> values[1];
2921};
2922</pre>
2923<h4>Members</h4>
2924<div class='table'><table align='center' border='1' width='80%'>
2925<thead><tr><th>Name</th><th>Description</th></tr></thead>
2926<tbody>
2927<tr><td><tt>name</tt> </td><td>Name of attribute</td></tr>
2928<tr><td><tt>next</tt> </td><td>Next attribute in list</td></tr>
2929<tr><td><tt>num_values</tt> </td><td>Number of values</td></tr>
2930<tr><td><tt>value_tag</tt> </td><td>What type of value is it?</td></tr>
2931<tr><td><tt>values[1]</tt> </td><td>Values</td></tr>
2932</tbody></table></div>
2933<!-- NEW PAGE -->
ecdc0628 2934<h3 class='title'><a name='ipp_s'>ipp_s</a></h3>
ef416fc2 2935<h4>Description</h4>
2936<p>IPP Request/Response/Notification</p>
2937<h4>Definition</h4>
2938<pre>
ecdc0628 2939struct ipp_s
ef416fc2 2940{
ecdc0628 2941 <a href='#ipp_attribute_t'>ipp_attribute_t</a> * attrs;
2942 <a href='#ipp_attribute_t'>ipp_attribute_t</a> * current;
ef416fc2 2943 ipp_tag_t curtag;
ecdc0628 2944 <a href='#ipp_attribute_t'>ipp_attribute_t</a> * last;
ef416fc2 2945 <a href='#ipp_attribute_t'>ipp_attribute_t</a> * prev;
2946 <a href='#ipp_request_t'>ipp_request_t</a> request;
2947 ipp_state_t state;
2948};
2949</pre>
2950<h4>Members</h4>
2951<div class='table'><table align='center' border='1' width='80%'>
2952<thead><tr><th>Name</th><th>Description</th></tr></thead>
2953<tbody>
ecdc0628 2954<tr><td><tt>attrs</tt> </td><td>Attributes</td></tr>
ef416fc2 2955<tr><td><tt>current</tt> </td><td>Current attribute (for read/write)</td></tr>
2956<tr><td><tt>curtag</tt> </td><td>Current attribute group tag</td></tr>
ecdc0628 2957<tr><td><tt>last</tt> </td><td>Last attribute in list</td></tr>
ef416fc2 2958<tr><td><tt>prev</tt> </td><td>Previous attribute (for read)</td></tr>
2959<tr><td><tt>request</tt> </td><td>Request header</td></tr>
2960<tr><td><tt>state</tt> </td><td>State of request</td></tr>
2961</tbody></table></div>
2962<!-- NEW PAGE -->
2963<h2 class='title'><a name='TYPES'>Types</a></h2>
2964<ul>
ef416fc2 2965 <li><a href='#http_addrlist_t'><tt>http_addrlist_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
2966 <li><a href='#http_auth_t'><tt>http_auth_t</tt></a> </li>
2967 <li><a href='#http_encoding_t'><tt>http_encoding_t</tt></a> </li>
2968 <li><a href='#http_encryption_t'><tt>http_encryption_t</tt></a> </li>
2969 <li><a href='#http_t'><tt>http_t</tt></a> </li>
2970 <li><a href='#ipp_attribute_t'><tt>ipp_attribute_t</tt></a> </li>
ecdc0628 2971 <li><a href='#ipp_iocb_t'><tt>ipp_iocb_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 2972 <li><a href='#ipp_request_t'><tt>ipp_request_t</tt></a> </li>
2973 <li><a href='#ipp_t'><tt>ipp_t</tt></a> </li>
ecdc0628 2974 <li><a href='#ipp_uchar_t'><tt>ipp_uchar_t</tt></a> </li>
ef416fc2 2975 <li><a href='#ipp_value_t'><tt>ipp_value_t</tt></a> </li>
2976</ul>
2977<!-- NEW PAGE -->
ef416fc2 2978<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='http_addrlist_t'>http_addrlist_t</a></h3>
2979<h4>Description</h4>
2980<p>Socket address list, which is
2981used to enumerate all of the
2982addresses that are associated
2983with a hostname. </p>
2984<h4>Definition</h4>
2985<pre>
2986typedef struct <a href='#http_addrlist_s'>http_addrlist_s</a> / http_addrlist_t;
2987</pre>
2988<!-- NEW PAGE -->
2989<h3 class='title'><a name='http_auth_t'>http_auth_t</a></h3>
2990<h4>Description</h4>
2991<p>HTTP authentication types</p>
2992<h4>Definition</h4>
2993<pre>
2994typedef enum <a href='#http_auth_e'>http_auth_e</a> http_auth_t;
2995</pre>
2996<!-- NEW PAGE -->
2997<h3 class='title'><a name='http_encoding_t'>http_encoding_t</a></h3>
2998<h4>Description</h4>
2999<p>HTTP transfer encoding values</p>
3000<h4>Definition</h4>
3001<pre>
3002typedef enum <a href='#http_encoding_e'>http_encoding_e</a> http_encoding_t;
3003</pre>
3004<!-- NEW PAGE -->
3005<h3 class='title'><a name='http_encryption_t'>http_encryption_t</a></h3>
3006<h4>Description</h4>
3007<p>HTTP encryption values</p>
3008<h4>Definition</h4>
3009<pre>
3010typedef enum <a href='#http_encryption_e'>http_encryption_e</a> http_encryption_t;
3011</pre>
3012<!-- NEW PAGE -->
3013<h3 class='title'><a name='http_t'>http_t</a></h3>
3014<h4>Description</h4>
f7deaa1a 3015<p>HTTP connection type</p>
ef416fc2 3016<h4>Definition</h4>
3017<pre>
ecdc0628 3018typedef struct _http_s http_t;
ef416fc2 3019</pre>
3020<!-- NEW PAGE -->
3021<h3 class='title'><a name='ipp_attribute_t'>ipp_attribute_t</a></h3>
3022<h4>Description</h4>
3023<p>Attribute</p>
3024<h4>Definition</h4>
3025<pre>
3026typedef struct <a href='#ipp_attribute_s'>ipp_attribute_s</a> ipp_attribute_t;
3027</pre>
3028<!-- NEW PAGE -->
ecdc0628 3029<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ipp_iocb_t'>ipp_iocb_t</a></h3>
ef416fc2 3030<h4>Description</h4>
ecdc0628 3031<p>IPP IO Callback Function </p>
ef416fc2 3032<h4>Definition</h4>
3033<pre>
ecdc0628 3034typedef ssize_t (*ipp_iocb_t)(void *, <a href='#ipp_uchar_t'>ipp_uchar_t</a> *, size_t);
ef416fc2 3035</pre>
3036<!-- NEW PAGE -->
3037<h3 class='title'><a name='ipp_request_t'>ipp_request_t</a></h3>
3038<h4>Description</h4>
3039<p>Request Header</p>
3040<h4>Definition</h4>
3041<pre>
ecdc0628 3042typedef union <a href='#ipp_request_u'>ipp_request_u</a> ipp_request_t;
ef416fc2 3043</pre>
3044<!-- NEW PAGE -->
3045<h3 class='title'><a name='ipp_t'>ipp_t</a></h3>
3046<h4>Description</h4>
3047<p>Attribute Value</p>
3048<h4>Definition</h4>
3049<pre>
ecdc0628 3050typedef struct <a href='#ipp_s'>ipp_s</a> ipp_t;
3051</pre>
3052<!-- NEW PAGE -->
3053<h3 class='title'><a name='ipp_uchar_t'>ipp_uchar_t</a></h3>
3054<h4>Description</h4>
3055<p>IPP status codes...</p>
3056<h4>Definition</h4>
3057<pre>
3058typedef typedef unsigned char ipp_uchar_t;
ef416fc2 3059</pre>
3060<!-- NEW PAGE -->
3061<h3 class='title'><a name='ipp_value_t'>ipp_value_t</a></h3>
3062<h4>Description</h4>
3063<p>New in CUPS 1.1.19</p>
3064<h4>Definition</h4>
3065<pre>
ecdc0628 3066typedef union <a href='#ipp_value_u'>ipp_value_u</a> ipp_value_t;
3067</pre>
3068<!-- NEW PAGE -->
3069<h2 class='title'><a name='UNIONS'>Unions</a></h2>
3070<ul>
3071 <li><a href='#ipp_request_u'><tt>ipp_request_u</tt></a> </li>
3072 <li><a href='#ipp_value_u'><tt>ipp_value_u</tt></a> </li>
3073</ul>
3074<!-- NEW PAGE -->
3075<h3 class='title'><a name='ipp_request_u'>ipp_request_u</a></h3>
3076<h4>Description</h4>
3077<p>Request Header</p>
3078<h4>Definition</h4>
3079<pre>
3080union ipp_request_u
3081{
3082};
3083</pre>
3084<h4>Members</h4>
3085<div class='table'><table align='center' border='1' width='80%'>
3086<thead><tr><th>Name</th><th>Description</th></tr></thead>
3087<tbody>
3088</tbody></table></div>
3089<!-- NEW PAGE -->
3090<h3 class='title'><a name='ipp_value_u'>ipp_value_u</a></h3>
3091<h4>Description</h4>
3092<p>New in CUPS 1.1.19</p>
3093<h4>Definition</h4>
3094<pre>
3095union ipp_value_u
3096{
3097 char boolean;
3098 <a href='#ipp_t'>ipp_t</a> * collection;
3099 <a href='#ipp_uchar_t'>ipp_uchar_t</a> date[11];
3100 int integer;
3101};
ef416fc2 3102</pre>
ecdc0628 3103<h4>Members</h4>
3104<div class='table'><table align='center' border='1' width='80%'>
3105<thead><tr><th>Name</th><th>Description</th></tr></thead>
3106<tbody>
3107<tr><td><tt>boolean</tt> </td><td>Boolean value</td></tr>
3108<tr><td><tt>collection</tt> </td><td>Collection value</td></tr>
3109<tr><td><tt>date[11]</tt> </td><td>Date/time value</td></tr>
3110<tr><td><tt>integer</tt> </td><td>Integer/enumerated value</td></tr>
3111</tbody></table></div>
ef416fc2 3112</body>
3113</html>