*
* Client routines for the CUPS scheduler.
*
- * Copyright 2007-2012 by Apple Inc.
+ * Copyright 2007-2013 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* This file contains Kerberos support code, copyright 2006 by
{
int bytes = httpFlushWrite(HTTP(con));
- con->http.data_encoding = HTTP_ENCODE_LENGTH;
+ con->http.data_encoding = HTTP_ENCODING_LENGTH;
return (bytes);
}
"file=%d",
con->http.fd, con->http.error, con->http.used,
http_states[con->http.state + 1],
- con->http.data_encoding == HTTP_ENCODE_CHUNKED ?
+ con->http.data_encoding == HTTP_ENCODING_CHUNKED ?
"CHUNKED" : "LENGTH",
CUPS_LLCAST con->http.data_remaining,
con->request,
switch (con->http.state)
{
- case HTTP_WAITING :
+ case HTTP_STATE_WAITING :
/*
* See if we've received a request line...
*/
{
if (con->http.error && con->http.error != EPIPE)
cupsdLogMessage(CUPSD_LOG_DEBUG,
- "[Client %d] HTTP_WAITING Closing for error %d "
+ "[Client %d] HTTP_STATE_WAITING Closing for error %d "
"(%s)", con->http.fd, con->http.error,
strerror(con->http.error));
else
cupsdLogMessage(CUPSD_LOG_DEBUG,
- "[Client %d] HTTP_WAITING Closing on EOF",
+ "[Client %d] HTTP_STATE_WAITING Closing on EOF",
con->http.fd);
cupsdCloseClient(con);
con->http.activity = time(NULL);
con->http.version = HTTP_1_0;
con->http.keep_alive = HTTP_KEEPALIVE_OFF;
- con->http.data_encoding = HTTP_ENCODE_LENGTH;
+ con->http.data_encoding = HTTP_ENCODING_LENGTH;
con->http.data_remaining = 0;
con->http._data_remaining = 0;
- con->operation = HTTP_WAITING;
+ con->operation = HTTP_STATE_WAITING;
con->bytes = 0;
con->file = -1;
con->file_ready = 0;
*/
if (!strcmp(operation, "GET"))
- con->http.state = HTTP_GET;
+ con->http.state = HTTP_STATE_GET;
else if (!strcmp(operation, "PUT"))
- con->http.state = HTTP_PUT;
+ con->http.state = HTTP_STATE_PUT;
else if (!strcmp(operation, "POST"))
- con->http.state = HTTP_POST;
+ con->http.state = HTTP_STATE_POST;
else if (!strcmp(operation, "DELETE"))
- con->http.state = HTTP_DELETE;
+ con->http.state = HTTP_STATE_DELETE;
else if (!strcmp(operation, "TRACE"))
- con->http.state = HTTP_TRACE;
+ con->http.state = HTTP_STATE_TRACE;
else if (!strcmp(operation, "OPTIONS"))
- con->http.state = HTTP_OPTIONS;
+ con->http.state = HTTP_STATE_OPTIONS;
else if (!strcmp(operation, "HEAD"))
- con->http.state = HTTP_HEAD;
+ con->http.state = HTTP_STATE_HEAD;
else
{
cupsdLogMessage(CUPSD_LOG_ERROR,
cupsdSetBusyState();
}
- case HTTP_OPTIONS :
- case HTTP_DELETE :
- case HTTP_GET :
- case HTTP_HEAD :
- case HTTP_POST :
- case HTTP_PUT :
- case HTTP_TRACE :
+ case HTTP_STATE_OPTIONS :
+ case HTTP_STATE_DELETE :
+ case HTTP_STATE_GET :
+ case HTTP_STATE_HEAD :
+ case HTTP_STATE_POST :
+ case HTTP_STATE_PUT :
+ case HTTP_STATE_TRACE :
/*
* Parse incoming parameters until the status changes...
*/
return;
}
}
- else if (con->operation == HTTP_OPTIONS)
+ else if (con->operation == HTTP_STATE_OPTIONS)
{
/*
* Do OPTIONS command...
}
if (con->http.expect &&
- (con->operation == HTTP_POST || con->operation == HTTP_PUT))
+ (con->operation == HTTP_STATE_POST || con->operation == HTTP_STATE_PUT))
{
if (con->http.expect == HTTP_CONTINUE)
{
switch (con->http.state)
{
- case HTTP_GET_SEND :
+ case HTTP_STATE_GET_SEND :
if ((!strncmp(con->uri, "/ppd/", 5) ||
!strncmp(con->uri, "/printers/", 10)) &&
!strcmp(con->uri + strlen(con->uri) - 4, ".ppd"))
}
break;
- case HTTP_POST_RECV :
+ case HTTP_STATE_POST_RECV :
/*
* See if the POST request includes a Content-Length field, and if
* so check the length against any limits that are set...
}
else if (con->http.data_remaining < 0 ||
(!con->http.fields[HTTP_FIELD_CONTENT_LENGTH][0] &&
- con->http.data_encoding == HTTP_ENCODE_LENGTH))
+ con->http.data_encoding == HTTP_ENCODING_LENGTH))
{
/*
* Negative content lengths are invalid!
}
break;
- case HTTP_PUT_RECV :
+ case HTTP_STATE_PUT_RECV :
/*
* Validate the resource name...
*/
fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC);
break;
- case HTTP_DELETE :
- case HTTP_TRACE :
+ case HTTP_STATE_DELETE :
+ case HTTP_STATE_TRACE :
cupsdSendError(con, HTTP_NOT_IMPLEMENTED, CUPSD_AUTH_NONE);
cupsdCloseClient(con);
return;
- case HTTP_HEAD :
+ case HTTP_STATE_HEAD :
if (!strncmp(con->uri, "/printers/", 10) &&
!strcmp(con->uri + strlen(con->uri) - 4, ".ppd"))
{
switch (con->http.state)
{
- case HTTP_PUT_RECV :
+ case HTTP_STATE_PUT_RECV :
do
{
if ((bytes = httpRead2(HTTP(con), line, sizeof(line))) < 0)
{
if (con->http.error && con->http.error != EPIPE)
cupsdLogMessage(CUPSD_LOG_DEBUG,
- "[Client %d] HTTP_PUT_RECV Closing for error "
+ "[Client %d] HTTP_STATE_PUT_RECV Closing for error "
"%d (%s)", con->http.fd, con->http.error,
strerror(con->http.error));
else
cupsdLogMessage(CUPSD_LOG_DEBUG,
- "[Client %d] HTTP_PUT_RECV Closing on EOF",
+ "[Client %d] HTTP_STATE_PUT_RECV Closing on EOF",
con->http.fd);
cupsdCloseClient(con);
}
}
}
- while (con->http.state == HTTP_PUT_RECV && data_ready(con));
+ while (con->http.state == HTTP_STATE_PUT_RECV && data_ready(con));
- if (con->http.state == HTTP_WAITING)
+ if (con->http.state == HTTP_STATE_STATUS)
{
/*
* End of file, see how big it is...
}
break;
- case HTTP_POST_RECV :
+ case HTTP_STATE_POST_RECV :
do
{
if (con->request && con->file < 0)
}
else if (ipp_state != IPP_DATA)
{
- if (con->http.state == HTTP_POST_SEND)
+ if (con->http.state == HTTP_STATE_POST_SEND)
{
cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE);
cupsdCloseClient(con);
}
}
- if (con->file < 0 && con->http.state != HTTP_POST_SEND)
+ if (con->file < 0 && con->http.state != HTTP_STATE_POST_SEND)
{
/*
* Create a file as needed for the request data...
fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC);
}
- if (con->http.state != HTTP_POST_SEND)
+ if (con->http.state != HTTP_STATE_POST_SEND)
{
if ((bytes = httpRead2(HTTP(con), line, sizeof(line))) < 0)
{
if (con->http.error && con->http.error != EPIPE)
cupsdLogMessage(CUPSD_LOG_DEBUG,
- "[Client %d] HTTP_POST_SEND Closing for "
+ "[Client %d] HTTP_STATE_POST_SEND Closing for "
"error %d (%s)", con->http.fd, con->http.error,
strerror(con->http.error));
else
cupsdLogMessage(CUPSD_LOG_DEBUG,
- "[Client %d] HTTP_POST_SEND Closing on EOF",
+ "[Client %d] HTTP_STATE_POST_SEND Closing on EOF",
con->http.fd);
cupsdCloseClient(con);
}
}
}
- else if (con->http.state == HTTP_POST_RECV)
+ else if (con->http.state == HTTP_STATE_POST_RECV)
return;
- else if (con->http.state != HTTP_POST_SEND)
+ else if (con->http.state != HTTP_STATE_POST_SEND)
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
"[Client %d] Closing on unexpected state %s.",
}
}
}
- while (con->http.state == HTTP_POST_RECV && data_ready(con));
+ while (con->http.state == HTTP_STATE_POST_RECV && data_ready(con));
- if (con->http.state == HTTP_POST_SEND)
+ if (con->http.state == HTTP_STATE_POST_SEND)
{
if (con->file >= 0)
{
break; /* Anti-compiler-warning-code */
}
- if (con->http.state == HTTP_WAITING)
+ if (con->http.state == HTTP_STATE_WAITING)
{
if (!con->http.keep_alive)
{
httpFlushWrite(HTTP(con));
- con->http.data_encoding = HTTP_ENCODE_FIELDS;
+ con->http.data_encoding = HTTP_ENCODING_FIELDS;
if (httpPrintf(HTTP(con), "HTTP/%d.%d %d %s\r\n", con->http.version / 100,
con->http.version % 100, code, httpStatus(code)) < 0)
"error=%d, "
"used=%d, "
"state=%s, "
- "data_encoding=HTTP_ENCODE_%s, "
+ "data_encoding=HTTP_ENCODING_%s, "
"data_remaining=" CUPS_LLFMT ", "
"response=%p(%s), "
"pipe_pid=%d, "
"file=%d",
con->http.fd, con->http.error, con->http.used,
http_states[con->http.state + 1],
- con->http.data_encoding == HTTP_ENCODE_CHUNKED ?
+ con->http.data_encoding == HTTP_ENCODING_CHUNKED ?
"CHUNKED" : "LENGTH",
CUPS_LLCAST con->http.data_remaining,
con->response,
con->response ? ipp_states[con->response->state] : "",
con->pipe_pid, con->file);
- if (con->http.state != HTTP_GET_SEND &&
- con->http.state != HTTP_POST_SEND)
+ if (con->http.state != HTTP_STATE_GET_SEND &&
+ con->http.state != HTTP_STATE_POST_SEND)
{
/*
* If we get called in the wrong state, then something went wrong with the
}
if (con->http.version == HTTP_1_1)
- con->http.data_encoding = HTTP_ENCODE_CHUNKED;
+ con->http.data_encoding = HTTP_ENCODING_CHUNKED;
}
else
field_col = 0;
return;
}
- if (con->http.data_encoding == HTTP_ENCODE_CHUNKED)
+ if (con->http.data_encoding == HTTP_ENCODING_CHUNKED)
httpFlushWrite(HTTP(con));
con->bytes += con->header_used;
- if (con->http.state == HTTP_WAITING)
+ if (con->http.state == HTTP_STATE_WAITING)
bytes = 0;
else
bytes = con->header_used;
}
if (bytes <= 0 ||
- (con->http.state != HTTP_GET_SEND && con->http.state != HTTP_POST_SEND))
+ (con->http.state != HTTP_STATE_GET_SEND && con->http.state != HTTP_STATE_POST_SEND))
{
if (!con->sent_header && con->pipe_pid)
cupsdSendError(con, HTTP_SERVER_ERROR, CUPSD_AUTH_NONE);
httpFlushWrite(HTTP(con));
- if (con->http.data_encoding == HTTP_ENCODE_CHUNKED && con->sent_header == 1)
+ if (con->http.data_encoding == HTTP_ENCODING_CHUNKED && con->sent_header == 1)
{
if (httpWrite2(HTTP(con), "", 0) < 0)
{
}
}
- con->http.state = HTTP_WAITING;
+ con->http.state = HTTP_STATE_WAITING;
cupsdAddSelect(con->http.fd, (cupsd_selfunc_t)cupsdReadClient, NULL, con);
commptr ++;
}
- if (*commptr == '?' && con->operation == HTTP_GET && !con->query_string)
+ if (*commptr == '?' && con->operation == HTTP_STATE_GET && !con->query_string)
{
commptr ++;
cupsdSetStringf(&(con->query_string), "QUERY_STRING=%s", commptr);
envp[envc ++] = http_referer;
}
- if (con->operation == HTTP_GET)
+ if (con->operation == HTTP_STATE_GET)
{
envp[envc ++] = "REQUEST_METHOD=GET";
if (cupsdFlushHeader(con) < 0)
return (0);
- con->http.data_encoding = HTTP_ENCODE_LENGTH;
+ con->http.data_encoding = HTTP_ENCODING_LENGTH;
con->http.data_remaining = filestats->st_size;
if (con->http.data_remaining <= INT_MAX)