MCPcopy Create free account
hub / github.com/OpenPrinting/cups / cupsdProcessIPPRequest

Function cupsdProcessIPPRequest

scheduler/ipp.c:133–636  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

131 */
132
133int /* O - 1 on success, 0 on failure */
134cupsdProcessIPPRequest(
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 */

Callers 1

cupsdReadClientFunction · 0.85

Calls 15

cupsdLogMessageFunction · 0.85
ippOpStringFunction · 0.85
ippFirstAttributeFunction · 0.85
ippNextAttributeFunction · 0.85
ippGetGroupTagFunction · 0.85
ippTagStringFunction · 0.85
ippGetNameFunction · 0.85
ippAttributeStringFunction · 0.85
ippGetCountFunction · 0.85
ippGetValueTagFunction · 0.85
ippNewFunction · 0.85
cupsdAddEventFunction · 0.85

Tested by

no test coverage detected