]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - doc/help/api-httpipp.html
Update version numbers.
[thirdparty/cups.git] / doc / help / api-httpipp.html
index 036d9708275a89c0e6db7b512b2332ba967219c7..f6f117b56b59dfa49049d7fc9791ef8edbee0930 100644 (file)
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/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>
+       <title>HTTP and IPP APIs        </title>
+       <meta name="keywords" content="Programming">
+       <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+       <meta name="creator" content="Mini-XML v2.7">
+<style type="text/css"><!--
+BODY {
+  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+H1, H2, H3, H4, H5, H6, P, TD, TH {
+  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+KBD {
+  font-family: monaco, courier, monospace;
+  font-weight: bold;
+}
+
+PRE {
+  font-family: monaco, courier, monospace;
+}
+
+PRE.command {
+  border: dotted thin #7f7f7f;
+  margin-left: 36pt;
+  padding: 10px;
+}
+
+P.compact {
+  margin: 0;
+}
+
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
+PRE.example {
+  background: #eeeeee;
+  border: dotted thin #999999;
+  margin-left: 36pt;
+  padding: 10pt;
+}
+
+PRE.command EM, PRE.example EM {
+  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+P.command {
+  font-family: monaco, courier, monospace;
+  margin-left: 36pt;
+}
+
+P.formula {
+  font-style: italic;
+  margin-left: 36pt;
+}
+
+BLOCKQUOTE {
+  background: #eeeeee;
+  border: solid thin #999999;
+  padding: 10pt;
+}
+
+A IMG {
+  border: none;
+}
+
+A:link:hover IMG {
+  background: #f0f0f0;
+  border-radius: 10px;
+  -moz-border-radius: 10px;
+}
+
+A:link, A:visited {
+  font-weight: normal;
+  text-decoration: none;
+}
+
+A:link:hover, A:visited:hover, A:active {
+  text-decoration: underline;
+}
+
+SUB, SUP {
+  font-size: 50%;
+}
+
+TR.data, TD.data, TR.data TD {
+  margin-top: 10pt;
+  padding: 5pt;
+  border-bottom: solid 1pt #999999;
+}
+
+TR.data TH {
+  border-bottom: solid 1pt #999999;
+  padding-top: 10pt;
+  padding-left: 5pt;
+  text-align: left;
+}
+
+DIV.table TABLE {
+  border: solid thin #999999;
+  border-collapse: collapse;
+  border-spacing: 0;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+DIV.table CAPTION {
+  caption-side: top;
+  font-size: 120%;
+  font-style: italic;
+  font-weight: bold;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+DIV.table TABLE TD {
+  border: solid thin #cccccc;
+  padding-top: 5pt;
+}
+
+DIV.table TABLE TH {
+  background: #cccccc;
+  border: none;
+  border-bottom: solid thin #999999;
+}
+
+DIV.figure TABLE {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+DIV.figure CAPTION {
+  caption-side: bottom;
+  font-size: 120%;
+  font-style: italic;
+  font-weight: bold;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+TH.label {
+  text-align: right;
+  vertical-align: top;
+}
+
+TH.sublabel {
+  text-align: right;
+  font-weight: normal;
+}
+
+HR {
+  border: solid thin;
+}
+
+SPAN.info {
+  background: black;
+  border: thin solid black;
+  color: white;
+  font-size: 80%;
+  font-style: italic;
+  font-weight: bold;
+  white-space: nowrap;
+}
+
+H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
+  float: right;
+  font-size: 100%;
+}
+
+H1.title {
+}
+
+H2.title, H3.title {
+  border-bottom: solid 2pt #000000;
+}
+
+DIV.indent, TABLE.indent {
+  margin-top: 2em;
+  margin-left: auto;
+  margin-right: auto;
+  width: 90%;
+}
+
+TABLE.indent {
+  border-collapse: collapse;
+}
+
+TABLE.indent TD, TABLE.indent TH {
+  padding: 0;
+}
+
+TABLE.list {
+  border-collapse: collapse;
+  margin-left: auto;
+  margin-right: auto;
+  width: 90%;
+}
+
+TABLE.list TH {
+  background: white;
+  border-bottom: solid thin #cccccc;
+  color: #444444;
+  padding-top: 10pt;
+  padding-left: 5pt;
+  text-align: left;
+  vertical-align: bottom;
+  white-space: nowrap;
+}
+
+TABLE.list TH A {
+  color: #4444cc;
+}
+
+TABLE.list TD {
+  border-bottom: solid thin #eeeeee;
+  padding-top: 5pt;
+  padding-left: 5pt;
+}
+
+TABLE.list TR:nth-child(even) {
+  background: #f8f8f8;
+}
+
+TABLE.list TR:nth-child(odd) {
+  background: #f4f4f4;
+}
+
+DT {
+  margin-left: 36pt;
+  margin-top: 12pt;
+}
+
+DD {
+  margin-left: 54pt;
+}
+
+DL.category DT {
+  font-weight: bold;
+}
+
+P.summary {
+  margin-left: 36pt;
+  font-family: monaco, courier, monospace;
+}
+
+DIV.summary TABLE {
+  border: solid thin #999999;
+  border-collapse: collapse;
+  border-spacing: 0;
+  margin: 10px;
+}
+
+DIV.summary TABLE TD, DIV.summary TABLE TH {
+  border: solid thin #999999;
+  padding: 5px;
+  text-align: left;
+  vertical-align: top;
+}
+
+DIV.summary TABLE THEAD TH {
+  background: #eeeeee;
+}
+
+/* API documentation styles... */
+div.body h1 {
+  margin: 0;
+}
+div.body h2 {
+  margin-top: 1.5em;
+}
+div.body h3, div.body h4, div.body h5 {
+  margin-bottom: 0.5em;
+  margin-top: 1.5em;
+}
+.class, .enumeration, .function, .struct, .typedef, .union {
+  border-bottom: solid thin #999999;
+  margin-bottom: 0;
+  margin-top: 2em;
+}
+.description {
+  margin-top: 0.5em;
+}
+code, p.code, pre, ul.code li {
+  font-family: monaco, courier, monospace;
+  font-size: 90%;
+}
+ul.code, ul.contents, ul.subcontents {
+  list-style-type: none;
+  margin: 0;
+  padding-left: 0;
+}
+ul.code li {
+  margin: 0;
+}
+ul.contents > li {
+  margin-top: 1em;
+}
+ul.contents li ul.code, ul.contents li ul.subcontents {
+  padding-left: 2em;
+}
+div.body dl {
+  margin-left: 0;
+  margin-top: 0;
+}
+div.body dt {
+  font-style: italic;
+  margin-left: 0;
+  margin-top: 0;
+}
+div.body dd {
+  margin-bottom: 0.5em;
+}
+
+/* This is just for the HTML files generated with the framedhelp target */
+div.contents {
+  background: #e8e8e8;
+  border: solid thin black;
+  padding: 10px;
+}
+div.contents h1 {
+  font-size: 110%;
+}
+div.contents h2 {
+  font-size: 100%;
+}
+div.contents ul.contents {
+  font-size: 80%;
+}
+div.contents ul.subcontents li {
+  margin-left: 1em;
+  text-indent: -1em;
+}
+--></style>
 </head>
 <body>
+<div class='body'>
+<!--
+  "$Id: api-httpipp.header 7258 2008-01-28 00:15:05Z mike $"
+
+  HTTP and IPP API header for CUPS.
+
+  Copyright 2007-2011 by Apple Inc.
+  Copyright 1997-2006 by Easy Software Products, all rights reserved.
+
+  These coded instructions, statements, and computer programs are the
+  property of Apple Inc. 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
+  file is missing or damaged, see the license at "http://www.cups.org/".
+-->
+
+<h1 class='title'>HTTP and IPP APIs</h1>
+
+<div class='summary'><table summary='General Information'>
+<thead>
+<tr>
+       <th>Header</th>
+       <th>cups/cups.h</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+       <th>Library</th>
+       <td>-lcups</td>
+</tr>
+<tr>
+       <th>See Also</th>
+       <td>Programming: <a href='api-overview.html'>Introduction to CUPS Programming</a><br>
+       Programming: <a href='api-cups.html'>CUPS API</a><br>
+       References: <a href='spec-ipp.html'>CUPS Implementation of IPP</a></td>
+</tr>
+</tbody>
+</table></div>
+<h2 class="title">Contents</h2>
+<ul class="contents">
+<li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
+       <li><a href="#CREATING_URI_STRINGS">Creating URI Strings</a></li>
+       <li><a href="#SENDING_REQUESTS_WITH_FILES">Sending Requests with Files</a></li>
+       <li><a href="#ASYNCHRONOUS_REQUEST_PROCESSING">Asynchronous Request Processing</a></li>
+</ul></li>
+<li><a href="#FUNCTIONS">Functions</a><ul class="code">
+       <li><a href="#cupsDoAuthentication" title="Authenticate a request.">cupsDoAuthentication</a></li>
+       <li><a href="#cupsDoFileRequest" title="Do an IPP request with a file.">cupsDoFileRequest</a></li>
+       <li><a href="#cupsDoIORequest" title="Do an IPP request with file descriptors.">cupsDoIORequest</a></li>
+       <li><a href="#cupsDoRequest" title="Do an IPP request.">cupsDoRequest</a></li>
+       <li><a href="#cupsEncodeOptions" title="Encode printer options into IPP attributes.">cupsEncodeOptions</a></li>
+       <li><a href="#cupsEncodeOptions2" title="Encode printer options into IPP attributes for a group.">cupsEncodeOptions2</a></li>
+       <li><a href="#cupsGetDevices" title="Get available printer devices.">cupsGetDevices</a></li>
+       <li><a href="#cupsGetFd" title="Get a file from the server.">cupsGetFd</a></li>
+       <li><a href="#cupsGetFile" title="Get a file from the server.">cupsGetFile</a></li>
+       <li><a href="#cupsGetResponse" title="Get a response to an IPP request.">cupsGetResponse</a></li>
+       <li><a href="#cupsLastError" title="Return the last IPP status code received on the current
+thread.">cupsLastError</a></li>
+       <li><a href="#cupsLastErrorString" title="Return the last IPP status-message received on the
+current thread.">cupsLastErrorString</a></li>
+       <li><a href="#cupsPutFd" title="Put a file on the server.">cupsPutFd</a></li>
+       <li><a href="#cupsPutFile" title="Put a file on the server.">cupsPutFile</a></li>
+       <li><a href="#cupsReadResponseData" title="Read additional data after the IPP response.">cupsReadResponseData</a></li>
+       <li><a href="#cupsSendRequest" title="Send an IPP request.">cupsSendRequest</a></li>
+       <li><a href="#cupsWriteRequestData" title="Write additional data after an IPP request.">cupsWriteRequestData</a></li>
+       <li><a href="#httpAcceptConnection" title="Accept a new HTTP client connection from the
+specified listening socket.">httpAcceptConnection</a></li>
+       <li><a href="#httpAddCredential" title="Allocates and adds a single credential to an array.">httpAddCredential</a></li>
+       <li><a href="#httpAddrAny" title="Check for the &quot;any&quot; address.">httpAddrAny</a></li>
+       <li><a href="#httpAddrEqual" title="Compare two addresses.">httpAddrEqual</a></li>
+       <li><a href="#httpAddrLength" title="Return the length of the address in bytes.">httpAddrLength</a></li>
+       <li><a href="#httpAddrListen" title="Create a listening socket bound to the specified
+address and port.">httpAddrListen</a></li>
+       <li><a href="#httpAddrLocalhost" title="Check for the local loopback address.">httpAddrLocalhost</a></li>
+       <li><a href="#httpAddrLookup" title="Lookup the hostname associated with the address.">httpAddrLookup</a></li>
+       <li><a href="#httpAddrPort" title="Get the port number associated with an address.">httpAddrPort</a></li>
+       <li><a href="#httpAddrString" title="Convert an address to a numeric string.">httpAddrString</a></li>
+       <li><a href="#httpAssembleURI" title="Assemble a uniform resource identifier from its
+components.">httpAssembleURI</a></li>
+       <li><a href="#httpAssembleURIf" title="Assemble a uniform resource identifier from its
+components with a formatted resource.">httpAssembleURIf</a></li>
+       <li><a href="#httpAssembleUUID" title="Assemble a name-based UUID URN conforming to RFC 4122.">httpAssembleUUID</a></li>
+       <li><a href="#httpBlocking" title="Set blocking/non-blocking behavior on a connection.">httpBlocking</a></li>
+       <li><a href="#httpCheck" title="Check to see if there is a pending response from the server.">httpCheck</a></li>
+       <li><a href="#httpClearCookie" title="Clear the cookie value(s).">httpClearCookie</a></li>
+       <li><a href="#httpClearFields" title="Clear HTTP request fields.">httpClearFields</a></li>
+       <li><a href="#httpClose" title="Close an HTTP connection.">httpClose</a></li>
+       <li><a href="#httpConnect" title="Connect to a HTTP server.">httpConnect</a></li>
+       <li><a href="#httpConnect2" title="Connect to a HTTP server.">httpConnect2</a></li>
+       <li><a href="#httpConnectEncrypt" title="Connect to a HTTP server using encryption.">httpConnectEncrypt</a></li>
+       <li><a href="#httpCopyCredentials" title="Copy the credentials associated with an encrypted
+connection.">httpCopyCredentials</a></li>
+       <li><a href="#httpDecode64" title="Base64-decode a string.">httpDecode64</a></li>
+       <li><a href="#httpDecode64_2" title="Base64-decode a string.">httpDecode64_2</a></li>
+       <li><a href="#httpDelete" title="Send a DELETE request to the server.">httpDelete</a></li>
+       <li><a href="#httpEncode64" title="Base64-encode a string.">httpEncode64</a></li>
+       <li><a href="#httpEncode64_2" title="Base64-encode a string.">httpEncode64_2</a></li>
+       <li><a href="#httpEncryption" title="Set the required encryption on the link.">httpEncryption</a></li>
+       <li><a href="#httpError" title="Get the last error on a connection.">httpError</a></li>
+       <li><a href="#httpFlush" title="Flush data from a HTTP connection.">httpFlush</a></li>
+       <li><a href="#httpFlushWrite" title="Flush data in write buffer.">httpFlushWrite</a></li>
+       <li><a href="#httpFreeCredentials" title="Free an array of credentials.">httpFreeCredentials</a></li>
+       <li><a href="#httpGet" title="Send a GET request to the server.">httpGet</a></li>
+       <li><a href="#httpGetAuthString" title="Get the current authorization string.">httpGetAuthString</a></li>
+       <li><a href="#httpGetBlocking" title="Get the blocking/non-block state of a connection.">httpGetBlocking</a></li>
+       <li><a href="#httpGetContentEncoding" title="Get a common content encoding, if any, between
+the client and server.">httpGetContentEncoding</a></li>
+       <li><a href="#httpGetCookie" title="Get any cookie data from the response.">httpGetCookie</a></li>
+       <li><a href="#httpGetDateString" title="Get a formatted date/time string from a time value.">httpGetDateString</a></li>
+       <li><a href="#httpGetDateString2" title="Get a formatted date/time string from a time value.">httpGetDateString2</a></li>
+       <li><a href="#httpGetDateTime" title="Get a time value from a formatted date/time string.">httpGetDateTime</a></li>
+       <li><a href="#httpGetExpect" title="Get the value of the Expect header, if any.">httpGetExpect</a></li>
+       <li><a href="#httpGetFd" title="Get the file descriptor associated with a connection.">httpGetFd</a></li>
+       <li><a href="#httpGetField" title="Get a field value from a request/response.">httpGetField</a></li>
+       <li><a href="#httpGetHostByName" title="Lookup a hostname or IPv4 address, and return
+address records for the specified name.">httpGetHostByName</a></li>
+       <li><a href="#httpGetHostname" title="Get the FQDN for the connection or local system.">httpGetHostname</a></li>
+       <li><a href="#httpGetLength" title="Get the amount of data remaining from the
+content-length or transfer-encoding fields.">httpGetLength</a></li>
+       <li><a href="#httpGetLength2" title="Get the amount of data remaining from the
+content-length or transfer-encoding fields.">httpGetLength2</a></li>
+       <li><a href="#httpGetState" title="Get the current state of the HTTP request.">httpGetState</a></li>
+       <li><a href="#httpGetStatus" title="Get the status of the last HTTP request.">httpGetStatus</a></li>
+       <li><a href="#httpGetSubField" title="Get a sub-field value.">httpGetSubField</a></li>
+       <li><a href="#httpGetSubField2" title="Get a sub-field value.">httpGetSubField2</a></li>
+       <li><a href="#httpGetVersion" title="Get the HTTP version at the other end.">httpGetVersion</a></li>
+       <li><a href="#httpGets" title="Get a line of text from a HTTP connection.">httpGets</a></li>
+       <li><a href="#httpHead" title="Send a HEAD request to the server.">httpHead</a></li>
+       <li><a href="#httpInitialize" title="Initialize the HTTP interface library and set the
+default HTTP proxy (if any).">httpInitialize</a></li>
+       <li><a href="#httpMD5" title="Compute the MD5 sum of the username:group:password.">httpMD5</a></li>
+       <li><a href="#httpMD5Final" title="Combine the MD5 sum of the username, group, and password
+with the server-supplied nonce value, method, and
+request-uri.">httpMD5Final</a></li>
+       <li><a href="#httpMD5String" title="Convert an MD5 sum to a character string.">httpMD5String</a></li>
+       <li><a href="#httpOptions" title="Send an OPTIONS request to the server.">httpOptions</a></li>
+       <li><a href="#httpPeek" title="Peek at data from a HTTP connection.">httpPeek</a></li>
+       <li><a href="#httpPost" title="Send a POST request to the server.">httpPost</a></li>
+       <li><a href="#httpPut" title="Send a PUT request to the server.">httpPut</a></li>
+       <li><a href="#httpRead" title="Read data from a HTTP connection.">httpRead</a></li>
+       <li><a href="#httpRead2" title="Read data from a HTTP connection.">httpRead2</a></li>
+       <li><a href="#httpReadRequest" title="Read a HTTP request from a connection.">httpReadRequest</a></li>
+       <li><a href="#httpReconnect" title="Reconnect to a HTTP server.">httpReconnect</a></li>
+       <li><a href="#httpReconnect2" title="Reconnect to a HTTP server with timeout and optional
+cancel.">httpReconnect2</a></li>
+       <li><a href="#httpSeparate" title="Separate a Universal Resource Identifier into its
+components.">httpSeparate</a></li>
+       <li><a href="#httpSeparate2" title="Separate a Universal Resource Identifier into its
+components.">httpSeparate2</a></li>
+       <li><a href="#httpSeparateURI" title="Separate a Universal Resource Identifier into its
+components.">httpSeparateURI</a></li>
+       <li><a href="#httpSetAuthString" title="Set the current authorization string.">httpSetAuthString</a></li>
+       <li><a href="#httpSetCookie" title="Set the cookie value(s).">httpSetCookie</a></li>
+       <li><a href="#httpSetCredentials" title="Set the credentials associated with an encrypted
+connection.">httpSetCredentials</a></li>
+       <li><a href="#httpSetDefaultField" title="Set the default value of an HTTP header.">httpSetDefaultField</a></li>
+       <li><a href="#httpSetExpect" title="Set the Expect: header in a request.">httpSetExpect</a></li>
+       <li><a href="#httpSetField" title="Set the value of an HTTP header.">httpSetField</a></li>
+       <li><a href="#httpSetLength" title="Set the content-length and content-encoding.">httpSetLength</a></li>
+       <li><a href="#httpSetTimeout" title="Set read/write timeouts and an optional callback.">httpSetTimeout</a></li>
+       <li><a href="#httpStatus" title="Return a short string describing a HTTP status code.">httpStatus</a></li>
+       <li><a href="#httpTrace" title="Send an TRACE request to the server.">httpTrace</a></li>
+       <li><a href="#httpUpdate" title="Update the current HTTP state for incoming data.">httpUpdate</a></li>
+       <li><a href="#httpWait" title="Wait for data available on a connection.">httpWait</a></li>
+       <li><a href="#httpWrite" title="Write data to a HTTP connection.">httpWrite</a></li>
+       <li><a href="#httpWrite2" title="Write data to a HTTP connection.">httpWrite2</a></li>
+       <li><a href="#httpWriteResponse" title="Write a HTTP response to a client connection.">httpWriteResponse</a></li>
+       <li><a href="#ippAddBoolean" title="Add a boolean attribute to an IPP message.">ippAddBoolean</a></li>
+       <li><a href="#ippAddBooleans" title="Add an array of boolean values.">ippAddBooleans</a></li>
+       <li><a href="#ippAddCollection" title="Add a collection value.">ippAddCollection</a></li>
+       <li><a href="#ippAddCollections" title="Add an array of collection values.">ippAddCollections</a></li>
+       <li><a href="#ippAddDate" title="Add a date attribute to an IPP message.">ippAddDate</a></li>
+       <li><a href="#ippAddInteger" title="Add a integer attribute to an IPP message.">ippAddInteger</a></li>
+       <li><a href="#ippAddIntegers" title="Add an array of integer values.">ippAddIntegers</a></li>
+       <li><a href="#ippAddOctetString" title="Add an octetString value to an IPP message.">ippAddOctetString</a></li>
+       <li><a href="#ippAddOutOfBand" title="Add an out-of-band value to an IPP message.">ippAddOutOfBand</a></li>
+       <li><a href="#ippAddRange" title="Add a range of values to an IPP message.">ippAddRange</a></li>
+       <li><a href="#ippAddRanges" title="Add ranges of values to an IPP message.">ippAddRanges</a></li>
+       <li><a href="#ippAddResolution" title="Add a resolution value to an IPP message.">ippAddResolution</a></li>
+       <li><a href="#ippAddResolutions" title="Add resolution values to an IPP message.">ippAddResolutions</a></li>
+       <li><a href="#ippAddSeparator" title="Add a group separator to an IPP message.">ippAddSeparator</a></li>
+       <li><a href="#ippAddString" title="Add a language-encoded string to an IPP message.">ippAddString</a></li>
+       <li><a href="#ippAddStringf" title="Add a formatted string to an IPP message.">ippAddStringf</a></li>
+       <li><a href="#ippAddStringfv" title="Add a formatted string to an IPP message.">ippAddStringfv</a></li>
+       <li><a href="#ippAddStrings" title="Add language-encoded strings to an IPP message.">ippAddStrings</a></li>
+       <li><a href="#ippAttributeString" title="Convert the attribute's value to a string.">ippAttributeString</a></li>
+       <li><a href="#ippContainsInteger" title="Determine whether an attribute contains the
+specified value or is within the list of ranges.">ippContainsInteger</a></li>
+       <li><a href="#ippContainsString" title="Determine whether an attribute contains the
+specified string value.">ippContainsString</a></li>
+       <li><a href="#ippCopyAttribute" title="Copy an attribute.">ippCopyAttribute</a></li>
+       <li><a href="#ippCopyAttributes" title="Copy attributes from one IPP message to another.">ippCopyAttributes</a></li>
+       <li><a href="#ippCreateRequestedArray" title="Create a CUPS array of attribute names from the
+given requested-attributes attribute.">ippCreateRequestedArray</a></li>
+       <li><a href="#ippDateToTime" title="Convert from RFC 1903 Date/Time format to UNIX time
+in seconds.">ippDateToTime</a></li>
+       <li><a href="#ippDelete" title="Delete an IPP message.">ippDelete</a></li>
+       <li><a href="#ippDeleteAttribute" title="Delete a single attribute in an IPP message.">ippDeleteAttribute</a></li>
+       <li><a href="#ippDeleteValues" title="Delete values in an attribute.">ippDeleteValues</a></li>
+       <li><a href="#ippEnumString" title="Return a string corresponding to the enum value.">ippEnumString</a></li>
+       <li><a href="#ippEnumValue" title="Return the value associated with a given enum string.">ippEnumValue</a></li>
+       <li><a href="#ippErrorString" title="Return a name for the given status code.">ippErrorString</a></li>
+       <li><a href="#ippErrorValue" title="Return a status code for the given name.">ippErrorValue</a></li>
+       <li><a href="#ippFindAttribute" title="Find a named attribute in a request.">ippFindAttribute</a></li>
+       <li><a href="#ippFindNextAttribute" title="Find the next named attribute in a request.">ippFindNextAttribute</a></li>
+       <li><a href="#ippFirstAttribute" title="Return the first attribute in the message.">ippFirstAttribute</a></li>
+       <li><a href="#ippGetBoolean" title="Get a boolean value for an attribute.">ippGetBoolean</a></li>
+       <li><a href="#ippGetCollection" title="Get a collection value for an attribute.">ippGetCollection</a></li>
+       <li><a href="#ippGetCount" title="Get the number of values in an attribute.">ippGetCount</a></li>
+       <li><a href="#ippGetDate" title="Get a date value for an attribute.">ippGetDate</a></li>
+       <li><a href="#ippGetGroupTag" title="Get the group associated with an attribute.">ippGetGroupTag</a></li>
+       <li><a href="#ippGetInteger" title="Get the integer/enum value for an attribute.">ippGetInteger</a></li>
+       <li><a href="#ippGetName" title="Get the attribute name.">ippGetName</a></li>
+       <li><a href="#ippGetOctetString" title="Get an octetString value from an IPP attribute.">ippGetOctetString</a></li>
+       <li><a href="#ippGetOperation" title="Get the operation ID in an IPP message.">ippGetOperation</a></li>
+       <li><a href="#ippGetRange" title="Get a rangeOfInteger value from an attribute.">ippGetRange</a></li>
+       <li><a href="#ippGetRequestId" title="Get the request ID from an IPP message.">ippGetRequestId</a></li>
+       <li><a href="#ippGetResolution" title="Get a resolution value for an attribute.">ippGetResolution</a></li>
+       <li><a href="#ippGetState" title="Get the IPP message state.">ippGetState</a></li>
+       <li><a href="#ippGetStatusCode" title="Get the status code from an IPP response or event message.">ippGetStatusCode</a></li>
+       <li><a href="#ippGetString" title="Return the value...">ippGetString</a></li>
+       <li><a href="#ippGetValueTag" title="Get the value tag for an attribute.">ippGetValueTag</a></li>
+       <li><a href="#ippGetVersion" title="Get the major and minor version number from an IPP message.">ippGetVersion</a></li>
+       <li><a href="#ippLength" title="Compute the length of an IPP message.">ippLength</a></li>
+       <li><a href="#ippNew" title="Allocate a new IPP message.">ippNew</a></li>
+       <li><a href="#ippNewRequest" title="Allocate a new IPP request message.">ippNewRequest</a></li>
+       <li><a href="#ippNewResponse" title="Allocate a new IPP response message.">ippNewResponse</a></li>
+       <li><a href="#ippNextAttribute" title="Return the next attribute in the message.">ippNextAttribute</a></li>
+       <li><a href="#ippOpString" title="Return a name for the given operation id.">ippOpString</a></li>
+       <li><a href="#ippOpValue" title="Return an operation id for the given name.">ippOpValue</a></li>
+       <li><a href="#ippPort" title="Return the default IPP port number.">ippPort</a></li>
+       <li><a href="#ippRead" title="Read data for an IPP message from a HTTP connection.">ippRead</a></li>
+       <li><a href="#ippReadFile" title="Read data for an IPP message from a file.">ippReadFile</a></li>
+       <li><a href="#ippReadIO" title="Read data for an IPP message.">ippReadIO</a></li>
+       <li><a href="#ippSetBoolean" title="Set a boolean value in an attribute.">ippSetBoolean</a></li>
+       <li><a href="#ippSetCollection" title="Set a collection value in an attribute.">ippSetCollection</a></li>
+       <li><a href="#ippSetDate" title="Set a date value in an attribute.">ippSetDate</a></li>
+       <li><a href="#ippSetGroupTag" title="Set the group tag of an attribute.">ippSetGroupTag</a></li>
+       <li><a href="#ippSetInteger" title="Set an integer or enum value in an attribute.">ippSetInteger</a></li>
+       <li><a href="#ippSetName" title="Set the name of an attribute.">ippSetName</a></li>
+       <li><a href="#ippSetOctetString" title="Set an octetString value in an IPP attribute.">ippSetOctetString</a></li>
+       <li><a href="#ippSetOperation" title="Set the operation ID in an IPP request message.">ippSetOperation</a></li>
+       <li><a href="#ippSetPort" title="Set the default port number.">ippSetPort</a></li>
+       <li><a href="#ippSetRange" title="Set a rangeOfInteger value in an attribute.">ippSetRange</a></li>
+       <li><a href="#ippSetRequestId" title="Set the request ID in an IPP message.">ippSetRequestId</a></li>
+       <li><a href="#ippSetResolution" title="Set a resolution value in an attribute.">ippSetResolution</a></li>
+       <li><a href="#ippSetState" title="Set the current state of the IPP message.">ippSetState</a></li>
+       <li><a href="#ippSetStatusCode" title="Set the status code in an IPP response or event message.">ippSetStatusCode</a></li>
+       <li><a href="#ippSetString" title="Set a string value in an attribute.">ippSetString</a></li>
+       <li><a href="#ippSetStringf" title="Set a formatted string value of an attribute.">ippSetStringf</a></li>
+       <li><a href="#ippSetStringfv" title="Set a formatted string value of an attribute.">ippSetStringfv</a></li>
+       <li><a href="#ippSetValueTag" title="Set the value tag of an attribute.">ippSetValueTag</a></li>
+       <li><a href="#ippSetVersion" title="Set the version number in an IPP message.">ippSetVersion</a></li>
+       <li><a href="#ippTagString" title="Return the tag name corresponding to a tag value.">ippTagString</a></li>
+       <li><a href="#ippTagValue" title="Return the tag value corresponding to a tag name.">ippTagValue</a></li>
+       <li><a href="#ippTimeToDate" title="Convert from UNIX time to RFC 1903 format.">ippTimeToDate</a></li>
+       <li><a href="#ippValidateAttribute" title="Validate the contents of an attribute.">ippValidateAttribute</a></li>
+       <li><a href="#ippValidateAttributes" title="Validate all attributes in an IPP message.">ippValidateAttributes</a></li>
+       <li><a href="#ippWrite" title="Write data for an IPP message to a HTTP connection.">ippWrite</a></li>
+       <li><a href="#ippWriteFile" title="Write data for an IPP message to a file.">ippWriteFile</a></li>
+       <li><a href="#ippWriteIO" title="Write data for an IPP message.">ippWriteIO</a></li>
+</ul></li>
+<li><a href="#TYPES">Data Types</a><ul class="code">
+       <li><a href="#gss_auth_identity_desc" title="Local functions...">gss_auth_identity_desc</a></li>
+       <li><a href="#http_addr_t" title="Socket address union, which
+makes using IPv6 and other
+address types easier and
+more portable. ">http_addr_t</a></li>
+       <li><a href="#http_addrlist_t" title="Socket address list, which is
+used to enumerate all of the
+addresses that are associated
+with a hostname. ">http_addrlist_t</a></li>
+       <li><a href="#http_auth_t" title="HTTP authentication types">http_auth_t</a></li>
+       <li><a href="#http_credential_t" title="HTTP credential data ">http_credential_t</a></li>
+       <li><a href="#http_encoding_t" title="HTTP transfer encoding values">http_encoding_t</a></li>
+       <li><a href="#http_encryption_t" title="HTTP encryption values">http_encryption_t</a></li>
+       <li><a href="#http_field_t" title="HTTP field names">http_field_t</a></li>
+       <li><a href="#http_keepalive_t" title="HTTP keep-alive values">http_keepalive_t</a></li>
+       <li><a href="#http_state_t" title="HTTP state values; states
+are server-oriented...">http_state_t</a></li>
+       <li><a href="#http_t" title="HTTP connection type">http_t</a></li>
+       <li><a href="#http_timeout_cb_t" title="HTTP timeout callback ">http_timeout_cb_t</a></li>
+       <li><a href="#http_uri_coding_t" title="URI en/decode flags">http_uri_coding_t</a></li>
+       <li><a href="#http_uri_status_t" title="URI separation status ">http_uri_status_t</a></li>
+       <li><a href="#http_version_t" title="HTTP version numbers">http_version_t</a></li>
+       <li><a href="#ipp_attribute_t" title="IPP attribute">ipp_attribute_t</a></li>
+       <li><a href="#ipp_copycb_t" title="The following structures are PRIVATE starting with CUPS 1.6/OS X 10.8.
+Please use the new accessor functions available in CUPS 1.6 and later, as
+these definitions will be moved to a private header file in a future release.">ipp_copycb_t</a></li>
+       <li><a href="#ipp_dstate_t" title="Document states">ipp_dstate_t</a></li>
+       <li><a href="#ipp_finish_t" title="Job collation types">ipp_finish_t</a></li>
+       <li><a href="#ipp_iocb_t" title="IPP IO Callback Function ">ipp_iocb_t</a></li>
+       <li><a href="#ipp_jcollate_t" title="Job collation types">ipp_jcollate_t</a></li>
+       <li><a href="#ipp_orient_t" title="Orientation values">ipp_orient_t</a></li>
+       <li><a href="#ipp_pstate_t" title="Printer states">ipp_pstate_t</a></li>
+       <li><a href="#ipp_quality_t" title="Qualities">ipp_quality_t</a></li>
+       <li><a href="#ipp_res_t" title="Resolution units">ipp_res_t</a></li>
+       <li><a href="#ipp_state_t" title="IPP states">ipp_state_t</a></li>
+       <li><a href="#ipp_t" title="IPP request/response data">ipp_t</a></li>
+       <li><a href="#ipp_uchar_t" title="Unsigned 8-bit integer/character">ipp_uchar_t</a></li>
+</ul></li>
+<li><a href="#STRUCTURES">Structures</a><ul class="code">
+       <li><a href="#gss_auth_identity" title="Local functions...">gss_auth_identity</a></li>
+       <li><a href="#http_addrlist_s" title="Socket address list, which is
+used to enumerate all of the
+addresses that are associated
+with a hostname. ">http_addrlist_s</a></li>
+       <li><a href="#http_credential_s" title="HTTP credential data ">http_credential_s</a></li>
+       <li><a href="#pollfd" title="User data (unused)">pollfd</a></li>
+</ul></li>
+<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
+       <li><a href="#http_auth_e" title="HTTP authentication types">http_auth_e</a></li>
+       <li><a href="#http_encoding_e" title="HTTP transfer encoding values">http_encoding_e</a></li>
+       <li><a href="#http_encryption_e" title="HTTP encryption values">http_encryption_e</a></li>
+       <li><a href="#http_field_e" title="HTTP field names">http_field_e</a></li>
+       <li><a href="#http_keepalive_e" title="HTTP keep-alive values">http_keepalive_e</a></li>
+       <li><a href="#http_state_e" title="HTTP state values; states
+are server-oriented...">http_state_e</a></li>
+       <li><a href="#http_status_e" title="HTTP status codes">http_status_e</a></li>
+       <li><a href="#http_uri_coding_e" title="URI en/decode flags">http_uri_coding_e</a></li>
+       <li><a href="#http_uri_status_e" title="URI separation status ">http_uri_status_e</a></li>
+       <li><a href="#http_version_e" title="HTTP version numbers">http_version_e</a></li>
+       <li><a href="#ipp_dstate_e" title="Document states">ipp_dstate_e</a></li>
+       <li><a href="#ipp_finishings_e" title="Finishings">ipp_finishings_e</a></li>
+       <li><a href="#ipp_jcollate_e" title="Job collation types">ipp_jcollate_e</a></li>
+       <li><a href="#ipp_jstate_e" title="Job states">ipp_jstate_e</a></li>
+       <li><a href="#ipp_op_e" title="IPP operations">ipp_op_e</a></li>
+       <li><a href="#ipp_orient_e" title="Orientation values">ipp_orient_e</a></li>
+       <li><a href="#ipp_pstate_e" title="Printer states">ipp_pstate_e</a></li>
+       <li><a href="#ipp_quality_e" title="Qualities">ipp_quality_e</a></li>
+       <li><a href="#ipp_res_e" title="Resolution units">ipp_res_e</a></li>
+       <li><a href="#ipp_state_e" title="IPP states">ipp_state_e</a></li>
+       <li><a href="#ipp_status_e" title="IPP status codes">ipp_status_e</a></li>
+       <li><a href="#ipp_tag_e" title="Format tags for attributes">ipp_tag_e</a></li>
+</ul></li>
+</ul>
 <!--
-  "$Id: api-httpipp.shtml 6649 2007-07-11 21:46:42Z mike $"
+  "$Id: api-httpipp.shtml 7684 2008-06-23 16:47:38Z mike $"
 
-  HTTP and IPP API introduction for the Common UNIX Printing System (CUPS).
+  HTTP and IPP API introduction for CUPS.
 
-  Copyright 2007 by Apple Inc.
+  Copyright 2007-2012 by Apple Inc.
   Copyright 1997-2006 by Easy Software Products, all rights reserved.
 
   These coded instructions, statements, and computer programs are the
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h2 class='title'>Introduction</h2>
+<h2 class='title'><a name='OVERVIEW'>Overview</a></h2>
 
-<p>The CUPS HTTP and IPP APIs provide low-level access to the
-HTTP and IPP protocols and CUPS scheduler. They are typically
-used by monitoring and administration programs to perform
-specific functions not supported by the high-level CUPS API
-functions.</p>
+<p>The CUPS HTTP and IPP APIs provide low-level access to the HTTP and IPP
+protocols and CUPS scheduler. They are typically used by monitoring and
+administration programs to perform specific functions not supported by the
+high-level CUPS API functions.</p>
 
-<h2 class='title'>General Usage</h2>
+<p>The HTTP APIs use an opaque structure called
+<a href='#http_t'><code>http_t</code></a> to manage connections to
+a particular HTTP or IPP server. The
+<a href='#httpConnectEncrypt'><code>httpConnectEncrypt</code></a> function is
+used to create an instance of this structure for a particular server.
+The constant <code>CUPS_HTTP_DEFAULT</code> can be used with all of the
+<code>cups</code> functions to refer to the default CUPS server - the functions
+create a per-thread <a href='#http_t'><code>http_t</code></a> as needed.</p>
 
-<p>The <var>&lt;cups/cups.h&gt;</var> header file must be included to
-use the HTTP and IPP functions.</p>
+<p>The IPP APIs use two opaque structures for requests (messages sent to the CUPS scheduler) and responses (messages sent back to your application from the scheduler). The <a href='#ipp_t'><code>ipp_t</code></a> type holds a complete request or response and is allocated using the <a href='#ippNew'><code>ippNew</code></a> or <a href='#ippNewRequest'><code>ippNewRequest</code></a> functions and freed using the <a href='#ippDelete'><code>ippDelete</code></a> function.</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>
+<p>The second opaque structure is called <a href='#ipp_attribute_t'><code>ipp_attribute_t</code></a> and holds a single IPP attribute which consists of a group tag (<a href='#ippGetGroupTag'><code>ippGetGroupTag</code></a>), a value type tag (<a href='#ippGetValueTag'><code>ippGetValueTag</code></a>), the attribute name (<a href='#ippGetName'><code>ippGetName</code></a>), and 1 or more values (<a href='#ippGetCount'><code>ippGetCount</code></a>, <a href='#ippGetBoolean'><code>ippGetBoolean</code></a>, <a href='#ippGetCollection'><code>ippGetCollection</code></a>, <a href='#ippGetDate'><code>ippGetDate</code></a>, <a href='#ippGetInteger'><code>ippGetInteger</code></a>, <a href='#ippGetRange'><code>ippGetRange</code></a>, <a href='#ippGetResolution'><code>ippGetResolution</code></a>, and <a href='#ippGetString'><code>ippGetString</code></a>). Attributes are added to an <a href='#ipp_t'><code>ipp_t</code></a> pointer using one of the <code>ippAdd</code> functions. For example, use <a href='#ippAddString'><code>ippAddString</code></a> to add the "printer-uri" and "requesting-user-name" string attributes to a request:</p>
 
-<pre class='command'>
-<kbd>gcc -o myprogram myprogram.c -lcups</kbd>
+<pre class='example'>
+<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(IPP_GET_JOBS);
+
+<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
+             NULL, "ipp://localhost/printers/");
+<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
+             NULL, cupsUser());
 </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>
-       <li><a href='#UNIONS'>Unions</a></li>
-</ul>
-<!-- NEW PAGE -->
-<h2 class='title'><a name='ENUMERATIONS'>Enumerations</a></h2>
-<ul>
-       <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_state_e'><tt>http_state_e</tt></a> </li>
-       <li><a href='#http_status_e'><tt>http_status_e</tt></a> </li>
-       <li><a href='#http_uri_coding_e'><tt>http_uri_coding_e</tt></a> </li>
-       <li><a href='#http_uri_status_e'><tt>http_uri_status_e</tt></a> </li>
-       <li><a href='#http_version_e'><tt>http_version_e</tt></a> </li>
-       <li><a href='#ipp_finish_e'><tt>ipp_finish_e</tt></a> </li>
-       <li><a href='#ipp_jstate_e'><tt>ipp_jstate_e</tt></a> </li>
-       <li><a href='#ipp_op_e'><tt>ipp_op_e</tt></a> </li>
-       <li><a href='#ipp_orient_e'><tt>ipp_orient_e</tt></a> </li>
-       <li><a href='#ipp_pstate_e'><tt>ipp_pstate_e</tt></a> </li>
-       <li><a href='#ipp_quality_e'><tt>ipp_quality_e</tt></a> </li>
-       <li><a href='#ipp_res_e'><tt>ipp_res_e</tt></a> </li>
-       <li><a href='#ipp_state_e'><tt>ipp_state_e</tt></a> </li>
-       <li><a href='#ipp_status_e'><tt>ipp_status_e</tt></a> </li>
-       <li><a href='#ipp_tag_e'><tt>ipp_tag_e</tt></a> </li>
-</ul>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='http_auth_e'>http_auth_e</a></h3>
-<h4>Description</h4>
-<p>HTTP authentication types
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<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_NEGOTIATE</tt> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></td><td>GSSAPI authentication in use 
-</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
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<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_FIELDS</tt> </td><td>Sending HTTP fields
-</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
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<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
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<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...
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<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_state_e'>http_state_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>HTTP_CLOSE</tt> </td><td>CLOSE command, waiting for blank line
-</td></tr>
-<tr><td><tt>HTTP_DELETE</tt> </td><td>DELETE command, waiting for blank line
-</td></tr>
-<tr><td><tt>HTTP_GET</tt> </td><td>GET command, waiting for blank line
-</td></tr>
-<tr><td><tt>HTTP_GET_SEND</tt> </td><td>GET command, sending data
-</td></tr>
-<tr><td><tt>HTTP_HEAD</tt> </td><td>HEAD command, waiting for blank line
-</td></tr>
-<tr><td><tt>HTTP_OPTIONS</tt> </td><td>OPTIONS command, waiting for blank line
-</td></tr>
-<tr><td><tt>HTTP_POST</tt> </td><td>POST command, waiting for blank line
-</td></tr>
-<tr><td><tt>HTTP_POST_RECV</tt> </td><td>POST command, receiving data
-</td></tr>
-<tr><td><tt>HTTP_POST_SEND</tt> </td><td>POST command, sending data
-</td></tr>
-<tr><td><tt>HTTP_PUT</tt> </td><td>PUT command, waiting for blank line
-</td></tr>
-<tr><td><tt>HTTP_PUT_RECV</tt> </td><td>PUT command, receiving data
-</td></tr>
-<tr><td><tt>HTTP_STATUS</tt> </td><td>Command complete, sending status
-</td></tr>
-<tr><td><tt>HTTP_TRACE</tt> </td><td>TRACE command, waiting for blank line
-</td></tr>
-<tr><td><tt>HTTP_WAITING</tt> </td><td>Waiting for command
-</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
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<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_EXPECTATION_FAILED</tt> </td><td>The expectation given in an Expect header field was not met
-</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_REQUESTED_RANGE</tt> </td><td>The requested range is not satisfiable
-</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 -->
-<h3 class='title'><a name='http_uri_coding_e'>http_uri_coding_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>HTTP_URI_CODING_ALL</tt> </td><td>En/decode everything
-</td></tr>
-<tr><td><tt>HTTP_URI_CODING_HOSTNAME</tt> </td><td>En/decode the hostname portion
-</td></tr>
-<tr><td><tt>HTTP_URI_CODING_MOST</tt> </td><td>En/decode all but the query
-</td></tr>
-<tr><td><tt>HTTP_URI_CODING_NONE</tt> </td><td>Don't en/decode anything
-</td></tr>
-<tr><td><tt>HTTP_URI_CODING_QUERY</tt> </td><td>En/decode the query portion
-</td></tr>
-<tr><td><tt>HTTP_URI_CODING_RESOURCE</tt> </td><td>En/decode the resource portion
-</td></tr>
-<tr><td><tt>HTTP_URI_CODING_USERNAME</tt> </td><td>En/decode the username portion
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='http_uri_status_e'>http_uri_status_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>HTTP_URI_BAD_ARGUMENTS</tt> </td><td>Bad arguments to function (error)
-</td></tr>
-<tr><td><tt>HTTP_URI_BAD_HOSTNAME</tt> </td><td>Bad hostname in URI (error)
-</td></tr>
-<tr><td><tt>HTTP_URI_BAD_PORT</tt> </td><td>Bad port number in URI (error)
-</td></tr>
-<tr><td><tt>HTTP_URI_BAD_RESOURCE</tt> </td><td>Bad resource in URI (error)
-</td></tr>
-<tr><td><tt>HTTP_URI_BAD_SCHEME</tt> </td><td>Bad scheme in URI (error)
-</td></tr>
-<tr><td><tt>HTTP_URI_BAD_URI</tt> </td><td>Bad/empty URI (error)
-</td></tr>
-<tr><td><tt>HTTP_URI_BAD_USERNAME</tt> </td><td>Bad username in URI (error)
-</td></tr>
-<tr><td><tt>HTTP_URI_MISSING_RESOURCE</tt> </td><td>Missing resource in URI (warning)
-</td></tr>
-<tr><td><tt>HTTP_URI_MISSING_SCHEME</tt> </td><td>Missing scheme in URI (warning)
-</td></tr>
-<tr><td><tt>HTTP_URI_OK</tt> </td><td>URI decoded OK
-</td></tr>
-<tr><td><tt>HTTP_URI_OVERFLOW</tt> </td><td>URI buffer for httpAssembleURI is too small
-</td></tr>
-<tr><td><tt>HTTP_URI_UNKNOWN_SCHEME</tt> </td><td>Unknown scheme in URI (warning)
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='http_version_e'>http_version_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>HTTP_0_9</tt> </td><td>HTTP/0.9
-</td></tr>
-<tr><td><tt>HTTP_1_0</tt> </td><td>HTTP/1.0
-</td></tr>
-<tr><td><tt>HTTP_1_1</tt> </td><td>HTTP/1.1
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_finish_e'>ipp_finish_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>IPP_FINISHINGS_BALE</tt> </td><td>Bale (any type)
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_BIND</tt> </td><td>Bind
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_BIND_BOTTOM</tt> </td><td>Bind on bottom
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_BIND_LEFT</tt> </td><td>Bind on left
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_BIND_RIGHT</tt> </td><td>Bind on right
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_BIND_TOP</tt> </td><td>Bind on top
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_BOOKLET_MAKER</tt> </td><td>Fold to make booklet
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_COVER</tt> </td><td>Add cover
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH</tt> </td><td>Stitch along any side
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH_BOTTOM</tt> </td><td>Stitch along bottom edge
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH_LEFT</tt> </td><td>Stitch along left side
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH_RIGHT</tt> </td><td>Stitch along right side
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH_TOP</tt> </td><td>Stitch along top edge
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_FOLD</tt> </td><td>Fold (any type)
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_JOB_OFFSET</tt> </td><td>Offset for binding (any type)
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_NONE</tt> </td><td>No finishing
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_PUNCH</tt> </td><td>Punch (any location/count)
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_SADDLE_STITCH</tt> </td><td>Staple interior
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_STAPLE</tt> </td><td>Staple (any location)
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_STAPLE_BOTTOM_LEFT</tt> </td><td>Staple bottom left corner
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT</tt> </td><td>Staple bottom right corner
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_STAPLE_DUAL_BOTTOM</tt> </td><td>Two staples on bottom
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_STAPLE_DUAL_LEFT</tt> </td><td>Two staples on left
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_STAPLE_DUAL_RIGHT</tt> </td><td>Two staples on right
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_STAPLE_DUAL_TOP</tt> </td><td>Two staples on top
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_STAPLE_TOP_LEFT</tt> </td><td>Staple top left corner
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_STAPLE_TOP_RIGHT</tt> </td><td>Staple top right corner
-</td></tr>
-<tr><td><tt>IPP_FINISHINGS_TRIM</tt> </td><td>Trim (any type)
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_jstate_e'>ipp_jstate_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>IPP_JOB_ABORTED</tt> </td><td>Job has aborted due to error
-</td></tr>
-<tr><td><tt>IPP_JOB_CANCELED</tt> </td><td>Job has been canceled
-</td></tr>
-<tr><td><tt>IPP_JOB_COMPLETED</tt> </td><td>Job has completed successfully
-</td></tr>
-<tr><td><tt>IPP_JOB_HELD</tt> </td><td>Job is held for printing
-</td></tr>
-<tr><td><tt>IPP_JOB_PENDING</tt> </td><td>Job is waiting to be printed
-</td></tr>
-<tr><td><tt>IPP_JOB_PROCESSING</tt> </td><td>Job is currently printing
-</td></tr>
-<tr><td><tt>IPP_JOB_STOPPED</tt> </td><td>Job has been stopped
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_op_e'>ipp_op_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_ACCEPT_JOBS</tt> </td><td>Accept new jobs on a printer
-</td></tr>
-<tr><td><tt>CUPS_ADD_MODIFY_CLASS</tt> </td><td>Add or modify a class
-</td></tr>
-<tr><td><tt>CUPS_ADD_MODIFY_PRINTER</tt> </td><td>Add or modify a printer
-</td></tr>
-<tr><td><tt>CUPS_AUTHENTICATE_JOB</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Authenticate a job 
-</td></tr>
-<tr><td><tt>CUPS_DELETE_CLASS</tt> </td><td>Delete a class
-</td></tr>
-<tr><td><tt>CUPS_DELETE_PRINTER</tt> </td><td>Delete a printer
-</td></tr>
-<tr><td><tt>CUPS_GET_CLASSES</tt> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></td><td>Get a list of classes 
-</td></tr>
-<tr><td><tt>CUPS_GET_DEFAULT</tt> </td><td>Get the default printer
-</td></tr>
-<tr><td><tt>CUPS_GET_DEVICES</tt> </td><td>Get a list of supported devices
-</td></tr>
-<tr><td><tt>CUPS_GET_PPD</tt> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></td><td>Get a PPD file 
-</td></tr>
-<tr><td><tt>CUPS_GET_PPDS</tt> </td><td>Get a list of supported drivers
-</td></tr>
-<tr><td><tt>CUPS_GET_PRINTERS</tt> </td><td>Get a list of printers and/or classes
-</td></tr>
-<tr><td><tt>CUPS_MOVE_JOB</tt> </td><td>Move a job to a different printer
-</td></tr>
-<tr><td><tt>CUPS_REJECT_JOBS</tt> </td><td>Reject new jobs on a printer
-</td></tr>
-<tr><td><tt>CUPS_SET_DEFAULT</tt> </td><td>Set the default printer
-</td></tr>
-<tr><td><tt>IPP_ACTIVATE_PRINTER</tt> </td><td>Start a printer @private@
-</td></tr>
-<tr><td><tt>IPP_CANCEL_CURRENT_JOB</tt> </td><td>Cancel the current job @private@
-</td></tr>
-<tr><td><tt>IPP_CANCEL_JOB</tt> </td><td>Cancel a job
-</td></tr>
-<tr><td><tt>IPP_CANCEL_SUBSCRIPTION</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Cancel a subscription 
-</td></tr>
-<tr><td><tt>IPP_CREATE_JOB</tt> </td><td>Create an empty print job
-</td></tr>
-<tr><td><tt>IPP_CREATE_JOB_SUBSCRIPTION</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Create a job subscription 
-</td></tr>
-<tr><td><tt>IPP_CREATE_PRINTER_SUBSCRIPTION</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Create a printer subscription 
-</td></tr>
-<tr><td><tt>IPP_DEACTIVATE_PRINTER</tt> </td><td>Stop a printer @private@
-</td></tr>
-<tr><td><tt>IPP_DISABLE_PRINTER</tt> </td><td>Stop a printer
-</td></tr>
-<tr><td><tt>IPP_ENABLE_PRINTER</tt> </td><td>Start a printer
-</td></tr>
-<tr><td><tt>IPP_GET_JOBS</tt> </td><td>Get a list of jobs
-</td></tr>
-<tr><td><tt>IPP_GET_JOB_ATTRIBUTES</tt> </td><td>Get job attributes
-</td></tr>
-<tr><td><tt>IPP_GET_NOTIFICATIONS</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Get notification events 
-</td></tr>
-<tr><td><tt>IPP_GET_PRINTER_ATTRIBUTES</tt> </td><td>Get printer attributes
-</td></tr>
-<tr><td><tt>IPP_GET_PRINTER_SUPPORTED_VALUES</tt> </td><td>Get supported attribute values
-</td></tr>
-<tr><td><tt>IPP_GET_PRINT_SUPPORT_FILES</tt> </td><td>Get printer support files @private@
-</td></tr>
-<tr><td><tt>IPP_GET_SUBSCRIPTIONS</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Get list of subscriptions 
-</td></tr>
-<tr><td><tt>IPP_GET_SUBSCRIPTION_ATTRIBUTES</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Get subscription attributes 
-</td></tr>
-<tr><td><tt>IPP_HOLD_JOB</tt> </td><td>Hold a job for printing
-</td></tr>
-<tr><td><tt>IPP_HOLD_NEW_JOBS</tt> </td><td>Hold new jobs @private@
-</td></tr>
-<tr><td><tt>IPP_PAUSE_PRINTER</tt> </td><td>Stop a printer
-</td></tr>
-<tr><td><tt>IPP_PAUSE_PRINTER_AFTER_CURRENT_JOB</tt> </td><td>Stop printer after the current job @private@
-</td></tr>
-<tr><td><tt>IPP_PRINT_JOB</tt> </td><td>Print a single file
-</td></tr>
-<tr><td><tt>IPP_PRINT_URI</tt> </td><td>Print a single URL @private@
-</td></tr>
-<tr><td><tt>IPP_PRIVATE</tt> </td><td>Reserved @private@
-</td></tr>
-<tr><td><tt>IPP_PROMOTE_JOB</tt> </td><td>Promote a job to print sooner @private@
-</td></tr>
-<tr><td><tt>IPP_PURGE_JOBS</tt> </td><td>Cancel all jobs
-</td></tr>
-<tr><td><tt>IPP_RELEASE_HELD_NEW_JOBS</tt> </td><td>Release new jobs @private@
-</td></tr>
-<tr><td><tt>IPP_RELEASE_JOB</tt> </td><td>Release a job for printing
-</td></tr>
-<tr><td><tt>IPP_RENEW_SUBSCRIPTION</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Renew a printer subscription 
-</td></tr>
-<tr><td><tt>IPP_REPROCESS_JOB</tt> </td><td>Reprint a job @private@
-</td></tr>
-<tr><td><tt>IPP_RESTART_JOB</tt> </td><td>Reprint a job
-</td></tr>
-<tr><td><tt>IPP_RESTART_PRINTER</tt> </td><td>Restart a printer @private@
-</td></tr>
-<tr><td><tt>IPP_RESUME_JOB</tt> </td><td>Resume the current job @private@
-</td></tr>
-<tr><td><tt>IPP_RESUME_PRINTER</tt> </td><td>Start a printer
-</td></tr>
-<tr><td><tt>IPP_SCHEDULE_JOB_AFTER</tt> </td><td>Schedule a job to print after another @private@
-</td></tr>
-<tr><td><tt>IPP_SEND_DOCUMENT</tt> </td><td>Add a file to a job
-</td></tr>
-<tr><td><tt>IPP_SEND_NOTIFICATIONS</tt> </td><td>Send notification events @private@
-</td></tr>
-<tr><td><tt>IPP_SEND_URI</tt> </td><td>Add a URL to a job @private@
-</td></tr>
-<tr><td><tt>IPP_SET_JOB_ATTRIBUTES</tt> </td><td>Set job attributes
-</td></tr>
-<tr><td><tt>IPP_SET_PRINTER_ATTRIBUTES</tt> </td><td>Set printer attributes @private@
-</td></tr>
-<tr><td><tt>IPP_SHUTDOWN_PRINTER</tt> </td><td>Turn a printer off @private@
-</td></tr>
-<tr><td><tt>IPP_STARTUP_PRINTER</tt> </td><td>Turn a printer on @private@
-</td></tr>
-<tr><td><tt>IPP_SUSPEND_CURRENT_JOB</tt> </td><td>Suspend the current job @private@
-</td></tr>
-<tr><td><tt>IPP_VALIDATE_JOB</tt> </td><td>Validate job options
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_orient_e'>ipp_orient_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>IPP_LANDSCAPE</tt> </td><td>90 degrees counter-clockwise
-</td></tr>
-<tr><td><tt>IPP_PORTRAIT</tt> </td><td>No rotation
-</td></tr>
-<tr><td><tt>IPP_REVERSE_LANDSCAPE</tt> </td><td>90 degrees clockwise
-</td></tr>
-<tr><td><tt>IPP_REVERSE_PORTRAIT</tt> </td><td>180 degrees
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_pstate_e'>ipp_pstate_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>IPP_PRINTER_IDLE</tt> </td><td>Printer is idle
-</td></tr>
-<tr><td><tt>IPP_PRINTER_PROCESSING</tt> </td><td>Printer is working
-</td></tr>
-<tr><td><tt>IPP_PRINTER_STOPPED</tt> </td><td>Printer is stopped
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_quality_e'>ipp_quality_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>IPP_QUALITY_DRAFT</tt> </td><td>Draft quality
-</td></tr>
-<tr><td><tt>IPP_QUALITY_HIGH</tt> </td><td>High quality
-</td></tr>
-<tr><td><tt>IPP_QUALITY_NORMAL</tt> </td><td>Normal quality
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_res_e'>ipp_res_e</a></h3>
-<h4>Description</h4>
-<p>Types and structures...
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>IPP_RES_PER_CM</tt> </td><td>Pixels per centimeter
-</td></tr>
-<tr><td><tt>IPP_RES_PER_INCH</tt> </td><td>Pixels per inch
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_state_e'>ipp_state_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>IPP_ATTRIBUTE</tt> </td><td>One or more attributes need to be sent/received
-</td></tr>
-<tr><td><tt>IPP_DATA</tt> </td><td>IPP request data needs to be sent/received
-</td></tr>
-<tr><td><tt>IPP_ERROR</tt> </td><td>An error occurred
-</td></tr>
-<tr><td><tt>IPP_HEADER</tt> </td><td>The request header needs to be sent/received
-</td></tr>
-<tr><td><tt>IPP_IDLE</tt> </td><td>Nothing is happening/request completed
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_status_e'>ipp_status_e</a></h3>
-<h4>Description</h4>
-<p>IPP status codes...
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_SEE_OTHER</tt> </td><td>cups-see-other
-</td></tr>
-<tr><td><tt>IPP_ATTRIBUTES</tt> </td><td>client-error-attributes-or-values-not-supported
-</td></tr>
-<tr><td><tt>IPP_ATTRIBUTES_NOT_SETTABLE</tt> </td><td>client-error-attributes-not-settable
-</td></tr>
-<tr><td><tt>IPP_BAD_REQUEST</tt> </td><td>client-error-bad-request
-</td></tr>
-<tr><td><tt>IPP_CHARSET</tt> </td><td>client-error-charset-not-supported
-</td></tr>
-<tr><td><tt>IPP_COMPRESSION_ERROR</tt> </td><td>client-error-compression-error
-</td></tr>
-<tr><td><tt>IPP_COMPRESSION_NOT_SUPPORTED</tt> </td><td>client-error-compression-not-supported
-</td></tr>
-<tr><td><tt>IPP_CONFLICT</tt> </td><td>client-error-conflicting-attributes
-</td></tr>
-<tr><td><tt>IPP_DEVICE_ERROR</tt> </td><td>server-error-device-error
-</td></tr>
-<tr><td><tt>IPP_DOCUMENT_ACCESS_ERROR</tt> </td><td>client-error-document-access-error
-</td></tr>
-<tr><td><tt>IPP_DOCUMENT_FORMAT</tt> </td><td>client-error-document-format-not-supported
-</td></tr>
-<tr><td><tt>IPP_DOCUMENT_FORMAT_ERROR</tt> </td><td>client-error-document-format-error
-</td></tr>
-<tr><td><tt>IPP_ERROR_JOB_CANCELED</tt> </td><td>server-error-job-canceled
-</td></tr>
-<tr><td><tt>IPP_FORBIDDEN</tt> </td><td>client-error-forbidden
-</td></tr>
-<tr><td><tt>IPP_GONE</tt> </td><td>client-error-gone
-</td></tr>
-<tr><td><tt>IPP_IGNORED_ALL_NOTIFICATIONS</tt> </td><td>client-error-ignored-all-notifications
-</td></tr>
-<tr><td><tt>IPP_IGNORED_ALL_SUBSCRIPTIONS</tt> </td><td>client-error-ignored-all-subscriptions
-</td></tr>
-<tr><td><tt>IPP_INTERNAL_ERROR</tt> </td><td>server-error-internal-error
-</td></tr>
-<tr><td><tt>IPP_MULTIPLE_JOBS_NOT_SUPPORTED</tt> </td><td>server-error-multiple-document-jobs-not-supported
-</td></tr>
-<tr><td><tt>IPP_NOT_ACCEPTING</tt> </td><td>server-error-not-accepting-jobs
-</td></tr>
-<tr><td><tt>IPP_NOT_AUTHENTICATED</tt> </td><td>client-error-not-authenticated
-</td></tr>
-<tr><td><tt>IPP_NOT_AUTHORIZED</tt> </td><td>client-error-not-authorized
-</td></tr>
-<tr><td><tt>IPP_NOT_FOUND</tt> </td><td>client-error-not-found
-</td></tr>
-<tr><td><tt>IPP_NOT_POSSIBLE</tt> </td><td>client-error-not-possible
-</td></tr>
-<tr><td><tt>IPP_OK</tt> </td><td>successful-ok
-</td></tr>
-<tr><td><tt>IPP_OK_BUT_CANCEL_SUBSCRIPTION</tt> </td><td>successful-ok-but-cancel-subscription
-</td></tr>
-<tr><td><tt>IPP_OK_CONFLICT</tt> </td><td>successful-ok-conflicting-attributes
-</td></tr>
-<tr><td><tt>IPP_OK_EVENTS_COMPLETE</tt> </td><td>successful-ok-events-complete
-</td></tr>
-<tr><td><tt>IPP_OK_IGNORED_NOTIFICATIONS</tt> </td><td>successful-ok-ignored-notifications
-</td></tr>
-<tr><td><tt>IPP_OK_IGNORED_SUBSCRIPTIONS</tt> </td><td>successful-ok-ignored-subscriptions
-</td></tr>
-<tr><td><tt>IPP_OK_SUBST</tt> </td><td>successful-ok-ignored-or-substituted-attributes
-</td></tr>
-<tr><td><tt>IPP_OK_TOO_MANY_EVENTS</tt> </td><td>successful-ok-too-many-events
-</td></tr>
-<tr><td><tt>IPP_OPERATION_NOT_SUPPORTED</tt> </td><td>server-error-operation-not-supported
-</td></tr>
-<tr><td><tt>IPP_PRINTER_BUSY</tt> </td><td>server-error-busy
-</td></tr>
-<tr><td><tt>IPP_PRINTER_IS_DEACTIVATED</tt> </td><td>server-error-printer-is-deactivated
-</td></tr>
-<tr><td><tt>IPP_PRINT_SUPPORT_FILE_NOT_FOUND</tt> </td><td>client-error-print-support-file-not-found
-</td></tr>
-<tr><td><tt>IPP_REDIRECTION_OTHER_SITE</tt> </td><td>
-</td></tr>
-<tr><td><tt>IPP_REQUEST_ENTITY</tt> </td><td>client-error-request-entity-too-large
-</td></tr>
-<tr><td><tt>IPP_REQUEST_VALUE</tt> </td><td>client-error-request-value-too-long
-</td></tr>
-<tr><td><tt>IPP_SERVICE_UNAVAILABLE</tt> </td><td>server-error-service-unavailable
-</td></tr>
-<tr><td><tt>IPP_TEMPORARY_ERROR</tt> </td><td>server-error-temporary-error
-</td></tr>
-<tr><td><tt>IPP_TIMEOUT</tt> </td><td>client-error-timeout
-</td></tr>
-<tr><td><tt>IPP_TOO_MANY_SUBSCRIPTIONS</tt> </td><td>client-error-too-many-subscriptions
-</td></tr>
-<tr><td><tt>IPP_URI_SCHEME</tt> </td><td>client-error-uri-scheme-not-supported
-</td></tr>
-<tr><td><tt>IPP_VERSION_NOT_SUPPORTED</tt> </td><td>server-error-version-not-supported
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_tag_e'>ipp_tag_e</a></h3>
-<h4>Description</h4>
-<p>Format tags for attributes...
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>IPP_TAG_ADMINDEFINE</tt> </td><td>Admin-defined value
-</td></tr>
-<tr><td><tt>IPP_TAG_BEGIN_COLLECTION</tt> </td><td>Beginning of collection value
-</td></tr>
-<tr><td><tt>IPP_TAG_BOOLEAN</tt> </td><td>Boolean value
-</td></tr>
-<tr><td><tt>IPP_TAG_CHARSET</tt> </td><td>Character set value
-</td></tr>
-<tr><td><tt>IPP_TAG_COPY</tt> </td><td>Bitflag for copied attribute values
-</td></tr>
-<tr><td><tt>IPP_TAG_DATE</tt> </td><td>Date/time value
-</td></tr>
-<tr><td><tt>IPP_TAG_DEFAULT</tt> </td><td>Default value
-</td></tr>
-<tr><td><tt>IPP_TAG_DELETEATTR</tt> </td><td>Delete-attribute value
-</td></tr>
-<tr><td><tt>IPP_TAG_END</tt> </td><td>End-of-attributes
-</td></tr>
-<tr><td><tt>IPP_TAG_END_COLLECTION</tt> </td><td>End of collection value
-</td></tr>
-<tr><td><tt>IPP_TAG_ENUM</tt> </td><td>Enumeration value
-</td></tr>
-<tr><td><tt>IPP_TAG_EVENT_NOTIFICATION</tt> </td><td>Event group
-</td></tr>
-<tr><td><tt>IPP_TAG_INTEGER</tt> </td><td>Integer value
-</td></tr>
-<tr><td><tt>IPP_TAG_JOB</tt> </td><td>Job group
-</td></tr>
-<tr><td><tt>IPP_TAG_KEYWORD</tt> </td><td>Keyword value
-</td></tr>
-<tr><td><tt>IPP_TAG_LANGUAGE</tt> </td><td>Language value
-</td></tr>
-<tr><td><tt>IPP_TAG_MASK</tt> </td><td>Mask for copied attribute values
-</td></tr>
-<tr><td><tt>IPP_TAG_MEMBERNAME</tt> </td><td>Collection member name value
-</td></tr>
-<tr><td><tt>IPP_TAG_MIMETYPE</tt> </td><td>MIME media type value
-</td></tr>
-<tr><td><tt>IPP_TAG_NAME</tt> </td><td>Name value
-</td></tr>
-<tr><td><tt>IPP_TAG_NAMELANG</tt> </td><td>Name-with-language value
-</td></tr>
-<tr><td><tt>IPP_TAG_NOTSETTABLE</tt> </td><td>Not-settable value
-</td></tr>
-<tr><td><tt>IPP_TAG_NOVALUE</tt> </td><td>No-value value
-</td></tr>
-<tr><td><tt>IPP_TAG_OPERATION</tt> </td><td>Operation group
-</td></tr>
-<tr><td><tt>IPP_TAG_PRINTER</tt> </td><td>Printer group
-</td></tr>
-<tr><td><tt>IPP_TAG_RANGE</tt> </td><td>Range value
-</td></tr>
-<tr><td><tt>IPP_TAG_RESOLUTION</tt> </td><td>Resolution value
-</td></tr>
-<tr><td><tt>IPP_TAG_STRING</tt> </td><td>Octet string value
-</td></tr>
-<tr><td><tt>IPP_TAG_SUBSCRIPTION</tt> </td><td>Subscription group
-</td></tr>
-<tr><td><tt>IPP_TAG_TEXT</tt> </td><td>Text value
-</td></tr>
-<tr><td><tt>IPP_TAG_TEXTLANG</tt> </td><td>Text-with-language value
-</td></tr>
-<tr><td><tt>IPP_TAG_UNKNOWN</tt> </td><td>Unknown value
-</td></tr>
-<tr><td><tt>IPP_TAG_UNSUPPORTED_GROUP</tt> </td><td>Unsupported attributes group
-</td></tr>
-<tr><td><tt>IPP_TAG_UNSUPPORTED_VALUE</tt> </td><td>Unsupported value
-</td></tr>
-<tr><td><tt>IPP_TAG_URI</tt> </td><td>URI value
-</td></tr>
-<tr><td><tt>IPP_TAG_URISCHEME</tt> </td><td>URI scheme value
-</td></tr>
-<tr><td><tt>IPP_TAG_ZERO</tt> </td><td>Zero tag - used for separators
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h2 class='title'><a name='FUNCTIONS'>Functions</a></h2>
-<ul>
-       <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='#cupsDoIORequest'><tt>cupsDoIORequest()</tt></a> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></li>
-       <li><a href='#cupsDoRequest'><tt>cupsDoRequest()</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='#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='#httpBlocking'><tt>httpBlocking()</tt></a> </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='#httpClearFields'><tt>httpClearFields()</tt></a> </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> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></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> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></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='#httpError'><tt>httpError()</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='#httpGetAuthString'><tt>httpGetAuthString()</tt></a> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></li>
-       <li><a href='#httpGetBlocking'><tt>httpGetBlocking()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#httpGetCookie'><tt>httpGetCookie()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></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='#httpGetFd'><tt>httpGetFd()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#httpGetField'><tt>httpGetField()</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;DEPRECATED&nbsp;</span></li>
-       <li><a href='#httpGetLength2'><tt>httpGetLength2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#httpGetStatus'><tt>httpGetStatus()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></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='#httpPut'><tt>httpPut()</tt></a> </li>
-       <li><a href='#httpRead'><tt>httpRead()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
-       <li><a href='#httpRead2'><tt>httpRead2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#httpReconnect'><tt>httpReconnect()</tt></a> </li>
-       <li><a href='#httpSeparate'><tt>httpSeparate()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></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='#httpSetAuthString'><tt>httpSetAuthString()</tt></a> <span class='info'>&nbsp;CUPS 1.3&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='#httpSetExpect'><tt>httpSetExpect()</tt></a> <span class='info'>&nbsp;CUPS 1.2&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> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
-       <li><a href='#httpWrite2'><tt>httpWrite2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></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='#ippNewRequest'><tt>ippNewRequest()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></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.2&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.2&nbsp;</span></li>
-</ul>
-<!-- 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.
-<p>This function should be called in response to a HTTP_UNAUTHORIZED
-status, prior to resubmitting your request.
+<p>Once you have created an IPP request, use the <code>cups</code> functions to send the request to and read the response from the server. For example, the <a href='#cupsDoRequest'><code>cupsDoRequest</code></a> function can be used for simple query operations that do not involve files:</p>
 
+<pre class='example'>
+#include &lt;cups/cups.h&gt;
 
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-cupsDoAuthentication(
-    <a href='#http_t'>http_t</a> * http,
-    const char * method,
-    const char * resource);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 with a file.
-<p>This function sends the IPP request to the specified server, retrying
-and authenticating as necessary.  The request is freed with ippDelete()
-after receiving a valid IPP response.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_t'>ipp_t</a> *<br>
-cupsDoFileRequest(
-    <a href='#http_t'>http_t</a> * http,
-    <a href='#ipp_t'>ipp_t</a> * request,
-    const char * resource,
-    const char * filename);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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'><span class='info'>&nbsp;CUPS 1.3&nbsp;</span><a name='cupsDoIORequest'>cupsDoIORequest()</a></h3>
-<h4>Description</h4>
-<p>Do an IPP request with file descriptors.
-<p>This function sends the IPP request to the specified server, retrying
-and authenticating as necessary.  The request is freed with ippDelete()
-after receiving a valid IPP response.
-<p>If &quot;infile&quot; is a valid file descriptor, cupsDoIORequest() copies
-all of the data from the file after the IPP request message.
-<p>If &quot;outfile&quot; is a valid file descriptor, cupsDoIORequest() copies
-all of the data after the IPP response message to the file.
 
+<a href='#ipp_t'>ipp_t</a> *<a name='get_jobs'>get_jobs</a>(void)
+{
+  <a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(IPP_GET_JOBS);
 
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_t'>ipp_t</a> *<br>
-cupsDoIORequest(
-    <a href='#http_t'>http_t</a> * http,
-    <a href='#ipp_t'>ipp_t</a> * request,
-    const char * resource,
-    int infile,
-    int outfile);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>infile</tt></td><td>File to read from or -1 for none</td></tr>
-<tr><td><tt>outfile</tt></td><td>File to write to or -1 for none</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>Response data</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cupsDoRequest'>cupsDoRequest()</a></h3>
-<h4>Description</h4>
-<p>Do an IPP request.
-<p>This function sends the IPP request to the specified server, retrying
-and authenticating as necessary.  The request is freed with ippDelete()
-after receiving a valid IPP response.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_t'>ipp_t</a> *<br>
-cupsDoRequest(
-    <a href='#http_t'>http_t</a> * http,
-    <a href='#ipp_t'>ipp_t</a> * request,
-    const char * resource);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>
-</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.
-<p>This function adds operation, job, and then subscription attributes,
+  <a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
+               NULL, "ipp://localhost/printers/");
+  <a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
+               NULL, cupsUser());
+
+  return (<a href='#cupsDoRequest'>cupsDoRequest</a>(CUPS_HTTP_DEFAULT, request, "/"));
+}
+</pre>
+
+<p>The <a href='#cupsDoRequest'><code>cupsDoRequest</code></a> function frees the request and returns an IPP response or <code>NULL</code> pointer if the request could not be sent to the server. Once you have a response from the server, you can either use the <a href='#ippFindAttribute'><code>ippFindAttribute</code></a> and <a href='#ippFindNextAttribute'><code>ippFindNextAttribute</code></a> functions to find specific attributes, for example:</p>
+
+<pre class='example'>
+<a href='#ipp_t'>ipp_t</a> *response;
+<a href='#ipp_attribute_t'>ipp_attribute_t</a> *attr;
+
+attr = <a href='#ippFindAttribute'>ippFindAttribute</a>(response, "printer-state", IPP_TAG_ENUM);
+</pre>
+
+<p>You can also walk the list of attributes with a simple <code>for</code> loop like this:</p>
+
+<pre class='example'>
+<a href='#ipp_t'>ipp_t</a> *response;
+<a href='#ipp_attribute_t'>ipp_attribute_t</a> *attr;
+
+for (attr = <a href='#ippFirstAttribute'>ippFirstAttribute</a>(response); attr != NULL; attr = <a href='#ippNextAttribute'>ippNextAttribute</a>(response))
+  if (ippGetName(attr) == NULL)
+    puts("--SEPARATOR--");
+  else
+    puts(ippGetName(attr));
+</pre>
+
+<p>The <code>for</code> loop approach is normally used when collecting attributes for multiple objects (jobs, printers, etc.) in a response. Attributes with <code>NULL</code> names indicate a separator between the attributes of each object. For example, the following code will list the jobs returned from our previous <a href='#get_jobs'><code>get_jobs</code></a> example code:</p>
+
+<pre class='example'>
+<a href='#ipp_t'>ipp_t</a> *response = <a href='#get_jobs'>get_jobs</a>();
+
+if (response != NULL)
+{
+  <a href='#ipp_attribute_t'>ipp_attribute_t</a> *attr;
+  const char *attrname;
+  int job_id = 0;
+  const char *job_name = NULL;
+  const char *job_originating_user_name = NULL;
+
+  puts("Job ID  Owner             Title");
+  puts("------  ----------------  ---------------------------------");
+
+  for (attr = <a href='#ippFirstAttribute'>ippFirstAttribute</a>(response); attr != NULL; attr = <a href='#ippNextAttribute'>ippNextAttribute</a>(response))
+  {
+   /* Attributes without names are separators between jobs */
+    attrname = ippGetName(attr);
+    if (attrname == NULL)
+    {
+      if (job_id > 0)
+      {
+        if (job_name == NULL)
+          job_name = "(withheld)";
+
+        if (job_originating_user_name == NULL)
+          job_originating_user_name = "(withheld)";
+
+        printf("%5d  %-16s  %s\n", job_id, job_originating_user_name, job_name);
+      }
+
+      job_id = 0;
+      job_name = NULL;
+      job_originating_user_name = NULL;
+      continue;
+    }
+    else if (!strcmp(attrname, "job-id") &amp;&amp; ippGetValueTag(attr) == IPP_TAG_INTEGER)
+      job_id = ippGetInteger(attr, 0);
+    else if (!strcmp(attrname, "job-name") &amp;&amp; ippGetValueTag(attr) == IPP_TAG_NAME)
+      job_name = ippGetString(attr, 0, NULL);
+    else if (!strcmp(attrname, "job-originating-user-name") &amp;&amp;
+             ippGetValueTag(attr) == IPP_TAG_NAME)
+      job_originating_user_name = ippGetString(attr, 0, NULL);
+  }
+
+  if (job_id > 0)
+  {
+    if (job_name == NULL)
+      job_name = "(withheld)";
+
+    if (job_originating_user_name == NULL)
+      job_originating_user_name = "(withheld)";
+
+    printf("%5d  %-16s  %s\n", job_id, job_originating_user_name, job_name);
+  }
+}
+</pre>
+
+<h3><a name='CREATING_URI_STRINGS'>Creating URI Strings</a></h3>
+
+<p>To ensure proper encoding, the
+<a href='#httpAssembleURIf'><code>httpAssembleURIf</code></a> function must be
+used to format a "printer-uri" string for all printer-based requests:</p>
+
+<pre class='example'>
+const char *name = "Foo";
+char uri[1024];
+<a href='#ipp_t'>ipp_t</a> *request;
+
+<a href='#httpAssembleURIf'>httpAssembleURIf</a>(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, cupsServer(),
+                 ippPort(), "/printers/%s", name);
+<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+</pre>
+
+<h3><a name='SENDING_REQUESTS_WITH_FILES'>Sending Requests with Files</a></h3>
+
+<p>The <a href='#cupsDoFileRequest'><code>cupsDoFileRequest</code></a> and
+<a href='#cupsDoIORequest'><code>cupsDoIORequest</code></a> functions are
+used for requests involving files. The
+<a href='#cupsDoFileRequest'><code>cupsDoFileRequest</code></a> function
+attaches the named file to a request and is typically used when sending a print
+file or changing a printer's PPD file:</p>
+
+<pre class='example'>
+const char *filename = "/usr/share/cups/data/testprint.ps";
+const char *name = "Foo";
+char uri[1024];
+char resource[1024];
+<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(IPP_PRINT_JOB);
+<a href='#ipp_t'>ipp_t</a> *response;
+
+/* Use httpAssembleURIf for the printer-uri string */
+<a href='#httpAssembleURIf'>httpAssembleURIf</a>(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, cupsServer(),
+                 ippPort(), "/printers/%s", name);
+<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
+             NULL, cupsUser());
+<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name",
+             NULL, "testprint.ps");
+
+/* Use snprintf for the resource path */
+snprintf(resource, sizeof(resource), "/printers/%s", name);
+
+response = <a href='#cupsDoFileRequest'>cupsDoFileRequest</a>(CUPS_HTTP_DEFAULT, request, resource, filename);
+</pre>
+
+<p>The <a href='#cupsDoIORequest'><code>cupsDoIORequest</code></a> function
+optionally attaches a file to the request and optionally saves a file in the
+response from the server. It is used when using a pipe for the request
+attachment or when using a request that returns a file, currently only
+<code>CUPS_GET_DOCUMENT</code> and <code>CUPS_GET_PPD</code>. For example,
+the following code will download the PPD file for the sample HP LaserJet
+printer driver:</p>
+
+<pre class='example'>
+char tempfile[1024];
+int tempfd;
+<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(CUPS_GET_PPD);
+<a href='#ipp_t'>ipp_t</a> *response;
+
+<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
+             NULL, "laserjet.ppd");
+
+tempfd = cupsTempFd(tempfile, sizeof(tempfile));
+
+response = <a href='#cupsDoIORequest'>cupsDoIORequest</a>(CUPS_HTTP_DEFAULT, request, "/", -1, tempfd);
+</pre>
+
+<p>The example passes <code>-1</code> for the input file descriptor to specify
+that no file is to be attached to the request. The PPD file attached to the
+response is written to the temporary file descriptor we created using the
+<code>cupsTempFd</code> function.</p>
+
+<h3><a name='ASYNCHRONOUS_REQUEST_PROCESSING'>Asynchronous Request Processing</a></h3>
+
+<p>The <a href='#cupsSendRequest'><code>cupsSendRequest</code></a> and
+<a href='#cupsGetResponse'><code>cupsGetResponse</code></a> support
+asynchronous communications with the server. Unlike the other request
+functions, the IPP request is not automatically freed, so remember to
+free your request with the <a href='#ippDelete'><code>ippDelete</code></a>
+function.</p>
+
+<p>File data is attached to the request using the
+<a href='#cupsWriteRequestData'><code>cupsWriteRequestData</code></a>
+function, while file data returned from the server is read using the
+<a href='#cupsReadResponseData'><code>cupsReadResponseData</code></a>
+function. We can rewrite the previous <code>CUPS_GET_PPD</code> example
+to use the asynchronous functions quite easily:</p>
+
+<pre class='example'>
+char tempfile[1024];
+int tempfd;
+<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(CUPS_GET_PPD);
+<a href='#ipp_t'>ipp_t</a> *response;
+
+<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
+             NULL, "laserjet.ppd");
+
+tempfd = cupsTempFd(tempfile, sizeof(tempfile));
+
+if (<a href='#cupsSendRequest'>cupsSendRequest</a>(CUPS_HTTP_DEFAULT, request, "/") == HTTP_CONTINUE)
+{
+  response = <a href='#cupsGetResponse'>cupsGetResponse</a>(CUPS_HTTP_DEFAULT, "/");
+
+  if (response != NULL)
+  {
+    ssize_t bytes;
+    char buffer[8192];
+
+    while ((bytes = <a href='#cupsReadResponseData'>cupsReadResponseData</a>(CUPS_HTTP_DEFAULT, buffer, sizeof(buffer))) > 0)
+      write(tempfd, buffer, bytes);
+  }
+}
+
+/* Free the request! */
+<a href='#ippDelete'>ippDelete</a>(request);
+</pre>
+
+<p>The <a href='#cupsSendRequest'><code>cupsSendRequest</code></a> function
+returns the initial HTTP request status, typically either
+<code>HTTP_CONTINUE</code> or <code>HTTP_UNAUTHORIZED</code>. The latter status
+is returned when the request requires authentication of some sort. The
+<a href='#cupsDoAuthentication'><code>cupsDoAuthentication</code></a> function
+must be called when your see <code>HTTP_UNAUTHORIZED</code> and the request
+re-sent. We can add authentication support to our example code by using a
+<code>do ... while</code> loop:</p>
+
+<pre class='example'>
+char tempfile[1024];
+int tempfd;
+<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(CUPS_GET_PPD);
+<a href='#ipp_t'>ipp_t</a> *response;
+http_status_t status;
+
+<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
+             NULL, "laserjet.ppd");
+
+tempfd = cupsTempFd(tempfile, sizeof(tempfile));
+
+/* Loop for authentication */
+do
+{
+  status = <a href='#cupsSendRequest'>cupsSendRequest</a>(CUPS_HTTP_DEFAULT, request, "/");
+
+  if (status == HTTP_UNAUTHORIZED)
+  {
+    /* Try to authenticate, break out of the loop if that fails */
+    if (<a href='#cupsDoAuthentication'>cupsDoAuthentication</a>(CUPS_HTTP_DEFAULT, "POST", "/"))
+      break;
+  }
+}
+while (status != HTTP_CONTINUE &amp;&amp; status != HTTP_UNAUTHORIZED);
+
+if (status == HTTP_CONTINUE)
+{
+  response = <a href='#cupsGetResponse'>cupsGetResponse</a>(CUPS_HTTP_DEFAULT, "/");
+
+  if (response != NULL)
+  {
+    ssize_t bytes;
+    char buffer[8192];
+
+    while ((bytes = <a href='#cupsReadResponseData'>cupsReadResponseData</a>(CUPS_HTTP_DEFAULT, buffer, sizeof(buffer))) > 0)
+      write(tempfd, buffer, bytes);
+  }
+}
+
+/* Free the request! */
+<a href='#ippDelete'>ippDelete</a>(request);
+</pre>
+<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/OS X 10.4&nbsp;</span><a name="cupsDoAuthentication">cupsDoAuthentication</a></h3>
+<p class="description">Authenticate a request.</p>
+<p class="code">
+int cupsDoAuthentication (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *method,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>method</dt>
+<dd class="description">Request method (&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;)</dd>
+<dt>resource</dt>
+<dd class="description">Resource path</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 on success, -1 on error</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function should be called in response to a <code>HTTP_STATUS_UNAUTHORIZED</code>
+status, prior to resubmitting your request.
+
+</p>
+<h3 class="function"><a name="cupsDoFileRequest">cupsDoFileRequest</a></h3>
+<p class="description">Do an IPP request with a file.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *cupsDoFileRequest (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>request</dt>
+<dd class="description">IPP request</dd>
+<dt>resource</dt>
+<dd class="description">HTTP resource for POST</dd>
+<dt>filename</dt>
+<dd class="description">File to send or <code>NULL</code> for none</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Response data</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function sends the IPP request and attached file to the specified
+server, retrying and authenticating as necessary.  The request is freed with
+<a href="#ippDelete"><code>ippDelete</code></a>.</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.3/OS X 10.5&nbsp;</span><a name="cupsDoIORequest">cupsDoIORequest</a></h3>
+<p class="description">Do an IPP request with file descriptors.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *cupsDoIORequest (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int infile,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int outfile<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>request</dt>
+<dd class="description">IPP request</dd>
+<dt>resource</dt>
+<dd class="description">HTTP resource for POST</dd>
+<dt>infile</dt>
+<dd class="description">File to read from or -1 for none</dd>
+<dt>outfile</dt>
+<dd class="description">File to write to or -1 for none</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Response data</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function sends the IPP request with the optional input file &quot;infile&quot; to
+the specified server, retrying and authenticating as necessary.  The request
+is freed with <a href="#ippDelete"><code>ippDelete</code></a>.<br>
+<br>
+If &quot;infile&quot; is a valid file descriptor, <code>cupsDoIORequest</code> copies
+all of the data from the file after the IPP request message.<br>
+<br>
+If &quot;outfile&quot; is a valid file descriptor, <code>cupsDoIORequest</code> copies
+all of the data after the IPP response message to the file.
+
+</p>
+<h3 class="function"><a name="cupsDoRequest">cupsDoRequest</a></h3>
+<p class="description">Do an IPP request.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *cupsDoRequest (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>request</dt>
+<dd class="description">IPP request</dd>
+<dt>resource</dt>
+<dd class="description">HTTP resource for POST</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Response data</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function sends the IPP request to the specified server, retrying
+and authenticating as necessary.  The request is freed with <a href="#ippDelete"><code>ippDelete</code></a>.</p>
+<h3 class="function"><a name="cupsEncodeOptions">cupsEncodeOptions</a></h3>
+<p class="description">Encode printer options into IPP attributes.</p>
+<p class="code">
+void cupsEncodeOptions (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t *options<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">Request to add to</dd>
+<dt>num_options</dt>
+<dd class="description">Number of options</dd>
+<dt>options</dt>
+<dd class="description">Options</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function adds operation, job, and then subscription attributes,
 in that order. Use the cupsEncodeOptions2() function to add attributes
-for a single group.
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-cupsEncodeOptions(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    int num_options,
-    cups_option_t * options);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<p>This function only adds attributes for a single group. Call this
+for a single group.</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="cupsEncodeOptions2">cupsEncodeOptions2</a></h3>
+<p class="description">Encode printer options into IPP attributes for a group.</p>
+<p class="code">
+void cupsEncodeOptions2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t *options,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group_tag<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">Request to add to</dd>
+<dt>num_options</dt>
+<dd class="description">Number of options</dd>
+<dt>options</dt>
+<dd class="description">Options</dd>
+<dt>group_tag</dt>
+<dd class="description">Group to encode</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">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>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4/OS X 10.6&nbsp;</span><a name="cupsGetDevices">cupsGetDevices</a></h3>
+<p class="description">Get available printer devices.</p>
+<p class="code">
+ipp_status_t cupsGetDevices (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int timeout,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *include_schemes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *exclude_schemes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_device_cb_t callback,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>timeout</dt>
+<dd class="description">Timeout in seconds or <code>CUPS_TIMEOUT_DEFAULT</code></dd>
+<dt>include_schemes</dt>
+<dd class="description">Comma-separated URI schemes to include or <code>CUPS_INCLUDE_ALL</code></dd>
+<dt>exclude_schemes</dt>
+<dd class="description">Comma-separated URI schemes to exclude or <code>CUPS_EXCLUDE_NONE</code></dd>
+<dt>callback</dt>
+<dd class="description">Callback function</dd>
+<dt>user_data</dt>
+<dd class="description">User data pointer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Request status - <code>IPP_OK</code> on success.</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function sends a CUPS-Get-Devices request and streams the discovered
+devices to the specified callback function. The &quot;timeout&quot; parameter controls
+how long the request lasts, while the &quot;include_schemes&quot; and &quot;exclude_schemes&quot;
+parameters provide comma-delimited lists of backends to include or omit from
+the request respectively.
 
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-cupsEncodeOptions2(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    int num_options,
-    cups_option_t * options,
-    ipp_tag_t group_tag);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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'><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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpAddrAny(
-    const <a href='#http_addr_t'>http_addr_t</a> * addr);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpAddrEqual(
-    const <a href='#http_addr_t'>http_addr_t</a> * addr1,
-    const <a href='#http_addr_t'>http_addr_t</a> * addr2);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 not</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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpAddrLength(
-    const <a href='#http_addr_t'>http_addr_t</a> * addr);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpAddrLocalhost(
-    const <a href='#http_addr_t'>http_addr_t</a> * addr);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpAddrLookup(
-    const <a href='#http_addr_t'>http_addr_t</a> * addr,
-    char * name,
-    int namelen);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 address to a numeric string.
-
-
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpAddrString(
-    const <a href='#http_addr_t'>http_addr_t</a> * addr,
-    char * s,
-    int slen);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>Numeric address 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.
-<p>This function escapes reserved characters in the URI depending on the
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/OS X 10.4&nbsp;</span><a name="cupsGetFd">cupsGetFd</a></h3>
+<p class="description">Get a file from the server.</p>
+<p class="code">
+http_status_t cupsGetFd (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int fd<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>resource</dt>
+<dd class="description">Resource name</dd>
+<dt>fd</dt>
+<dd class="description">File descriptor</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">HTTP status</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function returns <code>HTTP_STATUS_OK</code> when the file is successfully retrieved.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/OS X 10.4&nbsp;</span><a name="cupsGetFile">cupsGetFile</a></h3>
+<p class="description">Get a file from the server.</p>
+<p class="code">
+http_status_t cupsGetFile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>resource</dt>
+<dd class="description">Resource name</dd>
+<dt>filename</dt>
+<dd class="description">Filename</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">HTTP status</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function returns <code>HTTP_STATUS_OK</code> when the file is successfully retrieved.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4/OS X 10.6&nbsp;</span><a name="cupsGetResponse">cupsGetResponse</a></h3>
+<p class="description">Get a response to an IPP request.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *cupsGetResponse (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>resource</dt>
+<dd class="description">HTTP resource for POST</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Response or <code>NULL</code> on HTTP error</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Use this function to get the response for an IPP request sent using
+<a href="#cupsSendRequest"><code>cupsSendRequest</code></a>. For requests that return additional data, use
+<a href="#cupsReadResponseData"><code>cupsReadResponseData</code></a> after getting a successful response,
+otherwise call <a href="#httpFlush"><code>httpFlush</code></a> to complete the response processing.
+
+</p>
+<h3 class="function"><a name="cupsLastError">cupsLastError</a></h3>
+<p class="description">Return the last IPP status code received on the current
+thread.</p>
+<p class="code">
+ipp_status_t cupsLastError (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">IPP status code from last request</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="cupsLastErrorString">cupsLastErrorString</a></h3>
+<p class="description">Return the last IPP status-message received on the
+current thread.</p>
+<p class="code">
+const char *cupsLastErrorString (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">status-message text from last request</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/OS X 10.4&nbsp;</span><a name="cupsPutFd">cupsPutFd</a></h3>
+<p class="description">Put a file on the server.</p>
+<p class="code">
+http_status_t cupsPutFd (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int fd<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>resource</dt>
+<dd class="description">Resource name</dd>
+<dt>fd</dt>
+<dd class="description">File descriptor</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">HTTP status</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function returns <code>HTTP_STATUS_CREATED</code> when the file is stored
+successfully.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/OS X 10.4&nbsp;</span><a name="cupsPutFile">cupsPutFile</a></h3>
+<p class="description">Put a file on the server.</p>
+<p class="code">
+http_status_t cupsPutFile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>resource</dt>
+<dd class="description">Resource name</dd>
+<dt>filename</dt>
+<dd class="description">Filename</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">HTTP status</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function returns <code>HTTP_CREATED</code> when the file is stored
+successfully.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4/OS X 10.6&nbsp;</span><a name="cupsReadResponseData">cupsReadResponseData</a></h3>
+<p class="description">Read additional data after the IPP response.</p>
+<p class="code">
+ssize_t cupsReadResponseData (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>buffer</dt>
+<dd class="description">Buffer to use</dd>
+<dt>length</dt>
+<dd class="description">Number of bytes to read</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Bytes read, 0 on EOF, -1 on error</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is used after <a href="#cupsGetResponse"><code>cupsGetResponse</code></a> to read the PPD or document
+files from <code>CUPS_GET_PPD</code> and <code>CUPS_GET_DOCUMENT</code> requests,
+respectively.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4/OS X 10.6&nbsp;</span><a name="cupsSendRequest">cupsSendRequest</a></h3>
+<p class="description">Send an IPP request.</p>
+<p class="code">
+http_status_t cupsSendRequest (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>request</dt>
+<dd class="description">IPP request</dd>
+<dt>resource</dt>
+<dd class="description">Resource path</dd>
+<dt>length</dt>
+<dd class="description">Length of data to follow or <code>CUPS_LENGTH_VARIABLE</code></dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Initial HTTP status</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Use <a href="#cupsWriteRequestData"><code>cupsWriteRequestData</code></a> to write any additional data (document, PPD
+file, etc.) for the request, <a href="#cupsGetResponse"><code>cupsGetResponse</code></a> to get the IPP response,
+and <a href="#cupsReadResponseData"><code>cupsReadResponseData</code></a> to read any additional data following the
+response. Only one request can be sent/queued at a time per <code>http_t</code>
+connection.<br>
+<br>
+Returns the initial HTTP status code, which will be <code>HTTP_STATUS_CONTINUE</code>
+on a successful send of the request.<br>
+<br>
+Note: Unlike <a href="#cupsDoFileRequest"><code>cupsDoFileRequest</code></a>, <a href="#cupsDoIORequest"><code>cupsDoIORequest</code></a>, and
+<a href="#cupsDoRequest"><code>cupsDoRequest</code></a>, the request is NOT freed with <a href="#ippDelete"><code>ippDelete</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4/OS X 10.6&nbsp;</span><a name="cupsWriteRequestData">cupsWriteRequestData</a></h3>
+<p class="description">Write additional data after an IPP request.</p>
+<p class="code">
+http_status_t cupsWriteRequestData (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>buffer</dt>
+<dd class="description">Bytes to write</dd>
+<dt>length</dt>
+<dd class="description">Number of bytes to write</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description"><code>HTTP_STATUS_CONTINUE</code> if OK or HTTP status on error</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is used after <a href="#cupsSendRequest"><code>cupsSendRequest</code></a> to provide a PPD and
+after <a href="#cupsStartDocument"><code>cupsStartDocument</code></a> to provide a document file.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpAcceptConnection">httpAcceptConnection</a></h3>
+<p class="description">Accept a new HTTP client connection from the
+specified listening socket.</p>
+<p class="code">
+<a href="#http_t">http_t</a> *httpAcceptConnection (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int blocking<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>fd</dt>
+<dd class="description">Listen socket file descriptor</dd>
+<dt>blocking</dt>
+<dd class="description">1 if the connection should be
+blocking, 0 otherwise</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">HTTP connection or <code>NULL</code></p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span><a name="httpAddCredential">httpAddCredential</a></h3>
+<p class="description">Allocates and adds a single credential to an array.</p>
+<p class="code">
+int httpAddCredential (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *credentials,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const void *data,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t datalen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>credentials</dt>
+<dd class="description">Credentials array</dd>
+<dt>data</dt>
+<dd class="description">PEM-encoded X.509 data</dd>
+<dt>datalen</dt>
+<dd class="description">Length of data</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 on success, -1 on error</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Use <code>cupsArrayNew(NULL, NULL)</code> to create a credentials array.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpAddrAny">httpAddrAny</a></h3>
+<p class="description">Check for the &quot;any&quot; address.</p>
+<p class="code">
+int httpAddrAny (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>addr</dt>
+<dd class="description">Address to check</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if &quot;any&quot;, 0 otherwise</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpAddrEqual">httpAddrEqual</a></h3>
+<p class="description">Compare two addresses.</p>
+<p class="code">
+int httpAddrEqual (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr1,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr2<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>addr1</dt>
+<dd class="description">First address</dd>
+<dt>addr2</dt>
+<dd class="description">Second address</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if equal, 0 if not</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpAddrLength">httpAddrLength</a></h3>
+<p class="description">Return the length of the address in bytes.</p>
+<p class="code">
+int httpAddrLength (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>addr</dt>
+<dd class="description">Address</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Length in bytes</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpAddrListen">httpAddrListen</a></h3>
+<p class="description">Create a listening socket bound to the specified
+address and port.</p>
+<p class="code">
+int httpAddrListen (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addr_t">http_addr_t</a> *addr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int port<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>addr</dt>
+<dd class="description">Address to bind to</dd>
+<dt>port</dt>
+<dd class="description">Port number to bind to</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Socket or -1 on error</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpAddrLocalhost">httpAddrLocalhost</a></h3>
+<p class="description">Check for the local loopback address.</p>
+<p class="code">
+int httpAddrLocalhost (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>addr</dt>
+<dd class="description">Address to check</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if local host, 0 otherwise</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpAddrLookup">httpAddrLookup</a></h3>
+<p class="description">Lookup the hostname associated with the address.</p>
+<p class="code">
+char *httpAddrLookup (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int namelen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>addr</dt>
+<dd class="description">Address to lookup</dd>
+<dt>name</dt>
+<dd class="description">Host name buffer</dd>
+<dt>namelen</dt>
+<dd class="description">Size of name buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Host name</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpAddrPort">httpAddrPort</a></h3>
+<p class="description">Get the port number associated with an address.</p>
+<p class="code">
+int httpAddrPort (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addr_t">http_addr_t</a> *addr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>addr</dt>
+<dd class="description">Address</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Port number</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpAddrString">httpAddrString</a></h3>
+<p class="description">Convert an address to a numeric string.</p>
+<p class="code">
+char *httpAddrString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *s,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int slen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>addr</dt>
+<dd class="description">Address to convert</dd>
+<dt>s</dt>
+<dd class="description">String buffer</dd>
+<dt>slen</dt>
+<dd class="description">Length of string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Numeric address string</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpAssembleURI">httpAssembleURI</a></h3>
+<p class="description">Assemble a uniform resource identifier from its
+components.</p>
+<p class="code">
+<a href="#http_uri_status_t">http_uri_status_t</a> httpAssembleURI (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_coding_t">http_uri_coding_t</a> encoding,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *uri,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int urilen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *username,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>encoding</dt>
+<dd class="description">Encoding flags</dd>
+<dt>uri</dt>
+<dd class="description">URI buffer</dd>
+<dt>urilen</dt>
+<dd class="description">Size of URI buffer</dd>
+<dt>scheme</dt>
+<dd class="description">Scheme name</dd>
+<dt>username</dt>
+<dd class="description">Username</dd>
+<dt>host</dt>
+<dd class="description">Hostname or address</dd>
+<dt>port</dt>
+<dd class="description">Port number</dd>
+<dt>resource</dt>
+<dd class="description">Resource</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">URI status</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function escapes reserved characters in the URI depending on the
 value of the &quot;encoding&quot; argument.  You should use this function in
 place of traditional string functions whenever you need to create a
 URI string.
 
-
-<h4>Syntax</h4>
-<p><tt>
-http_uri_status_t<br>
-httpAssembleURI(
-    http_uri_coding_t encoding,
-    char * uri,
-    int urilen,
-    const char * scheme,
-    const char * username,
-    const char * host,
-    int port,
-    const char * resource);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>encoding</tt></td><td>Encoding flags</td></tr>
-<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.
-<p>This function creates a formatted version of the resource string
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpAssembleURIf">httpAssembleURIf</a></h3>
+<p class="description">Assemble a uniform resource identifier from its
+components with a formatted resource.</p>
+<p class="code">
+<a href="#http_uri_status_t">http_uri_status_t</a> httpAssembleURIf (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_coding_t">http_uri_coding_t</a> encoding,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *uri,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int urilen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *username,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resourcef,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;...<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>encoding</dt>
+<dd class="description">Encoding flags</dd>
+<dt>uri</dt>
+<dd class="description">URI buffer</dd>
+<dt>urilen</dt>
+<dd class="description">Size of URI buffer</dd>
+<dt>scheme</dt>
+<dd class="description">Scheme name</dd>
+<dt>username</dt>
+<dd class="description">Username</dd>
+<dt>host</dt>
+<dd class="description">Hostname or address</dd>
+<dt>port</dt>
+<dd class="description">Port number</dd>
+<dt>resourcef</dt>
+<dd class="description">Printf-style resource</dd>
+<dt>...</dt>
+<dd class="description">Additional arguments as needed</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">URI status</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function creates a formatted version of the resource string
 argument &quot;resourcef&quot; and escapes reserved characters in the URI
 depending on the value of the &quot;encoding&quot; argument.  You should use
 this function in place of traditional string functions whenever
 you need to create a URI string.
 
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpAssembleUUID">httpAssembleUUID</a></h3>
+<p class="description">Assemble a name-based UUID URN conforming to RFC 4122.</p>
+<p class="code">
+char *httpAssembleUUID (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *server,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int number,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t bufsize<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>server</dt>
+<dd class="description">Server name</dd>
+<dt>port</dt>
+<dd class="description">Port number</dd>
+<dt>name</dt>
+<dd class="description">Object name or NULL</dd>
+<dt>number</dt>
+<dd class="description">Object number or 0</dd>
+<dt>buffer</dt>
+<dd class="description">String buffer</dd>
+<dt>bufsize</dt>
+<dd class="description">Size of buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">UUID string</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function creates a unique 128-bit identifying number using the server
+name, port number, random data, and optionally an object name and/or object
+number.  The result is formatted as a UUID URN as defined in RFC 4122.<br>
+<br>
+The buffer needs to be at least 46 bytes in size.
 
-<h4>Syntax</h4>
-<p><tt>
-http_uri_status_t<br>
-httpAssembleURIf(
-    http_uri_coding_t encoding,
-    char * uri,
-    int urilen,
-    const char * scheme,
-    const char * username,
-    const char * host,
-    int port,
-    const char * resourcef,
-    ...);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>encoding</tt></td><td>Encoding flags</td></tr>
-<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='httpBlocking'>httpBlocking()</a></h3>
-<h4>Description</h4>
-<p>Set blocking/non-blocking behavior on a connection.
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpBlocking(
-    <a href='#http_t'>http_t</a> * http,
-    int b);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>b</tt></td><td>1 = blocking, 0 = non-blocking</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>Nothing.</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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpCheck(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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).
-
-
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpClearCookie(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>Nothing.</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='httpClearFields'>httpClearFields()</a></h3>
-<h4>Description</h4>
-<p>Clear HTTP request fields.
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpClearFields(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>Nothing.</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='httpClose'>httpClose()</a></h3>
-<h4>Description</h4>
-<p>Close an HTTP connection...
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpClose(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>Nothing.</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='httpConnect'>httpConnect()</a></h3>
-<h4>Description</h4>
-<p>Connect to a HTTP server.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#http_t'>http_t</a> *<br>
-httpConnect(
-    const char * host,
-    int port);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#http_t'>http_t</a> *<br>
-httpConnectEncrypt(
-    const char * host,
-    int port,
-    <a href='#http_encryption_t'>http_encryption_t</a> encryption);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpDecode64'>httpDecode64()</a></h3>
-<h4>Description</h4>
-<p>Base64-decode a string.
-<p>This function is deprecated. Use the httpDecode64_2() function instead
-which provides buffer length arguments.
+</p>
+<h3 class="function"><a name="httpBlocking">httpBlocking</a></h3>
+<p class="description">Set blocking/non-blocking behavior on a connection.</p>
+<p class="code">
+void httpBlocking (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int b<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>b</dt>
+<dd class="description">1 = blocking, 0 = non-blocking</dd>
+</dl>
+<h3 class="function"><a name="httpCheck">httpCheck</a></h3>
+<p class="description">Check to see if there is a pending response from the server.</p>
+<p class="code">
+int httpCheck (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 = no data, 1 = data available</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/OS X 10.3&nbsp;</span><a name="httpClearCookie">httpClearCookie</a></h3>
+<p class="description">Clear the cookie value(s).</p>
+<p class="code">
+void httpClearCookie (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h3 class="function"><a name="httpClearFields">httpClearFields</a></h3>
+<p class="description">Clear HTTP request fields.</p>
+<p class="code">
+void httpClearFields (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h3 class="function"><a name="httpClose">httpClose</a></h3>
+<p class="description">Close an HTTP connection.</p>
+<p class="code">
+void httpClose (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpConnect">httpConnect</a></h3>
+<p class="description">Connect to a HTTP server.</p>
+<p class="code">
+<a href="#http_t">http_t</a> *httpConnect (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int port<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>host</dt>
+<dd class="description">Host to connect to</dd>
+<dt>port</dt>
+<dd class="description">Port number</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New HTTP connection</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is deprecated - use <a href="#httpConnect2"><code>httpConnect2</code></a> instead.
 
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpConnect2">httpConnect2</a></h3>
+<p class="description">Connect to a HTTP server.</p>
+<p class="code">
+<a href="#http_t">http_t</a> *httpConnect2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addrlist_t">http_addrlist_t</a> *addrlist,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int family,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_encryption_t">http_encryption_t</a> encryption,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int blocking,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int msec,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *cancel<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>host</dt>
+<dd class="description">Host to connect to</dd>
+<dt>port</dt>
+<dd class="description">Port number</dd>
+<dt>addrlist</dt>
+<dd class="description">List of addresses or NULL to lookup</dd>
+<dt>family</dt>
+<dd class="description">Address family to use or <code>AF_UNSPEC</code> for any</dd>
+<dt>encryption</dt>
+<dd class="description">Type of encryption to use</dd>
+<dt>blocking</dt>
+<dd class="description">1 for blocking connection, 0 for non-blocking</dd>
+<dt>msec</dt>
+<dd class="description">Connection timeout in milliseconds, 0 means don't connect</dd>
+<dt>cancel</dt>
+<dd class="description">Pointer to &quot;cancel&quot; variable</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New HTTP connection</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpConnectEncrypt">httpConnectEncrypt</a></h3>
+<p class="description">Connect to a HTTP server using encryption.</p>
+<p class="code">
+<a href="#http_t">http_t</a> *httpConnectEncrypt (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_encryption_t">http_encryption_t</a> encryption<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>host</dt>
+<dd class="description">Host to connect to</dd>
+<dt>port</dt>
+<dd class="description">Port number</dd>
+<dt>encryption</dt>
+<dd class="description">Type of encryption to use</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New HTTP connection</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is now deprecated. Please use the <a href="#httpConnect2"><code>httpConnect2</code></a> function
+instead.
 
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpDecode64(
-    char * out,
-    const char * in);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpDecode64_2(
-    char * out,
-    int * outlen,
-    const char * in);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpDelete(
-    <a href='#http_t'>http_t</a> * http,
-    const char * uri);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpEncode64'>httpEncode64()</a></h3>
-<h4>Description</h4>
-<p>Base64-encode a string.
-<p>This function is deprecated. Use the httpEncode64_2() function instead
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span><a name="httpCopyCredentials">httpCopyCredentials</a></h3>
+<p class="description">Copy the credentials associated with an encrypted
+connection.</p>
+<p class="code">
+int httpCopyCredentials (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t **credentials<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>credentials</dt>
+<dd class="description">Array of credentials</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpDecode64">httpDecode64</a></h3>
+<p class="description">Base64-decode a string.</p>
+<p class="code">
+char *httpDecode64 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *in<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>out</dt>
+<dd class="description">String to write to</dd>
+<dt>in</dt>
+<dd class="description">String to read from</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Decoded string</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is deprecated. Use the httpDecode64_2() function instead
 which provides buffer length arguments.
 
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/OS X 10.4&nbsp;</span><a name="httpDecode64_2">httpDecode64_2</a></h3>
+<p class="description">Base64-decode a string.</p>
+<p class="code">
+char *httpDecode64_2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *outlen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *in<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>out</dt>
+<dd class="description">String to write to</dd>
+<dt>outlen</dt>
+<dd class="description">Size of output string</dd>
+<dt>in</dt>
+<dd class="description">String to read from</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Decoded string</p>
+<h3 class="function"><a name="httpDelete">httpDelete</a></h3>
+<p class="description">Send a DELETE request to the server.</p>
+<p class="code">
+int httpDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>uri</dt>
+<dd class="description">URI to delete</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpEncode64">httpEncode64</a></h3>
+<p class="description">Base64-encode a string.</p>
+<p class="code">
+char *httpEncode64 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *in<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>out</dt>
+<dd class="description">String to write to</dd>
+<dt>in</dt>
+<dd class="description">String to read from</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Encoded string</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is deprecated. Use the httpEncode64_2() function instead
+which provides buffer length arguments.
 
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpEncode64(
-    char * out,
-    const char * in);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpEncode64_2(
-    char * out,
-    int outlen,
-    const char * in,
-    int inlen);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpEncryption(
-    <a href='#http_t'>http_t</a> * http,
-    <a href='#http_encryption_t'>http_encryption_t</a> e);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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='httpError'>httpError()</a></h3>
-<h4>Description</h4>
-<p>Get the last error on a connection.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpError(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>Error code (errno) value</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='httpFlush'>httpFlush()</a></h3>
-<h4>Description</h4>
-<p>Flush data from a HTTP connection.
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpFlush(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpFlushWrite(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpGet(
-    <a href='#http_t'>http_t</a> * http,
-    const char * uri);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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;CUPS 1.3&nbsp;</span><a name='httpGetAuthString'>httpGetAuthString()</a></h3>
-<h4>Description</h4>
-<p>Get the current authorization string.
-<p>The authorization string is set by cupsDoAuthentication() and
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/OS X 10.4&nbsp;</span><a name="httpEncode64_2">httpEncode64_2</a></h3>
+<p class="description">Base64-encode a string.</p>
+<p class="code">
+char *httpEncode64_2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int outlen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *in,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int inlen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>out</dt>
+<dd class="description">String to write to</dd>
+<dt>outlen</dt>
+<dd class="description">Size of output string</dd>
+<dt>in</dt>
+<dd class="description">String to read from</dd>
+<dt>inlen</dt>
+<dd class="description">Size of input string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Encoded string</p>
+<h3 class="function"><a name="httpEncryption">httpEncryption</a></h3>
+<p class="description">Set the required encryption on the link.</p>
+<p class="code">
+int httpEncryption (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_encryption_t">http_encryption_t</a> e<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>e</dt>
+<dd class="description">New encryption preference</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">-1 on error, 0 on success</p>
+<h3 class="function"><a name="httpError">httpError</a></h3>
+<p class="description">Get the last error on a connection.</p>
+<p class="code">
+int httpError (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Error code (errno) value</p>
+<h3 class="function"><a name="httpFlush">httpFlush</a></h3>
+<p class="description">Flush data from a HTTP connection.</p>
+<p class="code">
+void httpFlush (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpFlushWrite">httpFlushWrite</a></h3>
+<p class="description">Flush data in write buffer.</p>
+<p class="code">
+int httpFlushWrite (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Bytes written or -1 on error</p>
+<h3 class="function"><a name="httpFreeCredentials">httpFreeCredentials</a></h3>
+<p class="description">Free an array of credentials.</p>
+<p class="code">
+void httpFreeCredentials (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *credentials<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>credentials</dt>
+<dd class="description">Array of credentials</dd>
+</dl>
+<h3 class="function"><a name="httpGet">httpGet</a></h3>
+<p class="description">Send a GET request to the server.</p>
+<p class="code">
+int httpGet (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>uri</dt>
+<dd class="description">URI to get</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.3/OS X 10.5&nbsp;</span><a name="httpGetAuthString">httpGetAuthString</a></h3>
+<p class="description">Get the current authorization string.</p>
+<p class="code">
+char *httpGetAuthString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Authorization string</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The authorization string is set by cupsDoAuthentication() and
 httpSetAuthString().  Use httpGetAuthString() to retrieve the
 string to use with httpSetField() for the HTTP_FIELD_AUTHORIZATION
 value.
 
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpGetBlocking">httpGetBlocking</a></h3>
+<p class="description">Get the blocking/non-block state of a connection.</p>
+<p class="code">
+int httpGetBlocking (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if blocking, 0 if non-blocking</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpGetContentEncoding">httpGetContentEncoding</a></h3>
+<p class="description">Get a common content encoding, if any, between
+the client and server.</p>
+<p class="code">
+const char *httpGetContentEncoding (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to client/server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Content-Coding value or
+<code>NULL</code> for the identity
+coding.</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function uses the value of the Accepts-Encoding HTTP header and must be
+called after receiving a response from the server or a request from the
+client.  The value returned can be use in subsequent requests (for clients)
+or in the response (for servers) in order to compress the content stream.
 
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpGetAuthString(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>Authorization string</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetBlocking'>httpGetBlocking()</a></h3>
-<h4>Description</h4>
-<p>Get the blocking/non-block state of a connection.
-
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpGetBlocking(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>1 if blocking, 0 if non-blocking</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpGetCookie'>httpGetCookie()</a></h3>
-<h4>Description</h4>
-<p>Get any cookie data from the response.
-
-
-<h4>Syntax</h4>
-<p><tt>
-const char *<br>
-httpGetCookie(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>http</tt></td><td>HTTP connecion</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>Cookie data or NULL</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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-const char *<br>
-httpGetDateString(
-    time_t t);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-const char *<br>
-httpGetDateString2(
-    time_t t,
-    char * s,
-    int slen);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-time_t<br>
-httpGetDateTime(
-    const char * s);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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;CUPS 1.2&nbsp;</span><a name='httpGetFd'>httpGetFd()</a></h3>
-<h4>Description</h4>
-<p>Get the file descriptor associated with a connection.
-
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpGetFd(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>File descriptor or -1 if none</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='httpGetField'>httpGetField()</a></h3>
-<h4>Description</h4>
-<p>Get a field value from a request/response.
-<h4>Syntax</h4>
-<p><tt>
-const char *<br>
-httpGetField(
-    <a href='#http_t'>http_t</a> * http,
-    http_field_t field);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>field</tt></td><td>Field to get</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>Field value</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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-struct hostent *<br>
-httpGetHostByName(
-    const char * name);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 connection or local system.
-<p>When &quot;http&quot; points to a connected socket, return the hostname or
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/OS X 10.3&nbsp;</span><a name="httpGetCookie">httpGetCookie</a></h3>
+<p class="description">Get any cookie data from the response.</p>
+<p class="code">
+const char *httpGetCookie (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">HTTP connecion</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Cookie data or NULL</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetDateString">httpGetDateString</a></h3>
+<p class="description">Get a formatted date/time string from a time value.</p>
+<p class="code">
+const char *httpGetDateString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;time_t t<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>t</dt>
+<dd class="description">UNIX time</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Date/time string</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpGetDateString2">httpGetDateString2</a></h3>
+<p class="description">Get a formatted date/time string from a time value.</p>
+<p class="code">
+const char *httpGetDateString2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;time_t t,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *s,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int slen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>t</dt>
+<dd class="description">UNIX time</dd>
+<dt>s</dt>
+<dd class="description">String buffer</dd>
+<dt>slen</dt>
+<dd class="description">Size of string buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Date/time string</p>
+<h3 class="function"><a name="httpGetDateTime">httpGetDateTime</a></h3>
+<p class="description">Get a time value from a formatted date/time string.</p>
+<p class="code">
+time_t httpGetDateTime (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>s</dt>
+<dd class="description">Date/time string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">UNIX time</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpGetExpect">httpGetExpect</a></h3>
+<p class="description">Get the value of the Expect header, if any.</p>
+<p class="code">
+http_status_t httpGetExpect (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to client</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Expect: status, if any</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns <code>HTTP_STATUS_NONE</code> if there is no Expect header, otherwise
+returns the expected HTTP status code, typically <code>HTTP_STATUS_CONTINUE</code>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpGetFd">httpGetFd</a></h3>
+<p class="description">Get the file descriptor associated with a connection.</p>
+<p class="code">
+int httpGetFd (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">File descriptor or -1 if none</p>
+<h3 class="function"><a name="httpGetField">httpGetField</a></h3>
+<p class="description">Get a field value from a request/response.</p>
+<p class="code">
+const char *httpGetField (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>field</dt>
+<dd class="description">Field to get</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Field value</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetHostByName">httpGetHostByName</a></h3>
+<p class="description">Lookup a hostname or IPv4 address, and return
+address records for the specified name.</p>
+<p class="code">
+struct hostent *httpGetHostByName (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Hostname or IP address</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Host entry</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpGetHostname">httpGetHostname</a></h3>
+<p class="description">Get the FQDN for the connection or local system.</p>
+<p class="code">
+const char *httpGetHostname (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *s,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int slen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">HTTP connection or NULL</dd>
+<dt>s</dt>
+<dd class="description">String buffer for name</dd>
+<dt>slen</dt>
+<dd class="description">Size of buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">FQDN for connection or system</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">When &quot;http&quot; points to a connected socket, return the hostname or
 address that was used in the call to httpConnect() or httpConnectEncrypt().
 Otherwise, return the FQDN for the local system using both gethostname()
 and gethostbyname() to get the local hostname with domain.
 
-
-<h4>Syntax</h4>
-<p><tt>
-const char *<br>
-httpGetHostname(
-    <a href='#http_t'>http_t</a> * http,
-    char * s,
-    int slen);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>http</tt></td><td>HTTP connection or NULL</td></tr>
-<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 connection or system</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;DEPRECATED&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.
-<p>This function is deprecated and will not return lengths larger than
+</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetLength">httpGetLength</a></h3>
+<p class="description">Get the amount of data remaining from the
+content-length or transfer-encoding fields.</p>
+<p class="code">
+int httpGetLength (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Content length</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is deprecated and will not return lengths larger than
 2^31 - 1; use httpGetLength2() instead.
 
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpGetLength(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>Content length</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetLength2'>httpGetLength2()</a></h3>
-<h4>Description</h4>
-<p>Get the amount of data remaining from the
-content-length or transfer-encoding fields.
-<p>This function returns the complete content length, even for
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpGetLength2">httpGetLength2</a></h3>
+<p class="description">Get the amount of data remaining from the
+content-length or transfer-encoding fields.</p>
+<p class="code">
+off_t httpGetLength2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Content length</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function returns the complete content length, even for
 content larger than 2^31 - 1.
 
-
-<h4>Syntax</h4>
-<p><tt>
-off_t<br>
-httpGetLength2(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>Content length</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetStatus'>httpGetStatus()</a></h3>
-<h4>Description</h4>
-<p>Get the status of the last HTTP request.
-
-
-<h4>Syntax</h4>
-<p><tt>
-http_status_t<br>
-httpGetStatus(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>HTTP status</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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpGetSubField(
-    <a href='#http_t'>http_t</a> * http,
-    http_field_t field,
-    const char * name,
-    char * value);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpGetSubField2(
-    <a href='#http_t'>http_t</a> * http,
-    http_field_t field,
-    const char * name,
-    char * value,
-    int valuelen);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpGets(
-    char * line,
-    int length,
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 connection</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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpHead(
-    <a href='#http_t'>http_t</a> * http,
-    const char * uri);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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).
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpInitialize(void);
-</tt></p>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpMD5(
-    const char * username,
-    const char * realm,
-    const char * passwd,
-    char md5[33]);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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
+</p>
+<h3 class="function"><a name="httpGetState">httpGetState</a></h3>
+<p class="description">Get the current state of the HTTP request.</p>
+<p class="code">
+<a href="#http_state_t">http_state_t</a> httpGetState (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">HTTP state</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpGetStatus">httpGetStatus</a></h3>
+<p class="description">Get the status of the last HTTP request.</p>
+<p class="code">
+http_status_t httpGetStatus (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">HTTP status</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetSubField">httpGetSubField</a></h3>
+<p class="description">Get a sub-field value.</p>
+<p class="code">
+char *httpGetSubField (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>field</dt>
+<dd class="description">Field index</dd>
+<dt>name</dt>
+<dd class="description">Name of sub-field</dd>
+<dt>value</dt>
+<dd class="description">Value string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Value or NULL</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpGetSubField2">httpGetSubField2</a></h3>
+<p class="description">Get a sub-field value.</p>
+<p class="code">
+char *httpGetSubField2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *value,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int valuelen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>field</dt>
+<dd class="description">Field index</dd>
+<dt>name</dt>
+<dd class="description">Name of sub-field</dd>
+<dt>value</dt>
+<dd class="description">Value string</dd>
+<dt>valuelen</dt>
+<dd class="description">Size of value buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Value or NULL</p>
+<h3 class="function"><a name="httpGetVersion">httpGetVersion</a></h3>
+<p class="description">Get the HTTP version at the other end.</p>
+<p class="code">
+<a href="#http_version_t">http_version_t</a> httpGetVersion (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Version number</p>
+<h3 class="function"><a name="httpGets">httpGets</a></h3>
+<p class="description">Get a line of text from a HTTP connection.</p>
+<p class="code">
+char *httpGets (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *line,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int length,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>line</dt>
+<dd class="description">Line to read into</dd>
+<dt>length</dt>
+<dd class="description">Max length of buffer</dd>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Line or NULL</p>
+<h3 class="function"><a name="httpHead">httpHead</a></h3>
+<p class="description">Send a HEAD request to the server.</p>
+<p class="code">
+int httpHead (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>uri</dt>
+<dd class="description">URI for head</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status of call (0 = success)</p>
+<h3 class="function"><a name="httpInitialize">httpInitialize</a></h3>
+<p class="description">Initialize the HTTP interface library and set the
+default HTTP proxy (if any).</p>
+<p class="code">
+void httpInitialize (void);</p>
+<h3 class="function"><a name="httpMD5">httpMD5</a></h3>
+<p class="description">Compute the MD5 sum of the username:group:password.</p>
+<p class="code">
+char *httpMD5 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *username,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *realm,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *passwd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char md5[33]<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>username</dt>
+<dd class="description">User name</dd>
+<dt>realm</dt>
+<dd class="description">Realm name</dd>
+<dt>passwd</dt>
+<dd class="description">Password string</dd>
+<dt>md5[33]</dt>
+<dd class="description">MD5 string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">MD5 sum</p>
+<h3 class="function"><a name="httpMD5Final">httpMD5Final</a></h3>
+<p class="description">Combine the MD5 sum of the username, group, and password
 with the server-supplied nonce value, method, and
-request-uri.
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpMD5Final(
-    const char * nonce,
-    const char * method,
-    const char * resource,
-    char md5[33]);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-char *<br>
-httpMD5String(
-    const unsigned char * sum,
-    char md5[33]);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpOptions(
-    <a href='#http_t'>http_t</a> * http,
-    const char * uri);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpPost(
-    <a href='#http_t'>http_t</a> * http,
-    const char * uri);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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='httpPut'>httpPut()</a></h3>
-<h4>Description</h4>
-<p>Send a PUT request to the server.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpPut(
-    <a href='#http_t'>http_t</a> * http,
-    const char * uri);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpRead'>httpRead()</a></h3>
-<h4>Description</h4>
-<p>Read data from a HTTP connection.
-<p>This function is deprecated. Use the httpRead2() function which can
+request-uri.</p>
+<p class="code">
+char *httpMD5Final (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *nonce,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *method,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char md5[33]<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>nonce</dt>
+<dd class="description">Server nonce value</dd>
+<dt>method</dt>
+<dd class="description">METHOD (GET, POST, etc.)</dd>
+<dt>resource</dt>
+<dd class="description">Resource path</dd>
+<dt>md5[33]</dt>
+<dd class="description">MD5 sum</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New sum</p>
+<h3 class="function"><a name="httpMD5String">httpMD5String</a></h3>
+<p class="description">Convert an MD5 sum to a character string.</p>
+<p class="code">
+char *httpMD5String (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *sum,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char md5[33]<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>sum</dt>
+<dd class="description">MD5 sum data</dd>
+<dt>md5[33]</dt>
+<dd class="description">MD5 sum in hex</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">MD5 sum in hex</p>
+<h3 class="function"><a name="httpOptions">httpOptions</a></h3>
+<p class="description">Send an OPTIONS request to the server.</p>
+<p class="code">
+int httpOptions (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>uri</dt>
+<dd class="description">URI for options</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpPeek">httpPeek</a></h3>
+<p class="description">Peek at data from a HTTP connection.</p>
+<p class="code">
+ssize_t httpPeek (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>buffer</dt>
+<dd class="description">Buffer for data</dd>
+<dt>length</dt>
+<dd class="description">Maximum number of bytes</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of bytes copied</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function copies available data from the given HTTP connection, reading
+a buffer as needed.  The data is still available for reading using
+<a href="#httpRead"><code>httpRead</code></a> or <a href="#httpRead2"><code>httpRead2</code></a>.<br>
+<br>
+For non-blocking connections the usual timeouts apply.
+
+</p>
+<h3 class="function"><a name="httpPost">httpPost</a></h3>
+<p class="description">Send a POST request to the server.</p>
+<p class="code">
+int httpPost (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>uri</dt>
+<dd class="description">URI for post</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status of call (0 = success)</p>
+<h3 class="function"><a name="httpPut">httpPut</a></h3>
+<p class="description">Send a PUT request to the server.</p>
+<p class="code">
+int httpPut (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>uri</dt>
+<dd class="description">URI to put</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpRead">httpRead</a></h3>
+<p class="description">Read data from a HTTP connection.</p>
+<p class="code">
+int httpRead (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>buffer</dt>
+<dd class="description">Buffer for data</dd>
+<dt>length</dt>
+<dd class="description">Maximum number of bytes</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of bytes read</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is deprecated. Use the httpRead2() function which can
 read more than 2GB of data.
 
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpRead2">httpRead2</a></h3>
+<p class="description">Read data from a HTTP connection.</p>
+<p class="code">
+ssize_t httpRead2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>buffer</dt>
+<dd class="description">Buffer for data</dd>
+<dt>length</dt>
+<dd class="description">Maximum number of bytes</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of bytes read</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpReadRequest">httpReadRequest</a></h3>
+<p class="description">Read a HTTP request from a connection.</p>
+<p class="code">
+<a href="#http_state_t">http_state_t</a> httpReadRequest (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *uri,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t urilen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">HTTP connection</dd>
+<dt>uri</dt>
+<dd class="description">URI buffer</dd>
+<dt>urilen</dt>
+<dd class="description">Size of URI buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New state of connection</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpReconnect">httpReconnect</a></h3>
+<p class="description">Reconnect to a HTTP server.</p>
+<p class="code">
+int httpReconnect (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 on success, non-zero on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is deprecated. Please use the <a href="#httpReconnect2"><code>httpReconnect2</code></a> function
+instead.
 
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpRead(
-    <a href='#http_t'>http_t</a> * http,
-    char * buffer,
-    int length);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpRead2'>httpRead2()</a></h3>
-<h4>Description</h4>
-<p>Read data from a HTTP connection.
-
-
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ssize_t'>ssize_t</a><br>
-httpRead2(
-    <a href='#http_t'>http_t</a> * http,
-    char * buffer,
-    size_t length);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpReconnect(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 on success, non-zero on failure</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpSeparate'>httpSeparate()</a></h3>
-<h4>Description</h4>
-<p>Separate a Universal Resource Identifier into its
-components.
-<p>This function is deprecated; use the httpSeparateURI() function instead.
-
-
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpSeparate(
-    const char * uri,
-    char * scheme,
-    char * username,
-    char * host,
-    int * port,
-    char * resource);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>This function is deprecated; use the httpSeparateURI() function instead.
-
-
-
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpSeparate2(
-    const char * uri,
-    char * scheme,
-    int schemelen,
-    char * username,
-    int usernamelen,
-    char * host,
-    int hostlen,
-    int * port,
-    char * resource,
-    int resourcelen);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-http_uri_status_t<br>
-httpSeparateURI(
-    http_uri_coding_t decoding,
-    const char * uri,
-    char * scheme,
-    int schemelen,
-    char * username,
-    int usernamelen,
-    char * host,
-    int hostlen,
-    int * port,
-    char * resource,
-    int resourcelen);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>decoding</tt></td><td>Decoding flags</td></tr>
-<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.3&nbsp;</span><a name='httpSetAuthString'>httpSetAuthString()</a></h3>
-<h4>Description</h4>
-<p>Set the current authorization string.
-<p>This function just stores a copy of the current authorization string in
+</p>
+<h3 class="function"><a name="httpReconnect2">httpReconnect2</a></h3>
+<p class="description">Reconnect to a HTTP server with timeout and optional
+cancel.</p>
+<p class="code">
+int httpReconnect2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int msec,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *cancel<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>msec</dt>
+<dd class="description">Timeout in milliseconds</dd>
+<dt>cancel</dt>
+<dd class="description">Pointer to &quot;cancel&quot; variable</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 on success, non-zero on failure</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpSeparate">httpSeparate</a></h3>
+<p class="description">Separate a Universal Resource Identifier into its
+components.</p>
+<p class="code">
+void httpSeparate (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *scheme,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *username,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *host,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *port,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *resource<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>uri</dt>
+<dd class="description">Universal Resource Identifier</dd>
+<dt>scheme</dt>
+<dd class="description">Scheme [32] (http, https, etc.)</dd>
+<dt>username</dt>
+<dd class="description">Username [1024]</dd>
+<dt>host</dt>
+<dd class="description">Hostname [1024]</dd>
+<dt>port</dt>
+<dd class="description">Port number to use</dd>
+<dt>resource</dt>
+<dd class="description">Resource/filename [1024]</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is deprecated; use the httpSeparateURI() function instead.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/OS X 10.4&nbsp;</span><a name="httpSeparate2">httpSeparate2</a></h3>
+<p class="description">Separate a Universal Resource Identifier into its
+components.</p>
+<p class="code">
+void httpSeparate2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *scheme,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int schemelen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *username,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int usernamelen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *host,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int hostlen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *port,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int resourcelen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>uri</dt>
+<dd class="description">Universal Resource Identifier</dd>
+<dt>scheme</dt>
+<dd class="description">Scheme (http, https, etc.)</dd>
+<dt>schemelen</dt>
+<dd class="description">Size of scheme buffer</dd>
+<dt>username</dt>
+<dd class="description">Username</dd>
+<dt>usernamelen</dt>
+<dd class="description">Size of username buffer</dd>
+<dt>host</dt>
+<dd class="description">Hostname</dd>
+<dt>hostlen</dt>
+<dd class="description">Size of hostname buffer</dd>
+<dt>port</dt>
+<dd class="description">Port number to use</dd>
+<dt>resource</dt>
+<dd class="description">Resource/filename</dd>
+<dt>resourcelen</dt>
+<dd class="description">Size of resource buffer</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is deprecated; use the httpSeparateURI() function instead.
+
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpSeparateURI">httpSeparateURI</a></h3>
+<p class="description">Separate a Universal Resource Identifier into its
+components.</p>
+<p class="code">
+<a href="#http_uri_status_t">http_uri_status_t</a> httpSeparateURI (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_coding_t">http_uri_coding_t</a> decoding,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *scheme,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int schemelen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *username,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int usernamelen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *host,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int hostlen,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *port,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *resource,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int resourcelen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>decoding</dt>
+<dd class="description">Decoding flags</dd>
+<dt>uri</dt>
+<dd class="description">Universal Resource Identifier</dd>
+<dt>scheme</dt>
+<dd class="description">Scheme (http, https, etc.)</dd>
+<dt>schemelen</dt>
+<dd class="description">Size of scheme buffer</dd>
+<dt>username</dt>
+<dd class="description">Username</dd>
+<dt>usernamelen</dt>
+<dd class="description">Size of username buffer</dd>
+<dt>host</dt>
+<dd class="description">Hostname</dd>
+<dt>hostlen</dt>
+<dd class="description">Size of hostname buffer</dd>
+<dt>port</dt>
+<dd class="description">Port number to use</dd>
+<dt>resource</dt>
+<dd class="description">Resource/filename</dd>
+<dt>resourcelen</dt>
+<dd class="description">Size of resource buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Result of separation</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.3/OS X 10.5&nbsp;</span><a name="httpSetAuthString">httpSetAuthString</a></h3>
+<p class="description">Set the current authorization string.</p>
+<p class="code">
+void httpSetAuthString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *data<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>scheme</dt>
+<dd class="description">Auth scheme (NULL to clear it)</dd>
+<dt>data</dt>
+<dd class="description">Auth data (NULL for none)</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function just stores a copy of the current authorization string in
 the HTTP connection object.  You must still call httpSetField() to set
 HTTP_FIELD_AUTHORIZATION prior to issuing a HTTP request using httpGet(),
 httpHead(), httpOptions(), httpPost, or httpPut().
 
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/OS X 10.3&nbsp;</span><a name="httpSetCookie">httpSetCookie</a></h3>
+<p class="description">Set the cookie value(s).</p>
+<p class="code">
+void httpSetCookie (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *cookie<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection</dd>
+<dt>cookie</dt>
+<dd class="description">Cookie string</dd>
+</dl>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span><a name="httpSetCredentials">httpSetCredentials</a></h3>
+<p class="description">Set the credentials associated with an encrypted
+connection.</p>
+<p class="code">
+int httpSetCredentials (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *credentials<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>credentials</dt>
+<dd class="description">Array of credentials</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpSetDefaultField">httpSetDefaultField</a></h3>
+<p class="description">Set the default value of an HTTP header.</p>
+<p class="code">
+void httpSetDefaultField (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>field</dt>
+<dd class="description">Field index</dd>
+<dt>value</dt>
+<dd class="description">Value</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Currently only <code>HTTP_FIELD_ACCEPT_ENCODING</code>, <code>HTTP_FIELD_SERVER</code>,
+and <code>HTTP_FIELD_USER_AGENT</code> can be set.
 
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpSetAuthString(
-    <a href='#http_t'>http_t</a> * http,
-    const char * scheme,
-    const char * data);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>scheme</tt></td><td>Auth scheme (NULL to clear it)</td></tr>
-<tr><td><tt>data</tt></td><td>Auth data (NULL for none)</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='httpSetCookie'>httpSetCookie()</a></h3>
-<h4>Description</h4>
-<p>Set the cookie value(s)...
-
-
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpSetCookie(
-    <a href='#http_t'>http_t</a> * http,
-    const char * cookie);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpSetExpect'>httpSetExpect()</a></h3>
-<h4>Description</h4>
-<p>Set the Expect: header in a request.
-<p>Currently only HTTP_CONTINUE is supported for the &quot;expect&quot; argument.
-
-
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpSetExpect(
-    <a href='#http_t'>http_t</a> * http,
-    http_status_t expect);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>expect</tt></td><td>HTTP status to expect (HTTP_CONTINUE)</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.
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpSetField(
-    <a href='#http_t'>http_t</a> * http,
-    http_field_t field,
-    const char * value);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-httpSetLength(
-    <a href='#http_t'>http_t</a> * http,
-    size_t length);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-<h4>Syntax</h4>
-<p><tt>
-const char *<br>
-httpStatus(
-    http_status_t status);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpTrace(
-    <a href='#http_t'>http_t</a> * http,
-    const char * uri);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-<h4>Syntax</h4>
-<p><tt>
-http_status_t<br>
-httpUpdate(
-    <a href='#http_t'>http_t</a> * http);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpWait(
-    <a href='#http_t'>http_t</a> * http,
-    int msec);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpWrite'>httpWrite()</a></h3>
-<h4>Description</h4>
-<p>Write data to a HTTP connection.
-<p>This function is deprecated. Use the httpWrite2() function which can
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpSetExpect">httpSetExpect</a></h3>
+<p class="description">Set the Expect: header in a request.</p>
+<p class="code">
+void httpSetExpect (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_status_t expect<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>expect</dt>
+<dd class="description">HTTP status to expect
+(<code>HTTP_STATUS_CONTINUE</code>)</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Currently only <code>HTTP_STATUS_CONTINUE</code> is supported for the &quot;expect&quot;
+argument.
+
+</p>
+<h3 class="function"><a name="httpSetField">httpSetField</a></h3>
+<p class="description">Set the value of an HTTP header.</p>
+<p class="code">
+void httpSetField (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>field</dt>
+<dd class="description">Field index</dd>
+<dt>value</dt>
+<dd class="description">Value</dd>
+</dl>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpSetLength">httpSetLength</a></h3>
+<p class="description">Set the content-length and content-encoding.</p>
+<p class="code">
+void httpSetLength (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>length</dt>
+<dd class="description">Length (0 for chunked)</dd>
+</dl>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span><a name="httpSetTimeout">httpSetTimeout</a></h3>
+<p class="description">Set read/write timeouts and an optional callback.</p>
+<p class="code">
+void httpSetTimeout (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;double timeout,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_timeout_cb_t">http_timeout_cb_t</a> cb,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>timeout</dt>
+<dd class="description">Number of seconds for timeout,
+must be greater than 0</dd>
+<dt>cb</dt>
+<dd class="description">Callback function or NULL</dd>
+<dt>user_data</dt>
+<dd class="description">User data pointer</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The optional timeout callback receives both the HTTP connection and a user
+data pointer and must return 1 to continue or 0 to error (time) out.
+
+</p>
+<h3 class="function"><a name="httpStatus">httpStatus</a></h3>
+<p class="description">Return a short string describing a HTTP status code.</p>
+<p class="code">
+const char *httpStatus (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_status_t status<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>status</dt>
+<dd class="description">HTTP status code</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Localized status string</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The returned string is localized to the current POSIX locale and is based
+on the status strings defined in RFC 2616.</p>
+<h3 class="function"><a name="httpTrace">httpTrace</a></h3>
+<p class="description">Send an TRACE request to the server.</p>
+<p class="code">
+int httpTrace (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>uri</dt>
+<dd class="description">URI for trace</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status of call (0 = success)</p>
+<h3 class="function"><a name="httpUpdate">httpUpdate</a></h3>
+<p class="description">Update the current HTTP state for incoming data.</p>
+<p class="code">
+http_status_t httpUpdate (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">HTTP status</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/OS X 10.3&nbsp;</span><a name="httpWait">httpWait</a></h3>
+<p class="description">Wait for data available on a connection.</p>
+<p class="code">
+int httpWait (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int msec<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>msec</dt>
+<dd class="description">Milliseconds to wait</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if data is available, 0 otherwise</p>
+<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpWrite">httpWrite</a></h3>
+<p class="description">Write data to a HTTP connection.</p>
+<p class="code">
+int httpWrite (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>buffer</dt>
+<dd class="description">Buffer for data</dd>
+<dt>length</dt>
+<dd class="description">Number of bytes to write</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of bytes written</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function is deprecated. Use the httpWrite2() function which can
 write more than 2GB of data.
 
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="httpWrite2">httpWrite2</a></h3>
+<p class="description">Write data to a HTTP connection.</p>
+<p class="code">
+ssize_t httpWrite2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>buffer</dt>
+<dd class="description">Buffer for data</dd>
+<dt>length</dt>
+<dd class="description">Number of bytes to write</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of bytes written</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="httpWriteResponse">httpWriteResponse</a></h3>
+<p class="description">Write a HTTP response to a client connection.</p>
+<p class="code">
+int httpWriteResponse (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_status_t status<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">HTTP connection</dd>
+<dt>status</dt>
+<dd class="description">Status code</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 on success, -1 on error</p>
+<h3 class="function"><a name="ippAddBoolean">ippAddBoolean</a></h3>
+<p class="description">Add a boolean attribute to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddBoolean (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>value</dt>
+<dd class="description">Value of attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a name="ippAddBooleans">ippAddBooleans</a></h3>
+<p class="description">Add an array of boolean values.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddBooleans (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *values<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>num_values</dt>
+<dd class="description">Number of values</dd>
+<dt>values</dt>
+<dd class="description">Values</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/OS X 10.3&nbsp;</span><a name="ippAddCollection">ippAddCollection</a></h3>
+<p class="description">Add a collection value.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddCollection (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>value</dt>
+<dd class="description">Value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
 
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-httpWrite(
-    <a href='#http_t'>http_t</a> * http,
-    const char * buffer,
-    int length);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpWrite2'>httpWrite2()</a></h3>
-<h4>Description</h4>
-<p>Write data to a HTTP connection.
-
-
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ssize_t'>ssize_t</a><br>
-httpWrite2(
-    <a href='#http_t'>http_t</a> * http,
-    const char * buffer,
-    size_t length);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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>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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddBoolean(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    char value);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddBooleans(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    int num_values,
-    const char * values);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddCollection(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    <a href='#ipp_t'>ipp_t</a> * value);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddCollections(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    int num_values,
-    const <a href='#ipp_t'>ipp_t</a> ** values);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddDate(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    const <a href='#ipp_uchar_t'>ipp_uchar_t</a> * value);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddInteger(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    ipp_tag_t type,
-    const char * name,
-    int value);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddIntegers(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    ipp_tag_t type,
-    const char * name,
-    int num_values,
-    const int * values);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-
-
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddOctetString(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    const void * data,
-    int datalen);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddRange(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    int lower,
-    int upper);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddRanges(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    int num_values,
-    const int * lower,
-    const int * upper);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddResolution(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    ipp_res_t units,
-    int xres,
-    int yres);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddResolutions(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    const char * name,
-    int num_values,
-    ipp_res_t units,
-    const int * xres,
-    const int * yres);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddSeparator(
-    <a href='#ipp_t'>ipp_t</a> * ipp);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddString(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    ipp_tag_t type,
-    const char * name,
-    const char * charset,
-    const char * value);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippAddStrings(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    ipp_tag_t group,
-    ipp_tag_t type,
-    const char * name,
-    int num_values,
-    const char * charset,
-    const char *const * values);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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.
-<h4>Syntax</h4>
-<p><tt>
-time_t<br>
-ippDateToTime(
-    const <a href='#ipp_uchar_t'>ipp_uchar_t</a> * date);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 message.
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-ippDelete(
-    <a href='#ipp_t'>ipp_t</a> * ipp);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-
-
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-ippDeleteAttribute(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    <a href='#ipp_attribute_t'>ipp_attribute_t</a> * attr);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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.
-<h4>Syntax</h4>
-<p><tt>
-const char *<br>
-ippErrorString(
-    ipp_status_t error);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-ipp_status_t<br>
-ippErrorValue(
-    const char * name);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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...
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippFindAttribute(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    const char * name,
-    ipp_tag_t type);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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...
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
-ippFindNextAttribute(
-    <a href='#ipp_t'>ipp_t</a> * ipp,
-    const char * name,
-    ipp_tag_t type);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</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 message.
-<h4>Syntax</h4>
-<p><tt>
-size_t<br>
-ippLength(
-    <a href='#ipp_t'>ipp_t</a> * ipp);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>Size of IPP message</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ippNew'>ippNew()</a></h3>
-<h4>Description</h4>
-<p>Allocate a new IPP message.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_t'>ipp_t</a> *<br>
-ippNew(void);
-</tt></p>
-<h4>Arguments</h4>
-<p>None.</p>
-<h4>Returns</h4>
-<p>New IPP message</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippNewRequest'>ippNewRequest()</a></h3>
-<h4>Description</h4>
-<p>Allocate a new IPP request message.
-<p>The new request message is initialized with the attributes-charset and
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/OS X 10.3&nbsp;</span><a name="ippAddCollections">ippAddCollections</a></h3>
+<p class="description">Add an array of collection values.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddCollections (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_t">ipp_t</a> **values<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>num_values</dt>
+<dd class="description">Number of values</dd>
+<dt>values</dt>
+<dd class="description">Values</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
+
+</p>
+<h3 class="function"><a name="ippAddDate">ippAddDate</a></h3>
+<p class="description">Add a date attribute to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddDate (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_uchar_t">ipp_uchar_t</a> *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>value</dt>
+<dd class="description">Value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a name="ippAddInteger">ippAddInteger</a></h3>
+<p class="description">Add a integer attribute to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddInteger (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>value_tag</dt>
+<dd class="description">Type of attribute</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>value</dt>
+<dd class="description">Value of attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported values include enum (<code>IPP_TAG_ENUM</code>) and integer
+(<code>IPP_TAG_INTEGER</code>).</p>
+<h3 class="function"><a name="ippAddIntegers">ippAddIntegers</a></h3>
+<p class="description">Add an array of integer values.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddIntegers (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int *values<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>value_tag</dt>
+<dd class="description">Type of attribute</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>num_values</dt>
+<dd class="description">Number of values</dd>
+<dt>values</dt>
+<dd class="description">Values</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported values include enum (<code>IPP_TAG_ENUM</code>) and integer
+(<code>IPP_TAG_INTEGER</code>).</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="ippAddOctetString">ippAddOctetString</a></h3>
+<p class="description">Add an octetString value to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddOctetString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const void *data,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int datalen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>data</dt>
+<dd class="description">octetString data</dd>
+<dt>datalen</dt>
+<dd class="description">Length of data in bytes</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippAddOutOfBand">ippAddOutOfBand</a></h3>
+<p class="description">Add an out-of-band value to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddOutOfBand (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>value_tag</dt>
+<dd class="description">Type of attribute</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported out-of-band values include unsupported-value
+(<code>IPP_TAG_UNSUPPORTED_VALUE</code>), default (<code>IPP_TAG_DEFAULT</code>), unknown
+(<code>IPP_TAG_UNKNOWN</code>), no-value (<code>IPP_TAG_NOVALUE</code>), not-settable
+(<code>IPP_TAG_NOTSETTABLE</code>), delete-attribute (<code>IPP_TAG_DELETEATTR</code>), and
+admin-define (<code>IPP_TAG_ADMINDEFINE</code>).
+
+</p>
+<h3 class="function"><a name="ippAddRange">ippAddRange</a></h3>
+<p class="description">Add a range of values to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddRange (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int lower,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int upper<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>lower</dt>
+<dd class="description">Lower value</dd>
+<dt>upper</dt>
+<dd class="description">Upper value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+The <code>lower</code> parameter must be less than or equal to the <code>upper</code> parameter.</p>
+<h3 class="function"><a name="ippAddRanges">ippAddRanges</a></h3>
+<p class="description">Add ranges of values to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddRanges (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int *lower,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int *upper<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>num_values</dt>
+<dd class="description">Number of values</dd>
+<dt>lower</dt>
+<dd class="description">Lower values</dd>
+<dt>upper</dt>
+<dd class="description">Upper values</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a name="ippAddResolution">ippAddResolution</a></h3>
+<p class="description">Add a resolution value to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddResolution (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> units,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int xres,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int yres<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>units</dt>
+<dd class="description">Units for resolution</dd>
+<dt>xres</dt>
+<dd class="description">X resolution</dd>
+<dt>yres</dt>
+<dd class="description">Y resolution</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a name="ippAddResolutions">ippAddResolutions</a></h3>
+<p class="description">Add resolution values to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddResolutions (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> units,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int *xres,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int *yres<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>num_values</dt>
+<dd class="description">Number of values</dd>
+<dt>units</dt>
+<dd class="description">Units for resolution</dd>
+<dt>xres</dt>
+<dd class="description">X resolutions</dd>
+<dt>yres</dt>
+<dd class="description">Y resolutions</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a name="ippAddSeparator">ippAddSeparator</a></h3>
+<p class="description">Add a group separator to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddSeparator (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.</p>
+<h3 class="function"><a name="ippAddString">ippAddString</a></h3>
+<p class="description">Add a language-encoded string to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *language,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>value_tag</dt>
+<dd class="description">Type of attribute</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>language</dt>
+<dd class="description">Language code</dd>
+<dt>value</dt>
+<dd class="description">Value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
+(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
+(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
+(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
+(<code>IPP_TAG_URISCHEME</code>).<br>
+<br>
+The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage and
+textWithLanguage string values and must be <code>NULL</code> for all other string values.</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippAddStringf">ippAddStringf</a></h3>
+<p class="description">Add a formatted string to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStringf (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *language,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;...<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>value_tag</dt>
+<dd class="description">Type of attribute</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>language</dt>
+<dd class="description">Language code (<code>NULL</code> for default)</dd>
+<dt>format</dt>
+<dd class="description">Printf-style format string</dd>
+<dt>...</dt>
+<dd class="description">Additional arguments as needed</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document
+(<code>IPP_TAG_DOCUMENT</code>), event notification
+(<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation (<code>IPP_TAG_OPERATION</code>),
+printer (<code>IPP_TAG_PRINTER</code>), subscription (<code>IPP_TAG_SUBSCRIPTION</code>),
+or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
+(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
+(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
+(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
+(<code>IPP_TAG_URISCHEME</code>).<br>
+<br>
+The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage
+and textWithLanguage string values and must be <code>NULL</code> for all other
+string values.<br>
+<br>
+The <code>format</code> parameter uses formatting characters compatible with the
+printf family of standard functions.  Additional arguments follow it as
+needed.  The formatted string is truncated as needed to the maximum length of
+the corresponding value type.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippAddStringfv">ippAddStringfv</a></h3>
+<p class="description">Add a formatted string to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStringfv (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *language,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;va_list ap<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>value_tag</dt>
+<dd class="description">Type of attribute</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>language</dt>
+<dd class="description">Language code (<code>NULL</code> for default)</dd>
+<dt>format</dt>
+<dd class="description">Printf-style format string</dd>
+<dt>ap</dt>
+<dd class="description">Additional arguments</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document
+(<code>IPP_TAG_DOCUMENT</code>), event notification
+(<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation (<code>IPP_TAG_OPERATION</code>),
+printer (<code>IPP_TAG_PRINTER</code>), subscription (<code>IPP_TAG_SUBSCRIPTION</code>),
+or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
+(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
+(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
+(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
+(<code>IPP_TAG_URISCHEME</code>).<br>
+<br>
+The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage
+and textWithLanguage string values and must be <code>NULL</code> for all other
+string values.<br>
+<br>
+The <code>format</code> parameter uses formatting characters compatible with the
+printf family of standard functions.  Additional arguments are passed in the
+stdarg pointer <code>ap</code>.  The formatted string is truncated as needed to the
+maximum length of the corresponding value type.
+
+</p>
+<h3 class="function"><a name="ippAddStrings">ippAddStrings</a></h3>
+<p class="description">Add language-encoded strings to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStrings (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *language,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *const *values<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>group</dt>
+<dd class="description">IPP group</dd>
+<dt>value_tag</dt>
+<dd class="description">Type of attribute</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>num_values</dt>
+<dd class="description">Number of values</dd>
+<dt>language</dt>
+<dd class="description">Language code (<code>NULL</code> for default)</dd>
+<dt>values</dt>
+<dd class="description">Values</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
+(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
+(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
+(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
+(<code>IPP_TAG_URISCHEME</code>).<br>
+<br>
+The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage and
+textWithLanguage string values and must be <code>NULL</code> for all other string values.</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippAttributeString">ippAttributeString</a></h3>
+<p class="description">Convert the attribute's value to a string.</p>
+<p class="code">
+size_t ippAttributeString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t bufsize<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">Attribute</dd>
+<dt>buffer</dt>
+<dd class="description">String buffer or NULL</dd>
+<dt>bufsize</dt>
+<dd class="description">Size of string buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of bytes less nul</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns the number of bytes that would be written, not including the
+trailing nul. The buffer pointer can be NULL to get the required length,
+just like (v)snprintf.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippContainsInteger">ippContainsInteger</a></h3>
+<p class="description">Determine whether an attribute contains the
+specified value or is within the list of ranges.</p>
+<p class="code">
+int ippContainsInteger (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">Attribute</dd>
+<dt>value</dt>
+<dd class="description">Integer/enum value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on a match, 0 on no match</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns non-zero when the attribute contains either a matching integer or
+enum value, or the value falls within one of the rangeOfInteger values for
+the attribute.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippContainsString">ippContainsString</a></h3>
+<p class="description">Determine whether an attribute contains the
+specified string value.</p>
+<p class="code">
+int ippContainsString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">Attribute</dd>
+<dt>value</dt>
+<dd class="description">String value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on a match, 0 on no match</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns non-zero when the attribute contains a matching charset, keyword,
+language, mimeMediaType, name, text, URI, or URI scheme value.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippCopyAttribute">ippCopyAttribute</a></h3>
+<p class="description">Copy an attribute.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippCopyAttribute (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *srcattr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int quickcopy<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>dst</dt>
+<dd class="description">Destination IPP message</dd>
+<dt>srcattr</dt>
+<dd class="description">Attribute to copy</dd>
+<dt>quickcopy</dt>
+<dd class="description">1 for a referenced copy, 0 for normal</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The specified attribute, <code>attr</code>, is copied to the destination IPP message.
+When <code>quickcopy</code> is non-zero, a &quot;shallow&quot; reference copy of the attribute is
+created - this should only be done as long as the original source IPP message will
+not be freed for the life of the destination.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippCopyAttributes">ippCopyAttributes</a></h3>
+<p class="description">Copy attributes from one IPP message to another.</p>
+<p class="code">
+int ippCopyAttributes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int quickcopy,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_copycb_t">ipp_copycb_t</a> cb,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *context<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>dst</dt>
+<dd class="description">Destination IPP message</dd>
+<dt>src</dt>
+<dd class="description">Source IPP message</dd>
+<dt>quickcopy</dt>
+<dd class="description">1 for a referenced copy, 0 for normal</dd>
+<dt>cb</dt>
+<dd class="description">Copy callback or <code>NULL</code> for none</dd>
+<dt>context</dt>
+<dd class="description">Context pointer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on error</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Zero or more attributes are copied from the source IPP message, @code@ src, to the
+destination IPP message, <code>dst</code>. When <code>quickcopy</code> is non-zero, a &quot;shallow&quot;
+reference copy of the attribute is created - this should only be done as long as the
+original source IPP message will not be freed for the life of the destination.<br>
+<br>
+The <code>cb</code> and <code>context</code> parameters provide a generic way to &quot;filter&quot; the
+attributes that are copied - the function must return 1 to copy the attribute or
+0 to skip it. The function may also choose to do a partial copy of the source attribute
+itself.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippCreateRequestedArray">ippCreateRequestedArray</a></h3>
+<p class="description">Create a CUPS array of attribute names from the
+given requested-attributes attribute.</p>
+<p class="code">
+cups_array_t *ippCreateRequestedArray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>request</dt>
+<dd class="description">IPP request</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">CUPS array or <code>NULL</code> if all</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function creates a (sorted) CUPS array of attribute names matching the
+list of &quot;requested-attribute&quot; values supplied in an IPP request.  All IANA-
+registered values are supported in addition to the CUPS IPP extension
+attributes.<br>
+<br>
+The <code>request</code> parameter specifies the request message that was read from
+the client.
+
+<code>NULL</code> is returned if all attributes should be returned.  Otherwise, the
+result is a sorted array of attribute names, where <code>cupsArrayFind(array,
+"attribute-name")</code> will return a non-NULL pointer.  The array must be freed
+using the <code>cupsArrayDelete</code> function.
+
+</p>
+<h3 class="function"><a name="ippDateToTime">ippDateToTime</a></h3>
+<p class="description">Convert from RFC 1903 Date/Time format to UNIX time
+in seconds.</p>
+<p class="code">
+time_t ippDateToTime (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_uchar_t">ipp_uchar_t</a> *date<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>date</dt>
+<dd class="description">RFC 1903 date info</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">UNIX time value</p>
+<h3 class="function"><a name="ippDelete">ippDelete</a></h3>
+<p class="description">Delete an IPP message.</p>
+<p class="code">
+void ippDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+</dl>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/OS X 10.3&nbsp;</span><a name="ippDeleteAttribute">ippDeleteAttribute</a></h3>
+<p class="description">Delete a single attribute in an IPP message.</p>
+<p class="code">
+void ippDeleteAttribute (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">Attribute to delete</dd>
+</dl>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippDeleteValues">ippDeleteValues</a></h3>
+<p class="description">Delete values in an attribute.</p>
+<p class="code">
+int ippDeleteValues (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int count<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">Attribute</dd>
+<dt>element</dt>
+<dd class="description">Index of first value to delete (0-based)</dd>
+<dt>count</dt>
+<dd class="description">Number of values to delete</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>element</code> parameter specifies the first value to delete, starting at
+0. It must be less than the number of values returned by <a href="#ippGetCount"><code>ippGetCount</code></a>.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+Deleting all values in an attribute deletes the attribute.
+
+</p>
+<h3 class="function"><a name="ippEnumString">ippEnumString</a></h3>
+<p class="description">Return a string corresponding to the enum value.</p>
+<p class="code">
+const char *ippEnumString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *attrname,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int enumvalue<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attrname</dt>
+<dd class="description">Attribute name</dd>
+<dt>enumvalue</dt>
+<dd class="description">Enum value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Enum string</p>
+<h3 class="function"><a name="ippEnumValue">ippEnumValue</a></h3>
+<p class="description">Return the value associated with a given enum string.</p>
+<p class="code">
+int ippEnumValue (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *attrname,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *enumstring<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attrname</dt>
+<dd class="description">Attribute name</dd>
+<dt>enumstring</dt>
+<dd class="description">Enum string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Enum value or -1 if unknown</p>
+<h3 class="function"><a name="ippErrorString">ippErrorString</a></h3>
+<p class="description">Return a name for the given status code.</p>
+<p class="code">
+const char *ippErrorString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_status_t error<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>error</dt>
+<dd class="description">Error status</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Text string</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="ippErrorValue">ippErrorValue</a></h3>
+<p class="description">Return a status code for the given name.</p>
+<p class="code">
+ipp_status_t ippErrorValue (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">IPP status code</p>
+<h3 class="function"><a name="ippFindAttribute">ippFindAttribute</a></h3>
+<p class="description">Find a named attribute in a request.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFindAttribute (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t type<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>type</dt>
+<dd class="description">Type of attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Matching attribute</p>
+<h3 class="function"><a name="ippFindNextAttribute">ippFindNextAttribute</a></h3>
+<p class="description">Find the next named attribute in a request.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFindNextAttribute (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t type<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>name</dt>
+<dd class="description">Name of attribute</dd>
+<dt>type</dt>
+<dd class="description">Type of attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Matching attribute</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippFirstAttribute">ippFirstAttribute</a></h3>
+<p class="description">Return the first attribute in the message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFirstAttribute (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">First attribute or <code>NULL</code> if none</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetBoolean">ippGetBoolean</a></h3>
+<p class="description">Get a boolean value for an attribute.</p>
+<p class="code">
+int ippGetBoolean (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Boolean value or -1 on error</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetCollection">ippGetCollection</a></h3>
+<p class="description">Get a collection value for an attribute.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *ippGetCollection (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Collection value or <code>NULL</code> on error</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetCount">ippGetCount</a></h3>
+<p class="description">Get the number of values in an attribute.</p>
+<p class="code">
+int ippGetCount (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of values or -1 on error</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetDate">ippGetDate</a></h3>
+<p class="description">Get a date value for an attribute.</p>
+<p class="code">
+const <a href="#ipp_uchar_t">ipp_uchar_t</a> *ippGetDate (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Date value or <code>NULL</code></p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetGroupTag">ippGetGroupTag</a></h3>
+<p class="description">Get the group associated with an attribute.</p>
+<p class="code">
+ipp_tag_t ippGetGroupTag (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Group tag or <code>IPP_TAG_ZERO</code> on error</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetInteger">ippGetInteger</a></h3>
+<p class="description">Get the integer/enum value for an attribute.</p>
+<p class="code">
+int ippGetInteger (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Value or -1 on error</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetName">ippGetName</a></h3>
+<p class="description">Get the attribute name.</p>
+<p class="code">
+const char *ippGetName (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Attribute name or <code>NULL</code> for separators</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippGetOctetString">ippGetOctetString</a></h3>
+<p class="description">Get an octetString value from an IPP attribute.</p>
+<p class="code">
+void *ippGetOctetString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *datalen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>datalen</dt>
+<dd class="description">Length of octetString data</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Pointer to octetString data</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetOperation">ippGetOperation</a></h3>
+<p class="description">Get the operation ID in an IPP message.</p>
+<p class="code">
+ipp_op_t ippGetOperation (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP request message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Operation ID or -1 on error</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetRange">ippGetRange</a></h3>
+<p class="description">Get a rangeOfInteger value from an attribute.</p>
+<p class="code">
+int ippGetRange (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *uppervalue<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>uppervalue</dt>
+<dd class="description">Upper value of range</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Lower value of range or -1</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetRequestId">ippGetRequestId</a></h3>
+<p class="description">Get the request ID from an IPP message.</p>
+<p class="code">
+int ippGetRequestId (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Request ID or -1 on error</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetResolution">ippGetResolution</a></h3>
+<p class="description">Get a resolution value for an attribute.</p>
+<p class="code">
+int ippGetResolution (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *yres,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> *units<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>yres</dt>
+<dd class="description">Vertical/feed resolution</dd>
+<dt>units</dt>
+<dd class="description">Units for resolution</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Horizontal/cross feed resolution or -1</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetState">ippGetState</a></h3>
+<p class="description">Get the IPP message state.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippGetState (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">IPP message state value</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetStatusCode">ippGetStatusCode</a></h3>
+<p class="description">Get the status code from an IPP response or event message.</p>
+<p class="code">
+ipp_status_t ippGetStatusCode (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP response or event message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Status code in IPP message</p>
+<h3 class="function"><a name="ippGetString">ippGetString</a></h3>
+<p class="description">Return the value...</p>
+<p class="code">
+const char *ippGetString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char **language<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>language</dt>
+<dd class="description">Language code (<code>NULL</code> for don't care)</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Get the string and optionally the language code for an attribute.</p>
+<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetValueTag">ippGetValueTag</a></h3>
+<p class="description">Get the value tag for an attribute.</p>
+<p class="code">
+ipp_tag_t ippGetValueTag (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Value tag or <code>IPP_TAG_ZERO</code> on error</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippGetVersion">ippGetVersion</a></h3>
+<p class="description">Get the major and minor version number from an IPP message.</p>
+<p class="code">
+int ippGetVersion (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *minor<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>minor</dt>
+<dd class="description">Minor version number or <code>NULL</code></dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Major version number or -1 on error</p>
+<h3 class="function"><a name="ippLength">ippLength</a></h3>
+<p class="description">Compute the length of an IPP message.</p>
+<p class="code">
+size_t ippLength (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Size of IPP message</p>
+<h3 class="function"><a name="ippNew">ippNew</a></h3>
+<p class="description">Allocate a new IPP message.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *ippNew (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New IPP message</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="ippNewRequest">ippNewRequest</a></h3>
+<p class="description">Allocate a new IPP request message.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *ippNewRequest (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_op_t op<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>op</dt>
+<dd class="description">Operation code</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">IPP request message</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The new request message is initialized with the attributes-charset and
 attributes-natural-language attributes added. The
 attributes-natural-language value is derived from the current locale.
 
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippNewResponse">ippNewResponse</a></h3>
+<p class="description">Allocate a new IPP response message.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *ippNewResponse (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>request</dt>
+<dd class="description">IPP request message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">IPP response message</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The new response message is initialized with the same version-number,
+request-id, attributes-charset, and attributes-natural-language as the
+provided request message.  If the attributes-charset or
+attributes-natural-language attributes are missing from the request,
+&quot;utf-8&quot; and a value derived from the current locale are substituted,
+respectively.
 
-<h4>Syntax</h4>
-<p><tt>
-<a href='#ipp_t'>ipp_t</a> *<br>
-ippNewRequest(
-    ipp_op_t op);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>op</tt></td><td>Operation code</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>IPP request message</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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-const char *<br>
-ippOpString(
-    ipp_op_t op);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-
-
-<h4>Syntax</h4>
-<p><tt>
-ipp_op_t<br>
-ippOpValue(
-    const char * name);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-ippPort(void);
-</tt></p>
-<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 message from a HTTP connection.
-<h4>Syntax</h4>
-<p><tt>
-ipp_state_t<br>
-ippRead(
-    <a href='#http_t'>http_t</a> * http,
-    <a href='#ipp_t'>ipp_t</a> * ipp);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 message from a file.
-
-
-<h4>Syntax</h4>
-<p><tt>
-ipp_state_t<br>
-ippReadFile(
-    int fd,
-    <a href='#ipp_t'>ipp_t</a> * ipp);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.2&nbsp;</span><a name='ippReadIO'>ippReadIO()</a></h3>
-<h4>Description</h4>
-<p>Read data for an IPP message.
-
-
-<h4>Syntax</h4>
-<p><tt>
-ipp_state_t<br>
-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);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-ippSetPort(
-    int p);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.
-<h4>Syntax</h4>
-<p><tt>
-const <a href='#ipp_uchar_t'>ipp_uchar_t</a> *<br>
-ippTimeToDate(
-    time_t t);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 message to a HTTP connection.
-<h4>Syntax</h4>
-<p><tt>
-ipp_state_t<br>
-ippWrite(
-    <a href='#http_t'>http_t</a> * http,
-    <a href='#ipp_t'>ipp_t</a> * ipp);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 message to a file.
-
-
-<h4>Syntax</h4>
-<p><tt>
-ipp_state_t<br>
-ippWriteFile(
-    int fd,
-    <a href='#ipp_t'>ipp_t</a> * ipp);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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.2&nbsp;</span><a name='ippWriteIO'>ippWriteIO()</a></h3>
-<h4>Description</h4>
-<p>Write data for an IPP message.
-
-
-<h4>Syntax</h4>
-<p><tt>
-ipp_state_t<br>
-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);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<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 message</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='#http_addrlist_s'><tt>http_addrlist_s</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#ipp_attribute_s'><tt>ipp_attribute_s</tt></a> </li>
-       <li><a href='#ipp_s'><tt>ipp_s</tt></a> </li>
-</ul>
-<!-- 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
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippNextAttribute">ippNextAttribute</a></h3>
+<p class="description">Return the next attribute in the message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippNextAttribute (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Next attribute or <code>NULL</code> if none</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="ippOpString">ippOpString</a></h3>
+<p class="description">Return a name for the given operation id.</p>
+<p class="code">
+const char *ippOpString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_op_t op<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>op</dt>
+<dd class="description">Operation ID</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Name</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="ippOpValue">ippOpValue</a></h3>
+<p class="description">Return an operation id for the given name.</p>
+<p class="code">
+ipp_op_t ippOpValue (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Textual name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Operation ID</p>
+<h3 class="function"><a name="ippPort">ippPort</a></h3>
+<p class="description">Return the default IPP port number.</p>
+<p class="code">
+int ippPort (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Port number</p>
+<h3 class="function"><a name="ippRead">ippRead</a></h3>
+<p class="description">Read data for an IPP message from a HTTP connection.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippRead (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">HTTP connection</dd>
+<dt>ipp</dt>
+<dd class="description">IPP data</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Current state</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/OS X 10.3&nbsp;</span><a name="ippReadFile">ippReadFile</a></h3>
+<p class="description">Read data for an IPP message from a file.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippReadFile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>fd</dt>
+<dd class="description">HTTP data</dd>
+<dt>ipp</dt>
+<dd class="description">IPP data</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Current state</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="ippReadIO">ippReadIO</a></h3>
+<p class="description">Read data for an IPP message.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippReadIO (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_iocb_t">ipp_iocb_t</a> cb,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int blocking,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *parent,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>src</dt>
+<dd class="description">Data source</dd>
+<dt>cb</dt>
+<dd class="description">Read callback function</dd>
+<dt>blocking</dt>
+<dd class="description">Use blocking IO?</dd>
+<dt>parent</dt>
+<dd class="description">Parent request, if any</dd>
+<dt>ipp</dt>
+<dd class="description">IPP data</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Current state</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetBoolean">ippSetBoolean</a></h3>
+<p class="description">Set a boolean value in an attribute.</p>
+<p class="code">
+int ippSetBoolean (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int boolvalue<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>boolvalue</dt>
+<dd class="description">Boolean value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetCollection">ippSetCollection</a></h3>
+<p class="description">Set a collection value in an attribute.</p>
+<p class="code">
+int ippSetCollection (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *colvalue<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>colvalue</dt>
+<dd class="description">Collection value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetDate">ippSetDate</a></h3>
+<p class="description">Set a date value in an attribute.</p>
+<p class="code">
+int ippSetDate (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_uchar_t">ipp_uchar_t</a> *datevalue<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>datevalue</dt>
+<dd class="description">Date value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetGroupTag">ippSetGroupTag</a></h3>
+<p class="description">Set the group tag of an attribute.</p>
+<p class="code">
+int ippSetGroupTag (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group_tag<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">Attribute</dd>
+<dt>group_tag</dt>
+<dd class="description">Group tag</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetInteger">ippSetInteger</a></h3>
+<p class="description">Set an integer or enum value in an attribute.</p>
+<p class="code">
+int ippSetInteger (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int intvalue<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>intvalue</dt>
+<dd class="description">Integer/enum value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetName">ippSetName</a></h3>
+<p class="description">Set the name of an attribute.</p>
+<p class="code">
+int ippSetName (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>name</dt>
+<dd class="description">Attribute name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippSetOctetString">ippSetOctetString</a></h3>
+<p class="description">Set an octetString value in an IPP attribute.</p>
+<p class="code">
+int ippSetOctetString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const void *data,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int datalen<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>data</dt>
+<dd class="description">Pointer to octetString data</dd>
+<dt>datalen</dt>
+<dd class="description">Length of octetString data</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetOperation">ippSetOperation</a></h3>
+<p class="description">Set the operation ID in an IPP request message.</p>
+<p class="code">
+int ippSetOperation (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_op_t op<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP request message</dd>
+<dt>op</dt>
+<dd class="description">Operation ID</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.
+
+</p>
+<h3 class="function"><a name="ippSetPort">ippSetPort</a></h3>
+<p class="description">Set the default port number.</p>
+<p class="code">
+void ippSetPort (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int p<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>p</dt>
+<dd class="description">Port number to use</dd>
+</dl>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetRange">ippSetRange</a></h3>
+<p class="description">Set a rangeOfInteger value in an attribute.</p>
+<p class="code">
+int ippSetRange (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int lowervalue,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int uppervalue<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>lowervalue</dt>
+<dd class="description">Lower bound for range</dd>
+<dt>uppervalue</dt>
+<dd class="description">Upper bound for range</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetRequestId">ippSetRequestId</a></h3>
+<p class="description">Set the request ID in an IPP message.</p>
+<p class="code">
+int ippSetRequestId (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int request_id<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>request_id</dt>
+<dd class="description">Request ID</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>request_id</code> parameter must be greater than 0.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetResolution">ippSetResolution</a></h3>
+<p class="description">Set a resolution value in an attribute.</p>
+<p class="code">
+int ippSetResolution (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> unitsvalue,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int xresvalue,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int yresvalue<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>unitsvalue</dt>
+<dd class="description">Resolution units</dd>
+<dt>xresvalue</dt>
+<dd class="description">Horizontal/cross feed resolution</dd>
+<dt>yresvalue</dt>
+<dd class="description">Vertical/feed resolution</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetState">ippSetState</a></h3>
+<p class="description">Set the current state of the IPP message.</p>
+<p class="code">
+int ippSetState (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_state_t">ipp_state_t</a> state<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>state</dt>
+<dd class="description">IPP state value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetStatusCode">ippSetStatusCode</a></h3>
+<p class="description">Set the status code in an IPP response or event message.</p>
+<p class="code">
+int ippSetStatusCode (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_status_t status<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP response or event message</dd>
+<dt>status</dt>
+<dd class="description">Status code</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetString">ippSetString</a></h3>
+<p class="description">Set a string value in an attribute.</p>
+<p class="code">
+int ippSetString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *strvalue<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>strvalue</dt>
+<dd class="description">String value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippSetStringf">ippSetStringf</a></h3>
+<p class="description">Set a formatted string value of an attribute.</p>
+<p class="code">
+int ippSetStringf (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;...<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>format</dt>
+<dd class="description">Printf-style format string</dd>
+<dt>...</dt>
+<dd class="description">Additional arguments as needed</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.<br>
+<br>
+The <code>format</code> parameter uses formatting characters compatible with the
+printf family of standard functions.  Additional arguments follow it as
+needed.  The formatted string is truncated as needed to the maximum length of
+the corresponding value type.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippSetStringfv">ippSetStringfv</a></h3>
+<p class="description">Set a formatted string value of an attribute.</p>
+<p class="code">
+int ippSetStringfv (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;va_list ap<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>element</dt>
+<dd class="description">Value number (0-based)</dd>
+<dt>format</dt>
+<dd class="description">Printf-style format string</dd>
+<dt>ap</dt>
+<dd class="description">Pointer to additional arguments</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.<br>
+<br>
+The <code>format</code> parameter uses formatting characters compatible with the
+printf family of standard functions.  Additional arguments follow it as
+needed.  The formatted string is truncated as needed to the maximum length of
+the corresponding value type.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetValueTag">ippSetValueTag</a></h3>
+<p class="description">Set the value tag of an attribute.</p>
+<p class="code">
+int ippSetValueTag (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>attr</dt>
+<dd class="description">IPP attribute</dd>
+<dt>value_tag</dt>
+<dd class="description">Value tag</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+Integer (<code>IPP_TAG_INTEGER</code>) values can be promoted to rangeOfInteger
+(<code>IPP_TAG_RANGE</code>) values, the various string tags can be promoted to name
+(<code>IPP_TAG_NAME</code>) or nameWithLanguage (<code>IPP_TAG_NAMELANG</code>) values, text
+(<code>IPP_TAG_TEXT</code>) values can be promoted to textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>) values, and all values can be demoted to the various
+out-of-band value tags such as no-value (<code>IPP_TAG_NOVALUE</code>). All other changes
+will be rejected.<br>
+<br>
+Promoting a string attribute to nameWithLanguage or textWithLanguage adds the language
+code in the &quot;attributes-natural-language&quot; attribute or, if not present, the language
+code for the current locale.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.6/OS X 10.8&nbsp;</span><a name="ippSetVersion">ippSetVersion</a></h3>
+<p class="description">Set the version number in an IPP message.</p>
+<p class="code">
+int ippSetVersion (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int major,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int minor<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+<dt>major</dt>
+<dd class="description">Major version number (major.minor)</dd>
+<dt>minor</dt>
+<dd class="description">Minor version number (major.minor)</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or  <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4/OS X 10.6&nbsp;</span><a name="ippTagString">ippTagString</a></h3>
+<p class="description">Return the tag name corresponding to a tag value.</p>
+<p class="code">
+const char *ippTagString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t tag<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>tag</dt>
+<dd class="description">Tag value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Tag name</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The returned names are defined in RFC 2911 and 3382.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4/OS X 10.6&nbsp;</span><a name="ippTagValue">ippTagValue</a></h3>
+<p class="description">Return the tag value corresponding to a tag name.</p>
+<p class="code">
+ipp_tag_t ippTagValue (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Tag name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Tag value</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The tag names are defined in RFC 2911 and 3382.
+
+</p>
+<h3 class="function"><a name="ippTimeToDate">ippTimeToDate</a></h3>
+<p class="description">Convert from UNIX time to RFC 1903 format.</p>
+<p class="code">
+const <a href="#ipp_uchar_t">ipp_uchar_t</a> *ippTimeToDate (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;time_t t<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>t</dt>
+<dd class="description">UNIX time value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">RFC-1903 date/time data</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippValidateAttribute">ippValidateAttribute</a></h3>
+<p class="description">Validate the contents of an attribute.</p>
+<p class="code">
+int ippValidateAttribute (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>attr</dt>
+<dd class="description">Attribute</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if valid, 0 otherwise</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function validates the contents of an attribute based on the name and
+value tag.  1 is returned if the attribute is valid, 0 otherwise.  On
+failure, cupsLastErrorString() is set to a human-readable message.
+
+</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span><a name="ippValidateAttributes">ippValidateAttributes</a></h3>
+<p class="description">Validate all attributes in an IPP message.</p>
+<p class="code">
+int ippValidateAttributes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipp</dt>
+<dd class="description">IPP message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if valid, 0 otherwise</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function validates the contents of the IPP message, including each
+attribute.  Like <a href="#ippValidateAttribute"><code>ippValidateAttribute</code></a>, cupsLastErrorString() is set
+to a human-readable message on failure.
+
+</p>
+<h3 class="function"><a name="ippWrite">ippWrite</a></h3>
+<p class="description">Write data for an IPP message to a HTTP connection.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippWrite (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">HTTP connection</dd>
+<dt>ipp</dt>
+<dd class="description">IPP data</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Current state</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/OS X 10.3&nbsp;</span><a name="ippWriteFile">ippWriteFile</a></h3>
+<p class="description">Write data for an IPP message to a file.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippWriteFile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>fd</dt>
+<dd class="description">HTTP data</dd>
+<dt>ipp</dt>
+<dd class="description">IPP data</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Current state</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="ippWriteIO">ippWriteIO</a></h3>
+<p class="description">Write data for an IPP message.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippWriteIO (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_iocb_t">ipp_iocb_t</a> cb,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int blocking,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *parent,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>dst</dt>
+<dd class="description">Destination</dd>
+<dt>cb</dt>
+<dd class="description">Write callback function</dd>
+<dt>blocking</dt>
+<dd class="description">Use blocking IO?</dd>
+<dt>parent</dt>
+<dd class="description">Parent IPP message</dd>
+<dt>ipp</dt>
+<dd class="description">IPP data</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Current state</p>
+<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><a name="gss_auth_identity_desc">gss_auth_identity_desc</a></h3>
+<p class="description">Local functions...</p>
+<p class="code">
+typedef struct <a href="#gss_auth_identity">gss_auth_identity</a> gss_auth_identity_desc;
+</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="http_addr_t">http_addr_t</a></h3>
+<p class="description">Socket address union, which
+makes using IPv6 and other
+address types easier and
+more portable. </p>
+<p class="code">
+typedef union _http_addr_u / http_addr_t;
+</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="http_addrlist_t">http_addrlist_t</a></h3>
+<p class="description">Socket address list, which is
 used to enumerate all of the
 addresses that are associated
-with a hostname. 
-<h4>Definition</h4>
-<p><tt>
-struct http_addrlist_s<br>
-{<br>
-&nbsp;&nbsp;<a href='#http_addr_t'>http_addr_t</a> addr;<br>
-&nbsp;&nbsp;struct <a href='#http_addrlist_s'>http_addrlist_s</a> * next;<br>
-};</tt></p>
-<h4>Members</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Members'>
-<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='ipp_attribute_s'>ipp_attribute_s</a></h3>
-<h4>Description</h4>
-<p>Attribute
-<h4>Definition</h4>
-<p><tt>
-struct ipp_attribute_s<br>
-{<br>
-&nbsp;&nbsp;char * name;<br>
-&nbsp;&nbsp;struct <a href='#ipp_attribute_s'>ipp_attribute_s</a> * next;<br>
-&nbsp;&nbsp;int num_values;<br>
-&nbsp;&nbsp;ipp_tag_t group_tag, value_tag;<br>
-&nbsp;&nbsp;<a href='#ipp_value_t'>ipp_value_t</a> values[1];<br>
-};</tt></p>
-<h4>Members</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Members'>
-<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_s'>ipp_s</a></h3>
-<h4>Description</h4>
-<p>IPP Request/Response/Notification
-<h4>Definition</h4>
-<p><tt>
-struct ipp_s<br>
-{<br>
-&nbsp;&nbsp;<a href='#ipp_attribute_t'>ipp_attribute_t</a> * attrs;<br>
-&nbsp;&nbsp;<a href='#ipp_attribute_t'>ipp_attribute_t</a> * current;<br>
-&nbsp;&nbsp;ipp_tag_t curtag;<br>
-&nbsp;&nbsp;<a href='#ipp_attribute_t'>ipp_attribute_t</a> * last;<br>
-&nbsp;&nbsp;<a href='#ipp_attribute_t'>ipp_attribute_t</a> * prev;<br>
-&nbsp;&nbsp;<a href='#ipp_request_t'>ipp_request_t</a> request;<br>
-&nbsp;&nbsp;ipp_state_t state;<br>
-};</tt></p>
-<h4>Members</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Members'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>attrs</tt> </td><td>Attributes
-</td></tr>
-<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>last</tt> </td><td>Last attribute in list
-</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='#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> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></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_uchar_t'><tt>ipp_uchar_t</tt></a> </li>
-       <li><a href='#ipp_value_t'><tt>ipp_value_t</tt></a> </li>
-</ul>
-<!-- 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
+with a hostname. </p>
+<p class="code">
+typedef struct <a href="#http_addrlist_s">http_addrlist_s</a> / http_addrlist_t;
+</p>
+<h3 class="typedef"><a name="http_auth_t">http_auth_t</a></h3>
+<p class="description">HTTP authentication types</p>
+<p class="code">
+typedef enum <a href="#http_auth_e">http_auth_e</a> http_auth_t;
+</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span><a name="http_credential_t">http_credential_t</a></h3>
+<p class="description">HTTP credential data </p>
+<p class="code">
+typedef struct <a href="#http_credential_s">http_credential_s</a> http_credential_t;
+</p>
+<h3 class="typedef"><a name="http_encoding_t">http_encoding_t</a></h3>
+<p class="description">HTTP transfer encoding values</p>
+<p class="code">
+typedef enum <a href="#http_encoding_e">http_encoding_e</a> http_encoding_t;
+</p>
+<h3 class="typedef"><a name="http_encryption_t">http_encryption_t</a></h3>
+<p class="description">HTTP encryption values</p>
+<p class="code">
+typedef enum <a href="#http_encryption_e">http_encryption_e</a> http_encryption_t;
+</p>
+<h3 class="typedef"><a name="http_field_t">http_field_t</a></h3>
+<p class="description">HTTP field names</p>
+<p class="code">
+typedef enum <a href="#http_field_e">http_field_e</a> http_field_t;
+</p>
+<h3 class="typedef"><a name="http_keepalive_t">http_keepalive_t</a></h3>
+<p class="description">HTTP keep-alive values</p>
+<p class="code">
+typedef enum <a href="#http_keepalive_e">http_keepalive_e</a> http_keepalive_t;
+</p>
+<h3 class="typedef"><a name="http_state_t">http_state_t</a></h3>
+<p class="description">HTTP state values; states
+are server-oriented...</p>
+<p class="code">
+typedef enum <a href="#http_state_e">http_state_e</a> http_state_t;
+</p>
+<h3 class="typedef"><a name="http_t">http_t</a></h3>
+<p class="description">HTTP connection type</p>
+<p class="code">
+typedef struct _http_s http_t;
+</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span><a name="http_timeout_cb_t">http_timeout_cb_t</a></h3>
+<p class="description">HTTP timeout callback </p>
+<p class="code">
+typedef int (*http_timeout_cb_t)(<a href="#http_t">http_t</a> *http, void *user_data);
+</p>
+<h3 class="typedef"><a name="http_uri_coding_t">http_uri_coding_t</a></h3>
+<p class="description">URI en/decode flags</p>
+<p class="code">
+typedef enum <a href="#http_uri_coding_e">http_uri_coding_e</a> http_uri_coding_t;
+</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="http_uri_status_t">http_uri_status_t</a></h3>
+<p class="description">URI separation status </p>
+<p class="code">
+typedef enum <a href="#http_uri_status_e">http_uri_status_e</a> http_uri_status_t;
+</p>
+<h3 class="typedef"><a name="http_version_t">http_version_t</a></h3>
+<p class="description">HTTP version numbers</p>
+<p class="code">
+typedef enum <a href="#http_version_e">http_version_e</a> http_version_t;
+</p>
+<h3 class="typedef"><a name="ipp_attribute_t">ipp_attribute_t</a></h3>
+<p class="description">IPP attribute</p>
+<p class="code">
+typedef struct _ipp_attribute_s ipp_attribute_t;
+</p>
+<h3 class="typedef"><a name="ipp_copycb_t">ipp_copycb_t</a></h3>
+<p class="description">The following structures are PRIVATE starting with CUPS 1.6/OS X 10.8.
+Please use the new accessor functions available in CUPS 1.6 and later, as
+these definitions will be moved to a private header file in a future release.</p>
+<p class="code">
+typedef int (*ipp_copycb_t)(void *context, <a href="#ipp_t">ipp_t</a> *dst, <a href="#ipp_attribute_t">ipp_attribute_t</a> *attr);
+</p>
+<h3 class="typedef"><a name="ipp_dstate_t">ipp_dstate_t</a></h3>
+<p class="description">Document states</p>
+<p class="code">
+typedef enum <a href="#ipp_dstate_e">ipp_dstate_e</a> ipp_dstate_t;
+</p>
+<h3 class="typedef"><a name="ipp_finish_t">ipp_finish_t</a></h3>
+<p class="description">Job collation types</p>
+<p class="code">
+typedef enum <a href="#ipp_finishings_e">ipp_finishings_e</a> ipp_finish_t;
+</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="ipp_iocb_t">ipp_iocb_t</a></h3>
+<p class="description">IPP IO Callback Function </p>
+<p class="code">
+typedef ssize_t (*ipp_iocb_t)(void *context, <a href="#ipp_uchar_t">ipp_uchar_t</a> *buffer, size_t bytes);
+</p>
+<h3 class="typedef"><a name="ipp_jcollate_t">ipp_jcollate_t</a></h3>
+<p class="description">Job collation types</p>
+<p class="code">
+typedef enum <a href="#ipp_jcollate_e">ipp_jcollate_e</a> ipp_jcollate_t;
+</p>
+<h3 class="typedef"><a name="ipp_orient_t">ipp_orient_t</a></h3>
+<p class="description">Orientation values</p>
+<p class="code">
+typedef enum <a href="#ipp_orient_e">ipp_orient_e</a> ipp_orient_t;
+</p>
+<h3 class="typedef"><a name="ipp_pstate_t">ipp_pstate_t</a></h3>
+<p class="description">Printer states</p>
+<p class="code">
+typedef enum <a href="#ipp_pstate_e">ipp_pstate_e</a> ipp_pstate_t;
+</p>
+<h3 class="typedef"><a name="ipp_quality_t">ipp_quality_t</a></h3>
+<p class="description">Qualities</p>
+<p class="code">
+typedef enum <a href="#ipp_quality_e">ipp_quality_e</a> ipp_quality_t;
+</p>
+<h3 class="typedef"><a name="ipp_res_t">ipp_res_t</a></h3>
+<p class="description">Resolution units</p>
+<p class="code">
+typedef enum <a href="#ipp_res_e">ipp_res_e</a> ipp_res_t;
+</p>
+<h3 class="typedef"><a name="ipp_state_t">ipp_state_t</a></h3>
+<p class="description">IPP states</p>
+<p class="code">
+typedef enum <a href="#ipp_state_e">ipp_state_e</a> ipp_state_t;
+</p>
+<h3 class="typedef"><a name="ipp_t">ipp_t</a></h3>
+<p class="description">IPP request/response data</p>
+<p class="code">
+typedef struct _ipp_s ipp_t;
+</p>
+<h3 class="typedef"><a name="ipp_uchar_t">ipp_uchar_t</a></h3>
+<p class="description">Unsigned 8-bit integer/character</p>
+<p class="code">
+typedef unsigned char ipp_uchar_t;
+</p>
+<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
+<h3 class="struct"><a name="gss_auth_identity">gss_auth_identity</a></h3>
+<p class="description">Local functions...</p>
+<p class="code">struct gss_auth_identity {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;gss_buffer_t *credentialsRef;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;uint32_t flags;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *password;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *realm;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;uint32_t type;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *username;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>credentialsRef </dt>
+<dt>flags </dt>
+<dt>password </dt>
+<dt>realm </dt>
+<dt>type </dt>
+<dt>username </dt>
+</dl>
+<h3 class="struct"><span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span><a name="http_addrlist_s">http_addrlist_s</a></h3>
+<p class="description">Socket address list, which is
 used to enumerate all of the
 addresses that are associated
-with a hostname. 
-<h4>Definition</h4>
-<p><tt>
-typedef struct <a href='#http_addrlist_s'>http_addrlist_s</a> / http_addrlist_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='http_auth_t'>http_auth_t</a></h3>
-<h4>Description</h4>
-<p>HTTP authentication types
-<h4>Definition</h4>
-<p><tt>
-typedef enum <a href='#http_auth_e'>http_auth_e</a> http_auth_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='http_encoding_t'>http_encoding_t</a></h3>
-<h4>Description</h4>
-<p>HTTP transfer encoding values
-<h4>Definition</h4>
-<p><tt>
-typedef enum <a href='#http_encoding_e'>http_encoding_e</a> http_encoding_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='http_encryption_t'>http_encryption_t</a></h3>
-<h4>Description</h4>
-<p>HTTP encryption values
-<h4>Definition</h4>
-<p><tt>
-typedef enum <a href='#http_encryption_e'>http_encryption_e</a> http_encryption_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='http_t'>http_t</a></h3>
-<h4>Description</h4>
-<p>HTTP connection type
-<h4>Definition</h4>
-<p><tt>
-typedef struct _http_s http_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_attribute_t'>ipp_attribute_t</a></h3>
-<h4>Description</h4>
-<p>Attribute
-<h4>Definition</h4>
-<p><tt>
-typedef struct <a href='#ipp_attribute_s'>ipp_attribute_s</a> ipp_attribute_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ipp_iocb_t'>ipp_iocb_t</a></h3>
-<h4>Description</h4>
-<p>IPP IO Callback Function 
-<h4>Definition</h4>
-<p><tt>
-typedef <a href='#ssize_t'>ssize_t</a> (*ipp_iocb_t)(void *, <a href='#ipp_uchar_t'>ipp_uchar_t</a> *, size_t);
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_request_t'>ipp_request_t</a></h3>
-<h4>Description</h4>
-<p>Request Header
-<h4>Definition</h4>
-<p><tt>
-typedef union <a href='#ipp_request_u'>ipp_request_u</a> ipp_request_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_t'>ipp_t</a></h3>
-<h4>Description</h4>
-<p>Attribute Value
-<h4>Definition</h4>
-<p><tt>
-typedef struct <a href='#ipp_s'>ipp_s</a> ipp_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_uchar_t'>ipp_uchar_t</a></h3>
-<h4>Description</h4>
-<p>IPP status codes...
-<h4>Definition</h4>
-<p><tt>
-typedef typedef unsigned char ipp_uchar_t;
-</tt></p>
-<!-- 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
-<h4>Definition</h4>
-<p><tt>
-typedef union <a href='#ipp_value_u'>ipp_value_u</a> ipp_value_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h2 class='title'><a name='UNIONS'>Unions</a></h2>
-<ul>
-       <li><a href='#ipp_request_u'><tt>ipp_request_u</tt></a> </li>
-       <li><a href='#ipp_value_u'><tt>ipp_value_u</tt></a> </li>
-</ul>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_request_u'>ipp_request_u</a></h3>
-<h4>Description</h4>
-<p>Request Header
-<h4>Definition</h4>
-<p><tt>
-union ipp_request_u<br>
-{<br>
-};</tt></p>
-<h4>Members</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Members'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='ipp_value_u'>ipp_value_u</a></h3>
-<h4>Description</h4>
-<p>New in CUPS 1.1.19
-<h4>Definition</h4>
-<p><tt>
-union ipp_value_u<br>
-{<br>
-&nbsp;&nbsp;char boolean;<br>
-&nbsp;&nbsp;<a href='#ipp_t'>ipp_t</a> * collection;<br>
-&nbsp;&nbsp;<a href='#ipp_uchar_t'>ipp_uchar_t</a> date[11];<br>
-&nbsp;&nbsp;int integer;<br>
-};</tt></p>
-<h4>Members</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Members'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>boolean</tt> </td><td>Boolean value
-</td></tr>
-<tr><td><tt>collection</tt> </td><td>Collection value
-</td></tr>
-<tr><td><tt>date[11]</tt> </td><td>Date/time value
-</td></tr>
-<tr><td><tt>integer</tt> </td><td>Integer/enumerated value
-</td></tr>
-</tbody></table></div>
+with a hostname. </p>
+<p class="code">struct http_addrlist_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addr_t">http_addr_t</a> addr;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#http_addrlist_s">http_addrlist_s</a> *next;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>addr </dt>
+<dd class="description">Address</dd>
+<dt>next </dt>
+<dd class="description">Pointer to next address in list</dd>
+</dl>
+<h3 class="struct"><span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span><a name="http_credential_s">http_credential_s</a></h3>
+<p class="description">HTTP credential data </p>
+<p class="code">struct http_credential_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *data;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t datalen;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>data </dt>
+<dd class="description">Pointer to credential data</dd>
+<dt>datalen </dt>
+<dd class="description">Credential length</dd>
+</dl>
+<h3 class="struct"><a name="pollfd">pollfd</a></h3>
+<p class="description">User data (unused)</p>
+<p class="code">struct pollfd *pollfds, unsigned int num_pollfds, int timeout, void *context) {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void) context;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void) timeout;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>context </dt>
+<dt>timeout </dt>
+</dl>
+<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
+<h3 class="enumeration"><a name="http_auth_e">http_auth_e</a></h3>
+<p class="description">HTTP authentication types</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_AUTH_BASIC </dt>
+<dd class="description">Basic authentication in use</dd>
+<dt>HTTP_AUTH_MD5 </dt>
+<dd class="description">Digest authentication in use</dd>
+<dt>HTTP_AUTH_MD5_INT </dt>
+<dd class="description">Digest authentication in use for body</dd>
+<dt>HTTP_AUTH_MD5_SESS </dt>
+<dd class="description">MD5-session authentication in use</dd>
+<dt>HTTP_AUTH_MD5_SESS_INT </dt>
+<dd class="description">MD5-session authentication in use for body</dd>
+<dt>HTTP_AUTH_NEGOTIATE <span class="info">&nbsp;CUPS 1.3/OS X 10.5&nbsp;</span></dt>
+<dd class="description">GSSAPI authentication in use </dd>
+<dt>HTTP_AUTH_NONE </dt>
+<dd class="description">No authentication in use</dd>
+</dl>
+<h3 class="enumeration"><a name="http_encoding_e">http_encoding_e</a></h3>
+<p class="description">HTTP transfer encoding values</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_ENCODING_CHUNKED </dt>
+<dd class="description">Data is chunked</dd>
+<dt>HTTP_ENCODING_FIELDS </dt>
+<dd class="description">Sending HTTP fields</dd>
+<dt>HTTP_ENCODING_LENGTH </dt>
+<dd class="description">Data is sent with Content-Length</dd>
+</dl>
+<h3 class="enumeration"><a name="http_encryption_e">http_encryption_e</a></h3>
+<p class="description">HTTP encryption values</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_ENCRYPTION_ALWAYS </dt>
+<dd class="description">Always encrypt (SSL)</dd>
+<dt>HTTP_ENCRYPTION_IF_REQUESTED </dt>
+<dd class="description">Encrypt if requested (TLS upgrade)</dd>
+<dt>HTTP_ENCRYPTION_NEVER </dt>
+<dd class="description">Never encrypt</dd>
+<dt>HTTP_ENCRYPTION_REQUIRED </dt>
+<dd class="description">Encryption is required (TLS upgrade)</dd>
+</dl>
+<h3 class="enumeration"><a name="http_field_e">http_field_e</a></h3>
+<p class="description">HTTP field names</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_FIELD_ACCEPT_ENCODING <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">Accepting-Encoding field </dd>
+<dt>HTTP_FIELD_ACCEPT_LANGUAGE </dt>
+<dd class="description">Accept-Language field</dd>
+<dt>HTTP_FIELD_ACCEPT_RANGES </dt>
+<dd class="description">Accept-Ranges field</dd>
+<dt>HTTP_FIELD_ALLOW <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">Allow field </dd>
+<dt>HTTP_FIELD_AUTHORIZATION </dt>
+<dd class="description">Authorization field</dd>
+<dt>HTTP_FIELD_CONNECTION </dt>
+<dd class="description">Connection field</dd>
+<dt>HTTP_FIELD_CONTENT_ENCODING </dt>
+<dd class="description">Content-Encoding field</dd>
+<dt>HTTP_FIELD_CONTENT_LANGUAGE </dt>
+<dd class="description">Content-Language field</dd>
+<dt>HTTP_FIELD_CONTENT_LENGTH </dt>
+<dd class="description">Content-Length field</dd>
+<dt>HTTP_FIELD_CONTENT_LOCATION </dt>
+<dd class="description">Content-Location field</dd>
+<dt>HTTP_FIELD_CONTENT_MD5 </dt>
+<dd class="description">Content-MD5 field</dd>
+<dt>HTTP_FIELD_CONTENT_RANGE </dt>
+<dd class="description">Content-Range field</dd>
+<dt>HTTP_FIELD_CONTENT_TYPE </dt>
+<dd class="description">Content-Type field</dd>
+<dt>HTTP_FIELD_CONTENT_VERSION </dt>
+<dd class="description">Content-Version field</dd>
+<dt>HTTP_FIELD_DATE </dt>
+<dd class="description">Date field</dd>
+<dt>HTTP_FIELD_HOST </dt>
+<dd class="description">Host field</dd>
+<dt>HTTP_FIELD_IF_MODIFIED_SINCE </dt>
+<dd class="description">If-Modified-Since field</dd>
+<dt>HTTP_FIELD_IF_UNMODIFIED_SINCE </dt>
+<dd class="description">If-Unmodified-Since field</dd>
+<dt>HTTP_FIELD_KEEP_ALIVE </dt>
+<dd class="description">Keep-Alive field</dd>
+<dt>HTTP_FIELD_LAST_MODIFIED </dt>
+<dd class="description">Last-Modified field</dd>
+<dt>HTTP_FIELD_LINK </dt>
+<dd class="description">Link field</dd>
+<dt>HTTP_FIELD_LOCATION </dt>
+<dd class="description">Location field</dd>
+<dt>HTTP_FIELD_MAX </dt>
+<dd class="description">Maximum field index</dd>
+<dt>HTTP_FIELD_RANGE </dt>
+<dd class="description">Range field</dd>
+<dt>HTTP_FIELD_REFERER </dt>
+<dd class="description">Referer field</dd>
+<dt>HTTP_FIELD_RETRY_AFTER </dt>
+<dd class="description">Retry-After field</dd>
+<dt>HTTP_FIELD_SERVER <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">Server field </dd>
+<dt>HTTP_FIELD_TRANSFER_ENCODING </dt>
+<dd class="description">Transfer-Encoding field</dd>
+<dt>HTTP_FIELD_UNKNOWN </dt>
+<dd class="description">Unknown field</dd>
+<dt>HTTP_FIELD_UPGRADE </dt>
+<dd class="description">Upgrade field</dd>
+<dt>HTTP_FIELD_USER_AGENT </dt>
+<dd class="description">User-Agent field</dd>
+<dt>HTTP_FIELD_WWW_AUTHENTICATE </dt>
+<dd class="description">WWW-Authenticate field</dd>
+</dl>
+<h3 class="enumeration"><a name="http_keepalive_e">http_keepalive_e</a></h3>
+<p class="description">HTTP keep-alive values</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_KEEPALIVE_OFF </dt>
+<dd class="description">No keep alive support</dd>
+<dt>HTTP_KEEPALIVE_ON </dt>
+<dd class="description">Use keep alive</dd>
+</dl>
+<h3 class="enumeration"><a name="http_state_e">http_state_e</a></h3>
+<p class="description">HTTP state values; states
+are server-oriented...</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_STATE_CONNECT </dt>
+<dd class="description">CONNECT command, waiting for blank line</dd>
+<dt>HTTP_STATE_DELETE </dt>
+<dd class="description">DELETE command, waiting for blank line</dd>
+<dt>HTTP_STATE_ERROR </dt>
+<dd class="description">Error on socket</dd>
+<dt>HTTP_STATE_GET </dt>
+<dd class="description">GET command, waiting for blank line</dd>
+<dt>HTTP_STATE_GET_SEND </dt>
+<dd class="description">GET command, sending data</dd>
+<dt>HTTP_STATE_HEAD </dt>
+<dd class="description">HEAD command, waiting for blank line</dd>
+<dt>HTTP_STATE_OPTIONS </dt>
+<dd class="description">OPTIONS command, waiting for blank line</dd>
+<dt>HTTP_STATE_POST </dt>
+<dd class="description">POST command, waiting for blank line</dd>
+<dt>HTTP_STATE_POST_RECV </dt>
+<dd class="description">POST command, receiving data</dd>
+<dt>HTTP_STATE_POST_SEND </dt>
+<dd class="description">POST command, sending data</dd>
+<dt>HTTP_STATE_PUT </dt>
+<dd class="description">PUT command, waiting for blank line</dd>
+<dt>HTTP_STATE_PUT_RECV </dt>
+<dd class="description">PUT command, receiving data</dd>
+<dt>HTTP_STATE_STATUS </dt>
+<dd class="description">Command complete, sending status</dd>
+<dt>HTTP_STATE_TRACE </dt>
+<dd class="description">TRACE command, waiting for blank line</dd>
+<dt>HTTP_STATE_UNKNOWN_METHOD <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">Unknown request method, waiting for blank line </dd>
+<dt>HTTP_STATE_UNKNOWN_VERSION <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">Unknown request method, waiting for blank line </dd>
+<dt>HTTP_STATE_WAITING </dt>
+<dd class="description">Waiting for command</dd>
+</dl>
+<h3 class="enumeration"><a name="http_status_e">http_status_e</a></h3>
+<p class="description">HTTP status codes</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_STATUS_ACCEPTED </dt>
+<dd class="description">DELETE command was successful</dd>
+<dt>HTTP_STATUS_BAD_GATEWAY </dt>
+<dd class="description">Bad gateway</dd>
+<dt>HTTP_STATUS_BAD_REQUEST </dt>
+<dd class="description">Bad request</dd>
+<dt>HTTP_STATUS_CONFLICT </dt>
+<dd class="description">Request is self-conflicting</dd>
+<dt>HTTP_STATUS_CONTINUE </dt>
+<dd class="description">Everything OK, keep going...</dd>
+<dt>HTTP_STATUS_CREATED </dt>
+<dd class="description">PUT command was successful</dd>
+<dt>HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED <span class="info">&nbsp;CUPS 1.4&nbsp;</span></dt>
+<dd class="description">User canceled authorization </dd>
+<dt>HTTP_STATUS_CUPS_PKI_ERROR <span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span></dt>
+<dd class="description">Error negotiating a secure connection </dd>
+<dt>HTTP_STATUS_ERROR </dt>
+<dd class="description">An error response from httpXxxx()</dd>
+<dt>HTTP_STATUS_EXPECTATION_FAILED </dt>
+<dd class="description">The expectation given in an Expect header field was not met</dd>
+<dt>HTTP_STATUS_FORBIDDEN </dt>
+<dd class="description">Forbidden to access this URI</dd>
+<dt>HTTP_STATUS_GATEWAY_TIMEOUT </dt>
+<dd class="description">Gateway connection timed out</dd>
+<dt>HTTP_STATUS_GONE </dt>
+<dd class="description">Server has gone away</dd>
+<dt>HTTP_STATUS_LENGTH_REQUIRED </dt>
+<dd class="description">A content length or encoding is required</dd>
+<dt>HTTP_STATUS_METHOD_NOT_ALLOWED </dt>
+<dd class="description">Method is not allowed</dd>
+<dt>HTTP_STATUS_MOVED_PERMANENTLY </dt>
+<dd class="description">Document has moved permanently</dd>
+<dt>HTTP_STATUS_MOVED_TEMPORARILY </dt>
+<dd class="description">Document has moved temporarily</dd>
+<dt>HTTP_STATUS_MULTIPLE_CHOICES </dt>
+<dd class="description">Multiple files match request</dd>
+<dt>HTTP_STATUS_NONE <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">No Expect value </dd>
+<dt>HTTP_STATUS_NOT_ACCEPTABLE </dt>
+<dd class="description">Not Acceptable</dd>
+<dt>HTTP_STATUS_NOT_AUTHORITATIVE </dt>
+<dd class="description">Information isn't authoritative</dd>
+<dt>HTTP_STATUS_NOT_FOUND </dt>
+<dd class="description">URI was not found</dd>
+<dt>HTTP_STATUS_NOT_IMPLEMENTED </dt>
+<dd class="description">Feature not implemented</dd>
+<dt>HTTP_STATUS_NOT_MODIFIED </dt>
+<dd class="description">File not modified</dd>
+<dt>HTTP_STATUS_NOT_SUPPORTED </dt>
+<dd class="description">HTTP version not supported</dd>
+<dt>HTTP_STATUS_NO_CONTENT </dt>
+<dd class="description">Successful command, no new data</dd>
+<dt>HTTP_STATUS_OK </dt>
+<dd class="description">OPTIONS/GET/HEAD/POST/TRACE command was successful</dd>
+<dt>HTTP_STATUS_PARTIAL_CONTENT </dt>
+<dd class="description">Only a partial file was recieved/sent</dd>
+<dt>HTTP_STATUS_PAYMENT_REQUIRED </dt>
+<dd class="description">Payment required</dd>
+<dt>HTTP_STATUS_PRECONDITION </dt>
+<dd class="description">Precondition failed</dd>
+<dt>HTTP_STATUS_PROXY_AUTHENTICATION </dt>
+<dd class="description">Proxy Authentication is Required</dd>
+<dt>HTTP_STATUS_REQUESTED_RANGE </dt>
+<dd class="description">The requested range is not satisfiable</dd>
+<dt>HTTP_STATUS_REQUEST_TIMEOUT </dt>
+<dd class="description">Request timed out</dd>
+<dt>HTTP_STATUS_REQUEST_TOO_LARGE </dt>
+<dd class="description">Request entity too large</dd>
+<dt>HTTP_STATUS_RESET_CONTENT </dt>
+<dd class="description">Content was reset/recreated</dd>
+<dt>HTTP_STATUS_SEE_OTHER </dt>
+<dd class="description">See this other link...</dd>
+<dt>HTTP_STATUS_SERVER_ERROR </dt>
+<dd class="description">Internal server error</dd>
+<dt>HTTP_STATUS_SERVICE_UNAVAILABLE </dt>
+<dd class="description">Service is unavailable</dd>
+<dt>HTTP_STATUS_SWITCHING_PROTOCOLS </dt>
+<dd class="description">HTTP upgrade to TLS/SSL</dd>
+<dt>HTTP_STATUS_UNAUTHORIZED </dt>
+<dd class="description">Unauthorized to access host</dd>
+<dt>HTTP_STATUS_UNSUPPORTED_MEDIATYPE </dt>
+<dd class="description">The requested media type is unsupported</dd>
+<dt>HTTP_STATUS_UPGRADE_REQUIRED </dt>
+<dd class="description">Upgrade to SSL/TLS required</dd>
+<dt>HTTP_STATUS_URI_TOO_LONG </dt>
+<dd class="description">URI too long</dd>
+<dt>HTTP_STATUS_USE_PROXY </dt>
+<dd class="description">Must use a proxy to access this URI</dd>
+</dl>
+<h3 class="enumeration"><a name="http_uri_coding_e">http_uri_coding_e</a></h3>
+<p class="description">URI en/decode flags</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_URI_CODING_ALL </dt>
+<dd class="description">En/decode everything</dd>
+<dt>HTTP_URI_CODING_HOSTNAME </dt>
+<dd class="description">En/decode the hostname portion</dd>
+<dt>HTTP_URI_CODING_MOST </dt>
+<dd class="description">En/decode all but the query</dd>
+<dt>HTTP_URI_CODING_NONE </dt>
+<dd class="description">Don't en/decode anything</dd>
+<dt>HTTP_URI_CODING_QUERY </dt>
+<dd class="description">En/decode the query portion</dd>
+<dt>HTTP_URI_CODING_RESOURCE </dt>
+<dd class="description">En/decode the resource portion</dd>
+<dt>HTTP_URI_CODING_RFC6874 </dt>
+<dd class="description">Use RFC 6874 address format</dd>
+<dt>HTTP_URI_CODING_USERNAME </dt>
+<dd class="description">En/decode the username portion</dd>
+</dl>
+<h3 class="enumeration"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="http_uri_status_e">http_uri_status_e</a></h3>
+<p class="description">URI separation status </p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_URI_STATUS_BAD_ARGUMENTS </dt>
+<dd class="description">Bad arguments to function (error)</dd>
+<dt>HTTP_URI_STATUS_BAD_HOSTNAME </dt>
+<dd class="description">Bad hostname in URI (error)</dd>
+<dt>HTTP_URI_STATUS_BAD_PORT </dt>
+<dd class="description">Bad port number in URI (error)</dd>
+<dt>HTTP_URI_STATUS_BAD_RESOURCE </dt>
+<dd class="description">Bad resource in URI (error)</dd>
+<dt>HTTP_URI_STATUS_BAD_SCHEME </dt>
+<dd class="description">Bad scheme in URI (error)</dd>
+<dt>HTTP_URI_STATUS_BAD_URI </dt>
+<dd class="description">Bad/empty URI (error)</dd>
+<dt>HTTP_URI_STATUS_BAD_USERNAME </dt>
+<dd class="description">Bad username in URI (error)</dd>
+<dt>HTTP_URI_STATUS_MISSING_RESOURCE </dt>
+<dd class="description">Missing resource in URI (warning)</dd>
+<dt>HTTP_URI_STATUS_MISSING_SCHEME </dt>
+<dd class="description">Missing scheme in URI (warning)</dd>
+<dt>HTTP_URI_STATUS_OK </dt>
+<dd class="description">URI decoded OK</dd>
+<dt>HTTP_URI_STATUS_OVERFLOW </dt>
+<dd class="description">URI buffer for httpAssembleURI is too small</dd>
+<dt>HTTP_URI_STATUS_UNKNOWN_SCHEME </dt>
+<dd class="description">Unknown scheme in URI (warning)</dd>
+</dl>
+<h3 class="enumeration"><a name="http_version_e">http_version_e</a></h3>
+<p class="description">HTTP version numbers</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>HTTP_VERSION_0_9 </dt>
+<dd class="description">HTTP/0.9</dd>
+<dt>HTTP_VERSION_1_0 </dt>
+<dd class="description">HTTP/1.0</dd>
+<dt>HTTP_VERSION_1_1 </dt>
+<dd class="description">HTTP/1.1</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_dstate_e">ipp_dstate_e</a></h3>
+<p class="description">Document states</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_DOCUMENT_ABORTED </dt>
+<dd class="description">Document is aborted</dd>
+<dt>IPP_DOCUMENT_CANCELED </dt>
+<dd class="description">Document is canceled</dd>
+<dt>IPP_DOCUMENT_COMPLETED </dt>
+<dd class="description">Document is completed</dd>
+<dt>IPP_DOCUMENT_PENDING </dt>
+<dd class="description">Document is pending</dd>
+<dt>IPP_DOCUMENT_PROCESSING </dt>
+<dd class="description">Document is processing</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_finishings_e">ipp_finishings_e</a></h3>
+<p class="description">Finishings</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_FINISHINGS_BALE </dt>
+<dd class="description">Bale (any type)</dd>
+<dt>IPP_FINISHINGS_BIND </dt>
+<dd class="description">Bind</dd>
+<dt>IPP_FINISHINGS_BIND_BOTTOM </dt>
+<dd class="description">Bind on bottom</dd>
+<dt>IPP_FINISHINGS_BIND_LEFT </dt>
+<dd class="description">Bind on left</dd>
+<dt>IPP_FINISHINGS_BIND_RIGHT </dt>
+<dd class="description">Bind on right</dd>
+<dt>IPP_FINISHINGS_BIND_TOP </dt>
+<dd class="description">Bind on top</dd>
+<dt>IPP_FINISHINGS_BOOKLET_MAKER </dt>
+<dd class="description">Fold to make booklet</dd>
+<dt>IPP_FINISHINGS_COVER </dt>
+<dd class="description">Add cover</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_ACCORDIAN </dt>
+<dd class="description">Accordian-fold the paper vertically into four sections</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_DOUBLE_GATE </dt>
+<dd class="description">Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_GATE </dt>
+<dd class="description">Fold the top and bottom quarters of the paper towards the midline</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_HALF </dt>
+<dd class="description">Fold the paper in half vertically</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_HALF_Z </dt>
+<dd class="description">Fold the paper in half horizontally, then Z-fold the paper vertically</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_LEFT_GATE </dt>
+<dd class="description">Fold the top quarter of the paper towards the midline</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_LETTER </dt>
+<dd class="description">Fold the paper into three sections vertically; sometimes also known as a C fold</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_PARALLEL </dt>
+<dd class="description">Fold the paper in half vertically two times, yielding four sections</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_POSTER </dt>
+<dd class="description">Fold the paper in half horizontally and vertically; sometimes also called a cross fold</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_RIGHT_GATE </dt>
+<dd class="description">Fold the bottom quarter of the paper towards the midline</dd>
+<dt>IPP_FINISHINGS_CUPS_FOLD_Z </dt>
+<dd class="description">Fold the paper vertically into three sections, forming a Z</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_LEFT </dt>
+<dd class="description">Punch 1 hole bottom left</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_RIGHT </dt>
+<dd class="description">Punch 1 hole bottom right</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_DUAL_BOTTOM </dt>
+<dd class="description">Punch 2 holes bottom edge</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_DUAL_LEFT </dt>
+<dd class="description">Punch 2 holes left side</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_DUAL_RIGHT </dt>
+<dd class="description">Punch 2 holes right side</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_DUAL_TOP </dt>
+<dd class="description">Punch 2 holes top edge</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_QUAD_BOTTOM </dt>
+<dd class="description">Punch 4 holes bottom edge</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_QUAD_LEFT </dt>
+<dd class="description">Punch 4 holes left side</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_QUAD_RIGHT </dt>
+<dd class="description">Punch 4 holes right side</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_QUAD_TOP </dt>
+<dd class="description">Punch 4 holes top edge</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_TOP_LEFT </dt>
+<dd class="description">Punch 1 hole top left</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_TOP_RIGHT </dt>
+<dd class="description">Punch 1 hole top right</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_BOTTOM </dt>
+<dd class="description">Punch 3 holes bottom edge</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_LEFT </dt>
+<dd class="description">Punch 3 holes left side</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_RIGHT </dt>
+<dd class="description">Punch 3 holes right side</dd>
+<dt>IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_TOP </dt>
+<dd class="description">Punch 3 holes top edge</dd>
+<dt>IPP_FINISHINGS_EDGE_STITCH </dt>
+<dd class="description">Stitch along any side</dd>
+<dt>IPP_FINISHINGS_EDGE_STITCH_BOTTOM </dt>
+<dd class="description">Stitch along bottom edge</dd>
+<dt>IPP_FINISHINGS_EDGE_STITCH_LEFT </dt>
+<dd class="description">Stitch along left side</dd>
+<dt>IPP_FINISHINGS_EDGE_STITCH_RIGHT </dt>
+<dd class="description">Stitch along right side</dd>
+<dt>IPP_FINISHINGS_EDGE_STITCH_TOP </dt>
+<dd class="description">Stitch along top edge</dd>
+<dt>IPP_FINISHINGS_FOLD </dt>
+<dd class="description">Fold (any type)</dd>
+<dt>IPP_FINISHINGS_FOLD_ACCORDIAN </dt>
+<dd class="description">Accordian-fold the paper vertically into four sections</dd>
+<dt>IPP_FINISHINGS_FOLD_DOUBLE_GATE </dt>
+<dd class="description">Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically</dd>
+<dt>IPP_FINISHINGS_FOLD_GATE </dt>
+<dd class="description">Fold the top and bottom quarters of the paper towards the midline</dd>
+<dt>IPP_FINISHINGS_FOLD_HALF </dt>
+<dd class="description">Fold the paper in half vertically</dd>
+<dt>IPP_FINISHINGS_FOLD_HALF_Z </dt>
+<dd class="description">Fold the paper in half horizontally, then Z-fold the paper vertically</dd>
+<dt>IPP_FINISHINGS_FOLD_LEFT_GATE </dt>
+<dd class="description">Fold the top quarter of the paper towards the midline</dd>
+<dt>IPP_FINISHINGS_FOLD_LETTER </dt>
+<dd class="description">Fold the paper into three sections vertically; sometimes also known as a C fold</dd>
+<dt>IPP_FINISHINGS_FOLD_PARALLEL </dt>
+<dd class="description">Fold the paper in half vertically two times, yielding four sections</dd>
+<dt>IPP_FINISHINGS_FOLD_POSTER </dt>
+<dd class="description">Fold the paper in half horizontally and vertically; sometimes also called a cross fold</dd>
+<dt>IPP_FINISHINGS_FOLD_RIGHT_GATE </dt>
+<dd class="description">Fold the bottom quarter of the paper towards the midline</dd>
+<dt>IPP_FINISHINGS_FOLD_Z </dt>
+<dd class="description">Fold the paper vertically into three sections, forming a Z</dd>
+<dt>IPP_FINISHINGS_JOG_OFFSET </dt>
+<dd class="description">Offset for binding (any type)</dd>
+<dt>IPP_FINISHINGS_NONE </dt>
+<dd class="description">No finishing</dd>
+<dt>IPP_FINISHINGS_PUNCH </dt>
+<dd class="description">Punch (any location/count)</dd>
+<dt>IPP_FINISHINGS_PUNCH_BOTTOM_LEFT </dt>
+<dd class="description">Punch 1 hole bottom left</dd>
+<dt>IPP_FINISHINGS_PUNCH_BOTTOM_RIGHT </dt>
+<dd class="description">Punch 1 hole bottom right</dd>
+<dt>IPP_FINISHINGS_PUNCH_DUAL_BOTTOM </dt>
+<dd class="description">Punch 2 holes bottom edge</dd>
+<dt>IPP_FINISHINGS_PUNCH_DUAL_LEFT </dt>
+<dd class="description">Punch 2 holes left side</dd>
+<dt>IPP_FINISHINGS_PUNCH_DUAL_RIGHT </dt>
+<dd class="description">Punch 2 holes right side</dd>
+<dt>IPP_FINISHINGS_PUNCH_DUAL_TOP </dt>
+<dd class="description">Punch 2 holes top edge</dd>
+<dt>IPP_FINISHINGS_PUNCH_QUAD_BOTTOM </dt>
+<dd class="description">Punch 4 holes bottom edge</dd>
+<dt>IPP_FINISHINGS_PUNCH_QUAD_LEFT </dt>
+<dd class="description">Punch 4 holes left side</dd>
+<dt>IPP_FINISHINGS_PUNCH_QUAD_RIGHT </dt>
+<dd class="description">Punch 4 holes right side</dd>
+<dt>IPP_FINISHINGS_PUNCH_QUAD_TOP </dt>
+<dd class="description">Punch 4 holes top edge</dd>
+<dt>IPP_FINISHINGS_PUNCH_TOP_LEFT </dt>
+<dd class="description">Punch 1 hole top left</dd>
+<dt>IPP_FINISHINGS_PUNCH_TOP_RIGHT </dt>
+<dd class="description">Punch 1 hole top right</dd>
+<dt>IPP_FINISHINGS_PUNCH_TRIPLE_BOTTOM </dt>
+<dd class="description">Punch 3 holes bottom edge</dd>
+<dt>IPP_FINISHINGS_PUNCH_TRIPLE_LEFT </dt>
+<dd class="description">Punch 3 holes left side</dd>
+<dt>IPP_FINISHINGS_PUNCH_TRIPLE_RIGHT </dt>
+<dd class="description">Punch 3 holes right side</dd>
+<dt>IPP_FINISHINGS_PUNCH_TRIPLE_TOP </dt>
+<dd class="description">Punch 3 holes top edge</dd>
+<dt>IPP_FINISHINGS_SADDLE_STITCH </dt>
+<dd class="description">Staple interior</dd>
+<dt>IPP_FINISHINGS_STAPLE </dt>
+<dd class="description">Staple (any location)</dd>
+<dt>IPP_FINISHINGS_STAPLE_BOTTOM_LEFT </dt>
+<dd class="description">Staple bottom left corner</dd>
+<dt>IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT </dt>
+<dd class="description">Staple bottom right corner</dd>
+<dt>IPP_FINISHINGS_STAPLE_DUAL_BOTTOM </dt>
+<dd class="description">Two staples on bottom</dd>
+<dt>IPP_FINISHINGS_STAPLE_DUAL_LEFT </dt>
+<dd class="description">Two staples on left</dd>
+<dt>IPP_FINISHINGS_STAPLE_DUAL_RIGHT </dt>
+<dd class="description">Two staples on right</dd>
+<dt>IPP_FINISHINGS_STAPLE_DUAL_TOP </dt>
+<dd class="description">Two staples on top</dd>
+<dt>IPP_FINISHINGS_STAPLE_TOP_LEFT </dt>
+<dd class="description">Staple top left corner</dd>
+<dt>IPP_FINISHINGS_STAPLE_TOP_RIGHT </dt>
+<dd class="description">Staple top right corner</dd>
+<dt>IPP_FINISHINGS_TRIM </dt>
+<dd class="description">Trim (any type)</dd>
+<dt>IPP_FINISHINGS_TRIM_AFTER_COPIES </dt>
+<dd class="description">Trim output after each copy</dd>
+<dt>IPP_FINISHINGS_TRIM_AFTER_DOCUMENTS </dt>
+<dd class="description">Trim output after each document</dd>
+<dt>IPP_FINISHINGS_TRIM_AFTER_JOB </dt>
+<dd class="description">Trim output after job</dd>
+<dt>IPP_FINISHINGS_TRIM_AFTER_PAGES </dt>
+<dd class="description">Trim output after each page</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_jcollate_e">ipp_jcollate_e</a></h3>
+<p class="description">Job collation types</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_JCOLLATE_COLLATED_DOCUMENTS </dt>
+<dt>IPP_JCOLLATE_UNCOLLATED_DOCUMENTS </dt>
+<dt>IPP_JCOLLATE_UNCOLLATED_SHEETS </dt>
+</dl>
+<h3 class="enumeration"><a name="ipp_jstate_e">ipp_jstate_e</a></h3>
+<p class="description">Job states</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_JSTATE_ABORTED </dt>
+<dd class="description">Job has aborted due to error</dd>
+<dt>IPP_JSTATE_CANCELED </dt>
+<dd class="description">Job has been canceled</dd>
+<dt>IPP_JSTATE_COMPLETED </dt>
+<dd class="description">Job has completed successfully</dd>
+<dt>IPP_JSTATE_HELD </dt>
+<dd class="description">Job is held for printing</dd>
+<dt>IPP_JSTATE_PENDING </dt>
+<dd class="description">Job is waiting to be printed</dd>
+<dt>IPP_JSTATE_PROCESSING </dt>
+<dd class="description">Job is currently printing</dd>
+<dt>IPP_JSTATE_STOPPED </dt>
+<dd class="description">Job has been stopped</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_op_e">ipp_op_e</a></h3>
+<p class="description">IPP operations</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_OP_CANCEL_JOB </dt>
+<dd class="description">Cancel a job</dd>
+<dt>IPP_OP_CANCEL_JOBS </dt>
+<dd class="description">Cancel-Jobs</dd>
+<dt>IPP_OP_CANCEL_MY_JOBS </dt>
+<dd class="description">Cancel-My-Jobs</dd>
+<dt>IPP_OP_CANCEL_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
+<dd class="description">Cancel a subscription </dd>
+<dt>IPP_OP_CLOSE_JOB </dt>
+<dd class="description">Close-Job</dd>
+<dt>IPP_OP_CREATE_JOB </dt>
+<dd class="description">Create an empty print job</dd>
+<dt>IPP_OP_CREATE_JOB_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
+<dd class="description">Create a job subscription </dd>
+<dt>IPP_OP_CREATE_PRINTER_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
+<dd class="description">Create a printer subscription </dd>
+<dt>IPP_OP_CUPS_ACCEPT_JOBS </dt>
+<dd class="description">Accept new jobs on a printer</dd>
+<dt>IPP_OP_CUPS_ADD_MODIFY_CLASS </dt>
+<dd class="description">Add or modify a class</dd>
+<dt>IPP_OP_CUPS_ADD_MODIFY_PRINTER </dt>
+<dd class="description">Add or modify a printer</dd>
+<dt>IPP_OP_CUPS_AUTHENTICATE_JOB <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
+<dd class="description">Authenticate a job </dd>
+<dt>IPP_OP_CUPS_DELETE_CLASS </dt>
+<dd class="description">Delete a class</dd>
+<dt>IPP_OP_CUPS_DELETE_PRINTER </dt>
+<dd class="description">Delete a printer</dd>
+<dt>IPP_OP_CUPS_GET_CLASSES <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
+<dd class="description">Get a list of classes </dd>
+<dt>IPP_OP_CUPS_GET_DEFAULT </dt>
+<dd class="description">Get the default printer</dd>
+<dt>IPP_OP_CUPS_GET_DEVICES </dt>
+<dd class="description">Get a list of supported devices</dd>
+<dt>IPP_OP_CUPS_GET_DOCUMENT <span class="info">&nbsp;CUPS 1.4/OS X 10.6&nbsp;</span></dt>
+<dd class="description">Get a document file </dd>
+<dt>IPP_OP_CUPS_GET_PPD <span class="info">&nbsp;CUPS 1.3/OS X 10.5&nbsp;</span></dt>
+<dd class="description">Get a PPD file </dd>
+<dt>IPP_OP_CUPS_GET_PPDS </dt>
+<dd class="description">Get a list of supported drivers</dd>
+<dt>IPP_OP_CUPS_GET_PRINTERS </dt>
+<dd class="description">Get a list of printers and/or classes</dd>
+<dt>IPP_OP_CUPS_INVALID </dt>
+<dd class="description">Invalid operation name for <a href="#ippOpValue"><code>ippOpValue</code></a></dd>
+<dt>IPP_OP_CUPS_MOVE_JOB </dt>
+<dd class="description">Move a job to a different printer</dd>
+<dt>IPP_OP_CUPS_REJECT_JOBS </dt>
+<dd class="description">Reject new jobs on a printer</dd>
+<dt>IPP_OP_CUPS_SET_DEFAULT </dt>
+<dd class="description">Set the default printer</dd>
+<dt>IPP_OP_DISABLE_PRINTER </dt>
+<dd class="description">Stop a printer</dd>
+<dt>IPP_OP_ENABLE_PRINTER </dt>
+<dd class="description">Start a printer</dd>
+<dt>IPP_OP_GET_JOBS </dt>
+<dd class="description">Get a list of jobs</dd>
+<dt>IPP_OP_GET_JOB_ATTRIBUTES </dt>
+<dd class="description">Get job attributes</dd>
+<dt>IPP_OP_GET_NOTIFICATIONS <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
+<dd class="description">Get notification events </dd>
+<dt>IPP_OP_GET_PRINTER_ATTRIBUTES </dt>
+<dd class="description">Get printer attributes</dd>
+<dt>IPP_OP_GET_PRINTER_SUPPORTED_VALUES </dt>
+<dd class="description">Get supported attribute values</dd>
+<dt>IPP_OP_GET_SUBSCRIPTIONS <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
+<dd class="description">Get list of subscriptions </dd>
+<dt>IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
+<dd class="description">Get subscription attributes </dd>
+<dt>IPP_OP_HOLD_JOB </dt>
+<dd class="description">Hold a job for printing</dd>
+<dt>IPP_OP_PAUSE_PRINTER </dt>
+<dd class="description">Stop a printer</dd>
+<dt>IPP_OP_PRINT_JOB </dt>
+<dd class="description">Print a single file</dd>
+<dt>IPP_OP_PURGE_JOBS </dt>
+<dd class="description">Cancel all jobs</dd>
+<dt>IPP_OP_RELEASE_JOB </dt>
+<dd class="description">Release a job for printing</dd>
+<dt>IPP_OP_RENEW_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
+<dd class="description">Renew a printer subscription </dd>
+<dt>IPP_OP_RESTART_JOB </dt>
+<dd class="description">Reprint a job</dd>
+<dt>IPP_OP_RESUBMIT_JOB </dt>
+<dd class="description">Resubmit-Job</dd>
+<dt>IPP_OP_RESUME_PRINTER </dt>
+<dd class="description">Start a printer</dd>
+<dt>IPP_OP_SEND_DOCUMENT </dt>
+<dd class="description">Add a file to a job</dd>
+<dt>IPP_OP_SET_JOB_ATTRIBUTES </dt>
+<dd class="description">Set job attributes</dd>
+<dt>IPP_OP_VALIDATE_JOB </dt>
+<dd class="description">Validate job options</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_orient_e">ipp_orient_e</a></h3>
+<p class="description">Orientation values</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_ORIENT_LANDSCAPE </dt>
+<dd class="description">90 degrees counter-clockwise</dd>
+<dt>IPP_ORIENT_PORTRAIT </dt>
+<dd class="description">No rotation</dd>
+<dt>IPP_ORIENT_REVERSE_LANDSCAPE </dt>
+<dd class="description">90 degrees clockwise</dd>
+<dt>IPP_ORIENT_REVERSE_PORTRAIT </dt>
+<dd class="description">180 degrees</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_pstate_e">ipp_pstate_e</a></h3>
+<p class="description">Printer states</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_PSTATE_IDLE </dt>
+<dd class="description">Printer is idle</dd>
+<dt>IPP_PSTATE_PROCESSING </dt>
+<dd class="description">Printer is working</dd>
+<dt>IPP_PSTATE_STOPPED </dt>
+<dd class="description">Printer is stopped</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_quality_e">ipp_quality_e</a></h3>
+<p class="description">Qualities</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_QUALITY_DRAFT </dt>
+<dd class="description">Draft quality</dd>
+<dt>IPP_QUALITY_HIGH </dt>
+<dd class="description">High quality</dd>
+<dt>IPP_QUALITY_NORMAL </dt>
+<dd class="description">Normal quality</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_res_e">ipp_res_e</a></h3>
+<p class="description">Resolution units</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_RES_PER_CM </dt>
+<dd class="description">Pixels per centimeter</dd>
+<dt>IPP_RES_PER_INCH </dt>
+<dd class="description">Pixels per inch</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_state_e">ipp_state_e</a></h3>
+<p class="description">IPP states</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_STATE_ATTRIBUTE </dt>
+<dd class="description">One or more attributes need to be sent/received</dd>
+<dt>IPP_STATE_DATA </dt>
+<dd class="description">IPP request data needs to be sent/received</dd>
+<dt>IPP_STATE_ERROR </dt>
+<dd class="description">An error occurred</dd>
+<dt>IPP_STATE_HEADER </dt>
+<dd class="description">The request header needs to be sent/received</dd>
+<dt>IPP_STATE_IDLE </dt>
+<dd class="description">Nothing is happening/request completed</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_status_e">ipp_status_e</a></h3>
+<p class="description">IPP status codes</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_STATUS_CUPS_INVALID </dt>
+<dd class="description">Invalid status name for <a href="#ippErrorValue"><code>ippErrorValue</code></a></dd>
+<dt>IPP_STATUS_CUPS_SEE_OTHER </dt>
+<dd class="description">cups-see-other</dd>
+<dt>IPP_STATUS_ERROR_ATTRIBUTES_NOT_SETTABLE </dt>
+<dd class="description">client-error-attributes-not-settable</dd>
+<dt>IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES </dt>
+<dd class="description">client-error-attributes-or-values-not-supported</dd>
+<dt>IPP_STATUS_ERROR_BAD_REQUEST </dt>
+<dd class="description">client-error-bad-request</dd>
+<dt>IPP_STATUS_ERROR_BUSY </dt>
+<dd class="description">server-error-busy</dd>
+<dt>IPP_STATUS_ERROR_CHARSET </dt>
+<dd class="description">client-error-charset-not-supported</dd>
+<dt>IPP_STATUS_ERROR_COMPRESSION_ERROR </dt>
+<dd class="description">client-error-compression-error</dd>
+<dt>IPP_STATUS_ERROR_COMPRESSION_NOT_SUPPORTED </dt>
+<dd class="description">client-error-compression-not-supported</dd>
+<dt>IPP_STATUS_ERROR_CONFLICTING </dt>
+<dd class="description">client-error-conflicting-attributes</dd>
+<dt>IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">cups-error-account-authorization-failed </dd>
+<dt>IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">cups-error-account-closed </dd>
+<dt>IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">cups-error-account-info-needed </dd>
+<dt>IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED <span class="info">&nbsp;CUPS 1.7/OS X 10.9&nbsp;</span></dt>
+<dd class="description">cups-error-account-limit-reached </dd>
+<dt>IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED <span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span></dt>
+<dd class="description">cups-authentication-canceled - Authentication canceled by user </dd>
+<dt>IPP_STATUS_ERROR_CUPS_PKI <span class="info">&nbsp;CUPS 1.5/OS X 10.7&nbsp;</span></dt>
+<dd class="description">cups-pki-error - Error negotiating a secure connection </dd>
+<dt>IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED </dt>
+<dd class="description">cups-upgrade-required - TLS upgrade required</dd>
+<dt>IPP_STATUS_ERROR_DEVICE </dt>
+<dd class="description">server-error-device-error</dd>
+<dt>IPP_STATUS_ERROR_DOCUMENT_ACCESS </dt>
+<dd class="description">client-error-document-access-error</dd>
+<dt>IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR </dt>
+<dd class="description">client-error-document-format-error</dd>
+<dt>IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED </dt>
+<dd class="description">client-error-document-format-not-supported</dd>
+<dt>IPP_STATUS_ERROR_DOCUMENT_PASSWORD </dt>
+<dd class="description">client-error-document-password-error</dd>
+<dt>IPP_STATUS_ERROR_DOCUMENT_PERMISSION </dt>
+<dd class="description">client-error-document-permission-error</dd>
+<dt>IPP_STATUS_ERROR_DOCUMENT_SECURITY </dt>
+<dd class="description">client-error-document-security-error</dd>
+<dt>IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE </dt>
+<dd class="description">client-error-document-unprintable-error</dd>
+<dt>IPP_STATUS_ERROR_FORBIDDEN </dt>
+<dd class="description">client-error-forbidden</dd>
+<dt>IPP_STATUS_ERROR_GONE </dt>
+<dd class="description">client-error-gone</dd>
+<dt>IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS </dt>
+<dd class="description">client-error-ignored-all-subscriptions</dd>
+<dt>IPP_STATUS_ERROR_INTERNAL </dt>
+<dd class="description">server-error-internal-error</dd>
+<dt>IPP_STATUS_ERROR_JOB_CANCELED </dt>
+<dd class="description">server-error-job-canceled</dd>
+<dt>IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED </dt>
+<dd class="description">server-error-multiple-document-jobs-not-supported</dd>
+<dt>IPP_STATUS_ERROR_NOT_ACCEPTING_JOBS </dt>
+<dd class="description">server-error-not-accepting-jobs</dd>
+<dt>IPP_STATUS_ERROR_NOT_AUTHENTICATED </dt>
+<dd class="description">client-error-not-authenticated</dd>
+<dt>IPP_STATUS_ERROR_NOT_AUTHORIZED </dt>
+<dd class="description">client-error-not-authorized</dd>
+<dt>IPP_STATUS_ERROR_NOT_FOUND </dt>
+<dd class="description">client-error-not-found</dd>
+<dt>IPP_STATUS_ERROR_NOT_POSSIBLE </dt>
+<dd class="description">client-error-not-possible</dd>
+<dt>IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED </dt>
+<dd class="description">server-error-operation-not-supported</dd>
+<dt>IPP_STATUS_ERROR_PRINTER_IS_DEACTIVATED </dt>
+<dd class="description">server-error-printer-is-deactivated</dd>
+<dt>IPP_STATUS_ERROR_REQUEST_ENTITY </dt>
+<dd class="description">client-error-request-entity-too-large</dd>
+<dt>IPP_STATUS_ERROR_REQUEST_VALUE </dt>
+<dd class="description">client-error-request-value-too-long</dd>
+<dt>IPP_STATUS_ERROR_SERVICE_UNAVAILABLE </dt>
+<dd class="description">server-error-service-unavailable</dd>
+<dt>IPP_STATUS_ERROR_TEMPORARY </dt>
+<dd class="description">server-error-temporary-error</dd>
+<dt>IPP_STATUS_ERROR_TIMEOUT </dt>
+<dd class="description">client-error-timeout</dd>
+<dt>IPP_STATUS_ERROR_TOO_MANY_DOCUMENTS </dt>
+<dd class="description">server-error-too-many-documents</dd>
+<dt>IPP_STATUS_ERROR_TOO_MANY_JOBS </dt>
+<dd class="description">server-error-too-many-jobs</dd>
+<dt>IPP_STATUS_ERROR_TOO_MANY_SUBSCRIPTIONS </dt>
+<dd class="description">client-error-too-many-subscriptions</dd>
+<dt>IPP_STATUS_ERROR_URI_SCHEME </dt>
+<dd class="description">client-error-uri-scheme-not-supported</dd>
+<dt>IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED </dt>
+<dd class="description">server-error-version-not-supported</dd>
+<dt>IPP_STATUS_OK </dt>
+<dd class="description">successful-ok</dd>
+<dt>IPP_STATUS_OK_CONFLICTING </dt>
+<dd class="description">successful-ok-conflicting-attributes</dd>
+<dt>IPP_STATUS_OK_EVENTS_COMPLETE </dt>
+<dd class="description">successful-ok-events-complete</dd>
+<dt>IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED </dt>
+<dd class="description">successful-ok-ignored-or-substituted-attributes</dd>
+<dt>IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS </dt>
+<dd class="description">successful-ok-ignored-subscriptions</dd>
+<dt>IPP_STATUS_OK_TOO_MANY_EVENTS </dt>
+<dd class="description">successful-ok-too-many-events</dd>
+</dl>
+<h3 class="enumeration"><a name="ipp_tag_e">ipp_tag_e</a></h3>
+<p class="description">Format tags for attributes</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>IPP_TAG_ADMINDEFINE </dt>
+<dd class="description">Admin-defined value</dd>
+<dt>IPP_TAG_BEGIN_COLLECTION </dt>
+<dd class="description">Beginning of collection value</dd>
+<dt>IPP_TAG_BOOLEAN </dt>
+<dd class="description">Boolean value</dd>
+<dt>IPP_TAG_CHARSET </dt>
+<dd class="description">Character set value</dd>
+<dt>IPP_TAG_CUPS_INVALID </dt>
+<dd class="description">Invalid tag name for <a href="#ippTagValue"><code>ippTagValue</code></a></dd>
+<dt>IPP_TAG_DATE </dt>
+<dd class="description">Date/time value</dd>
+<dt>IPP_TAG_DEFAULT </dt>
+<dd class="description">Default value</dd>
+<dt>IPP_TAG_DELETEATTR </dt>
+<dd class="description">Delete-attribute value</dd>
+<dt>IPP_TAG_DOCUMENT </dt>
+<dd class="description">Document group</dd>
+<dt>IPP_TAG_END </dt>
+<dd class="description">End-of-attributes</dd>
+<dt>IPP_TAG_END_COLLECTION </dt>
+<dd class="description">End of collection value</dd>
+<dt>IPP_TAG_ENUM </dt>
+<dd class="description">Enumeration value</dd>
+<dt>IPP_TAG_EVENT_NOTIFICATION </dt>
+<dd class="description">Event group</dd>
+<dt>IPP_TAG_EXTENSION </dt>
+<dd class="description">Extension point for 32-bit tags</dd>
+<dt>IPP_TAG_INTEGER </dt>
+<dd class="description">Integer value</dd>
+<dt>IPP_TAG_JOB </dt>
+<dd class="description">Job group</dd>
+<dt>IPP_TAG_KEYWORD </dt>
+<dd class="description">Keyword value</dd>
+<dt>IPP_TAG_LANGUAGE </dt>
+<dd class="description">Language value</dd>
+<dt>IPP_TAG_MEMBERNAME </dt>
+<dd class="description">Collection member name value</dd>
+<dt>IPP_TAG_MIMETYPE </dt>
+<dd class="description">MIME media type value</dd>
+<dt>IPP_TAG_NAME </dt>
+<dd class="description">Name value</dd>
+<dt>IPP_TAG_NAMELANG </dt>
+<dd class="description">Name-with-language value</dd>
+<dt>IPP_TAG_NOTSETTABLE </dt>
+<dd class="description">Not-settable value</dd>
+<dt>IPP_TAG_NOVALUE </dt>
+<dd class="description">No-value value</dd>
+<dt>IPP_TAG_OPERATION </dt>
+<dd class="description">Operation group</dd>
+<dt>IPP_TAG_PRINTER </dt>
+<dd class="description">Printer group</dd>
+<dt>IPP_TAG_RANGE </dt>
+<dd class="description">Range value</dd>
+<dt>IPP_TAG_RESOLUTION </dt>
+<dd class="description">Resolution value</dd>
+<dt>IPP_TAG_STRING </dt>
+<dd class="description">Octet string value</dd>
+<dt>IPP_TAG_SUBSCRIPTION </dt>
+<dd class="description">Subscription group</dd>
+<dt>IPP_TAG_TEXT </dt>
+<dd class="description">Text value</dd>
+<dt>IPP_TAG_TEXTLANG </dt>
+<dd class="description">Text-with-language value</dd>
+<dt>IPP_TAG_UNKNOWN </dt>
+<dd class="description">Unknown value</dd>
+<dt>IPP_TAG_UNSUPPORTED_GROUP </dt>
+<dd class="description">Unsupported attributes group</dd>
+<dt>IPP_TAG_UNSUPPORTED_VALUE </dt>
+<dd class="description">Unsupported value</dd>
+<dt>IPP_TAG_URI </dt>
+<dd class="description">URI value</dd>
+<dt>IPP_TAG_URISCHEME </dt>
+<dd class="description">URI scheme value</dd>
+<dt>IPP_TAG_ZERO </dt>
+<dd class="description">Zero tag - used for separators</dd>
+</dl>
+</div>
 </body>
 </html>