/*
- * $Id: client_side.cc,v 1.500 2000/10/04 01:46:30 wessels Exp $
+ * $Id: client_side.cc,v 1.501 2000/10/04 02:18:48 wessels Exp $
*
* DEBUG: section 33 Client-side Routines
* AUTHOR: Duane Wessels
url);
if (r->method == METHOD_CONNECT) {
http->log_type = LOG_TCP_MISS;
- sslStart(fd, url, r, &http->out.size);
+ sslStart(fd, url, r, &http->out.size, &http->al.http.code);
return;
} else if (r->method == METHOD_PURGE) {
clientPurgeRequest(http);
/*
- * $Id: protos.h,v 1.378 2000/10/04 00:24:17 wessels Exp $
+ * $Id: protos.h,v 1.379 2000/10/04 02:18:49 wessels Exp $
*
*
* SQUID Internet Object Cache http://squid.nlanr.net/Squid/
extern void start_announce(void *unused);
-extern void sslStart(int fd, const char *, request_t *, size_t * sz);
+extern void sslStart(int fd, const char *, request_t *, size_t *, int *);
extern void waisStart(FwdState *);
/* ident.c */
/*
- * $Id: ssl.cc,v 1.107 2000/06/27 22:06:04 hno Exp $
+ * $Id: ssl.cc,v 1.108 2000/10/04 02:18:49 wessels Exp $
*
* DEBUG: section 26 Secure Sockets Layer Proxy
* AUTHOR: Duane Wessels
char *buf;
} client, server;
size_t *size_ptr; /* pointer to size in an ConnStateData for logging */
+ int *status_ptr; /* pointer to status for logging */
#if DELAY_POOLS
delay_id delay_id;
#endif
{
SslStateData *sslState = data;
debug(26, 3) ("sslConnected: FD %d sslState=%p\n", fd, sslState);
+ *sslState->status_ptr = HTTP_OK;
xstrncpy(sslState->server.buf, conn_established, SQUID_TCP_SO_RCVBUF);
sslState->server.len = strlen(conn_established);
sslSetSelect(sslState);
if (status == COMM_ERR_DNS) {
debug(26, 4) ("sslConnect: Unknown host: %s\n", sslState->host);
err = errorCon(ERR_DNS_FAIL, HTTP_NOT_FOUND);
+ *sslState->status_ptr = HTTP_NOT_FOUND;
err->request = requestLink(request);
err->dnsserver_msg = xstrdup(dns_error_message);
err->callback = sslErrorComplete;
errorSend(sslState->client.fd, err);
} else if (status != COMM_OK) {
err = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE);
+ *sslState->status_ptr = HTTP_SERVICE_UNAVAILABLE;
err->xerrno = errno;
err->host = xstrdup(sslState->host);
err->port = sslState->port;
}
void
-sslStart(int fd, const char *url, request_t * request, size_t * size_ptr)
+sslStart(int fd, const char *url, request_t * request, size_t * size_ptr, int *status_ptr)
{
/* Create state structure. */
SslStateData *sslState = NULL;
answer = aclCheckFast(Config.accessList.miss, &ch);
if (answer == 0) {
err = errorCon(ERR_FORWARDING_DENIED, HTTP_FORBIDDEN);
+ *sslState->status_ptr = HTTP_FORBIDDEN;
err->request = requestLink(request);
err->src_addr = request->client_addr;
errorSend(fd, err);
if (sock == COMM_ERROR) {
debug(26, 4) ("sslStart: Failed because we're out of sockets.\n");
err = errorCon(ERR_SOCKET_FAILURE, HTTP_INTERNAL_SERVER_ERROR);
+ *sslState->status_ptr = HTTP_INTERNAL_SERVER_ERROR;
err->xerrno = errno;
err->request = requestLink(request);
errorSend(fd, err);
sslState->url = xstrdup(url);
sslState->request = requestLink(request);
sslState->size_ptr = size_ptr;
+ sslState->status_ptr = status_ptr;
sslState->client.fd = fd;
sslState->server.fd = sock;
sslState->server.buf = xmalloc(SQUID_TCP_SO_RCVBUF);
if (fs == NULL) {
ErrorState *err;
err = errorCon(ERR_CANNOT_FORWARD, HTTP_SERVICE_UNAVAILABLE);
+ *sslState->status_ptr = HTTP_SERVICE_UNAVAILABLE;
err->request = requestLink(sslState->request);
err->callback = sslErrorComplete;
err->callback_data = sslState;
/*
- * $Id: tunnel.cc,v 1.107 2000/06/27 22:06:04 hno Exp $
+ * $Id: tunnel.cc,v 1.108 2000/10/04 02:18:49 wessels Exp $
*
* DEBUG: section 26 Secure Sockets Layer Proxy
* AUTHOR: Duane Wessels
char *buf;
} client, server;
size_t *size_ptr; /* pointer to size in an ConnStateData for logging */
+ int *status_ptr; /* pointer to status for logging */
#if DELAY_POOLS
delay_id delay_id;
#endif
{
SslStateData *sslState = data;
debug(26, 3) ("sslConnected: FD %d sslState=%p\n", fd, sslState);
+ *sslState->status_ptr = HTTP_OK;
xstrncpy(sslState->server.buf, conn_established, SQUID_TCP_SO_RCVBUF);
sslState->server.len = strlen(conn_established);
sslSetSelect(sslState);
if (status == COMM_ERR_DNS) {
debug(26, 4) ("sslConnect: Unknown host: %s\n", sslState->host);
err = errorCon(ERR_DNS_FAIL, HTTP_NOT_FOUND);
+ *sslState->status_ptr = HTTP_NOT_FOUND;
err->request = requestLink(request);
err->dnsserver_msg = xstrdup(dns_error_message);
err->callback = sslErrorComplete;
errorSend(sslState->client.fd, err);
} else if (status != COMM_OK) {
err = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE);
+ *sslState->status_ptr = HTTP_SERVICE_UNAVAILABLE;
err->xerrno = errno;
err->host = xstrdup(sslState->host);
err->port = sslState->port;
}
void
-sslStart(int fd, const char *url, request_t * request, size_t * size_ptr)
+sslStart(int fd, const char *url, request_t * request, size_t * size_ptr, int *status_ptr)
{
/* Create state structure. */
SslStateData *sslState = NULL;
answer = aclCheckFast(Config.accessList.miss, &ch);
if (answer == 0) {
err = errorCon(ERR_FORWARDING_DENIED, HTTP_FORBIDDEN);
+ *sslState->status_ptr = HTTP_FORBIDDEN;
err->request = requestLink(request);
err->src_addr = request->client_addr;
errorSend(fd, err);
if (sock == COMM_ERROR) {
debug(26, 4) ("sslStart: Failed because we're out of sockets.\n");
err = errorCon(ERR_SOCKET_FAILURE, HTTP_INTERNAL_SERVER_ERROR);
+ *sslState->status_ptr = HTTP_INTERNAL_SERVER_ERROR;
err->xerrno = errno;
err->request = requestLink(request);
errorSend(fd, err);
sslState->url = xstrdup(url);
sslState->request = requestLink(request);
sslState->size_ptr = size_ptr;
+ sslState->status_ptr = status_ptr;
sslState->client.fd = fd;
sslState->server.fd = sock;
sslState->server.buf = xmalloc(SQUID_TCP_SO_RCVBUF);
if (fs == NULL) {
ErrorState *err;
err = errorCon(ERR_CANNOT_FORWARD, HTTP_SERVICE_UNAVAILABLE);
+ *sslState->status_ptr = HTTP_SERVICE_UNAVAILABLE;
err->request = requestLink(sslState->request);
err->callback = sslErrorComplete;
err->callback_data = sslState;