blob: db8118bf3de53e0d3bbe09de3edc364b8277d313 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _DECAF_NET_SSL_SSLSERVERSOCKET_H_
#define _DECAF_NET_SSL_SSLSERVERSOCKET_H_
#include <decaf/util/Config.h>
#include <decaf/net/ServerSocket.h>
namespace decaf {
namespace net {
namespace ssl {
/**
* Represents a server socket that is used to accept connections from clients using the
* Secure Sockets protocol or the Top Level Security protocol. The main function of this
* class is to create SSLSocket objects by accepting connections from client sockets over SSL.
*
* @since 1.0
*/
class DECAF_API SSLServerSocket : public ServerSocket {
protected:
/**
* Creates a non-bound server socket.
*/
SSLServerSocket();
/**
* Creates a new ServerSocket bound to the specified port, if the value of port is 0, then
* any free port is chosen.
*
* When this constructor is called the size of the backlog queue is set at 50, connections
* that arrive after the backlog has been reached are refused.
*
* If a SocketImplFactory is registered then the createSocketImpl method on the factory
* will be called otherwise a default SocketImpl is created.
*
* @param port
* The port to bind the ServerSocket to.
*
* @throws IOException if there is an I/O error while performing this operation.
* @throws IllegalArgumentException if the port value is negative or greater than 65535.
*/
SSLServerSocket(int port);
/**
* Creates a new ServerSocket bound to the specified port, if the value of port is 0, then
* any free port is chosen.
*
* When this constructor is called the size of the backlog queue is set at backlog, connections
* that arrive after the backlog has been reached are refused. If backlog is zero or negative
* then the default backlog value of 50 is used.
*
* If a SocketImplFactory is registered then the createSocketImpl method on the factory
* will be called otherwise a default SocketImpl is created.
*
* @param port
* The port to bind the ServerSocket to.
* @param backlog
* The the number of incoming connection attempts to queue before connections are refused.
*
* @throws IOException if there is an I/O error while performing this operation.
* @throws IllegalArgumentException if the port value is negative or greater than 65535.
*/
SSLServerSocket(int port, int backlog);
/**
* Creates a new ServerSocket bound to the specified port, if the value of port is 0, then
* any free port is chosen. If the value of the ifAddress is empty or NULL then the ANY address
* is used.
*
* When this constructor is called the size of the backlog queue is set at backlog, connections
* that arrive after the backlog has been reached are refused. If backlog is zero or negative
* then the default backlog value of 50 is used.
*
* If a SocketImplFactory is registered then the createSocketImpl method on the factory
* will be called otherwise a default SocketImpl is created.
*
* @param port
* The port to bind the ServerSocket to.
* @param backlog
* The the number of incoming connection attempts to queue before connections are refused.
* @param address
* The IP Address to bind to on the local machine.
*
* @throws IOException if there is an I/O error while performing this operation.
* @throws IllegalArgumentException if the port value is negative or greater than 65535.
*/
SSLServerSocket(int port, int backlog, const decaf::net::InetAddress* address);
public:
virtual ~SSLServerSocket();
/**
* Gets a vector containing the names of all the cipher suites that are supported by this
* SSLServerSocket. Normally not all of these cipher suites will be enabled on the Socket.
*
* @return a vector containing the names of all the supported cipher suites.
*/
virtual std::vector<std::string> getSupportedCipherSuites() const = 0;
/**
* Gets a vector containing the names of all the protocols that could be enabled for
* this SSLServerSocket instance.
*
* @return a vector containing the names of all the supported protocols.
*/
virtual std::vector<std::string> getSupportedProtocols() const = 0;
/**
* Returns a vector containing the names of all the currently enabled Cipher Suites for
* this SSLServerSocket.
*
* @return vector of the names of all enabled Cipher Suites.
*/
virtual std::vector<std::string> getEnabledCipherSuites() const = 0;
/**
* Sets the Cipher Suites that are to be enabled on the SSLServerSocket connection. Each of the
* named Cipher Suites must appear in the list of supported cipher suites for this connection
* or an exception will be thrown.
*
* @param suites
* An Vector of names for all the Cipher Suites that are to be enabled.
*
* @throws IllegalArgumentException if the vector is empty or one of the names is invalid.
*/
virtual void setEnabledCipherSuites(const std::vector<std::string>& suites) = 0;
/**
* Returns a vector containing the names of all the currently enabled Protocols for
* this SSLServerSocket.
*
* @return vector of the names of all enabled Protocols.
*/
virtual std::vector<std::string> getEnabledProtocols() const = 0;
/**
* Sets the Protocols that are to be enabled on the SSLServerSocket connection. Each of the
* named Protocols must appear in the list of supported protocols suites for this connection
* or an exception will be thrown.
*
* @param protocols
* An Vector of names for all the Protocols that are to be enabled.
*
* @throws IllegalArgumentException if the vector is empty or one of the names is invalid.
*/
virtual void setEnabledProtocols(const std::vector<std::string>& protocols) = 0;
/**
* @return true if the Socket request client Authentication.
*/
virtual bool getWantClientAuth() const = 0;
/**
* Sets whether or not this Socket will request Client Authentication. If set to true the
* Socket (when used in server mode) will request that the client authenticate itself, if the
* client doesn't send authentication the socket will still allow negotiation to continue.
*
* @param value
* Whether the server socket should request client authentication.
*/
virtual void setWantClientAuth(bool value) = 0;
/**
* @return true if the Socket requires client Authentication.
*/
virtual bool getNeedClientAuth() const = 0;
/**
* Sets whether or not this Socket will require Client Authentication. If set to true the
* Socket (when used in server mode) will require that the client authenticate itself, if the
* client doesn't send authentication the socket will not allow negotiation to continue.
*
* @param value
* Whether the server socket should require client authentication.
*/
virtual void setNeedClientAuth(bool value) = 0;
};
}}}
#endif /* _DECAF_NET_SSL_SSLSERVERSOCKET_H_ */