Home | History | Annotate | Download | only in ssl
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef NET_SSL_OPENSSL_SSL_UTIL_H_
      6 #define NET_SSL_OPENSSL_SSL_UTIL_H_
      7 
      8 #include "net/base/net_log.h"
      9 
     10 namespace crypto {
     11 class OpenSSLErrStackTracer;
     12 }
     13 
     14 namespace tracked_objects {
     15 class Location;
     16 }
     17 
     18 namespace net {
     19 
     20 // Puts a net error, |err|, on the error stack in OpenSSL. The file and line are
     21 // extracted from |posted_from|. The function code of the error is left as 0.
     22 void OpenSSLPutNetError(const tracked_objects::Location& posted_from, int err);
     23 
     24 // Utility to construct the appropriate set & clear masks for use the OpenSSL
     25 // options and mode configuration functions. (SSL_set_options etc)
     26 struct SslSetClearMask {
     27   SslSetClearMask();
     28   void ConfigureFlag(long flag, bool state);
     29 
     30   long set_mask;
     31   long clear_mask;
     32 };
     33 
     34 // Converts an OpenSSL error code into a net error code, walking the OpenSSL
     35 // error stack if needed.
     36 //
     37 // Note that |tracer| is not currently used in the implementation, but is passed
     38 // in anyway as this ensures the caller will clear any residual codes left on
     39 // the error stack.
     40 int MapOpenSSLError(int err, const crypto::OpenSSLErrStackTracer& tracer);
     41 
     42 // Helper struct to store information about an OpenSSL error stack entry.
     43 struct OpenSSLErrorInfo {
     44   OpenSSLErrorInfo() : error_code(0), file(NULL), line(0) {}
     45 
     46   uint32_t error_code;
     47   const char* file;
     48   int line;
     49 };
     50 
     51 // Converts an OpenSSL error code into a net error code, walking the OpenSSL
     52 // error stack if needed. If a value on the stack is used, the error code and
     53 // associated information are returned in |*out_error_info|. Otherwise its
     54 // fields are set to 0 and NULL.
     55 //
     56 // Note that |tracer| is not currently used in the implementation, but is passed
     57 // in anyway as this ensures the caller will clear any residual codes left on
     58 // the error stack.
     59 int MapOpenSSLErrorWithDetails(int err,
     60                                const crypto::OpenSSLErrStackTracer& tracer,
     61                                OpenSSLErrorInfo* out_error_info);
     62 
     63 // Creates NetLog callback for an OpenSSL error.
     64 NetLog::ParametersCallback CreateNetLogOpenSSLErrorCallback(
     65     int net_error,
     66     int ssl_error,
     67     const OpenSSLErrorInfo& error_info);
     68 
     69 }  // namespace net
     70 
     71 #endif  // NET_SSL_OPENSSL_SSL_UTIL_H_
     72