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