/*
- * "$Id$"
- *
* Internet Printing Protocol functions for CUPS.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 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/".
- *
- * This file is subject to the Apple OS-Developed Software exception.
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
*/
/*
ipp_attribute_t *attr; /* New attribute */
- DEBUG_printf(("ippAddBoolean(ipp=%p, group=%02x(%s), name=\"%s\", value=%d)",
- ipp, group, ippTagString(group), name, value));
+ DEBUG_printf(("ippAddBoolean(ipp=%p, group=%02x(%s), name=\"%s\", value=%d)", (void *)ipp, group, ippTagString(group), name, value));
/*
* Range check input...
_ipp_value_t *value; /* Current value */
- DEBUG_printf(("ippAddBooleans(ipp=%p, group=%02x(%s), name=\"%s\", "
- "num_values=%d, values=%p)", ipp, group, ippTagString(group),
- name, num_values, values));
+ DEBUG_printf(("ippAddBooleans(ipp=%p, group=%02x(%s), name=\"%s\", num_values=%d, values=%p)", (void *)ipp, group, ippTagString(group), name, num_values, (void *)values));
/*
* Range check input...
* (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription
* (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@).
*
- * @since CUPS 1.1.19/OS X 10.3@
+ * @since CUPS 1.1.19/macOS 10.3@
*/
ipp_attribute_t * /* O - New attribute */
ipp_attribute_t *attr; /* New attribute */
- DEBUG_printf(("ippAddCollection(ipp=%p, group=%02x(%s), name=\"%s\", "
- "value=%p)", ipp, group, ippTagString(group), name, value));
+ DEBUG_printf(("ippAddCollection(ipp=%p, group=%02x(%s), name=\"%s\", value=%p)", (void *)ipp, group, ippTagString(group), name, (void *)value));
/*
* Range check input...
* (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription
* (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@).
*
- * @since CUPS 1.1.19/OS X 10.3@
+ * @since CUPS 1.1.19/macOS 10.3@
*/
ipp_attribute_t * /* O - New attribute */
_ipp_value_t *value; /* Current value */
- DEBUG_printf(("ippAddCollections(ipp=%p, group=%02x(%s), name=\"%s\", "
- "num_values=%d, values=%p)", ipp, group, ippTagString(group),
- name, num_values, values));
+ DEBUG_printf(("ippAddCollections(ipp=%p, group=%02x(%s), name=\"%s\", num_values=%d, values=%p)", (void *)ipp, group, ippTagString(group), name, num_values, (void *)values));
/*
* Range check input...
/*
- * 'ippAddDate()' - Add a date attribute to an IPP message.
+ * 'ippAddDate()' - Add a dateTime attribute to an IPP message.
*
* The @code ipp@ parameter refers to an IPP message previously created using
* the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions.
ipp_attribute_t *attr; /* New attribute */
- DEBUG_printf(("ippAddDate(ipp=%p, group=%02x(%s), name=\"%s\", value=%p)",
- ipp, group, ippTagString(group), name, value));
+ DEBUG_printf(("ippAddDate(ipp=%p, group=%02x(%s), name=\"%s\", value=%p)", (void *)ipp, group, ippTagString(group), name, (void *)value));
/*
* Range check input...
ipp_attribute_t *attr; /* New attribute */
- DEBUG_printf(("ippAddInteger(ipp=%p, group=%02x(%s), type=%02x(%s), "
- "name=\"%s\", value=%d)", ipp, group, ippTagString(group),
- value_tag, ippTagString(value_tag), name, value));
+ DEBUG_printf(("ippAddInteger(ipp=%p, group=%02x(%s), type=%02x(%s), name=\"%s\", value=%d)", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name, value));
value_tag &= IPP_TAG_CUPS_MASK;
_ipp_value_t *value; /* Current value */
- DEBUG_printf(("ippAddIntegers(ipp=%p, group=%02x(%s), type=%02x(%s), "
- "name=\"%s\", num_values=%d, values=%p)", ipp,
- group, ippTagString(group), value_tag, ippTagString(value_tag), name,
- num_values, values));
+ DEBUG_printf(("ippAddIntegers(ipp=%p, group=%02x(%s), type=%02x(%s), name=\"%s\", num_values=%d, values=%p)", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name, num_values, (void *)values));
value_tag &= IPP_TAG_CUPS_MASK;
* (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription
* (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@).
*
- * @since CUPS 1.2/OS X 10.5@
+ * @since CUPS 1.2/macOS 10.5@
*/
ipp_attribute_t * /* O - New attribute */
* (@code IPP_TAG_NOTSETTABLE@), delete-attribute (@code IPP_TAG_DELETEATTR@), and
* admin-define (@code IPP_TAG_ADMINDEFINE@).
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
ipp_attribute_t * /* O - New attribute */
ipp_tag_t value_tag, /* I - Type of attribute */
const char *name) /* I - Name of attribute */
{
- DEBUG_printf(("ippAddOutOfBand(ipp=%p, group=%02x(%s), value_tag=%02x(%s), "
- "name=\"%s\")", ipp, group, ippTagString(group), value_tag,
- ippTagString(value_tag), name));
+ DEBUG_printf(("ippAddOutOfBand(ipp=%p, group=%02x(%s), value_tag=%02x(%s), name=\"%s\")", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name));
value_tag &= IPP_TAG_CUPS_MASK;
ipp_attribute_t *attr; /* New attribute */
- DEBUG_printf(("ippAddRange(ipp=%p, group=%02x(%s), name=\"%s\", lower=%d, "
- "upper=%d)", ipp, group, ippTagString(group), name, lower,
- upper));
+ DEBUG_printf(("ippAddRange(ipp=%p, group=%02x(%s), name=\"%s\", lower=%d, upper=%d)", (void *)ipp, group, ippTagString(group), name, lower, upper));
/*
* Range check input...
_ipp_value_t *value; /* Current value */
- DEBUG_printf(("ippAddRanges(ipp=%p, group=%02x(%s), name=\"%s\", "
- "num_values=%d, lower=%p, upper=%p)", ipp, group,
- ippTagString(group), name, num_values, lower, upper));
+ DEBUG_printf(("ippAddRanges(ipp=%p, group=%02x(%s), name=\"%s\", num_values=%d, lower=%p, upper=%p)", (void *)ipp, group, ippTagString(group), name, num_values, (void *)lower, (void *)upper));
/*
* Range check input...
ipp_attribute_t *attr; /* New attribute */
- DEBUG_printf(("ippAddResolution(ipp=%p, group=%02x(%s), name=\"%s\", "
- "units=%d, xres=%d, yres=%d)", ipp, group,
+ DEBUG_printf(("ippAddResolution(ipp=%p, group=%02x(%s), name=\"%s\", units=%d, xres=%d, yres=%d)", (void *)ipp, group,
ippTagString(group), name, units, xres, yres));
/*
_ipp_value_t *value; /* Current value */
- DEBUG_printf(("ippAddResolutions(ipp=%p, group=%02x(%s), name=\"%s\", "
- "num_value=%d, units=%d, xres=%p, yres=%p)", ipp, group,
- ippTagString(group), name, num_values, units, xres, yres));
+ DEBUG_printf(("ippAddResolutions(ipp=%p, group=%02x(%s), name=\"%s\", num_value=%d, units=%d, xres=%p, yres=%p)", (void *)ipp, group, ippTagString(group), name, num_values, units, (void *)xres, (void *)yres));
/*
* Range check input...
ipp_attribute_t * /* O - New attribute */
ippAddSeparator(ipp_t *ipp) /* I - IPP message */
{
- DEBUG_printf(("ippAddSeparator(ipp=%p)", ipp));
+ DEBUG_printf(("ippAddSeparator(ipp=%p)", (void *)ipp));
/*
* Range check input...
/* Charset/language code buffer */
- DEBUG_printf(("ippAddString(ipp=%p, group=%02x(%s), value_tag=%02x(%s), "
- "name=\"%s\", language=\"%s\", value=\"%s\")", ipp,
- group, ippTagString(group), value_tag, ippTagString(value_tag), name,
- language, value));
+ DEBUG_printf(("ippAddString(ipp=%p, group=%02x(%s), value_tag=%02x(%s), name=\"%s\", language=\"%s\", value=\"%s\")", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name, language, value));
/*
* Range check input...
* needed. The formatted string is truncated as needed to the maximum length of
* the corresponding value type.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
ipp_attribute_t * /* O - New attribute */
* stdarg pointer @code ap@. The formatted string is truncated as needed to the
* maximum length of the corresponding value type.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
ipp_attribute_t * /* O - New attribute */
char code[32]; /* Language/charset value buffer */
- DEBUG_printf(("ippAddStrings(ipp=%p, group=%02x(%s), value_tag=%02x(%s), "
- "name=\"%s\", num_values=%d, language=\"%s\", values=%p)", ipp,
- group, ippTagString(group), value_tag, ippTagString(value_tag), name,
- num_values, language, values));
+ DEBUG_printf(("ippAddStrings(ipp=%p, group=%02x(%s), value_tag=%02x(%s), name=\"%s\", num_values=%d, language=\"%s\", values=%p)", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name, num_values, language, (void *)values));
/*
* Range check input...
* enum value, or the value falls within one of the rangeOfInteger values for
* the attribute.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
int /* O - 1 on a match, 0 on no match */
* specified string value.
*
* Returns non-zero when the attribute contains a matching charset, keyword,
- * language, mimeMediaType, name, text, URI, or URI scheme value.
+ * naturalLanguage, mimeMediaType, name, text, uri, or uriScheme value.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
int /* O - 1 on a match, 0 on no match */
_ipp_value_t *avalue; /* Current attribute value */
- DEBUG_printf(("ippContainsString(attr=%p, value=\"%s\")", attr, value));
+ DEBUG_printf(("ippContainsString(attr=%p, value=\"%s\")", (void *)attr, value));
/*
* Range check input...
case IPP_TAG_CHARSET :
case IPP_TAG_KEYWORD :
case IPP_TAG_LANGUAGE :
+ case IPP_TAG_URI :
+ case IPP_TAG_URISCHEME :
+ for (i = attr->num_values, avalue = attr->values;
+ i > 0;
+ i --, avalue ++)
+ {
+ DEBUG_printf(("1ippContainsString: value[%d]=\"%s\"",
+ attr->num_values - i, avalue->string.text));
+
+ if (!strcmp(value, avalue->string.text))
+ {
+ DEBUG_puts("1ippContainsString: Returning 1 (match)");
+ return (1);
+ }
+ }
+
case IPP_TAG_MIMETYPE :
case IPP_TAG_NAME :
case IPP_TAG_NAMELANG :
case IPP_TAG_TEXT :
case IPP_TAG_TEXTLANG :
- case IPP_TAG_URI :
- case IPP_TAG_URISCHEME :
for (i = attr->num_values, avalue = attr->values;
i > 0;
i --, avalue ++)
DEBUG_printf(("1ippContainsString: value[%d]=\"%s\"",
attr->num_values - i, avalue->string.text));
- if (!strcmp(value, avalue->string.text))
+ if (!_cups_strcasecmp(value, avalue->string.text))
{
DEBUG_puts("1ippContainsString: Returning 1 (match)");
return (1);
* created - this should only be done as long as the original source IPP message will
* not be freed for the life of the destination.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
*dstval; /* Destination value */
- DEBUG_printf(("ippCopyAttribute(dst=%p, srcattr=%p, quickcopy=%d)", dst, srcattr,
- quickcopy));
+ DEBUG_printf(("ippCopyAttribute(dst=%p, srcattr=%p, quickcopy=%d)", (void *)dst, (void *)srcattr, quickcopy));
/*
* Range check input...
dstattr = ippAddSeparator(dst);
break;
+ case IPP_TAG_UNSUPPORTED_VALUE :
+ case IPP_TAG_DEFAULT :
+ case IPP_TAG_UNKNOWN :
+ case IPP_TAG_NOVALUE :
+ case IPP_TAG_NOTSETTABLE :
+ case IPP_TAG_DELETEATTR :
+ case IPP_TAG_ADMINDEFINE :
+ dstattr = ippAddOutOfBand(dst, srcattr->group_tag, srcattr->value_tag & ~IPP_TAG_CUPS_CONST, srcattr->name);
+ break;
+
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
dstattr = ippAddIntegers(dst, srcattr->group_tag, srcattr->value_tag,
/*
* 'ippCopyAttributes()' - Copy attributes from one IPP message to another.
*
- * Zero or more attributes are copied from the source IPP message, @code@ src, to the
+ * Zero or more attributes are copied from the source IPP message, @code src@, to the
* destination IPP message, @code dst@. When @code quickcopy@ is non-zero, a "shallow"
* 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.
* 0 to skip it. The function may also choose to do a partial copy of the source attribute
* itself.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on error */
ipp_attribute_t *srcattr; /* Source attribute */
- DEBUG_printf(("ippCopyAttributes(dst=%p, src=%p, quickcopy=%d, cb=%p, context=%p)",
- dst, src, quickcopy, cb, context));
+ DEBUG_printf(("ippCopyAttributes(dst=%p, src=%p, quickcopy=%d, cb=%p, context=%p)", (void *)dst, (void *)src, quickcopy, (void *)cb, context));
/*
* Range check input...
/*
- * 'ippDateToTime()' - Convert from RFC 1903 Date/Time format to UNIX time
- * in seconds.
+ * 'ippDateToTime()' - Convert from RFC 2579 Date/Time format to time in
+ * seconds.
*/
time_t /* O - UNIX time value */
-ippDateToTime(const ipp_uchar_t *date) /* I - RFC 1903 date info */
+ippDateToTime(const ipp_uchar_t *date) /* I - RFC 2579 date info */
{
struct tm unixdate; /* UNIX date/time info */
time_t t; /* Computed time */
memset(&unixdate, 0, sizeof(unixdate));
/*
- * RFC-1903 date/time format is:
+ * RFC-2579 date/time format is:
*
* Byte(s) Description
* ------- -----------
*next; /* Next attribute */
- DEBUG_printf(("ippDelete(ipp=%p)", ipp));
+ DEBUG_printf(("ippDelete(ipp=%p)", (void *)ipp));
if (!ipp)
return;
ipp->use --;
if (ipp->use > 0)
+ {
+ DEBUG_printf(("4debug_retain: %p IPP message (use=%d)", (void *)ipp, ipp->use));
return;
+ }
+
+ DEBUG_printf(("4debug_free: %p IPP message", (void *)ipp));
for (attr = ipp->attrs; attr != NULL; attr = next)
{
next = attr->next;
+ DEBUG_printf(("4debug_free: %p %s %s%s (%d values)", (void *)attr, attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag), attr->num_values));
+
ipp_free_values(attr, 0, attr->num_values);
if (attr->name)
/*
* 'ippDeleteAttribute()' - Delete a single attribute in an IPP message.
*
- * @since CUPS 1.1.19/OS X 10.3@
+ * @since CUPS 1.1.19/macOS 10.3@
*/
void
*prev; /* Previous attribute */
- DEBUG_printf(("ippDeleteAttribute(ipp=%p, attr=%p(%s))", ipp, attr,
- attr ? attr->name : "(null)"));
+ DEBUG_printf(("ippDeleteAttribute(ipp=%p, attr=%p(%s))", (void *)ipp, (void *)attr, attr ? attr->name : "(null)"));
/*
* Range check input...
if (!attr)
return;
+ DEBUG_printf(("4debug_free: %p %s %s%s (%d values)", (void *)attr, attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag), attr->num_values));
+
/*
* Find the attribute in the list...
*/
*
* Deleting all values in an attribute deletes the attribute.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
const char *name, /* I - Name of attribute */
ipp_tag_t type) /* I - Type of attribute */
{
- DEBUG_printf(("2ippFindAttribute(ipp=%p, name=\"%s\", type=%02x(%s))", ipp,
- name, type, ippTagString(type)));
+ DEBUG_printf(("2ippFindAttribute(ipp=%p, name=\"%s\", type=%02x(%s))", (void *)ipp, name, type, ippTagString(type)));
if (!ipp || !name)
return (NULL);
*childattr; /* Child attribute */
ipp_tag_t value_tag; /* Value tag */
char parent[1024], /* Parent attribute name */
- *child; /* Child attribute name */
+ *child = NULL; /* Child attribute name */
- DEBUG_printf(("2ippFindNextAttribute(ipp=%p, name=\"%s\", type=%02x(%s))",
- ipp, name, type, ippTagString(type)));
+ DEBUG_printf(("2ippFindNextAttribute(ipp=%p, name=\"%s\", type=%02x(%s))", (void *)ipp, name, type, ippTagString(type)));
if (!ipp || !name)
return (NULL);
for (; attr != NULL; ipp->prev = attr, attr = attr->next)
{
- DEBUG_printf(("4ippFindAttribute: attr=%p, name=\"%s\"", attr,
- attr->name));
+ DEBUG_printf(("4ippFindAttribute: attr=%p, name=\"%s\"", (void *)attr, attr->name));
value_tag = (ipp_tag_t)(attr->value_tag & IPP_TAG_CUPS_MASK);
/*
* 'ippFirstAttribute()' - Return the first attribute in the message.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
ipp_attribute_t * /* O - First attribute or @code NULL@ if none */
* 'ippGetBoolean()' - Get a boolean value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
-int /* O - Boolean value or -1 on error */
+int /* O - Boolean value or 0 on error */
ippGetBoolean(ipp_attribute_t *attr, /* I - IPP attribute */
int element) /* I - Value number (0-based) */
{
if (!attr || attr->value_tag != IPP_TAG_BOOLEAN ||
element < 0 || element >= attr->num_values)
- return (-1);
+ return (0);
/*
* Return the value...
* 'ippGetCollection()' - Get a collection value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
ipp_t * /* O - Collection value or @code NULL@ on error */
/*
* 'ippGetCount()' - Get the number of values in an attribute.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
-int /* O - Number of values or -1 on error */
+int /* O - Number of values or 0 on error */
ippGetCount(ipp_attribute_t *attr) /* I - IPP attribute */
{
/*
*/
if (!attr)
- return (-1);
+ return (0);
/*
* Return the number of values...
/*
- * 'ippGetDate()' - Get a date value for an attribute.
+ * 'ippGetDate()' - Get a dateTime value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
-const ipp_uchar_t * /* O - Date value or @code NULL@ */
+const ipp_uchar_t * /* O - dateTime value or @code NULL@ */
ippGetDate(ipp_attribute_t *attr, /* I - IPP attribute */
int element) /* I - Value number (0-based) */
{
/*
* 'ippGetGroupTag()' - Get the group associated with an attribute.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
ipp_tag_t /* O - Group tag or @code IPP_TAG_ZERO@ on error */
* 'ippGetInteger()' - Get the integer/enum value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
-int /* O - Value or -1 on error */
+int /* O - Value or 0 on error */
ippGetInteger(ipp_attribute_t *attr, /* I - IPP attribute */
int element) /* I - Value number (0-based) */
{
if (!attr || (attr->value_tag != IPP_TAG_INTEGER && attr->value_tag != IPP_TAG_ENUM) ||
element < 0 || element >= attr->num_values)
- return (-1);
+ return (0);
/*
* Return the value...
/*
* 'ippGetName()' - Get the attribute name.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
const char * /* O - Attribute name or @code NULL@ for separators */
* 'ippGetOctetString()' - Get an octetString value from an IPP attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
void * /* O - Pointer to octetString data */
/*
* 'ippGetOperation()' - Get the operation ID in an IPP message.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
-ipp_op_t /* O - Operation ID or -1 on error */
+ipp_op_t /* O - Operation ID or 0 on error */
ippGetOperation(ipp_t *ipp) /* I - IPP request message */
{
/*
*/
if (!ipp)
- return ((ipp_op_t)-1);
+ return ((ipp_op_t)0);
/*
* Return the value...
* 'ippGetRange()' - Get a rangeOfInteger value from an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
-int /* O - Lower value of range or -1 */
+int /* O - Lower value of range or 0 */
ippGetRange(ipp_attribute_t *attr, /* I - IPP attribute */
int element, /* I - Value number (0-based) */
int *uppervalue)/* O - Upper value of range */
element < 0 || element >= attr->num_values)
{
if (uppervalue)
- *uppervalue = -1;
+ *uppervalue = 0;
- return (-1);
+ return (0);
}
/*
/*
* 'ippGetRequestId()' - Get the request ID from an IPP message.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
-int /* O - Request ID or -1 on error */
+int /* O - Request ID or 0 on error */
ippGetRequestId(ipp_t *ipp) /* I - IPP message */
{
/*
*/
if (!ipp)
- return (-1);
+ return (0);
/*
* Return the request ID...
* 'ippGetResolution()' - Get a resolution value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
-int /* O - Horizontal/cross feed resolution or -1 */
+int /* O - Horizontal/cross feed resolution or 0 */
ippGetResolution(
ipp_attribute_t *attr, /* I - IPP attribute */
int element, /* I - Value number (0-based) */
if (!attr || attr->value_tag != IPP_TAG_RESOLUTION ||
element < 0 || element >= attr->num_values)
- return (-1);
+ {
+ if (yres)
+ *yres = 0;
+
+ if (units)
+ *units = (ipp_res_t)0;
+
+ return (0);
+ }
/*
* Return the value...
/*
* 'ippGetState()' - Get the IPP message state.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
ipp_state_t /* O - IPP message state value */
/*
* 'ippGetStatusCode()' - Get the status code from an IPP response or event message.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
ipp_status_t /* O - Status code in IPP message */
* 'ippGetString()' - Get the string and optionally the language code for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
const char *
int element, /* I - Value number (0-based) */
const char **language)/* O - Language code (@code NULL@ for don't care) */
{
+ ipp_tag_t tag; /* Value tag */
+
+
/*
* Range check input...
*/
- if (!attr || element < 0 || element >= attr->num_values ||
- (attr->value_tag != IPP_TAG_TEXTLANG && attr->value_tag != IPP_TAG_NAMELANG &&
- (attr->value_tag < IPP_TAG_TEXT || attr->value_tag > IPP_TAG_MIMETYPE)))
+ tag = ippGetValueTag(attr);
+
+ if (!attr || element < 0 || element >= attr->num_values || (tag != IPP_TAG_TEXTLANG && tag != IPP_TAG_NAMELANG && (tag < IPP_TAG_TEXT || tag > IPP_TAG_MIMETYPE)))
return (NULL);
/*
/*
* 'ippGetValueTag()' - Get the value tag for an attribute.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
ipp_tag_t /* O - Value tag or @code IPP_TAG_ZERO@ on error */
/*
* 'ippGetVersion()' - Get the major and minor version number from an IPP message.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
-int /* O - Major version number or -1 on error */
+int /* O - Major version number or 0 on error */
ippGetVersion(ipp_t *ipp, /* I - IPP message */
- int *minor) /* O - Minor version number or @code NULL@ */
+ int *minor) /* O - Minor version number or @code NULL@ for don't care */
{
/*
* Range check input...
if (!ipp)
{
if (minor)
- *minor = -1;
+ *minor = 0;
- return (-1);
+ return (0);
}
/*
/*
* 'ippNextAttribute()' - Return the next attribute in the message.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
ipp_attribute_t * /* O - Next attribute or @code NULL@ if none */
* Set default version - usually 2.0...
*/
+ DEBUG_printf(("4debug_alloc: %p IPP message", (void *)temp));
+
if (cg->server_version == 0)
_cupsSetDefaults();
temp->use = 1;
}
- DEBUG_printf(("1ippNew: Returning %p", temp));
+ DEBUG_printf(("1ippNew: Returning %p", (void *)temp));
return (temp);
}
/*
* 'ippNewRequest()' - Allocate a new IPP request message.
*
- * 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.
+ * 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.
*
- * @since CUPS 1.2/OS X 10.5@
+ * @since CUPS 1.2/macOS 10.5@
*/
ipp_t * /* O - IPP request message */
/*
* 'ippNewResponse()' - Allocate a new IPP response message.
*
- * 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,
- * "utf-8" and a value derived from the current locale are substituted,
+ * 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,
+ * 'utf-8' and a value derived from the current locale are substituted,
* respectively.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
ipp_t * /* O - IPP response message */
ippRead(http_t *http, /* I - HTTP connection */
ipp_t *ipp) /* I - IPP data */
{
- DEBUG_printf(("ippRead(http=%p, ipp=%p), data_remaining=" CUPS_LLFMT,
- http, ipp, CUPS_LLCAST (http ? http->data_remaining : -1)));
+ DEBUG_printf(("ippRead(http=%p, ipp=%p), data_remaining=" CUPS_LLFMT, (void *)http, (void *)ipp, CUPS_LLCAST (http ? http->data_remaining : -1)));
if (!http)
return (IPP_STATE_ERROR);
- DEBUG_printf(("2ippRead: http->state=%d, http->used=%d", http->state,
- http->used));
+ DEBUG_printf(("2ippRead: http->state=%d, http->used=%d", http->state, http->used));
return (ippReadIO(http, (ipp_iocb_t)ipp_read_http, http->blocking, NULL,
ipp));
/*
* 'ippReadFile()' - Read data for an IPP message from a file.
*
- * @since CUPS 1.1.19/OS X 10.3@
+ * @since CUPS 1.1.19/macOS 10.3@
*/
ipp_state_t /* O - Current state */
ippReadFile(int fd, /* I - HTTP data */
ipp_t *ipp) /* I - IPP data */
{
- DEBUG_printf(("ippReadFile(fd=%d, ipp=%p)", fd, ipp));
+ DEBUG_printf(("ippReadFile(fd=%d, ipp=%p)", fd, (void *)ipp));
return (ippReadIO(&fd, (ipp_iocb_t)ipp_read_file, 1, NULL, ipp));
}
/*
* 'ippReadIO()' - Read data for an IPP message.
*
- * @since CUPS 1.2/OS X 10.5@
+ * @since CUPS 1.2/macOS 10.5@
*/
ipp_state_t /* O - Current state */
_ipp_value_t *value; /* Current value */
- DEBUG_printf(("ippReadIO(src=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)",
- src, cb, blocking, parent, ipp));
+ DEBUG_printf(("ippReadIO(src=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)", (void *)src, (void *)cb, blocking, (void *)parent, (void *)ipp));
DEBUG_printf(("2ippReadIO: ipp->state=%d", ipp ? ipp->state : IPP_STATE_ERROR));
if (!src || !ipp)
return (IPP_STATE_ERROR);
}
- DEBUG_printf(("2ippReadIO: ipp->current=%p, ipp->prev=%p",
- ipp->current, ipp->prev));
+ DEBUG_printf(("2ippReadIO: ipp->current=%p, ipp->prev=%p", (void *)ipp->current, (void *)ipp->prev));
/*
* Read this attribute...
ipp->curtag = tag;
ipp->current = NULL;
- DEBUG_printf(("2ippReadIO: group tag=%x(%s), ipp->prev=%p", tag,
- ippTagString(tag), ipp->prev));
+ DEBUG_printf(("2ippReadIO: group tag=%x(%s), ipp->prev=%p", tag, ippTagString(tag), (void *)ipp->prev));
continue;
}
return (IPP_STATE_ERROR);
}
- DEBUG_printf(("2ippReadIO: membername, ipp->current=%p, ipp->prev=%p",
- ipp->current, ipp->prev));
+ DEBUG_printf(("2ippReadIO: membername, ipp->current=%p, ipp->prev=%p", (void *)ipp->current, (void *)ipp->prev));
value = attr->values;
}
return (IPP_STATE_ERROR);
}
- DEBUG_printf(("2ippReadIO: name=\"%s\", ipp->current=%p, "
- "ipp->prev=%p", buffer, ipp->current, ipp->prev));
+ DEBUG_printf(("2ippReadIO: name=\"%s\", ipp->current=%p, ipp->prev=%p", buffer, (void *)ipp->current, (void *)ipp->prev));
value = attr->values;
}
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
/*
- * 'ippSetDate()' - Set a date value in an attribute.
+ * 'ippSetDate()' - Set a dateTime value in an attribute.
*
* The @code ipp@ parameter refers to an IPP message previously created using
* the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions.
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
ippSetDate(ipp_t *ipp, /* I - IPP message */
ipp_attribute_t **attr, /* IO - IPP attribute */
int element, /* I - Value number (0-based) */
- const ipp_uchar_t *datevalue)/* I - Date value */
+ const ipp_uchar_t *datevalue)/* I - dateTime value */
{
_ipp_value_t *value; /* Current value */
* (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription
* (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@).
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
ipp_tag_t group_tag) /* I - Group tag */
{
/*
- * Range check input - group tag must be 0x01 to 0x0F, per RFC 2911...
+ * Range check input - group tag must be 0x01 to 0x0F, per RFC 8011...
*/
if (!ipp || !attr || !*attr ||
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
*
* The @code attr@ parameter may be modified as a result of setting the value.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
int /* O - 1 on success, 0 on failure */
* The @code ipp@ parameter refers to an IPP message previously created using
* the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
*
* The @code request_id@ parameter must be greater than 0.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
/*
* 'ippSetState()' - Set the current state of the IPP message.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
* The @code ipp@ parameter refers to an IPP message previously created using
* the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* The @code format@ 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.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
int /* O - 1 on success, 0 on failure */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* The @code format@ 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.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
int /* O - 1 on success, 0 on failure */
* code in the "attributes-natural-language" attribute or, if not present, the language
* code for the current locale.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
*
* The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2.
*
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
/*
- * 'ippTimeToDate()' - Convert from UNIX time to RFC 1903 format.
+ * 'ippTimeToDate()' - Convert from time in seconds to RFC 2579 format.
*/
-const ipp_uchar_t * /* O - RFC-1903 date/time data */
-ippTimeToDate(time_t t) /* I - UNIX time value */
+const ipp_uchar_t * /* O - RFC-2579 date/time data */
+ippTimeToDate(time_t t) /* I - Time in seconds */
{
struct tm *unixdate; /* UNIX unixdate/time info */
ipp_uchar_t *date = _cupsGlobals()->ipp_date;
- /* RFC-1903 date/time data */
+ /* RFC-2579 date/time data */
/*
- * RFC-1903 date/time format is:
+ * RFC-2579 date/time format is:
*
* Byte(s) Description
* ------- -----------
*
* 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.
+ * failure, @link cupsLastErrorString@ is set to a human-readable message.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
int /* O - 1 if valid, 0 otherwise */
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad attribute name - invalid character "
- "(RFC 2911 section 4.1.3)."), attr->name);
+ "(RFC 8011 section 5.1.4)."), attr->name);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad attribute name - bad length %d "
- "(RFC 2911 section 4.1.3)."), attr->name,
+ "(RFC 8011 section 5.1.4)."), attr->name,
(int)(ptr - attr->name));
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad boolen value %d "
- "(RFC 2911 section 4.1.11)."), attr->name,
+ "(RFC 8011 section 5.1.21)."), attr->name,
attr->values[i].boolean);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad enum value %d - out of range "
- "(RFC 2911 section 4.1.4)."), attr->name,
+ "(RFC 8011 section 5.1.5)."), attr->name,
attr->values[i].integer);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad octetString value - bad length %d "
- "(RFC 2911 section 4.1.10)."), attr->name,
+ "(RFC 8011 section 5.1.20)."), attr->name,
attr->values[i].unknown.length);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime month %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[2]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[2]);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime day %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[3]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[3]);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime hours %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[4]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[4]);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime minutes %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[5]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[5]);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime seconds %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[6]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[6]);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime deciseconds %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[7]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[7]);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime UTC sign '%c' "
- "(RFC 2911 section 4.1.14)."), attr->name, date[8]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[8]);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime UTC hours %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[9]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[9]);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime UTC minutes %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[10]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[10]);
return (0);
}
}
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad resolution value %dx%d%s - cross "
"feed resolution must be positive "
- "(RFC 2911 section 4.1.15)."), attr->name,
+ "(RFC 8011 section 5.1.16)."), attr->name,
attr->values[i].resolution.xres,
attr->values[i].resolution.yres,
attr->values[i].resolution.units ==
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad resolution value %dx%d%s - feed "
"resolution must be positive "
- "(RFC 2911 section 4.1.15)."), attr->name,
+ "(RFC 8011 section 5.1.16)."), attr->name,
attr->values[i].resolution.xres,
attr->values[i].resolution.yres,
attr->values[i].resolution.units ==
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad resolution value %dx%d%s - bad "
- "units value (RFC 2911 section 4.1.15)."),
+ "units value (RFC 8011 section 5.1.16)."),
attr->name, attr->values[i].resolution.xres,
attr->values[i].resolution.yres,
attr->values[i].resolution.units ==
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad rangeOfInteger value %d-%d - lower "
- "greater than upper (RFC 2911 section 4.1.13)."),
+ "greater than upper (RFC 8011 section 5.1.14)."),
attr->name, attr->values[i].range.lower,
attr->values[i].range.upper);
return (0);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad text value \"%s\" - bad UTF-8 "
- "sequence (RFC 2911 section 4.1.1)."), attr->name,
+ "sequence (RFC 8011 section 5.1.2)."), attr->name,
attr->values[i].string.text);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad text value \"%s\" - bad length %d "
- "(RFC 2911 section 4.1.1)."), attr->name,
+ "(RFC 8011 section 5.1.2)."), attr->name,
attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad name value \"%s\" - bad UTF-8 "
- "sequence (RFC 2911 section 4.1.2)."), attr->name,
+ "sequence (RFC 8011 section 5.1.3)."), attr->name,
attr->values[i].string.text);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad name value \"%s\" - bad length %d "
- "(RFC 2911 section 4.1.2)."), attr->name,
+ "(RFC 8011 section 5.1.3)."), attr->name,
attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad keyword value \"%s\" - invalid "
- "character (RFC 2911 section 4.1.3)."),
+ "character (RFC 8011 section 5.1.4)."),
attr->name, attr->values[i].string.text);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad keyword value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.3)."),
+ "length %d (RFC 8011 section 5.1.4)."),
attr->name, attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad URI value \"%s\" - %s "
- "(RFC 2911 section 4.1.5)."), attr->name,
+ "(RFC 8011 section 5.1.6)."), attr->name,
attr->values[i].string.text,
uri_status_strings[uri_status -
HTTP_URI_STATUS_OVERFLOW]);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad URI value \"%s\" - bad length %d "
- "(RFC 2911 section 4.1.5)."), attr->name,
+ "(RFC 8011 section 5.1.6)."), attr->name,
attr->values[i].string.text,
(int)strlen(attr->values[i].string.text));
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad uriScheme value \"%s\" - bad "
- "characters (RFC 2911 section 4.1.6)."),
+ "characters (RFC 8011 section 5.1.7)."),
attr->name, attr->values[i].string.text);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad uriScheme value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.6)."),
+ "length %d (RFC 8011 section 5.1.7)."),
attr->name, attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad charset value \"%s\" - bad "
- "characters (RFC 2911 section 4.1.7)."),
+ "characters (RFC 8011 section 5.1.8)."),
attr->name, attr->values[i].string.text);
return (0);
}
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad charset value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.7)."),
+ "length %d (RFC 8011 section 5.1.8)."),
attr->name, attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad naturalLanguage value \"%s\" - bad "
- "characters (RFC 2911 section 4.1.8)."),
+ "characters (RFC 8011 section 5.1.9)."),
attr->name, attr->values[i].string.text);
regfree(&re);
return (0);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad naturalLanguage value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.8)."),
+ "length %d (RFC 8011 section 5.1.9)."),
attr->name, attr->values[i].string.text,
(int)strlen(attr->values[i].string.text));
regfree(&re);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad mimeMediaType value \"%s\" - bad "
- "characters (RFC 2911 section 4.1.9)."),
+ "characters (RFC 8011 section 5.1.10)."),
attr->name, attr->values[i].string.text);
regfree(&re);
return (0);
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad mimeMediaType value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.9)."),
+ "length %d (RFC 8011 section 5.1.10)."),
attr->name, attr->values[i].string.text,
(int)strlen(attr->values[i].string.text));
regfree(&re);
* 'ippValidateAttributes()' - Validate all attributes in an IPP message.
*
* This function validates the contents of the IPP message, including each
- * attribute. Like @link ippValidateAttribute@, cupsLastErrorString() is set
- * to a human-readable message on failure.
+ * attribute. Like @link ippValidateAttribute@, @link cupsLastErrorString@ is
+ * set to a human-readable message on failure.
*
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
*/
int /* O - 1 if valid, 0 otherwise */
ippWrite(http_t *http, /* I - HTTP connection */
ipp_t *ipp) /* I - IPP data */
{
- DEBUG_printf(("ippWrite(http=%p, ipp=%p)", http, ipp));
+ DEBUG_printf(("ippWrite(http=%p, ipp=%p)", (void *)http, (void *)ipp));
if (!http)
return (IPP_STATE_ERROR);
/*
* 'ippWriteFile()' - Write data for an IPP message to a file.
*
- * @since CUPS 1.1.19/OS X 10.3@
+ * @since CUPS 1.1.19/macOS 10.3@
*/
ipp_state_t /* O - Current state */
ippWriteFile(int fd, /* I - HTTP data */
ipp_t *ipp) /* I - IPP data */
{
- DEBUG_printf(("ippWriteFile(fd=%d, ipp=%p)", fd, ipp));
+ DEBUG_printf(("ippWriteFile(fd=%d, ipp=%p)", fd, (void *)ipp));
ipp->state = IPP_STATE_IDLE;
/*
* 'ippWriteIO()' - Write data for an IPP message.
*
- * @since CUPS 1.2/OS X 10.5@
+ * @since CUPS 1.2/macOS 10.5@
*/
ipp_state_t /* O - Current state */
_ipp_value_t *value; /* Current value */
- DEBUG_printf(("ippWriteIO(dst=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)",
- dst, cb, blocking, parent, ipp));
+ DEBUG_printf(("ippWriteIO(dst=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)", (void *)dst, (void *)cb, blocking, (void *)parent, (void *)ipp));
if (!dst || !ipp)
return (IPP_STATE_ERROR);
ipp->current = ipp->attrs;
ipp->curtag = IPP_TAG_ZERO;
- DEBUG_printf(("1ippWriteIO: ipp->current=%p", ipp->current));
+ DEBUG_printf(("1ippWriteIO: ipp->current=%p", (void *)ipp->current));
/*
* If blocking is disabled, stop here...
ipp_attribute_t *attr; /* New attribute */
- DEBUG_printf(("4ipp_add_attr(ipp=%p, name=\"%s\", group_tag=0x%x, value_tag=0x%x, "
- "num_values=%d)", ipp, name, group_tag, value_tag, num_values));
+ DEBUG_printf(("4ipp_add_attr(ipp=%p, name=\"%s\", group_tag=0x%x, value_tag=0x%x, num_values=%d)", (void *)ipp, name, group_tag, value_tag, num_values));
/*
* Range check input...
* Initialize attribute...
*/
+ DEBUG_printf(("4debug_alloc: %p %s %s%s (%d values)", (void *)attr, name, num_values > 1 ? "1setOf " : "", ippTagString(value_tag), num_values));
+
if (name)
attr->name = _cupsStrAlloc(name);
ipp->last = ipp->current = attr;
}
- DEBUG_printf(("5ipp_add_attr: Returning %p", attr));
+ DEBUG_printf(("5ipp_add_attr: Returning %p", (void *)attr));
return (attr);
}
_ipp_value_t *value; /* Current value */
- DEBUG_printf(("4ipp_free_values(attr=%p, element=%d, count=%d)", attr,
- element, count));
+ DEBUG_printf(("4ipp_free_values(attr=%p, element=%d, count=%d)", (void *)attr, element, count));
if (!(attr->value_tag & IPP_TAG_CUPS_CONST))
{
_ipp_value_t *value; /* Current value */
- DEBUG_printf(("3ipp_length(ipp=%p, collection=%d)", ipp, collection));
+ DEBUG_printf(("3ipp_length(ipp=%p, collection=%d)", (void *)ipp, collection));
if (!ipp)
{
DEBUG_printf(("5ipp_length: attr->name=\"%s\", attr->num_values=%d, "
"bytes=" CUPS_LLFMT, attr->name, attr->num_values, CUPS_LLCAST bytes));
- if (attr->value_tag < IPP_TAG_EXTENSION)
+ if ((attr->value_tag & ~IPP_TAG_CUPS_CONST) < IPP_TAG_EXTENSION)
bytes += (size_t)attr->num_values;/* Value tag for each value */
else
bytes += (size_t)(5 * attr->num_values);
bytes; /* Bytes read this pass */
- DEBUG_printf(("7ipp_read_http(http=%p, buffer=%p, length=%d)",
- http, buffer, (int)length));
+ DEBUG_printf(("7ipp_read_http(http=%p, buffer=%p, length=%d)", (void *)http, (void *)buffer, (int)length));
/*
* Loop until all bytes are read...
break;
}
}
+ else if (http->used == 0 && http->timeout_value > 0)
+ {
+ /*
+ * Wait up to timeout seconds for more data on blocking sockets...
+ */
+
+ if (!httpWait(http, (int)(1000 * http->timeout_value)))
+ {
+ /*
+ * Signal no data...
+ */
+
+ bytes = -1;
+ break;
+ }
+ }
if ((bytes = httpRead2(http, (char *)buffer, length - (size_t)tbytes)) < 0)
{
* Reset pointers in the list...
*/
+ DEBUG_printf(("4debug_free: %p %s", (void *)*attr, temp->name));
+ DEBUG_printf(("4debug_alloc: %p %s %s%s (%d)", (void *)temp, temp->name, temp->num_values > 1 ? "1setOf " : "", ippTagString(temp->value_tag), temp->num_values));
+
if (ipp->current == *attr && ipp->prev)
{
/*
return (write(*fd, buffer, length));
#endif /* WIN32 */
}
-
-
-/*
- * End of "$Id$".
- */