1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  *   http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
20 #ifndef _THRIFT_TRANSPORT_TNONBLOCKINGSSLSERVERSOCKET_H_
21 #define _THRIFT_TRANSPORT_TNONBLOCKINGSSLSERVERSOCKET_H_ 1
22 
23 #include <thrift/transport/TNonblockingServerSocket.h>
24 
25 namespace apache {
26 namespace thrift {
27 namespace transport {
28 
29 class TSSLSocketFactory;
30 
31 /**
32  * Nonblocking Server socket that accepts SSL connections.
33  */
34 class TNonblockingSSLServerSocket : public TNonblockingServerSocket {
35 public:
36   /**
37    * Constructor.  Binds to all interfaces.
38    *
39    * @param port    Listening port
40    * @param factory SSL socket factory implementation
41    */
42   TNonblockingSSLServerSocket(int port, std::shared_ptr<TSSLSocketFactory> factory);
43 
44   /**
45    * Constructor.  Binds to the specified address.
46    *
47    * @param address Address to bind to
48    * @param port    Listening port
49    * @param factory SSL socket factory implementation
50    */
51   TNonblockingSSLServerSocket(const std::string& address,
52                    int port,
53                    std::shared_ptr<TSSLSocketFactory> factory);
54 
55   /**
56    * Constructor.  Binds to all interfaces.
57    *
58    * @param port        Listening port
59    * @param sendTimeout Socket send timeout
60    * @param recvTimeout Socket receive timeout
61    * @param factory     SSL socket factory implementation
62    */
63   TNonblockingSSLServerSocket(int port,
64                    int sendTimeout,
65                    int recvTimeout,
66                    std::shared_ptr<TSSLSocketFactory> factory);
67 
68 protected:
69   std::shared_ptr<TSocket> createSocket(THRIFT_SOCKET socket) override;
70   std::shared_ptr<TSSLSocketFactory> factory_;
71 };
72 }
73 }
74 }
75 
76 #endif
77