| 131 | */ |
| 132 | |
| 133 | int /* O - 1 on success, 0 on failure */ |
| 134 | cupsdProcessIPPRequest( |
| 135 | cupsd_client_t *con) /* I - Client connection */ |
| 136 | { |
| 137 | ipp_tag_t group; /* Current group tag */ |
| 138 | ipp_attribute_t *attr; /* Current attribute */ |
| 139 | ipp_attribute_t *charset; /* Character set attribute */ |
| 140 | ipp_attribute_t *language; /* Language attribute */ |
| 141 | ipp_attribute_t *uri = NULL; /* Printer or job URI attribute */ |
| 142 | ipp_attribute_t *username; /* requesting-user-name attr */ |
| 143 | int sub_id; /* Subscription ID */ |
| 144 | int valid = 1; /* Valid request? */ |
| 145 | |
| 146 | |
| 147 | cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdProcessIPPRequest(%p[%d]): operation_id=%04x(%s)", (void *)con, con->number, con->request->request.op.operation_id, ippOpString(con->request->request.op.operation_id)); |
| 148 | |
| 149 | if (LogLevel >= CUPSD_LOG_DEBUG2) |
| 150 | { |
| 151 | for (group = IPP_TAG_ZERO, attr = ippFirstAttribute(con->request); attr; attr = ippNextAttribute(con->request)) |
| 152 | { |
| 153 | const char *name; /* Attribute name */ |
| 154 | char value[1024]; /* Attribute value */ |
| 155 | |
| 156 | if (group != ippGetGroupTag(attr)) |
| 157 | { |
| 158 | group = ippGetGroupTag(attr); |
| 159 | if (group != IPP_TAG_ZERO) |
| 160 | cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdProcessIPPRequest: %s", ippTagString(group)); |
| 161 | } |
| 162 | |
| 163 | if ((name = ippGetName(attr)) == NULL) |
| 164 | continue; |
| 165 | |
| 166 | ippAttributeString(attr, value, sizeof(value)); |
| 167 | |
| 168 | cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdProcessIPPRequest: %s %s%s '%s'", name, ippGetCount(attr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attr)), value); |
| 169 | } |
| 170 | } |
| 171 | |
| 172 | /* |
| 173 | * First build an empty response message for this request... |
| 174 | */ |
| 175 | |
| 176 | con->response = ippNew(); |
| 177 | |
| 178 | con->response->request.status.version[0] = con->request->request.op.version[0]; |
| 179 | con->response->request.status.version[1] = con->request->request.op.version[1]; |
| 180 | con->response->request.status.request_id = con->request->request.op.request_id; |
| 181 | |
| 182 | /* |
| 183 | * Then validate the request header and required attributes... |
| 184 | */ |
| 185 | |
| 186 | if (con->request->request.any.version[0] != 1 && con->request->request.any.version[0] != 2) |
| 187 | { |
| 188 | /* |
| 189 | * Return an error, since we only support IPP 1.x and 2.x. |
| 190 | */ |
no test coverage detected