blob: 1cd14c5c582ae0695f3ebfd663cced239f829450 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<!-- SECTION: Programming -->
<head>
<title>HTTP and IPP APIs</title>
<meta name='keywords' content='Programming'>
<meta name='creator' content='Mini-XML v2.3'>
<style type='text/css'><!--
h1, h2, h3, p { font-family: sans-serif; text-align: justify; }
tt, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; }
pre { font-weight: bold; color: #7f0000; margin-left: 2em; }
span.info { background: #000000; border: solid thin #000000; color: #ffffff; font-size: 80%; font-style: italic; font-weight: bold; white-space: nowrap; }
h3 span.info { float: right; font-size: 100%; }
h1.title, h2.title, h3.title { border-bottom: solid 2px #000000; }
--></style>
</head>
<body>
<!--
"$Id$"
HTTP and IPP API introduction for the Common UNIX Printing System (CUPS).
Copyright 1997-2005 by Easy Software Products.
These coded instructions, statements, and computer programs are the
property of Easy Software Products and are protected by Federal
copyright law. Distribution and use rights are outlined in the file
"LICENSE.txt" which should have been included with this file. If this
file is missing or damaged please contact Easy Software Products
at:
Attn: CUPS Licensing Information
Easy Software Products
44141 Airport View Drive, Suite 204
Hollywood, Maryland 20636 USA
Voice: (301) 373-9600
EMail: [email protected]
WWW: http://www.cups.org
-->
<h2 class='title'>Introduction</h2>
<p>The CUPS HTTP and IPP APIs provide...</p>
<h2 class='title'>General Usage</h2>
<p>The <var>&lt;cups/cups.h&gt;</var> header file must be included to
use the HTTP and IPP functions.</p>
<p>Programs using these functions must be linked to the CUPS
library: <var>libcups.a</var>, <var>libcups.so.2</var>,
<var>libcups.2.dylib</var>, <var>libcups_s.a</var>, or
<var>libcups2.lib</var> depending on the platform. The following
command compiles <var>myprogram.c</var> using GCC and the CUPS
library:</p>
<pre class='command'>
<kbd>gcc -o myprogram myprogram.c -lcups</kbd>
</pre>
<h2 class='title'>Compatibility</h2>
<p>Unless otherwise specified, the HTTP and IPP API functions
require CUPS 1.1 or higher.</p>
<h2 class='title'>Contents</h2>
<ul>
<li><a href='#ENUMERATIONS'>Enumerations</a></li>
<li><a href='#FUNCTIONS'>Functions</a></li>
<li><a href='#STRUCTURES'>Structures</a></li>
<li><a href='#TYPES'>Types</a></li>
</ul>
<!-- NEW PAGE -->
<h2 class='title'><a name='ENUMERATIONS'>Enumerations</a></h2>
<ul>
<li><a href='#cups_ptype_e'><tt>cups_ptype_e</tt></a> </li>
<li><a href='#http_auth_e'><tt>http_auth_e</tt></a> </li>
<li><a href='#http_encoding_e'><tt>http_encoding_e</tt></a> </li>
<li><a href='#http_encryption_e'><tt>http_encryption_e</tt></a> </li>
<li><a href='#http_field_e'><tt>http_field_e</tt></a> </li>
<li><a href='#http_keepalive_e'><tt>http_keepalive_e</tt></a> </li>
<li><a href='#http_status_e'><tt>http_status_e</tt></a> </li>
</ul>
<!-- NEW PAGE -->
<h3 class='title'><a name='cups_ptype_e'>cups_ptype_e</a></h3>
<h4>Description</h4>
<p>Not a typedef'd enum so we can OR</p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>CUPS_PRINTER_AUTHENTICATED</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Printer requires authentication </td></tr>
<tr><td><tt>CUPS_PRINTER_BIND</tt> </td><td>Can bind output</td></tr>
<tr><td><tt>CUPS_PRINTER_BW</tt> </td><td>Can do B&amp;W printing</td></tr>
<tr><td><tt>CUPS_PRINTER_CLASS</tt> </td><td>Printer class</td></tr>
<tr><td><tt>CUPS_PRINTER_COLLATE</tt> </td><td>Can collage copies</td></tr>
<tr><td><tt>CUPS_PRINTER_COLOR</tt> </td><td>Can do color printing</td></tr>
<tr><td><tt>CUPS_PRINTER_COPIES</tt> </td><td>Can do copies</td></tr>
<tr><td><tt>CUPS_PRINTER_COVER</tt> </td><td>Can cover output</td></tr>
<tr><td><tt>CUPS_PRINTER_DEFAULT</tt> </td><td>Default printer on network</td></tr>
<tr><td><tt>CUPS_PRINTER_DELETE</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Delete printer </td></tr>
<tr><td><tt>CUPS_PRINTER_DUPLEX</tt> </td><td>Can do duplexing</td></tr>
<tr><td><tt>CUPS_PRINTER_FAX</tt> </td><td>Fax queue</td></tr>
<tr><td><tt>CUPS_PRINTER_IMPLICIT</tt> </td><td>Implicit class</td></tr>
<tr><td><tt>CUPS_PRINTER_LARGE</tt> </td><td>Can do D/E/A1/A0</td></tr>
<tr><td><tt>CUPS_PRINTER_LOCAL</tt> </td><td>Local printer or class</td></tr>
<tr><td><tt>CUPS_PRINTER_MEDIUM</tt> </td><td>Can do Tabloid/B/C/A3/A2</td></tr>
<tr><td><tt>CUPS_PRINTER_NOT_SHARED</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Printer is not shared </td></tr>
<tr><td><tt>CUPS_PRINTER_OPTIONS</tt> </td><td>~(CLASS | REMOTE | IMPLICIT)</td></tr>
<tr><td><tt>CUPS_PRINTER_PUNCH</tt> </td><td>Can punch output</td></tr>
<tr><td><tt>CUPS_PRINTER_REJECTING</tt> </td><td>Printer is rejecting jobs</td></tr>
<tr><td><tt>CUPS_PRINTER_REMOTE</tt> </td><td>Remote printer or class</td></tr>
<tr><td><tt>CUPS_PRINTER_SMALL</tt> </td><td>Can do Letter/Legal/A4</td></tr>
<tr><td><tt>CUPS_PRINTER_SORT</tt> </td><td>Can sort output</td></tr>
<tr><td><tt>CUPS_PRINTER_STAPLE</tt> </td><td>Can staple output</td></tr>
<tr><td><tt>CUPS_PRINTER_VARIABLE</tt> </td><td>Can do variable sizes</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_auth_e'>http_auth_e</a></h3>
<h4>Description</h4>
<p>HTTP authentication types</p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_AUTH_BASIC</tt> </td><td>Basic authentication in use</td></tr>
<tr><td><tt>HTTP_AUTH_MD5</tt> </td><td>Digest authentication in use</td></tr>
<tr><td><tt>HTTP_AUTH_MD5_INT</tt> </td><td>Digest authentication in use for body</td></tr>
<tr><td><tt>HTTP_AUTH_MD5_SESS</tt> </td><td>MD5-session authentication in use</td></tr>
<tr><td><tt>HTTP_AUTH_MD5_SESS_INT</tt> </td><td>MD5-session authentication in use for body</td></tr>
<tr><td><tt>HTTP_AUTH_NONE</tt> </td><td>No authentication in use</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_encoding_e'>http_encoding_e</a></h3>
<h4>Description</h4>
<p>HTTP transfer encoding values</p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_ENCODE_CHUNKED</tt> </td><td>Data is chunked</td></tr>
<tr><td><tt>HTTP_ENCODE_LENGTH</tt> </td><td>Data is sent with Content-Length</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_encryption_e'>http_encryption_e</a></h3>
<h4>Description</h4>
<p>HTTP encryption values</p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_ENCRYPT_ALWAYS</tt> </td><td>Always encrypt (SSL)</td></tr>
<tr><td><tt>HTTP_ENCRYPT_IF_REQUESTED</tt> </td><td>Encrypt if requested (TLS upgrade)</td></tr>
<tr><td><tt>HTTP_ENCRYPT_NEVER</tt> </td><td>Never encrypt</td></tr>
<tr><td><tt>HTTP_ENCRYPT_REQUIRED</tt> </td><td>Encryption is required (TLS upgrade)</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_field_e'>http_field_e</a></h3>
<h4>Description</h4>
<p>HTTP field names</p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_FIELD_ACCEPT_LANGUAGE</tt> </td><td>Accept-Language field</td></tr>
<tr><td><tt>HTTP_FIELD_ACCEPT_RANGES</tt> </td><td>Accept-Ranges field</td></tr>
<tr><td><tt>HTTP_FIELD_AUTHORIZATION</tt> </td><td>Authorization field</td></tr>
<tr><td><tt>HTTP_FIELD_CONNECTION</tt> </td><td>Connection field</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_ENCODING</tt> </td><td>Content-Encoding field</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_LANGUAGE</tt> </td><td>Content-Language field</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_LENGTH</tt> </td><td>Content-Length field</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_LOCATION</tt> </td><td>Content-Location field</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_MD5</tt> </td><td>Content-MD5 field</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_RANGE</tt> </td><td>Content-Range field</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_TYPE</tt> </td><td>Content-Type field</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_VERSION</tt> </td><td>Content-Version field</td></tr>
<tr><td><tt>HTTP_FIELD_DATE</tt> </td><td>Date field</td></tr>
<tr><td><tt>HTTP_FIELD_HOST</tt> </td><td>Host field</td></tr>
<tr><td><tt>HTTP_FIELD_IF_MODIFIED_SINCE</tt> </td><td>If-Modified-Since field</td></tr>
<tr><td><tt>HTTP_FIELD_IF_UNMODIFIED_SINCE</tt> </td><td>If-Unmodified-Since field</td></tr>
<tr><td><tt>HTTP_FIELD_KEEP_ALIVE</tt> </td><td>Keep-Alive field</td></tr>
<tr><td><tt>HTTP_FIELD_LAST_MODIFIED</tt> </td><td>Last-Modified field</td></tr>
<tr><td><tt>HTTP_FIELD_LINK</tt> </td><td>Link field</td></tr>
<tr><td><tt>HTTP_FIELD_LOCATION</tt> </td><td>Location field</td></tr>
<tr><td><tt>HTTP_FIELD_MAX</tt> </td><td>Maximum field index</td></tr>
<tr><td><tt>HTTP_FIELD_RANGE</tt> </td><td>Range field</td></tr>
<tr><td><tt>HTTP_FIELD_REFERER</tt> </td><td>Referer field</td></tr>
<tr><td><tt>HTTP_FIELD_RETRY_AFTER</tt> </td><td>Retry-After field</td></tr>
<tr><td><tt>HTTP_FIELD_TRANSFER_ENCODING</tt> </td><td>Transfer-Encoding field</td></tr>
<tr><td><tt>HTTP_FIELD_UNKNOWN</tt> </td><td>Unknown field</td></tr>
<tr><td><tt>HTTP_FIELD_UPGRADE</tt> </td><td>Upgrade field</td></tr>
<tr><td><tt>HTTP_FIELD_USER_AGENT</tt> </td><td>User-Agent field</td></tr>
<tr><td><tt>HTTP_FIELD_WWW_AUTHENTICATE</tt> </td><td>WWW-Authenticate field</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_keepalive_e'>http_keepalive_e</a></h3>
<h4>Description</h4>
<p>Types and structures...</p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_KEEPALIVE_OFF</tt> </td><td>No keep alive support</td></tr>
<tr><td><tt>HTTP_KEEPALIVE_ON</tt> </td><td>Use keep alive</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_status_e'>http_status_e</a></h3>
<h4>Description</h4>
<p>HTTP status codes</p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_ACCEPTED</tt> </td><td>DELETE command was successful</td></tr>
<tr><td><tt>HTTP_BAD_GATEWAY</tt> </td><td>Bad gateway</td></tr>
<tr><td><tt>HTTP_BAD_REQUEST</tt> </td><td>Bad request</td></tr>
<tr><td><tt>HTTP_CONFLICT</tt> </td><td>Request is self-conflicting</td></tr>
<tr><td><tt>HTTP_CONTINUE</tt> </td><td>Everything OK, keep going...</td></tr>
<tr><td><tt>HTTP_CREATED</tt> </td><td>PUT command was successful</td></tr>
<tr><td><tt>HTTP_ERROR</tt> </td><td>An error response from httpXxxx()</td></tr>
<tr><td><tt>HTTP_FORBIDDEN</tt> </td><td>Forbidden to access this URI</td></tr>
<tr><td><tt>HTTP_GATEWAY_TIMEOUT</tt> </td><td>Gateway connection timed out</td></tr>
<tr><td><tt>HTTP_GONE</tt> </td><td>Server has gone away</td></tr>
<tr><td><tt>HTTP_LENGTH_REQUIRED</tt> </td><td>A content length or encoding is required</td></tr>
<tr><td><tt>HTTP_METHOD_NOT_ALLOWED</tt> </td><td>Method is not allowed</td></tr>
<tr><td><tt>HTTP_MOVED_PERMANENTLY</tt> </td><td>Document has moved permanently</td></tr>
<tr><td><tt>HTTP_MOVED_TEMPORARILY</tt> </td><td>Document has moved temporarily</td></tr>
<tr><td><tt>HTTP_MULTIPLE_CHOICES</tt> </td><td>Multiple files match request</td></tr>
<tr><td><tt>HTTP_NOT_ACCEPTABLE</tt> </td><td>Not Acceptable</td></tr>
<tr><td><tt>HTTP_NOT_AUTHORITATIVE</tt> </td><td>Information isn't authoritative</td></tr>
<tr><td><tt>HTTP_NOT_FOUND</tt> </td><td>URI was not found</td></tr>
<tr><td><tt>HTTP_NOT_IMPLEMENTED</tt> </td><td>Feature not implemented</td></tr>
<tr><td><tt>HTTP_NOT_MODIFIED</tt> </td><td>File not modified</td></tr>
<tr><td><tt>HTTP_NOT_SUPPORTED</tt> </td><td>HTTP version not supported</td></tr>
<tr><td><tt>HTTP_NO_CONTENT</tt> </td><td>Successful command, no new data</td></tr>
<tr><td><tt>HTTP_OK</tt> </td><td>OPTIONS/GET/HEAD/POST/TRACE command was successful</td></tr>
<tr><td><tt>HTTP_PARTIAL_CONTENT</tt> </td><td>Only a partial file was recieved/sent</td></tr>
<tr><td><tt>HTTP_PAYMENT_REQUIRED</tt> </td><td>Payment required</td></tr>
<tr><td><tt>HTTP_PRECONDITION</tt> </td><td>Precondition failed</td></tr>
<tr><td><tt>HTTP_PROXY_AUTHENTICATION</tt> </td><td>Proxy Authentication is Required</td></tr>
<tr><td><tt>HTTP_REQUEST_TIMEOUT</tt> </td><td>Request timed out</td></tr>
<tr><td><tt>HTTP_REQUEST_TOO_LARGE</tt> </td><td>Request entity too large</td></tr>
<tr><td><tt>HTTP_RESET_CONTENT</tt> </td><td>Content was reset/recreated</td></tr>
<tr><td><tt>HTTP_SEE_OTHER</tt> </td><td>See this other link...</td></tr>
<tr><td><tt>HTTP_SERVER_ERROR</tt> </td><td>Internal server error</td></tr>
<tr><td><tt>HTTP_SERVICE_UNAVAILABLE</tt> </td><td>Service is unavailable</td></tr>
<tr><td><tt>HTTP_SWITCHING_PROTOCOLS</tt> </td><td>HTTP upgrade to TLS/SSL</td></tr>
<tr><td><tt>HTTP_UNAUTHORIZED</tt> </td><td>Unauthorized to access host</td></tr>
<tr><td><tt>HTTP_UNSUPPORTED_MEDIATYPE</tt> </td><td>The requested media type is unsupported</td></tr>
<tr><td><tt>HTTP_UPGRADE_REQUIRED</tt> </td><td>Upgrade to SSL/TLS required</td></tr>
<tr><td><tt>HTTP_URI_TOO_LONG</tt> </td><td>URI too long</td></tr>
<tr><td><tt>HTTP_USE_PROXY</tt> </td><td>Must use a proxy to access this URI</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h2 class='title'><a name='FUNCTIONS'>Functions</a></h2>
<ul>
<li><a href='#cupsAddDest'><tt>cupsAddDest()</tt></a> </li>
<li><a href='#cupsAddOption'><tt>cupsAddOption()</tt></a> </li>
<li><a href='#cupsCancelJob'><tt>cupsCancelJob()</tt></a> </li>
<li><a href='#cupsDoAuthentication'><tt>cupsDoAuthentication()</tt></a> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></li>
<li><a href='#cupsDoFileRequest'><tt>cupsDoFileRequest()</tt></a> </li>
<li><a href='#cupsEncodeOptions'><tt>cupsEncodeOptions()</tt></a> </li>
<li><a href='#cupsEncodeOptions2'><tt>cupsEncodeOptions2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#cupsEncryption'><tt>cupsEncryption()</tt></a> </li>
<li><a href='#cupsFreeDests'><tt>cupsFreeDests()</tt></a> </li>
<li><a href='#cupsFreeJobs'><tt>cupsFreeJobs()</tt></a> </li>
<li><a href='#cupsFreeOptions'><tt>cupsFreeOptions()</tt></a> </li>
<li><a href='#cupsGetClasses'><tt>cupsGetClasses()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
<li><a href='#cupsGetDefault'><tt>cupsGetDefault()</tt></a> </li>
<li><a href='#cupsGetDefault2'><tt>cupsGetDefault2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#cupsGetDest'><tt>cupsGetDest()</tt></a> </li>
<li><a href='#cupsGetDests'><tt>cupsGetDests()</tt></a> </li>
<li><a href='#cupsGetDests2'><tt>cupsGetDests2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#cupsGetFd'><tt>cupsGetFd()</tt></a> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></li>
<li><a href='#cupsGetFile'><tt>cupsGetFile()</tt></a> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></li>
<li><a href='#cupsGetJobs'><tt>cupsGetJobs()</tt></a> </li>
<li><a href='#cupsGetJobs2'><tt>cupsGetJobs2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#cupsGetOption'><tt>cupsGetOption()</tt></a> </li>
<li><a href='#cupsGetPPD'><tt>cupsGetPPD()</tt></a> </li>
<li><a href='#cupsGetPPD2'><tt>cupsGetPPD2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#cupsGetPassword'><tt>cupsGetPassword()</tt></a> </li>
<li><a href='#cupsGetPrinters'><tt>cupsGetPrinters()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
<li><a href='#cupsLastError'><tt>cupsLastError()</tt></a> </li>
<li><a href='#cupsLastErrorString'><tt>cupsLastErrorString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#cupsMarkOptions'><tt>cupsMarkOptions()</tt></a> </li>
<li><a href='#cupsParseOptions'><tt>cupsParseOptions()</tt></a> </li>
<li><a href='#cupsPrintFile'><tt>cupsPrintFile()</tt></a> </li>
<li><a href='#cupsPrintFile2'><tt>cupsPrintFile2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#cupsPrintFiles'><tt>cupsPrintFiles()</tt></a> </li>
<li><a href='#cupsPrintFiles2'><tt>cupsPrintFiles2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#cupsPutFd'><tt>cupsPutFd()</tt></a> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></li>
<li><a href='#cupsPutFile'><tt>cupsPutFile()</tt></a> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></li>
<li><a href='#cupsServer'><tt>cupsServer()</tt></a> </li>
<li><a href='#cupsSetDests'><tt>cupsSetDests()</tt></a> </li>
<li><a href='#cupsSetDests2'><tt>cupsSetDests2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#cupsSetEncryption'><tt>cupsSetEncryption()</tt></a> </li>
<li><a href='#cupsSetPasswordCB'><tt>cupsSetPasswordCB()</tt></a> </li>
<li><a href='#cupsSetServer'><tt>cupsSetServer()</tt></a> </li>
<li><a href='#cupsSetUser'><tt>cupsSetUser()</tt></a> </li>
<li><a href='#cupsUser'><tt>cupsUser()</tt></a> </li>
<li><a href='#httpAddrAny'><tt>httpAddrAny()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpAddrEqual'><tt>httpAddrEqual()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpAddrLength'><tt>httpAddrLength()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpAddrLocalhost'><tt>httpAddrLocalhost()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpAddrLookup'><tt>httpAddrLookup()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpAddrString'><tt>httpAddrString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpAssembleURI'><tt>httpAssembleURI()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpAssembleURIf'><tt>httpAssembleURIf()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpCheck'><tt>httpCheck()</tt></a> </li>
<li><a href='#httpClearCookie'><tt>httpClearCookie()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
<li><a href='#httpClose'><tt>httpClose()</tt></a> </li>
<li><a href='#httpConnect'><tt>httpConnect()</tt></a> </li>
<li><a href='#httpConnectEncrypt'><tt>httpConnectEncrypt()</tt></a> </li>
<li><a href='#httpDecode64'><tt>httpDecode64()</tt></a> </li>
<li><a href='#httpDecode64_2'><tt>httpDecode64_2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#httpDelete'><tt>httpDelete()</tt></a> </li>
<li><a href='#httpEncode64'><tt>httpEncode64()</tt></a> </li>
<li><a href='#httpEncode64_2'><tt>httpEncode64_2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#httpEncryption'><tt>httpEncryption()</tt></a> </li>
<li><a href='#httpFlush'><tt>httpFlush()</tt></a> </li>
<li><a href='#httpFlushWrite'><tt>httpFlushWrite()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpGet'><tt>httpGet()</tt></a> </li>
<li><a href='#httpGetDateString'><tt>httpGetDateString()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
<li><a href='#httpGetDateString2'><tt>httpGetDateString2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpGetDateTime'><tt>httpGetDateTime()</tt></a> </li>
<li><a href='#httpGetHostByName'><tt>httpGetHostByName()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
<li><a href='#httpGetHostname'><tt>httpGetHostname()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpGetLength'><tt>httpGetLength()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpGetLength2'><tt>httpGetLength2()</tt></a> </li>
<li><a href='#httpGetSubField'><tt>httpGetSubField()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
<li><a href='#httpGetSubField2'><tt>httpGetSubField2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpGets'><tt>httpGets()</tt></a> </li>
<li><a href='#httpHead'><tt>httpHead()</tt></a> </li>
<li><a href='#httpInitialize'><tt>httpInitialize()</tt></a> </li>
<li><a href='#httpMD5'><tt>httpMD5()</tt></a> </li>
<li><a href='#httpMD5Final'><tt>httpMD5Final()</tt></a> </li>
<li><a href='#httpMD5String'><tt>httpMD5String()</tt></a> </li>
<li><a href='#httpOptions'><tt>httpOptions()</tt></a> </li>
<li><a href='#httpPost'><tt>httpPost()</tt></a> </li>
<li><a href='#httpPrintf'><tt>httpPrintf()</tt></a> </li>
<li><a href='#httpPut'><tt>httpPut()</tt></a> </li>
<li><a href='#httpRead'><tt>httpRead()</tt></a> </li>
<li><a href='#httpReconnect'><tt>httpReconnect()</tt></a> </li>
<li><a href='#httpSeparate'><tt>httpSeparate()</tt></a> </li>
<li><a href='#httpSeparate2'><tt>httpSeparate2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
<li><a href='#httpSeparateURI'><tt>httpSeparateURI()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpSetCookie'><tt>httpSetCookie()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
<li><a href='#httpSetField'><tt>httpSetField()</tt></a> </li>
<li><a href='#httpSetLength'><tt>httpSetLength()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#httpStatus'><tt>httpStatus()</tt></a> </li>
<li><a href='#httpTrace'><tt>httpTrace()</tt></a> </li>
<li><a href='#httpUpdate'><tt>httpUpdate()</tt></a> </li>
<li><a href='#httpWait'><tt>httpWait()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
<li><a href='#httpWrite'><tt>httpWrite()</tt></a> </li>
<li><a href='#ippAddBoolean'><tt>ippAddBoolean()</tt></a> </li>
<li><a href='#ippAddBooleans'><tt>ippAddBooleans()</tt></a> </li>
<li><a href='#ippAddCollection'><tt>ippAddCollection()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
<li><a href='#ippAddCollections'><tt>ippAddCollections()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
<li><a href='#ippAddDate'><tt>ippAddDate()</tt></a> </li>
<li><a href='#ippAddInteger'><tt>ippAddInteger()</tt></a> </li>
<li><a href='#ippAddIntegers'><tt>ippAddIntegers()</tt></a> </li>
<li><a href='#ippAddOctetString'><tt>ippAddOctetString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#ippAddRange'><tt>ippAddRange()</tt></a> </li>
<li><a href='#ippAddRanges'><tt>ippAddRanges()</tt></a> </li>
<li><a href='#ippAddResolution'><tt>ippAddResolution()</tt></a> </li>
<li><a href='#ippAddResolutions'><tt>ippAddResolutions()</tt></a> </li>
<li><a href='#ippAddSeparator'><tt>ippAddSeparator()</tt></a> </li>
<li><a href='#ippAddString'><tt>ippAddString()</tt></a> </li>
<li><a href='#ippAddStrings'><tt>ippAddStrings()</tt></a> </li>
<li><a href='#ippDateToTime'><tt>ippDateToTime()</tt></a> </li>
<li><a href='#ippDelete'><tt>ippDelete()</tt></a> </li>
<li><a href='#ippDeleteAttribute'><tt>ippDeleteAttribute()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
<li><a href='#ippErrorString'><tt>ippErrorString()</tt></a> </li>
<li><a href='#ippErrorValue'><tt>ippErrorValue()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#ippFindAttribute'><tt>ippFindAttribute()</tt></a> </li>
<li><a href='#ippFindNextAttribute'><tt>ippFindNextAttribute()</tt></a> </li>
<li><a href='#ippLength'><tt>ippLength()</tt></a> </li>
<li><a href='#ippNew'><tt>ippNew()</tt></a> </li>
<li><a href='#ippOpString'><tt>ippOpString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#ippOpValue'><tt>ippOpValue()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#ippPort'><tt>ippPort()</tt></a> </li>
<li><a href='#ippRead'><tt>ippRead()</tt></a> </li>
<li><a href='#ippReadFile'><tt>ippReadFile()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
<li><a href='#ippReadIO'><tt>ippReadIO()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
<li><a href='#ippSetPort'><tt>ippSetPort()</tt></a> </li>
<li><a href='#ippTimeToDate'><tt>ippTimeToDate()</tt></a> </li>
<li><a href='#ippWrite'><tt>ippWrite()</tt></a> </li>
<li><a href='#ippWriteFile'><tt>ippWriteFile()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
<li><a href='#ippWriteIO'><tt>ippWriteIO()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
</ul>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsAddDest'>cupsAddDest()</a></h3>
<h4>Description</h4>
<p>Add a destination to the list of destinations.
Use the cupsSaveDests() function to save the updated list of destinations
to the user's lpoptions file.</p>
<h4>Syntax</h4>
<pre>
int
cupsAddDest(
const <a href='#char'>char</a> * name,
const <a href='#char'>char</a> * instance,
int num_dests,
<a href='#cups_dest_t'>cups_dest_t</a> ** dests);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Name of destination</td></tr>
<tr><td><tt>instance</tt></td><td>Instance of destination or NULL for none/primary</td></tr>
<tr><td><tt>num_dests</tt></td><td>Number of destinations</td></tr>
<tr><td><tt>dests</tt></td><td>Destinations</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New number of destinations</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsAddOption'>cupsAddOption()</a></h3>
<h4>Description</h4>
<p>Add an option to an option array.</p>
<h4>Syntax</h4>
<pre>
int
cupsAddOption(
const <a href='#char'>char</a> * name,
const <a href='#char'>char</a> * value,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> ** options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Name of option</td></tr>
<tr><td><tt>value</tt></td><td>Value of option</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Pointer to options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of options</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsCancelJob'>cupsCancelJob()</a></h3>
<h4>Description</h4>
<p>Cancel a print job on the default server.
Use the cupsLastError() and cupsLastErrorString() functions to get
the cause of any failure.</p>
<h4>Syntax</h4>
<pre>
int
cupsCancelJob(
const <a href='#char'>char</a> * name,
int job);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Name of printer or class</td></tr>
<tr><td><tt>job</tt></td><td>Job ID</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 on success, 0 on failure</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span><a name='cupsDoAuthentication'>cupsDoAuthentication()</a></h3>
<h4>Description</h4>
<p>Authenticate a request.
This function should be called in response to a HTTP_UNAUTHORIZED
status, prior to resubmitting your request.
</p>
<h4>Syntax</h4>
<pre>
int
cupsDoAuthentication(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * method,
const <a href='#char'>char</a> * resource);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>method</tt></td><td>Request method (GET, POST, PUT)</td></tr>
<tr><td><tt>resource</tt></td><td>Resource path</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>0 on success, -1 on error</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsDoFileRequest'>cupsDoFileRequest()</a></h3>
<h4>Description</h4>
<p>Do an IPP request.
This function sends any IPP request to the specified server, retrying
and authenticating as necessary.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_t'>ipp_t</a> *
cupsDoFileRequest(
<a href='#http_t'>http_t</a> * http,
<a href='#ipp_t'>ipp_t</a> * request,
const <a href='#char'>char</a> * resource,
const <a href='#char'>char</a> * filename);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>request</tt></td><td>IPP request</td></tr>
<tr><td><tt>resource</tt></td><td>HTTP resource for POST</td></tr>
<tr><td><tt>filename</tt></td><td>File to send or NULL for none</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Response data</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsEncodeOptions'>cupsEncodeOptions()</a></h3>
<h4>Description</h4>
<p>Encode printer options into IPP attributes.
This function adds operation, job, and then subscription attributes,
in that order. Use the cupsEncodeOptions2() function to add attributes
for a single group.</p>
<h4>Syntax</h4>
<pre>
void
cupsEncodeOptions(
<a href='#ipp_t'>ipp_t</a> * ipp,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> * options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>Request to add to</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='cupsEncodeOptions2'>cupsEncodeOptions2()</a></h3>
<h4>Description</h4>
<p>Encode printer options into IPP attributes for a group.
This function only adds attributes for a single group. Call this
function multiple times for each group, or use cupsEncodeOptions()
to add the standard groups.
</p>
<h4>Syntax</h4>
<pre>
void
cupsEncodeOptions2(
<a href='#ipp_t'>ipp_t</a> * ipp,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> * options,
ipp_tag_t group_tag);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>Request to add to</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
<tr><td><tt>group_tag</tt></td><td>Group to encode</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsEncryption'>cupsEncryption()</a></h3>
<h4>Description</h4>
<p>Get the default encryption settings.
The default encryption setting comes from the CUPS_ENCRYPTION
environment variable, then the ~/.cupsrc file, and finally the
/etc/cups/client.conf file. If not set, the default is
HTTP_ENCRYPT_IF_REQUESTED.</p>
<h4>Syntax</h4>
<pre>
<a href='#http_encryption_t'>http_encryption_t</a>
cupsEncryption(void);
</pre>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>Encryption settings</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsFreeDests'>cupsFreeDests()</a></h3>
<h4>Description</h4>
<p>Free the memory used by the list of destinations.</p>
<h4>Syntax</h4>
<pre>
void
cupsFreeDests(
int num_dests,
<a href='#cups_dest_t'>cups_dest_t</a> * dests);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>num_dests</tt></td><td>Number of destinations</td></tr>
<tr><td><tt>dests</tt></td><td>Destinations</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsFreeJobs'>cupsFreeJobs()</a></h3>
<h4>Description</h4>
<p>Free memory used by job data.</p>
<h4>Syntax</h4>
<pre>
void
cupsFreeJobs(
int num_jobs,
<a href='#cups_job_t'>cups_job_t</a> * jobs);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>num_jobs</tt></td><td>Number of jobs</td></tr>
<tr><td><tt>jobs</tt></td><td>Jobs</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsFreeOptions'>cupsFreeOptions()</a></h3>
<h4>Description</h4>
<p>Free all memory used by options.</p>
<h4>Syntax</h4>
<pre>
void
cupsFreeOptions(
int num_options,
<a href='#cups_option_t'>cups_option_t</a> * options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Pointer to options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='cupsGetClasses'>cupsGetClasses()</a></h3>
<h4>Description</h4>
<p>Get a list of printer classes from the default server.
This function is deprecated - use cupsGetDests() instead.
</p>
<h4>Syntax</h4>
<pre>
int
cupsGetClasses(
<a href='#char'>char</a> *** classes);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>classes</tt></td><td>Classes</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of classes</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsGetDefault'>cupsGetDefault()</a></h3>
<h4>Description</h4>
<p>Get the default printer or class for the default server.
This function returns the default printer or class as defined by
the LPDEST or PRINTER environment variables. If these environment
variables are not set, the server default destination is returned.
Applications should use the cupsGetDests() and cupsGetDest() functions
to get the user-defined default printer, as this function does not
support the lpoptions-defined default printer.</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
cupsGetDefault(void);
</pre>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>Default printer or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='cupsGetDefault2'>cupsGetDefault2()</a></h3>
<h4>Description</h4>
<p>Get the default printer or class for the specified server.
This function returns the default printer or class as defined by
the LPDEST or PRINTER environment variables. If these environment
variables are not set, the server default destination is returned.
Applications should use the cupsGetDests() and cupsGetDest() functions
to get the user-defined default printer, as this function does not
support the lpoptions-defined default printer.
</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
cupsGetDefault2(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Default printer or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsGetDest'>cupsGetDest()</a></h3>
<h4>Description</h4>
<p>Get the named destination from the list.
Use the cupsGetDests() or cupsGetDests2() functions to get a
list of supported destinations for the current user.</p>
<h4>Syntax</h4>
<pre>
<a href='#cups_dest_t'>cups_dest_t</a> *
cupsGetDest(
const <a href='#char'>char</a> * name,
const <a href='#char'>char</a> * instance,
int num_dests,
<a href='#cups_dest_t'>cups_dest_t</a> * dests);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Name of destination</td></tr>
<tr><td><tt>instance</tt></td><td>Instance of destination</td></tr>
<tr><td><tt>num_dests</tt></td><td>Number of destinations</td></tr>
<tr><td><tt>dests</tt></td><td>Destinations</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Destination pointer or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsGetDests'>cupsGetDests()</a></h3>
<h4>Description</h4>
<p>Get the list of destinations from the default server.</p>
<h4>Syntax</h4>
<pre>
int
cupsGetDests(
<a href='#cups_dest_t'>cups_dest_t</a> ** dests);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>dests</tt></td><td>Destinations</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of destinations</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='cupsGetDests2'>cupsGetDests2()</a></h3>
<h4>Description</h4>
<p>Get the list of destinations from the specified server.
</p>
<h4>Syntax</h4>
<pre>
int
cupsGetDests2(
<a href='#http_t'>http_t</a> * http,
<a href='#cups_dest_t'>cups_dest_t</a> ** dests);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>dests</tt></td><td>Destinations</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of destinations</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span><a name='cupsGetFd'>cupsGetFd()</a></h3>
<h4>Description</h4>
<p>Get a file from the server.
This function returns HTTP_OK when the file is successfully retrieved.
</p>
<h4>Syntax</h4>
<pre>
http_status_t
cupsGetFd(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * resource,
int fd);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>resource</tt></td><td>Resource name</td></tr>
<tr><td><tt>fd</tt></td><td>File descriptor</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span><a name='cupsGetFile'>cupsGetFile()</a></h3>
<h4>Description</h4>
<p>Get a file from the server.
This function returns HTTP_OK when the file is successfully retrieved.
</p>
<h4>Syntax</h4>
<pre>
http_status_t
cupsGetFile(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * resource,
const <a href='#char'>char</a> * filename);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>resource</tt></td><td>Resource name</td></tr>
<tr><td><tt>filename</tt></td><td>Filename</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsGetJobs'>cupsGetJobs()</a></h3>
<h4>Description</h4>
<p>Get the jobs from the default server.</p>
<h4>Syntax</h4>
<pre>
int
cupsGetJobs(
<a href='#cups_job_t'>cups_job_t</a> ** jobs,
const <a href='#char'>char</a> * mydest,
int myjobs,
int completed);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>jobs</tt></td><td>Job data</td></tr>
<tr><td><tt>mydest</tt></td><td>Only show jobs for dest?</td></tr>
<tr><td><tt>myjobs</tt></td><td>Only show my jobs?</td></tr>
<tr><td><tt>completed</tt></td><td>Only show completed jobs?</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of jobs</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='cupsGetJobs2'>cupsGetJobs2()</a></h3>
<h4>Description</h4>
<p>Get the jobs from the specified server.
</p>
<h4>Syntax</h4>
<pre>
int
cupsGetJobs2(
<a href='#http_t'>http_t</a> * http,
<a href='#cups_job_t'>cups_job_t</a> ** jobs,
const <a href='#char'>char</a> * mydest,
int myjobs,
int completed);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>jobs</tt></td><td>Job data</td></tr>
<tr><td><tt>mydest</tt></td><td>Only show jobs for dest?</td></tr>
<tr><td><tt>myjobs</tt></td><td>Only show my jobs?</td></tr>
<tr><td><tt>completed</tt></td><td>Only show completed jobs?</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of jobs</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsGetOption'>cupsGetOption()</a></h3>
<h4>Description</h4>
<p>Get an option value.</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
cupsGetOption(
const <a href='#char'>char</a> * name,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> * options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Name of option</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Option value or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsGetPPD'>cupsGetPPD()</a></h3>
<h4>Description</h4>
<p>Get the PPD file for a printer on the default server.
For classes, cupsGetPPD() returns the PPD file for the first printer
in the class.</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
cupsGetPPD(
const <a href='#char'>char</a> * name);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Printer name</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Filename for PPD file</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='cupsGetPPD2'>cupsGetPPD2()</a></h3>
<h4>Description</h4>
<p>Get the PPD file for a printer from the specified server.
For classes, cupsGetPPD2() returns the PPD file for the first printer
in the class.
</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
cupsGetPPD2(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * name);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>name</tt></td><td>Printer name</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Filename for PPD file</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsGetPassword'>cupsGetPassword()</a></h3>
<h4>Description</h4>
<p>Get a password from the user.
Returns NULL if the user does not provide a password.</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
cupsGetPassword(
const <a href='#char'>char</a> * prompt);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>prompt</tt></td><td>Prompt string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Password</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='cupsGetPrinters'>cupsGetPrinters()</a></h3>
<h4>Description</h4>
<p>Get a list of printers from the default server.
This function is deprecated - use cupsGetDests() instead.
</p>
<h4>Syntax</h4>
<pre>
int
cupsGetPrinters(
<a href='#char'>char</a> *** printers);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>printers</tt></td><td>Printers</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of printers</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsLastError'>cupsLastError()</a></h3>
<h4>Description</h4>
<p>Return the last IPP status code.</p>
<h4>Syntax</h4>
<pre>
ipp_status_t
cupsLastError(void);
</pre>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>IPP status code from last request</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='cupsLastErrorString'>cupsLastErrorString()</a></h3>
<h4>Description</h4>
<p>Return the last IPP status-message.
</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
cupsLastErrorString(void);
</pre>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>status-message text from last request</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsMarkOptions'>cupsMarkOptions()</a></h3>
<h4>Description</h4>
<p>Mark command-line options in a PPD file.</p>
<h4>Syntax</h4>
<pre>
int
cupsMarkOptions(
ppd_file_t * ppd,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> * options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ppd</tt></td><td>PPD file</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if conflicting</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsParseOptions'>cupsParseOptions()</a></h3>
<h4>Description</h4>
<p>Parse options from a command-line argument.
This function converts space-delimited name/value pairs according
to the PAPI text option ABNF specification. Collection values
(&quot;name={a=... b=... c=...}&quot;) are stored with the curley brackets
intact - use cupsParseOptions() on the value to extract the collection
attributes.</p>
<h4>Syntax</h4>
<pre>
int
cupsParseOptions(
const <a href='#char'>char</a> * arg,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> ** options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>arg</tt></td><td>Argument to parse</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options found</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of options found</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsPrintFile'>cupsPrintFile()</a></h3>
<h4>Description</h4>
<p>Print a file to a printer or class on the default server.</p>
<h4>Syntax</h4>
<pre>
int
cupsPrintFile(
const <a href='#char'>char</a> * name,
const <a href='#char'>char</a> * filename,
const <a href='#char'>char</a> * title,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> * options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Printer or class name</td></tr>
<tr><td><tt>filename</tt></td><td>File to print</td></tr>
<tr><td><tt>title</tt></td><td>Title of job</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Job ID</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='cupsPrintFile2'>cupsPrintFile2()</a></h3>
<h4>Description</h4>
<p>Print a file to a printer or class on the specified server.
</p>
<h4>Syntax</h4>
<pre>
int
cupsPrintFile2(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * name,
const <a href='#char'>char</a> * filename,
const <a href='#char'>char</a> * title,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> * options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>name</tt></td><td>Printer or class name</td></tr>
<tr><td><tt>filename</tt></td><td>File to print</td></tr>
<tr><td><tt>title</tt></td><td>Title of job</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Job ID</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsPrintFiles'>cupsPrintFiles()</a></h3>
<h4>Description</h4>
<p>Print one or more files to a printer or class on the default server.</p>
<h4>Syntax</h4>
<pre>
int
cupsPrintFiles(
const <a href='#char'>char</a> * name,
int num_files,
const <a href='#char'>char</a> ** files,
const <a href='#char'>char</a> * title,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> * options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Printer or class name</td></tr>
<tr><td><tt>num_files</tt></td><td>Number of files</td></tr>
<tr><td><tt>files</tt></td><td>File(s) to print</td></tr>
<tr><td><tt>title</tt></td><td>Title of job</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Job ID</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='cupsPrintFiles2'>cupsPrintFiles2()</a></h3>
<h4>Description</h4>
<p>Print one or more files to a printer or class on the specified server.
</p>
<h4>Syntax</h4>
<pre>
int
cupsPrintFiles2(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * name,
int num_files,
const <a href='#char'>char</a> ** files,
const <a href='#char'>char</a> * title,
int num_options,
<a href='#cups_option_t'>cups_option_t</a> * options);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>name</tt></td><td>Printer or class name</td></tr>
<tr><td><tt>num_files</tt></td><td>Number of files</td></tr>
<tr><td><tt>files</tt></td><td>File(s) to print</td></tr>
<tr><td><tt>title</tt></td><td>Title of job</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Job ID</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span><a name='cupsPutFd'>cupsPutFd()</a></h3>
<h4>Description</h4>
<p>Put a file on the server.
This function returns HTTP_CREATED when the file is stored successfully.
</p>
<h4>Syntax</h4>
<pre>
http_status_t
cupsPutFd(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * resource,
int fd);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>resource</tt></td><td>Resource name</td></tr>
<tr><td><tt>fd</tt></td><td>File descriptor</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span><a name='cupsPutFile'>cupsPutFile()</a></h3>
<h4>Description</h4>
<p>Put a file on the server.
This function returns HTTP_CREATED when the file is stored successfully.
</p>
<h4>Syntax</h4>
<pre>
http_status_t
cupsPutFile(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * resource,
const <a href='#char'>char</a> * filename);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>resource</tt></td><td>Resource name</td></tr>
<tr><td><tt>filename</tt></td><td>Filename</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsServer'>cupsServer()</a></h3>
<h4>Description</h4>
<p>Return the hostname/address of the default server.
The returned value can be a fully-qualified hostname, a numeric
IPv4 or IPv6 address, or a domain socket pathname.</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
cupsServer(void);
</pre>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>Server name</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsSetDests'>cupsSetDests()</a></h3>
<h4>Description</h4>
<p>Save the list of destinations for the default server.
This function saves the destinations to /etc/cups/lpoptions when run
as root and ~/.lpoptions when run as a normal user.</p>
<h4>Syntax</h4>
<pre>
void
cupsSetDests(
int num_dests,
<a href='#cups_dest_t'>cups_dest_t</a> * dests);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>num_dests</tt></td><td>Number of destinations</td></tr>
<tr><td><tt>dests</tt></td><td>Destinations</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='cupsSetDests2'>cupsSetDests2()</a></h3>
<h4>Description</h4>
<p>Save the list of destinations for the specified server.
This function saves the destinations to /etc/cups/lpoptions when run
as root and ~/.lpoptions when run as a normal user.
</p>
<h4>Syntax</h4>
<pre>
int
cupsSetDests2(
<a href='#http_t'>http_t</a> * http,
int num_dests,
<a href='#cups_dest_t'>cups_dest_t</a> * dests);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>num_dests</tt></td><td>Number of destinations</td></tr>
<tr><td><tt>dests</tt></td><td>Destinations</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>0 on success, -1 on error</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsSetEncryption'>cupsSetEncryption()</a></h3>
<h4>Description</h4>
<p>Set the encryption preference.</p>
<h4>Syntax</h4>
<pre>
void
cupsSetEncryption(
<a href='#http_encryption_t'>http_encryption_t</a> e);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>e</tt></td><td>New encryption preference</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsSetPasswordCB'>cupsSetPasswordCB()</a></h3>
<h4>Description</h4>
<p>Set the password callback for CUPS.
Pass NULL to restore the default (console) password callback.</p>
<h4>Syntax</h4>
<pre>
void
cupsSetPasswordCB(
cups_password_cb_t cb);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>cb</tt></td><td>Callback function</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsSetServer'>cupsSetServer()</a></h3>
<h4>Description</h4>
<p>Set the default server name.
The &quot;server&quot; string can be a fully-qualified hostname, a numeric
IPv4 or IPv6 address, or a domain socket pathname. Pass NULL to
restore the default server name.</p>
<h4>Syntax</h4>
<pre>
void
cupsSetServer(
const <a href='#char'>char</a> * server);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>server</tt></td><td>Server name</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsSetUser'>cupsSetUser()</a></h3>
<h4>Description</h4>
<p>Set the default user name.
Pass NULL to restore the default user name.</p>
<h4>Syntax</h4>
<pre>
void
cupsSetUser(
const <a href='#char'>char</a> * user);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>user</tt></td><td>User name</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsUser'>cupsUser()</a></h3>
<h4>Description</h4>
<p>Return the current user's name.</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
cupsUser(void);
</pre>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>User name</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrAny'>httpAddrAny()</a></h3>
<h4>Description</h4>
<p>Check for the &quot;any&quot; address.
</p>
<h4>Syntax</h4>
<pre>
int
httpAddrAny(
const <a href='#http_addr_t'>http_addr_t</a> * addr);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address to check</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if &quot;any&quot;, 0 otherwise</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrEqual'>httpAddrEqual()</a></h3>
<h4>Description</h4>
<p>Compare two addresses.
</p>
<h4>Syntax</h4>
<pre>
int
httpAddrEqual(
const <a href='#http_addr_t'>http_addr_t</a> * addr1,
const <a href='#http_addr_t'>http_addr_t</a> * addr2);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr1</tt></td><td>First address</td></tr>
<tr><td><tt>addr2</tt></td><td>Second address</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if equal, 0 if !=</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrLength'>httpAddrLength()</a></h3>
<h4>Description</h4>
<p>Return the length of the address in bytes.
</p>
<h4>Syntax</h4>
<pre>
int
httpAddrLength(
const <a href='#http_addr_t'>http_addr_t</a> * addr);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Length in bytes</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrLocalhost'>httpAddrLocalhost()</a></h3>
<h4>Description</h4>
<p>Check for the local loopback address.
</p>
<h4>Syntax</h4>
<pre>
int
httpAddrLocalhost(
const <a href='#http_addr_t'>http_addr_t</a> * addr);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address to check</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if local host, 0 otherwise</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrLookup'>httpAddrLookup()</a></h3>
<h4>Description</h4>
<p>Lookup the hostname associated with the address.
</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpAddrLookup(
const <a href='#http_addr_t'>http_addr_t</a> * addr,
<a href='#char'>char</a> * name,
int namelen);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address to lookup</td></tr>
<tr><td><tt>name</tt></td><td>Host name buffer</td></tr>
<tr><td><tt>namelen</tt></td><td>Size of name buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Host name</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrString'>httpAddrString()</a></h3>
<h4>Description</h4>
<p>Convert an IP address to a dotted string.
</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpAddrString(
const <a href='#http_addr_t'>http_addr_t</a> * addr,
<a href='#char'>char</a> * s,
int slen);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address to convert</td></tr>
<tr><td><tt>s</tt></td><td>String buffer</td></tr>
<tr><td><tt>slen</tt></td><td>Length of string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>IP string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAssembleURI'>httpAssembleURI()</a></h3>
<h4>Description</h4>
<p>Assemble a uniform resource identifier from its
components.
This function properly escapes all reserved characters in a URI. You
should use this function in place of traditional string functions
whenever you need to create a URI string.
</p>
<h4>Syntax</h4>
<pre>
http_uri_status_t
httpAssembleURI(
<a href='#char'>char</a> * uri,
int urilen,
const <a href='#char'>char</a> * scheme,
const <a href='#char'>char</a> * username,
const <a href='#char'>char</a> * host,
int port,
const <a href='#char'>char</a> * resource);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>uri</tt></td><td>URI buffer</td></tr>
<tr><td><tt>urilen</tt></td><td>Size of URI buffer</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme name</td></tr>
<tr><td><tt>username</tt></td><td>Username</td></tr>
<tr><td><tt>host</tt></td><td>Hostname or address</td></tr>
<tr><td><tt>port</tt></td><td>Port number</td></tr>
<tr><td><tt>resource</tt></td><td>Resource</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>URI status</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAssembleURIf'>httpAssembleURIf()</a></h3>
<h4>Description</h4>
<p>Assemble a uniform resource identifier from its
components with a formatted resource.
This function creates a formatted version of the resource string
argument &quot;resourcef&quot; and properly escapes all reserved characters
in a URI. You should use this function in place of traditional
string functions whenever you need to create a URI string.
</p>
<h4>Syntax</h4>
<pre>
http_uri_status_t
httpAssembleURIf(
<a href='#char'>char</a> * uri,
int urilen,
const <a href='#char'>char</a> * scheme,
const <a href='#char'>char</a> * username,
const <a href='#char'>char</a> * host,
int port,
const <a href='#char'>char</a> * resourcef,
...);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>uri</tt></td><td>URI buffer</td></tr>
<tr><td><tt>urilen</tt></td><td>Size of URI buffer</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme name</td></tr>
<tr><td><tt>username</tt></td><td>Username</td></tr>
<tr><td><tt>host</tt></td><td>Hostname or address</td></tr>
<tr><td><tt>port</tt></td><td>Port number</td></tr>
<tr><td><tt>resourcef</tt></td><td>Printf-style resource</td></tr>
<tr><td><tt>...</tt></td><td>Additional arguments as needed</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>URI status</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpCheck'>httpCheck()</a></h3>
<h4>Description</h4>
<p>Check to see if there is a pending response from the server.</p>
<h4>Syntax</h4>
<pre>
int
httpCheck(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>0 = no data, 1 = data available</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpClearCookie'>httpClearCookie()</a></h3>
<h4>Description</h4>
<p>Clear the cookie value(s).
</p>
<h4>Syntax</h4>
<pre>
void
httpClearCookie(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>Connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpClose'>httpClose()</a></h3>
<h4>Description</h4>
<p>Close an HTTP connection...</p>
<h4>Syntax</h4>
<pre>
void
httpClose(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>Connection to close</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpConnect'>httpConnect()</a></h3>
<h4>Description</h4>
<p>Connect to a HTTP server.</p>
<h4>Syntax</h4>
<pre>
<a href='#http_t'>http_t</a> *
httpConnect(
const <a href='#char'>char</a> * host,
int port);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>host</tt></td><td>Host to connect to</td></tr>
<tr><td><tt>port</tt></td><td>Port number</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New HTTP connection</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpConnectEncrypt'>httpConnectEncrypt()</a></h3>
<h4>Description</h4>
<p>Connect to a HTTP server using encryption.</p>
<h4>Syntax</h4>
<pre>
<a href='#http_t'>http_t</a> *
httpConnectEncrypt(
const <a href='#char'>char</a> * host,
int port,
<a href='#http_encryption_t'>http_encryption_t</a> encryption);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>host</tt></td><td>Host to connect to</td></tr>
<tr><td><tt>port</tt></td><td>Port number</td></tr>
<tr><td><tt>encryption</tt></td><td>Type of encryption to use</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New HTTP connection</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpDecode64'>httpDecode64()</a></h3>
<h4>Description</h4>
<p>Base64-decode a string.</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpDecode64(
<a href='#char'>char</a> * out,
const <a href='#char'>char</a> * in);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>out</tt></td><td>String to write to</td></tr>
<tr><td><tt>in</tt></td><td>String to read from</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Decoded string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='httpDecode64_2'>httpDecode64_2()</a></h3>
<h4>Description</h4>
<p>Base64-decode a string.
</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpDecode64_2(
<a href='#char'>char</a> * out,
int * outlen,
const <a href='#char'>char</a> * in);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>out</tt></td><td>String to write to</td></tr>
<tr><td><tt>outlen</tt></td><td>Size of output string</td></tr>
<tr><td><tt>in</tt></td><td>String to read from</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Decoded string</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpDelete'>httpDelete()</a></h3>
<h4>Description</h4>
<p>Send a DELETE request to the server.</p>
<h4>Syntax</h4>
<pre>
int
httpDelete(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * uri);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>uri</tt></td><td>URI to delete</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpEncode64'>httpEncode64()</a></h3>
<h4>Description</h4>
<p>Base64-encode a string.</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpEncode64(
<a href='#char'>char</a> * out,
const <a href='#char'>char</a> * in);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>out</tt></td><td>String to write to</td></tr>
<tr><td><tt>in</tt></td><td>String to read from</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Encoded string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='httpEncode64_2'>httpEncode64_2()</a></h3>
<h4>Description</h4>
<p>Base64-encode a string.
</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpEncode64_2(
<a href='#char'>char</a> * out,
int outlen,
const <a href='#char'>char</a> * in,
int inlen);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>out</tt></td><td>String to write to</td></tr>
<tr><td><tt>outlen</tt></td><td>Size of output string</td></tr>
<tr><td><tt>in</tt></td><td>String to read from</td></tr>
<tr><td><tt>inlen</tt></td><td>Size of input string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Encoded string</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpEncryption'>httpEncryption()</a></h3>
<h4>Description</h4>
<p>Set the required encryption on the link.</p>
<h4>Syntax</h4>
<pre>
int
httpEncryption(
<a href='#http_t'>http_t</a> * http,
<a href='#http_encryption_t'>http_encryption_t</a> e);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>e</tt></td><td>New encryption preference</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>-1 on error, 0 on success</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpFlush'>httpFlush()</a></h3>
<h4>Description</h4>
<p>Flush data from a HTTP connection.</p>
<h4>Syntax</h4>
<pre>
void
httpFlush(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpFlushWrite'>httpFlushWrite()</a></h3>
<h4>Description</h4>
<p>Flush data in write buffer.
</p>
<h4>Syntax</h4>
<pre>
int
httpFlushWrite(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Bytes written or -1 on error</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpGet'>httpGet()</a></h3>
<h4>Description</h4>
<p>Send a GET request to the server.</p>
<h4>Syntax</h4>
<pre>
int
httpGet(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * uri);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>uri</tt></td><td>URI to get</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetDateString'>httpGetDateString()</a></h3>
<h4>Description</h4>
<p>Get a formatted date/time string from a time value.
</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
httpGetDateString(
time_t t);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>t</tt></td><td>UNIX time</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Date/time string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetDateString2'>httpGetDateString2()</a></h3>
<h4>Description</h4>
<p>Get a formatted date/time string from a time value.
</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
httpGetDateString2(
time_t t,
<a href='#char'>char</a> * s,
int slen);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>t</tt></td><td>UNIX time</td></tr>
<tr><td><tt>s</tt></td><td>String buffer</td></tr>
<tr><td><tt>slen</tt></td><td>Size of string buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Date/time string</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpGetDateTime'>httpGetDateTime()</a></h3>
<h4>Description</h4>
<p>Get a time value from a formatted date/time string.</p>
<h4>Syntax</h4>
<pre>
time_t
httpGetDateTime(
const <a href='#char'>char</a> * s);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>s</tt></td><td>Date/time string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>UNIX time</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetHostByName'>httpGetHostByName()</a></h3>
<h4>Description</h4>
<p>Lookup a hostname or IPv4 address, and return
address records for the specified name.
</p>
<h4>Syntax</h4>
<pre>
struct hostent *
httpGetHostByName(
const <a href='#char'>char</a> * name);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Hostname or IP address</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Host entry</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetHostname'>httpGetHostname()</a></h3>
<h4>Description</h4>
<p>Get the FQDN for the local system.
This function uses both gethostname() and gethostbyname() to
get the local hostname with domain.
</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
httpGetHostname(
<a href='#char'>char</a> * s,
int slen);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>s</tt></td><td>String buffer for name</td></tr>
<tr><td><tt>slen</tt></td><td>Size of buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>FQDN for this system</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetLength'>httpGetLength()</a></h3>
<h4>Description</h4>
<p>Get the amount of data remaining from the
content-length or transfer-encoding fields.
This function is deprecated and will not return lengths larger than
2^31 - 1; use httpGetLength2() instead.
</p>
<h4>Syntax</h4>
<pre>
int
httpGetLength(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Content length</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpGetLength2'>httpGetLength2()</a></h3>
<h4>Description</h4>
<p>Get the amount of data remaining from the
content-length or transfer-encoding fields.
This function returns the complete content length, even for
content larger than 2^31 - 1.</p>
<h4>Syntax</h4>
<pre>
off_t
httpGetLength2(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Content length</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetSubField'>httpGetSubField()</a></h3>
<h4>Description</h4>
<p>Get a sub-field value.
</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpGetSubField(
<a href='#http_t'>http_t</a> * http,
http_field_t field,
const <a href='#char'>char</a> * name,
<a href='#char'>char</a> * value);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>field</tt></td><td>Field index</td></tr>
<tr><td><tt>name</tt></td><td>Name of sub-field</td></tr>
<tr><td><tt>value</tt></td><td>Value string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Value or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetSubField2'>httpGetSubField2()</a></h3>
<h4>Description</h4>
<p>Get a sub-field value.
</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpGetSubField2(
<a href='#http_t'>http_t</a> * http,
http_field_t field,
const <a href='#char'>char</a> * name,
<a href='#char'>char</a> * value,
int valuelen);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>field</tt></td><td>Field index</td></tr>
<tr><td><tt>name</tt></td><td>Name of sub-field</td></tr>
<tr><td><tt>value</tt></td><td>Value string</td></tr>
<tr><td><tt>valuelen</tt></td><td>Size of value buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Value or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpGets'>httpGets()</a></h3>
<h4>Description</h4>
<p>Get a line of text from a HTTP connection.</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpGets(
<a href='#char'>char</a> * line,
int length,
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>line</tt></td><td>Line to read into</td></tr>
<tr><td><tt>length</tt></td><td>Max length of buffer</td></tr>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Line or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpHead'>httpHead()</a></h3>
<h4>Description</h4>
<p>Send a HEAD request to the server.</p>
<h4>Syntax</h4>
<pre>
int
httpHead(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * uri);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>uri</tt></td><td>URI for head</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpInitialize'>httpInitialize()</a></h3>
<h4>Description</h4>
<p>Initialize the HTTP interface library and set the
default HTTP proxy (if any).</p>
<h4>Syntax</h4>
<pre>
void
httpInitialize(void);
</pre>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpMD5'>httpMD5()</a></h3>
<h4>Description</h4>
<p>Compute the MD5 sum of the username:group:password.</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpMD5(
const <a href='#char'>char</a> * username,
const <a href='#char'>char</a> * realm,
const <a href='#char'>char</a> * passwd,
<a href='#char'>char</a> md5[33]);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>username</tt></td><td>User name</td></tr>
<tr><td><tt>realm</tt></td><td>Realm name</td></tr>
<tr><td><tt>passwd</tt></td><td>Password string</td></tr>
<tr><td><tt>md5[33]</tt></td><td>MD5 string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>MD5 sum</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpMD5Final'>httpMD5Final()</a></h3>
<h4>Description</h4>
<p>Combine the MD5 sum of the username, group, and password
with the server-supplied nonce value, method, and
request-uri.</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpMD5Final(
const <a href='#char'>char</a> * nonce,
const <a href='#char'>char</a> * method,
const <a href='#char'>char</a> * resource,
<a href='#char'>char</a> md5[33]);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>nonce</tt></td><td>Server nonce value</td></tr>
<tr><td><tt>method</tt></td><td>METHOD (GET, POST, etc.)</td></tr>
<tr><td><tt>resource</tt></td><td>Resource path</td></tr>
<tr><td><tt>md5[33]</tt></td><td>MD5 sum</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New sum</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpMD5String'>httpMD5String()</a></h3>
<h4>Description</h4>
<p>Convert an MD5 sum to a character string.</p>
<h4>Syntax</h4>
<pre>
<a href='#char'>char</a> *
httpMD5String(
const unsigned <a href='#char'>char</a> * sum,
<a href='#char'>char</a> md5[33]);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>sum</tt></td><td>MD5 sum data</td></tr>
<tr><td><tt>md5[33]</tt></td><td>MD5 sum in hex</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>MD5 sum in hex</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpOptions'>httpOptions()</a></h3>
<h4>Description</h4>
<p>Send an OPTIONS request to the server.</p>
<h4>Syntax</h4>
<pre>
int
httpOptions(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * uri);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>uri</tt></td><td>URI for options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpPost'>httpPost()</a></h3>
<h4>Description</h4>
<p>Send a POST request to the server.</p>
<h4>Syntax</h4>
<pre>
int
httpPost(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * uri);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>uri</tt></td><td>URI for post</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpPrintf'>httpPrintf()</a></h3>
<h4>Description</h4>
<p>Print a formatted string to a HTTP connection.</p>
<h4>Syntax</h4>
<pre>
int
httpPrintf(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * format,
...);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>format</tt></td><td>printf-style format string</td></tr>
<tr><td><tt>...</tt></td><td>Additional args as needed</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of bytes written</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpPut'>httpPut()</a></h3>
<h4>Description</h4>
<p>Send a PUT request to the server.</p>
<h4>Syntax</h4>
<pre>
int
httpPut(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * uri);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>uri</tt></td><td>URI to put</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpRead'>httpRead()</a></h3>
<h4>Description</h4>
<p>Read data from a HTTP connection.</p>
<h4>Syntax</h4>
<pre>
int
httpRead(
<a href='#http_t'>http_t</a> * http,
<a href='#char'>char</a> * buffer,
int length);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
<tr><td><tt>length</tt></td><td>Maximum number of bytes</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of bytes read</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpReconnect'>httpReconnect()</a></h3>
<h4>Description</h4>
<p>Reconnect to a HTTP server...</p>
<h4>Syntax</h4>
<pre>
int
httpReconnect(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>0 on success, non-zero on failure</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpSeparate'>httpSeparate()</a></h3>
<h4>Description</h4>
<p>Separate a Universal Resource Identifier into its
components.</p>
<h4>Syntax</h4>
<pre>
void
httpSeparate(
const <a href='#char'>char</a> * uri,
<a href='#char'>char</a> * scheme,
<a href='#char'>char</a> * username,
<a href='#char'>char</a> * host,
int * port,
<a href='#char'>char</a> * resource);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>uri</tt></td><td>Universal Resource Identifier</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme [32] (http, https, etc.)</td></tr>
<tr><td><tt>username</tt></td><td>Username [1024]</td></tr>
<tr><td><tt>host</tt></td><td>Hostname [1024]</td></tr>
<tr><td><tt>port</tt></td><td>Port number to use</td></tr>
<tr><td><tt>resource</tt></td><td>Resource/filename [1024]</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='httpSeparate2'>httpSeparate2()</a></h3>
<h4>Description</h4>
<p>Separate a Universal Resource Identifier into its
components.
</p>
<h4>Syntax</h4>
<pre>
void
httpSeparate2(
const <a href='#char'>char</a> * uri,
<a href='#char'>char</a> * scheme,
int schemelen,
<a href='#char'>char</a> * username,
int usernamelen,
<a href='#char'>char</a> * host,
int hostlen,
int * port,
<a href='#char'>char</a> * resource,
int resourcelen);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>uri</tt></td><td>Universal Resource Identifier</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme (http, https, etc.)</td></tr>
<tr><td><tt>schemelen</tt></td><td>Size of scheme buffer</td></tr>
<tr><td><tt>username</tt></td><td>Username</td></tr>
<tr><td><tt>usernamelen</tt></td><td>Size of username buffer</td></tr>
<tr><td><tt>host</tt></td><td>Hostname</td></tr>
<tr><td><tt>hostlen</tt></td><td>Size of hostname buffer</td></tr>
<tr><td><tt>port</tt></td><td>Port number to use</td></tr>
<tr><td><tt>resource</tt></td><td>Resource/filename</td></tr>
<tr><td><tt>resourcelen</tt></td><td>Size of resource buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpSeparateURI'>httpSeparateURI()</a></h3>
<h4>Description</h4>
<p>Separate a Universal Resource Identifier into its
components.
</p>
<h4>Syntax</h4>
<pre>
http_uri_status_t
httpSeparateURI(
const <a href='#char'>char</a> * uri,
<a href='#char'>char</a> * scheme,
int schemelen,
<a href='#char'>char</a> * username,
int usernamelen,
<a href='#char'>char</a> * host,
int hostlen,
int * port,
<a href='#char'>char</a> * resource,
int resourcelen);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>uri</tt></td><td>Universal Resource Identifier</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme (http, https, etc.)</td></tr>
<tr><td><tt>schemelen</tt></td><td>Size of scheme buffer</td></tr>
<tr><td><tt>username</tt></td><td>Username</td></tr>
<tr><td><tt>usernamelen</tt></td><td>Size of username buffer</td></tr>
<tr><td><tt>host</tt></td><td>Hostname</td></tr>
<tr><td><tt>hostlen</tt></td><td>Size of hostname buffer</td></tr>
<tr><td><tt>port</tt></td><td>Port number to use</td></tr>
<tr><td><tt>resource</tt></td><td>Resource/filename</td></tr>
<tr><td><tt>resourcelen</tt></td><td>Size of resource buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Result of separation</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpSetCookie'>httpSetCookie()</a></h3>
<h4>Description</h4>
<p>Set the cookie value(s)...
</p>
<h4>Syntax</h4>
<pre>
void
httpSetCookie(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * cookie);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>Connection</td></tr>
<tr><td><tt>cookie</tt></td><td>Cookie string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpSetField'>httpSetField()</a></h3>
<h4>Description</h4>
<p>Set the value of an HTTP header.</p>
<h4>Syntax</h4>
<pre>
void
httpSetField(
<a href='#http_t'>http_t</a> * http,
http_field_t field,
const <a href='#char'>char</a> * value);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>field</tt></td><td>Field index</td></tr>
<tr><td><tt>value</tt></td><td>Value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpSetLength'>httpSetLength()</a></h3>
<h4>Description</h4>
<p>Set the content-length and content-encoding.
</p>
<h4>Syntax</h4>
<pre>
void
httpSetLength(
<a href='#http_t'>http_t</a> * http,
size_t length);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>length</tt></td><td>Length (0 for chunked)</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpStatus'>httpStatus()</a></h3>
<h4>Description</h4>
<p>Return a short string describing a HTTP status code.</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
httpStatus(
http_status_t status);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>status</tt></td><td>HTTP status code</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>String or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpTrace'>httpTrace()</a></h3>
<h4>Description</h4>
<p>Send an TRACE request to the server.</p>
<h4>Syntax</h4>
<pre>
int
httpTrace(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * uri);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>uri</tt></td><td>URI for trace</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpUpdate'>httpUpdate()</a></h3>
<h4>Description</h4>
<p>Update the current HTTP state for incoming data.</p>
<h4>Syntax</h4>
<pre>
http_status_t
httpUpdate(
<a href='#http_t'>http_t</a> * http);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>HTTP status</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpWait'>httpWait()</a></h3>
<h4>Description</h4>
<p>Wait for data available on a connection.
</p>
<h4>Syntax</h4>
<pre>
int
httpWait(
<a href='#http_t'>http_t</a> * http,
int msec);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>msec</tt></td><td>Milliseconds to wait</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if data is available, 0 otherwise</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpWrite'>httpWrite()</a></h3>
<h4>Description</h4>
<p>Write data to a HTTP connection.</p>
<h4>Syntax</h4>
<pre>
int
httpWrite(
<a href='#http_t'>http_t</a> * http,
const <a href='#char'>char</a> * buffer,
int length);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP data</td></tr>
<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
<tr><td><tt>length</tt></td><td>Number of bytes to write</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of bytes written</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddBoolean'>ippAddBoolean()</a></h3>
<h4>Description</h4>
<p>Add a boolean attribute to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddBoolean(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
<a href='#char'>char</a> value);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>value</tt></td><td>Value of attribute</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddBooleans'>ippAddBooleans()</a></h3>
<h4>Description</h4>
<p>Add an array of boolean values.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddBooleans(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
int num_values,
const <a href='#char'>char</a> * values);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>values</tt></td><td>Values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippAddCollection'>ippAddCollection()</a></h3>
<h4>Description</h4>
<p>Add a collection value.
</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddCollection(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
<a href='#ipp_t'>ipp_t</a> * value);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>value</tt></td><td>Value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippAddCollections'>ippAddCollections()</a></h3>
<h4>Description</h4>
<p>Add an array of collection values.
</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddCollections(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
int num_values,
const <a href='#ipp_t'>ipp_t</a> ** values);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>values</tt></td><td>Values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddDate'>ippAddDate()</a></h3>
<h4>Description</h4>
<p>Add a date attribute to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddDate(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
const <a href='#ipp_uchar_t'>ipp_uchar_t</a> * value);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>value</tt></td><td>Value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddInteger'>ippAddInteger()</a></h3>
<h4>Description</h4>
<p>Add a integer attribute to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddInteger(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
ipp_tag_t type,
const <a href='#char'>char</a> * name,
int value);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>value</tt></td><td>Value of attribute</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddIntegers'>ippAddIntegers()</a></h3>
<h4>Description</h4>
<p>Add an array of integer values.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddIntegers(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
ipp_tag_t type,
const <a href='#char'>char</a> * name,
int num_values,
const int * values);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>values</tt></td><td>Values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippAddOctetString'>ippAddOctetString()</a></h3>
<h4>Description</h4>
<p>Add an octetString value to an IPP request.
</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddOctetString(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
const void * data,
int datalen);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>data</tt></td><td>octetString data</td></tr>
<tr><td><tt>datalen</tt></td><td>Length of data in bytes</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddRange'>ippAddRange()</a></h3>
<h4>Description</h4>
<p>Add a range of values to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddRange(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
int lower,
int upper);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>lower</tt></td><td>Lower value</td></tr>
<tr><td><tt>upper</tt></td><td>Upper value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddRanges'>ippAddRanges()</a></h3>
<h4>Description</h4>
<p>Add ranges of values to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddRanges(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
int num_values,
const int * lower,
const int * upper);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>lower</tt></td><td>Lower values</td></tr>
<tr><td><tt>upper</tt></td><td>Upper values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddResolution'>ippAddResolution()</a></h3>
<h4>Description</h4>
<p>Add a resolution value to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddResolution(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
ipp_res_t units,
int xres,
int yres);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>units</tt></td><td>Units for resolution</td></tr>
<tr><td><tt>xres</tt></td><td>X resolution</td></tr>
<tr><td><tt>yres</tt></td><td>Y resolution</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddResolutions'>ippAddResolutions()</a></h3>
<h4>Description</h4>
<p>Add resolution values to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddResolutions(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
const <a href='#char'>char</a> * name,
int num_values,
ipp_res_t units,
const int * xres,
const int * yres);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>units</tt></td><td>Units for resolution</td></tr>
<tr><td><tt>xres</tt></td><td>X resolutions</td></tr>
<tr><td><tt>yres</tt></td><td>Y resolutions</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddSeparator'>ippAddSeparator()</a></h3>
<h4>Description</h4>
<p>Add a group separator to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddSeparator(
<a href='#ipp_t'>ipp_t</a> * ipp);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddString'>ippAddString()</a></h3>
<h4>Description</h4>
<p>Add a language-encoded string to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddString(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
ipp_tag_t type,
const <a href='#char'>char</a> * name,
const <a href='#char'>char</a> * charset,
const <a href='#char'>char</a> * value);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>charset</tt></td><td>Character set</td></tr>
<tr><td><tt>value</tt></td><td>Value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddStrings'>ippAddStrings()</a></h3>
<h4>Description</h4>
<p>Add language-encoded strings to an IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippAddStrings(
<a href='#ipp_t'>ipp_t</a> * ipp,
ipp_tag_t group,
ipp_tag_t type,
const <a href='#char'>char</a> * name,
int num_values,
const <a href='#char'>char</a> * charset,
const <a href='#char'>char</a> *const * values);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>charset</tt></td><td>Character set</td></tr>
<tr><td><tt>values</tt></td><td>Values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippDateToTime'>ippDateToTime()</a></h3>
<h4>Description</h4>
<p>Convert from RFC 1903 Date/Time format to UNIX time
in seconds.</p>
<h4>Syntax</h4>
<pre>
time_t
ippDateToTime(
const <a href='#ipp_uchar_t'>ipp_uchar_t</a> * date);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>date</tt></td><td>RFC 1903 date info</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>UNIX time value</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippDelete'>ippDelete()</a></h3>
<h4>Description</h4>
<p>Delete an IPP request.</p>
<h4>Syntax</h4>
<pre>
void
ippDelete(
<a href='#ipp_t'>ipp_t</a> * ipp);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippDeleteAttribute'>ippDeleteAttribute()</a></h3>
<h4>Description</h4>
<p>Delete a single attribute in an IPP request.
</p>
<h4>Syntax</h4>
<pre>
void
ippDeleteAttribute(
<a href='#ipp_t'>ipp_t</a> * ipp,
<a href='#ipp_attribute_t'>ipp_attribute_t</a> * attr);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>attr</tt></td><td>Attribute to delete</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippErrorString'>ippErrorString()</a></h3>
<h4>Description</h4>
<p>Return a name for the given status code.</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
ippErrorString(
ipp_status_t error);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>error</tt></td><td>Error status</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Text string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippErrorValue'>ippErrorValue()</a></h3>
<h4>Description</h4>
<p>Return a status code for the given name.
</p>
<h4>Syntax</h4>
<pre>
ipp_status_t
ippErrorValue(
const <a href='#char'>char</a> * name);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Name</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>IPP status code</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippFindAttribute'>ippFindAttribute()</a></h3>
<h4>Description</h4>
<p>Find a named attribute in a request...</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippFindAttribute(
<a href='#ipp_t'>ipp_t</a> * ipp,
const <a href='#char'>char</a> * name,
ipp_tag_t type);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Matching attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippFindNextAttribute'>ippFindNextAttribute()</a></h3>
<h4>Description</h4>
<p>Find the next named attribute in a request...</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *
ippFindNextAttribute(
<a href='#ipp_t'>ipp_t</a> * ipp,
const <a href='#char'>char</a> * name,
ipp_tag_t type);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Matching attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippLength'>ippLength()</a></h3>
<h4>Description</h4>
<p>Compute the length of an IPP request.</p>
<h4>Syntax</h4>
<pre>
size_t
ippLength(
<a href='#ipp_t'>ipp_t</a> * ipp);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP request</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Size of IPP request</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippNew'>ippNew()</a></h3>
<h4>Description</h4>
<p>Allocate a new IPP request.</p>
<h4>Syntax</h4>
<pre>
<a href='#ipp_t'>ipp_t</a> *
ippNew(void);
</pre>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>New IPP request</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippOpString'>ippOpString()</a></h3>
<h4>Description</h4>
<p>Return a name for the given operation id.
</p>
<h4>Syntax</h4>
<pre>
const <a href='#char'>char</a> *
ippOpString(
ipp_op_t op);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>op</tt></td><td>Operation ID</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Name</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippOpValue'>ippOpValue()</a></h3>
<h4>Description</h4>
<p>Return an operation id for the given name.
</p>
<h4>Syntax</h4>
<pre>
ipp_op_t
ippOpValue(
const <a href='#char'>char</a> * name);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Textual name</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Operation ID</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippPort'>ippPort()</a></h3>
<h4>Description</h4>
<p>Return the default IPP port number.</p>
<h4>Syntax</h4>
<pre>
int
ippPort(void);
</pre>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>Port number</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippRead'>ippRead()</a></h3>
<h4>Description</h4>
<p>Read data for an IPP request from a HTTP connection.</p>
<h4>Syntax</h4>
<pre>
ipp_state_t
ippRead(
<a href='#http_t'>http_t</a> * http,
<a href='#ipp_t'>ipp_t</a> * ipp);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippReadFile'>ippReadFile()</a></h3>
<h4>Description</h4>
<p>Read data for an IPP request from a file.
</p>
<h4>Syntax</h4>
<pre>
ipp_state_t
ippReadFile(
int fd,
<a href='#ipp_t'>ipp_t</a> * ipp);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>fd</tt></td><td>HTTP data</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippReadIO'>ippReadIO()</a></h3>
<h4>Description</h4>
<p>Read data for an IPP request.
</p>
<h4>Syntax</h4>
<pre>
ipp_state_t
ippReadIO(
void * src,
<a href='#ipp_iocb_t'>ipp_iocb_t</a> cb,
int blocking,
<a href='#ipp_t'>ipp_t</a> * parent,
<a href='#ipp_t'>ipp_t</a> * ipp);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>src</tt></td><td>Data source</td></tr>
<tr><td><tt>cb</tt></td><td>Read callback function</td></tr>
<tr><td><tt>blocking</tt></td><td>Use blocking IO?</td></tr>
<tr><td><tt>parent</tt></td><td>Parent request, if any</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippSetPort'>ippSetPort()</a></h3>
<h4>Description</h4>
<p>Set the default port number.</p>
<h4>Syntax</h4>
<pre>
void
ippSetPort(
int p);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>p</tt></td><td>Port number to use</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippTimeToDate'>ippTimeToDate()</a></h3>
<h4>Description</h4>
<p>Convert from UNIX time to RFC 1903 format.</p>
<h4>Syntax</h4>
<pre>
const <a href='#ipp_uchar_t'>ipp_uchar_t</a> *
ippTimeToDate(
time_t t);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>t</tt></td><td>UNIX time value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>RFC-1903 date/time data</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippWrite'>ippWrite()</a></h3>
<h4>Description</h4>
<p>Write data for an IPP request to a HTTP connection.</p>
<h4>Syntax</h4>
<pre>
ipp_state_t
ippWrite(
<a href='#http_t'>http_t</a> * http,
<a href='#ipp_t'>ipp_t</a> * ipp);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippWriteFile'>ippWriteFile()</a></h3>
<h4>Description</h4>
<p>Write data for an IPP request to a file.
</p>
<h4>Syntax</h4>
<pre>
ipp_state_t
ippWriteFile(
int fd,
<a href='#ipp_t'>ipp_t</a> * ipp);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>fd</tt></td><td>HTTP data</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippWriteIO'>ippWriteIO()</a></h3>
<h4>Description</h4>
<p>Write data for an IPP request.
</p>
<h4>Syntax</h4>
<pre>
ipp_state_t
ippWriteIO(
void * dst,
<a href='#ipp_iocb_t'>ipp_iocb_t</a> cb,
int blocking,
<a href='#ipp_t'>ipp_t</a> * parent,
<a href='#ipp_t'>ipp_t</a> * ipp);
</pre>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>dst</tt></td><td>Destination</td></tr>
<tr><td><tt>cb</tt></td><td>Write callback function</td></tr>
<tr><td><tt>blocking</tt></td><td>Use blocking IO?</td></tr>
<tr><td><tt>parent</tt></td><td>Parent IPP request</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h2 class='title'><a name='STRUCTURES'>Structures</a></h2>
<ul>
<li><a href='#cups_dest_s'><tt>cups_dest_s</tt></a> </li>
<li><a href='#cups_job_s'><tt>cups_job_s</tt></a> </li>
<li><a href='#cups_option_s'><tt>cups_option_s</tt></a> </li>
<li><a href='#http_addrlist_s'><tt>http_addrlist_s</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#http_s'><tt>http_s</tt></a> </li>
<li><a href='#ipp_attribute_s'><tt>ipp_attribute_s</tt></a> </li>
<li><a href='#ipp_str'><tt>ipp_str</tt></a> </li>
</ul>
<!-- NEW PAGE -->
<h3 class='title'><a name='cups_dest_s'>cups_dest_s</a></h3>
<h4>Description</h4>
<p>Destination</p>
<h4>Definition</h4>
<pre>
struct cups_dest_s
{
<a href='#char'>char</a> *name, * instance;
int is_default;
int num_options;
<a href='#cups_option_t'>cups_option_t</a> * options;
};
</pre>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>instance</tt> </td><td>Local instance name or NULL</td></tr>
<tr><td><tt>is_default</tt> </td><td>Is this printer the default?</td></tr>
<tr><td><tt>num_options</tt> </td><td>Number of options</td></tr>
<tr><td><tt>options</tt> </td><td>Options</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='cups_job_s'>cups_job_s</a></h3>
<h4>Description</h4>
<p>Job</p>
<h4>Definition</h4>
<pre>
struct cups_job_s
{
<a href='#char'>char</a> *dest, *title, *user, * format;
int id;
int size, priority;
time_t completed_time, creation_time, processing_time;
ipp_jstate_t state;
};
</pre>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>format</tt> </td><td>Document format</td></tr>
<tr><td><tt>id</tt> </td><td>The job ID</td></tr>
<tr><td><tt>priority</tt> </td><td>Priority (1-100)</td></tr>
<tr><td><tt>processing_time</tt> </td><td>Time the job was processed</td></tr>
<tr><td><tt>state</tt> </td><td>Job state</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='cups_option_s'>cups_option_s</a></h3>
<h4>Description</h4>
<p>Types and structures...</p>
<h4>Definition</h4>
<pre>
struct cups_option_s
{
<a href='#char'>char</a> * name;
<a href='#char'>char</a> * value;
};
</pre>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt> </td><td>Name of option</td></tr>
<tr><td><tt>value</tt> </td><td>Value of option</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='http_addrlist_s'>http_addrlist_s</a></h3>
<h4>Description</h4>
<p>Socket address list, which is
used to enumerate all of the
addresses that are associated
with a hostname. </p>
<h4>Definition</h4>
<pre>
struct http_addrlist_s
{
<a href='#http_addr_t'>http_addr_t</a> addr;
struct <a href='#http_addrlist_s'>http_addrlist_s</a> * next;
};
</pre>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt> </td><td>Address</td></tr>
<tr><td><tt>next</tt> </td><td>Pointer to next address in list</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_s'>http_s</a></h3>
<h4>Description</h4>
<p>HTTP connection structure.</p>
<h4>Definition</h4>
<pre>
struct http_s
{
time_t activity;
<a href='#http_addrlist_t'>http_addrlist_t</a> * addrlist;
int auth_type;
int blocking;
<a href='#char'>char</a> buffer[HTTP_MAX_BUFFER];
<a href='#char'>char</a> * cookie;
<a href='#char'>char</a> * data;
<a href='#http_encoding_t'>http_encoding_t</a> data_encoding;
off_t data_remaining;
int digest_tries;
<a href='#http_encryption_t'>http_encryption_t</a> encryption;
int error;
http_status_t expect;
int fd;
<a href='#char'>char</a> hostname[HTTP_MAX_HOST], fields[HTTP_FIELD_MAX][HTTP_MAX_VALUE];
<a href='#http_addr_t'>http_addr_t</a> * hostaddr;
fd_set * input_set;
http_keepalive_t keep_alive;
_cups_md5_state_t md5_state;
<a href='#char'>char</a> nonce[HTTP_MAX_VALUE];
int nonce_count;
<a href='#http_state_t'>http_state_t</a> state;
http_status_t status;
void * tls;
int used;
<a href='#char'>char</a> authstring[HTTP_MAX_VALUE], userpass[HTTP_MAX_VALUE];
http_version_t version;
<a href='#char'>char</a> wbuffer[HTTP_MAX_BUFFER];
int wused;
};
</pre>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>activity</tt> </td><td>Time since last read/write</td></tr>
<tr><td><tt>addrlist</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>List of valid addresses </td></tr>
<tr><td><tt>auth_type</tt> </td><td>Authentication in use</td></tr>
<tr><td><tt>blocking</tt> </td><td>To block or not to block</td></tr>
<tr><td><tt>buffer[HTTP_MAX_BUFFER]</tt> </td><td>Buffer for incoming data</td></tr>
<tr><td><tt>cookie</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>Cookie value(s) </td></tr>
<tr><td><tt>data</tt> </td><td>Pointer to data buffer</td></tr>
<tr><td><tt>data_encoding</tt> </td><td>Chunked or not</td></tr>
<tr><td><tt>data_remaining</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Number of bytes left </td></tr>
<tr><td><tt>digest_tries</tt> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></td><td>Number of tries for digest auth </td></tr>
<tr><td><tt>encryption</tt> </td><td>Encryption requirements</td></tr>
<tr><td><tt>error</tt> </td><td>Last error on read</td></tr>
<tr><td><tt>expect</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>Expect: header </td></tr>
<tr><td><tt>fd</tt> </td><td>File descriptor for this socket</td></tr>
<tr><td><tt>fields[HTTP_FIELD_MAX][HTTP_MAX_VALUE]</tt> </td><td>Field values</td></tr>
<tr><td><tt>hostaddr</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Current host address and port </td></tr>
<tr><td><tt>input_set</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>select() set for httpWait() </td></tr>
<tr><td><tt>keep_alive</tt> </td><td>Keep-alive supported?</td></tr>
<tr><td><tt>md5_state</tt> </td><td>MD5 state</td></tr>
<tr><td><tt>nonce[HTTP_MAX_VALUE]</tt> </td><td>Nonce value</td></tr>
<tr><td><tt>nonce_count</tt> </td><td>Nonce count</td></tr>
<tr><td><tt>state</tt> </td><td>State of client</td></tr>
<tr><td><tt>status</tt> </td><td>Status of last request</td></tr>
<tr><td><tt>tls</tt> </td><td>TLS state information</td></tr>
<tr><td><tt>used</tt> </td><td>Number of bytes used in buffer</td></tr>
<tr><td><tt>userpass[HTTP_MAX_VALUE]</tt> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></td><td>Username:password string </td></tr>
<tr><td><tt>version</tt> </td><td>Protocol version</td></tr>
<tr><td><tt>wbuffer[HTTP_MAX_BUFFER]</tt> </td><td>Buffer for outgoing data</td></tr>
<tr><td><tt>wused</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Write buffer bytes used </td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_attribute_s'>ipp_attribute_s</a></h3>
<h4>Description</h4>
<p>Attribute</p>
<h4>Definition</h4>
<pre>
struct ipp_attribute_s
{
<a href='#char'>char</a> * name;
struct <a href='#ipp_attribute_s'>ipp_attribute_s</a> * next;
int num_values;
ipp_tag_t group_tag, value_tag;
<a href='#ipp_value_t'>ipp_value_t</a> values[1];
};
</pre>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt> </td><td>Name of attribute</td></tr>
<tr><td><tt>next</tt> </td><td>Next attribute in list</td></tr>
<tr><td><tt>num_values</tt> </td><td>Number of values</td></tr>
<tr><td><tt>value_tag</tt> </td><td>What type of value is it?</td></tr>
<tr><td><tt>values[1]</tt> </td><td>Values</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_str'>ipp_str</a></h3>
<h4>Description</h4>
<p>IPP Request/Response/Notification</p>
<h4>Definition</h4>
<pre>
struct ipp_str
{
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *attrs, *last, * current;
ipp_tag_t curtag;
<a href='#ipp_attribute_t'>ipp_attribute_t</a> * prev;
<a href='#ipp_request_t'>ipp_request_t</a> request;
ipp_state_t state;
};
</pre>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>current</tt> </td><td>Current attribute (for read/write)</td></tr>
<tr><td><tt>curtag</tt> </td><td>Current attribute group tag</td></tr>
<tr><td><tt>prev</tt> </td><td>Previous attribute (for read)</td></tr>
<tr><td><tt>request</tt> </td><td>Request header</td></tr>
<tr><td><tt>state</tt> </td><td>State of request</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h2 class='title'><a name='TYPES'>Types</a></h2>
<ul>
<li><a href='#char'><tt>char</tt></a> </li>
<li><a href='#cups_dest_t'><tt>cups_dest_t</tt></a> </li>
<li><a href='#cups_job_t'><tt>cups_job_t</tt></a> </li>
<li><a href='#cups_option_t'><tt>cups_option_t</tt></a> </li>
<li><a href='#cups_ptype_t'><tt>cups_ptype_t</tt></a> </li>
<li><a href='#http_addrlist_t'><tt>http_addrlist_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
<li><a href='#http_auth_t'><tt>http_auth_t</tt></a> </li>
<li><a href='#http_encoding_t'><tt>http_encoding_t</tt></a> </li>
<li><a href='#http_encryption_t'><tt>http_encryption_t</tt></a> </li>
<li><a href='#http_t'><tt>http_t</tt></a> </li>
<li><a href='#ipp_attribute_t'><tt>ipp_attribute_t</tt></a> </li>
<li><a href='#ipp_iocb_t'><tt>ipp_iocb_t</tt></a> </li>
<li><a href='#ipp_request_t'><tt>ipp_request_t</tt></a> </li>
<li><a href='#ipp_t'><tt>ipp_t</tt></a> </li>
<li><a href='#ipp_value_t'><tt>ipp_value_t</tt></a> </li>
</ul>
<!-- NEW PAGE -->
<h3 class='title'><a name='char'>char</a></h3>
<h4>Description</h4>
<p>Printer Options</p>
<h4>Definition</h4>
<pre>
typedef const * (*charcups_password_cb_t)(const <a href='#char'>char</a> *);
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='cups_dest_t'>cups_dest_t</a></h3>
<h4>Description</h4>
<p>Destination</p>
<h4>Definition</h4>
<pre>
typedef struct <a href='#cups_dest_s'>cups_dest_s</a> cups_dest_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='cups_job_t'>cups_job_t</a></h3>
<h4>Description</h4>
<p>Job</p>
<h4>Definition</h4>
<pre>
typedef struct <a href='#cups_job_s'>cups_job_s</a> cups_job_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='cups_option_t'>cups_option_t</a></h3>
<h4>Description</h4>
<p>Types and structures...</p>
<h4>Definition</h4>
<pre>
typedef struct <a href='#cups_option_s'>cups_option_s</a> cups_option_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='cups_ptype_t'>cups_ptype_t</a></h3>
<h4>Description</h4>
<p>Printer Type/Capability Bits</p>
<h4>Definition</h4>
<pre>
typedef unsigned cups_ptype_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='http_addrlist_t'>http_addrlist_t</a></h3>
<h4>Description</h4>
<p>Socket address list, which is
used to enumerate all of the
addresses that are associated
with a hostname. </p>
<h4>Definition</h4>
<pre>
typedef struct <a href='#http_addrlist_s'>http_addrlist_s</a> / http_addrlist_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_auth_t'>http_auth_t</a></h3>
<h4>Description</h4>
<p>HTTP authentication types</p>
<h4>Definition</h4>
<pre>
typedef enum <a href='#http_auth_e'>http_auth_e</a> http_auth_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_encoding_t'>http_encoding_t</a></h3>
<h4>Description</h4>
<p>HTTP transfer encoding values</p>
<h4>Definition</h4>
<pre>
typedef enum <a href='#http_encoding_e'>http_encoding_e</a> http_encoding_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_encryption_t'>http_encryption_t</a></h3>
<h4>Description</h4>
<p>HTTP encryption values</p>
<h4>Definition</h4>
<pre>
typedef enum <a href='#http_encryption_e'>http_encryption_e</a> http_encryption_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_t'>http_t</a></h3>
<h4>Description</h4>
<p>HTTP connection structure.</p>
<h4>Definition</h4>
<pre>
typedef struct <a href='#http_s'>http_s</a> http_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_attribute_t'>ipp_attribute_t</a></h3>
<h4>Description</h4>
<p>Attribute</p>
<h4>Definition</h4>
<pre>
typedef struct <a href='#ipp_attribute_s'>ipp_attribute_s</a> ipp_attribute_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_iocb_t'>ipp_iocb_t</a></h3>
<h4>Description</h4>
<p>IPP IO Callback Function</p>
<h4>Definition</h4>
<pre>
typedef int (*ipp_iocb_t)(void *, <a href='#ipp_uchar_t'>ipp_uchar_t</a> *, int);
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_request_t'>ipp_request_t</a></h3>
<h4>Description</h4>
<p>Request Header</p>
<h4>Definition</h4>
<pre>
typedef union ipp_request_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_t'>ipp_t</a></h3>
<h4>Description</h4>
<p>Attribute Value</p>
<h4>Definition</h4>
<pre>
typedef struct <a href='#ipp_str'>ipp_str</a> ipp_t;
</pre>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_value_t'>ipp_value_t</a></h3>
<h4>Description</h4>
<p>New in CUPS 1.1.19</p>
<h4>Definition</h4>
<pre>
typedef union ipp_value_t;
</pre>
</body>
</html>