| // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef NET_BASE_SSL_CONNECTION_STATUS_FLAGS_H_ | 
 | #define NET_BASE_SSL_CONNECTION_STATUS_FLAGS_H_ | 
 |  | 
 | namespace net { | 
 |  | 
 | // Status flags for SSLInfo::connection_status. | 
 | enum { | 
 |   // The lower 16 bits are reserved for the TLS ciphersuite id. | 
 |   SSL_CONNECTION_CIPHERSUITE_SHIFT = 0, | 
 |   SSL_CONNECTION_CIPHERSUITE_MASK = 0xffff, | 
 |  | 
 |   // The next two bits are reserved for the compression used. | 
 |   SSL_CONNECTION_COMPRESSION_SHIFT = 16, | 
 |   SSL_CONNECTION_COMPRESSION_MASK = 3, | 
 |  | 
 |   // We fell back to an older protocol version for this connection. | 
 |   SSL_CONNECTION_VERSION_FALLBACK = 1 << 18, | 
 |  | 
 |   // The server doesn't support the renegotiation_info extension. If this bit | 
 |   // is not set then either the extension isn't supported, or we don't have any | 
 |   // knowledge either way. (The latter case will occur when we use an SSL | 
 |   // library that doesn't report it, like SChannel.) | 
 |   SSL_CONNECTION_NO_RENEGOTIATION_EXTENSION = 1 << 19, | 
 |  | 
 |   // The next three bits are reserved for the SSL version. | 
 |   SSL_CONNECTION_VERSION_SHIFT = 20, | 
 |   SSL_CONNECTION_VERSION_MASK = 7, | 
 |  | 
 |   // 1 << 31 (the sign bit) is reserved so that the SSL connection status will | 
 |   // never be negative. | 
 | }; | 
 |  | 
 | // NOTE: the SSL version enum constants must be between 0 and | 
 | // SSL_CONNECTION_VERSION_MASK, inclusive. | 
 | enum { | 
 |   SSL_CONNECTION_VERSION_UNKNOWN = 0,  // Unknown SSL version. | 
 |   SSL_CONNECTION_VERSION_SSL2 = 1, | 
 |   SSL_CONNECTION_VERSION_SSL3 = 2, | 
 |   SSL_CONNECTION_VERSION_TLS1 = 3, | 
 |   SSL_CONNECTION_VERSION_TLS1_1 = 4, | 
 |   SSL_CONNECTION_VERSION_TLS1_2 = 5, | 
 |   SSL_CONNECTION_VERSION_MAX, | 
 | }; | 
 | COMPILE_ASSERT(SSL_CONNECTION_VERSION_MAX - 1 <= SSL_CONNECTION_VERSION_MASK, | 
 |                SSL_CONNECTION_VERSION_MASK_too_small); | 
 |  | 
 | inline int SSLConnectionStatusToCipherSuite(int connection_status) { | 
 |   return (connection_status >> SSL_CONNECTION_CIPHERSUITE_SHIFT) & | 
 |          SSL_CONNECTION_CIPHERSUITE_MASK; | 
 | } | 
 |  | 
 | inline int SSLConnectionStatusToCompression(int connection_status) { | 
 |   return (connection_status >> SSL_CONNECTION_COMPRESSION_SHIFT) & | 
 |          SSL_CONNECTION_COMPRESSION_MASK; | 
 | } | 
 |  | 
 | inline int SSLConnectionStatusToVersion(int connection_status) { | 
 |   return (connection_status >> SSL_CONNECTION_VERSION_SHIFT) & | 
 |          SSL_CONNECTION_VERSION_MASK; | 
 | } | 
 |  | 
 | }  // namespace net | 
 |  | 
 | #endif  // NET_BASE_SSL_CONNECTION_STATUS_FLAGS_H_ |