fail_on_validation_err(0), stale_if_hit(0), accelerated(0),
ignore_cc(0), intercepted(0), hostVerified(0), spoof_client_ip(0),
internal(0), internalclient(0), must_keepalive(0), pinned(0),
- canRePin(0), chunked_reply(0), stream_error(0), sslPeek(0),
+ canRePin(0), chunked_reply(0), stream_error(0), sslPeek_(false),
done_follow_x_forwarded_for(!FOLLOW_X_FORWARDED_FOR),
sslBumped_(false), destinationIPLookedUp_(false), resetTCP_(false),
isRanged_(false) {
unsigned int no_direct :1; /* Deny direct forwarding unless overriden by always_direct. Used in accelerator mode */
unsigned int chunked_reply :1; /**< Reply with chunked transfer encoding */
unsigned int stream_error :1; /**< Whether stream error has occured */
- unsigned int sslPeek :1; ///< internal ssl-bump request to get server cert
#if FOLLOW_X_FORWARDED_FOR
/* TODO: move from conditional definition to conditional setting */
/* do not allow clearing if FOLLOW_X_FORWARDED_FOR is unset */
done_follow_x_forwarded_for = false || !FOLLOW_X_FORWARDED_FOR;
}
+
+ bool sslPeek() const { return sslPeek_; }
+ void setSslPeek() { sslPeek_=true; }
+ void clearSslPeek() { sslPeek_=false; }
private:
- /* done_follow_x_forwarded_for set by default to the opposite of
+ bool sslPeek_ :1; ///< internal ssl-bump request to get server cert
+ /* done_follow_x_forwarded_for is set by default to the opposite of
* compilation option FOLLOW_X_FORWARDED_FOR (so that it returns
- * always "done" if the build option is disabled.
+ * always "done" if the build option is disabled).
*/
bool done_follow_x_forwarded_for :1;
bool sslBumped_ :1; /**< ssl-bumped request*/
// and now want to switch to SSL to send the error to the client
// without even peeking at the origin server certificate.
if (bumpServerMode == Ssl::bumpServerFirst && !sslServerBump) {
- request->flags.sslPeek = 1;
+ request->flags.setSslPeek();
sslServerBump = new Ssl::ServerBump(request);
// will call httpsPeeked() with certificate and connection, eventually
fail(anErr);
} // else use actual error from last connection attempt
#if USE_SSL
- if (request->flags.sslPeek && request->clientConnectionManager.valid()) {
+ if (request->flags.sslPeek() && request->clientConnectionManager.valid()) {
errorAppendEntry(entry, err); // will free err
err = NULL;
CallJobHere1(17, 4, request->clientConnectionManager, ConnStateData,
// a user-entered address (a host name or a user-entered IP).
const bool isConnectRequest = !request->clientConnectionManager->port->spoof_client_ip &&
!request->clientConnectionManager->port->intercepted;
- if (request->flags.sslPeek && !isConnectRequest) {
+ if (request->flags.sslPeek() && !isConnectRequest) {
if (X509 *srvX509 = errDetails->peerCert()) {
if (const char *name = Ssl::CommonHostName(srvX509)) {
request->SetHost(name);
const bool hostnameIsIp = request->GetHostIsNumeric();
const bool isConnectRequest = !request->clientConnectionManager->port->spoof_client_ip &&
!request->clientConnectionManager->port->intercepted;
- if (!request->flags.sslPeek || isConnectRequest)
+ if (!request->flags.sslPeek() || isConnectRequest)
SSL_set_ex_data(ssl, ssl_ex_index_server, (void*)hostname);
// Use SNI TLS extension only when we connect directly
if (!request->flags.pinned || rePin) {
if ((serverConnection()->getPeer() && serverConnection()->getPeer()->use_ssl) ||
(!serverConnection()->getPeer() && request->protocol == AnyP::PROTO_HTTPS) ||
- request->flags.sslPeek) {
+ request->flags.sslPeek()) {
initiateSSL();
return;
}
#endif
#if USE_SSL
- if (request->flags.sslPeek) {
+ if (request->flags.sslPeek()) {
CallJobHere1(17, 4, request->clientConnectionManager, ConnStateData,
ConnStateData::httpsPeeked, serverConnection());
unregister(serverConn); // async call owns it now
request->peer_domain = serverConnection()->getPeer()->domain;
httpStart(this);
} else {
- assert(!request->flags.sslPeek);
+ assert(!request->flags.sslPeek());
request->peer_login = NULL;
request->peer_domain = NULL;