summaryrefslogtreecommitdiffstats
path: root/src/Net/ServerConnection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Net/ServerConnection.cpp')
-rw-r--r--src/Net/ServerConnection.cpp48
1 files changed, 9 insertions, 39 deletions
diff --git a/src/Net/ServerConnection.cpp b/src/Net/ServerConnection.cpp
index 4a0bf15..1e0959d 100644
--- a/src/Net/ServerConnection.cpp
+++ b/src/Net/ServerConnection.cpp
@@ -27,38 +27,7 @@
namespace Mad {
namespace Net {
-bool ServerConnection::loadDHParams(const std::string &file) {
- std::ifstream stream(file.c_str());
-
- if(!stream.is_open())
- return false;
-
- std::string data, line;
-
- while(!stream.eof()) {
- std::getline(stream, line);
- data += line + "\n";
- }
-
- stream.close();
-
- gnutls_datum_t datum;
- datum.data = new unsigned char[data.size()];
- datum.size = data.size();
-
- std::memcpy(datum.data, data.data(), data.size());
-
- int ret = gnutls_dh_params_import_pkcs3(dh_params, &datum, GNUTLS_X509_FMT_PEM);
-
- if(ret == 0)
- gnutls_anon_set_server_dh_params(anoncred, dh_params);
-
- delete [] datum.data;
-
- return (ret == 0);
-}
-
-bool ServerConnection::listen(const IPAddress &address) {
+void ServerConnection::listen(const IPAddress &address) throw(ConnectionException) {
const int kx_list[] = {GNUTLS_KX_ANON_DH, 0};
if(connected)
@@ -66,27 +35,30 @@ bool ServerConnection::listen(const IPAddress &address) {
int listen_sock = socket(PF_INET, SOCK_STREAM, 0);
if(listen_sock < 0)
- return false;
+ throw ConnectionException("socket()", std::strerror(errno));
peer = new IPAddress(address);
if(bind(listen_sock, peer->getSockAddr(), peer->getSockAddrLength()) < 0) {
close(listen_sock);
delete peer;
- return false;
+
+ throw ConnectionException("bind()", std::strerror(errno));
}
if(::listen(listen_sock, 1024) < 0) {
close(listen_sock);
delete peer;
- return false;
+
+ throw ConnectionException("listen()", std::strerror(errno));
}
sock = accept(listen_sock, NULL, NULL);
if(sock < 0) {
close(listen_sock);
delete peer;
- return false;
+
+ throw ConnectionException("accept()", std::strerror(errno));
}
close(listen_sock);
@@ -106,10 +78,8 @@ bool ServerConnection::listen(const IPAddress &address) {
if(ret < 0) {
disconnect();
- return false;
+ throw ConnectionException("gnutls_handshake()", gnutls_strerror(ret));
}
-
- return true;
}
void ServerConnection::disconnect() {