SecureServerSocket.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. //
  2. // SecureServerSocket.cpp
  3. //
  4. // $Id: //poco/Main/NetSSL_OpenSSL/src/SecureServerSocket.cpp#12 $
  5. //
  6. // Library: NetSSL_OpenSSL
  7. // Package: SSLSockets
  8. // Module: SecureServerSocket
  9. //
  10. // Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
  11. // and Contributors.
  12. //
  13. // Permission is hereby granted, free of charge, to any person or organization
  14. // obtaining a copy of the software and accompanying documentation covered by
  15. // this license (the "Software") to use, reproduce, display, distribute,
  16. // execute, and transmit the Software, and to prepare derivative works of the
  17. // Software, and to permit third-parties to whom the Software is furnished to
  18. // do so, all subject to the following:
  19. //
  20. // The copyright notices in the Software and this entire statement, including
  21. // the above license grant, this restriction and the following disclaimer,
  22. // must be included in all copies of the Software, in whole or in part, and
  23. // all derivative works of the Software, unless such copies or derivative
  24. // works are solely in the form of machine-executable object code generated by
  25. // a source language processor.
  26. //
  27. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29. // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
  30. // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
  31. // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
  32. // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  33. // DEALINGS IN THE SOFTWARE.
  34. //
  35. #include "Poco/Net/SecureServerSocket.h"
  36. #include "Poco/Net/SecureServerSocketImpl.h"
  37. #include "Poco/Net/SecureStreamSocket.h"
  38. #include "Poco/Net/SSLManager.h"
  39. #include "Poco/Exception.h"
  40. using Poco::InvalidArgumentException;
  41. namespace Poco {
  42. namespace Net {
  43. SecureServerSocket::SecureServerSocket():
  44. ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
  45. {
  46. }
  47. SecureServerSocket::SecureServerSocket(Context::Ptr pContext):
  48. ServerSocket(new SecureServerSocketImpl(pContext), true)
  49. {
  50. }
  51. SecureServerSocket::SecureServerSocket(const Socket& socket):
  52. ServerSocket(socket)
  53. {
  54. if (!dynamic_cast<SecureServerSocketImpl*>(impl()))
  55. throw InvalidArgumentException("Cannot assign incompatible socket");
  56. }
  57. SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog):
  58. ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
  59. {
  60. impl()->bind(address, true);
  61. impl()->listen(backlog);
  62. }
  63. SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog, Context::Ptr pContext):
  64. ServerSocket(new SecureServerSocketImpl(pContext), true)
  65. {
  66. impl()->bind(address, true);
  67. impl()->listen(backlog);
  68. }
  69. SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog):
  70. ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
  71. {
  72. IPAddress wildcardAddr;
  73. SocketAddress address(wildcardAddr, port);
  74. impl()->bind(address, true);
  75. impl()->listen(backlog);
  76. }
  77. SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog, Context::Ptr pContext):
  78. ServerSocket(new SecureServerSocketImpl(pContext), true)
  79. {
  80. IPAddress wildcardAddr;
  81. SocketAddress address(wildcardAddr, port);
  82. impl()->bind(address, true);
  83. impl()->listen(backlog);
  84. }
  85. SecureServerSocket::~SecureServerSocket()
  86. {
  87. }
  88. SecureServerSocket& SecureServerSocket::operator = (const Socket& socket)
  89. {
  90. if (&socket != this)
  91. {
  92. if (dynamic_cast<SecureServerSocketImpl*>(socket.impl()))
  93. ServerSocket::operator = (socket);
  94. else
  95. throw InvalidArgumentException("Cannot assign incompatible socket");
  96. }
  97. return *this;
  98. }
  99. StreamSocket SecureServerSocket::acceptConnection(SocketAddress& clientAddr)
  100. {
  101. return SecureStreamSocket(impl()->acceptConnection(clientAddr));
  102. }
  103. StreamSocket SecureServerSocket::acceptConnection()
  104. {
  105. SocketAddress clientAddr;
  106. return SecureStreamSocket(impl()->acceptConnection(clientAddr));
  107. }
  108. Context::Ptr SecureServerSocket::context() const
  109. {
  110. return static_cast<SecureServerSocketImpl*>(impl())->context();
  111. }
  112. } } // namespace Poco::Net