summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Factory.h
blob: 169e12b7bf23ccb0d9dd4823dcdbb6e136327d5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// -*- C++ -*-

//=============================================================================
/**
 *  @file     SSLIOP_Factory.h
 *
 *  $Id$
 *
 *  SSLIOP implementation of PP Framework Protocol_Factory interface.
 *
 *  @author Carlos O'Ryan <coryan@uci.edu>
 *  @author Ossama Othman <ossama@uci.edu>
 */
//=============================================================================


#ifndef TAO_SSLIOP_FACTORY_H
#define TAO_SSLIOP_FACTORY_H

#include /**/ "ace/pre.h"

#include "orbsvcs/SSLIOP/SSLIOP_Export.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "orbsvcs/SecurityC.h"
#include "orbsvcs/CSIIOPC.h"

#include "tao/Protocol_Factory.h"

#include "ace/Service_Config.h"


TAO_BEGIN_VERSIONED_NAMESPACE_DECL

class TAO_Acceptor;
class TAO_Connector;

namespace TAO
{
  namespace SSLIOP
  {

    /**
     * @class Protocol_Factory
     *
     * @brief SSLIOP-specific protocol factory implementation.
     *
     * This class implements the SSLIOP-specific protocol factory
     * implementation for use in TAO's pluggable protocols framework.
     */
    class TAO_SSLIOP_Export Protocol_Factory
      : public TAO_Protocol_Factory
    {
    public:

      /// Constructor.
      Protocol_Factory (void);

      /// Destructor.
      virtual ~Protocol_Factory (void);

      // = Service Configurator hooks.
      /// Dynamic linking hook
      virtual int init (int argc, char* argv[]);

      /// Verify prefix is a match
      virtual int match_prefix (const ACE_CString & prefix);

      /// Returns the prefix used by the protocol.
      virtual const char * prefix (void) const;

      /// Return the character used to mark where an endpoint ends and
      /// where its options begin.
      virtual char options_delimiter (void) const;

      // = Check Protocol_Factory.h for a description of these methods.
      virtual TAO_Acceptor  * make_acceptor (void);
      virtual TAO_Connector * make_connector  (void);
      virtual int requires_explicit_endpoint (void) const;

    private:

      /// Parse an X509 file path, which is expected to looks like:
      ///   <X509Path> ::= <Prefix> ':' <Path>
      ///   <Prefix>   ::= 'PEM' | 'ASN1'
      ///   <Path>     ::= any-string
      /// Returns either SSL_FILETYPE_ASN1, SSL_FILETYPE_PEM or -1
      /// if the prefix can not be recognized. The *path will point
      /// to the part of the original buffer, after the initial ':',
      /// or will contain 0, if no path was specified.
      /// 
      /// Beware: This function modifies the buffer pointed to by arg!
      /// 
      static int parse_x509_file (char *arg, char **path);
      
      /// Create and register the SSLIOP ORB initializer.
      int register_orb_initializer (
        CSIIOP::AssociationOptions csiv2_target_supports,
        CSIIOP::AssociationOptions csiv2_target_requires);

    private:

      /// Default quality-of-protection settings for the SSLIOP
      /// pluggable protocol.
      ::Security::QOP qop_;

      /// The accept() timeout.
      /**
       * This timeout includes the overall time to complete the SSL
       * handshake.  This includes both the TCP handshake and the SSL
       * handshake.
       */
      ACE_Time_Value timeout_;

      /// The SSLIOP-specific CSIv2 transport mechanism component.
      /**
       * This SSLIOP-specific structure is embedded in the CSIv2 transport
       * mechanism list of the @c CSIIOP::CompoundSecMechList IOR tagged
       * component.
       */
      // CSIIOP::TLS_SEC_TRANS * csiv2_component_;

    };
  }  // End SSLIOP namespace.
}  // End TAO namespace.

// Work around preprocessor tokenization.
typedef TAO::SSLIOP::Protocol_Factory TAO_SSLIOP_Protocol_Factory;

TAO_END_VERSIONED_NAMESPACE_DECL

ACE_STATIC_SVC_DECLARE_EXPORT (TAO_SSLIOP, TAO_SSLIOP_Protocol_Factory)
ACE_STATIC_SVC_REQUIRE (TAO_SSLIOP_Protocol_Factory)
ACE_FACTORY_DECLARE (TAO_SSLIOP, TAO_SSLIOP_Protocol_Factory)

#include /**/ "ace/post.h"

#endif /* TAO_SSLIOP_FACTORY_H */