X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FIOHandler%2FIOSockets.c;h=0f4dfb4fb52bcd15e5b214719236bc937a3c9d00;hb=441bbac73e5081039bf99109464d3fc8ad656a68;hp=91e69261bded749f7c4c8699ae4b279bdd57c673;hpb=fabcb01a858bd9a99346437f7cfb3a39f51214d1;p=NextIRCd.git diff --git a/src/IOHandler/IOSockets.c b/src/IOHandler/IOSockets.c index 91e6926..0f4dfb4 100644 --- a/src/IOHandler/IOSockets.c +++ b/src/IOHandler/IOSockets.c @@ -23,9 +23,12 @@ #include "IOSSLBackend.h" #ifdef WIN32 +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif #define _WIN32_WINNT 0x501 -#include #include +#include #include #else #include @@ -91,12 +94,12 @@ static void iosockets_init_engine() { void _init_sockets() { #ifdef WIN32 WSADATA wsaData; - int iResult; + int iResult; //Initialize Winsock - iResult = WSAStartup(MAKEWORD(2,2), &wsaData); - if(iResult != 0){ - iolog_trigger(IOLOG_ERROR, "WSAStartup returned error code: %d", iResult); - } + iResult = WSAStartup(MAKEWORD(2,2), &wsaData); + if(iResult != 0){ + iolog_trigger(IOLOG_ERROR, "WSAStartup returned error code: %d", iResult); + } #endif iosockets_init_engine(); @@ -551,7 +554,7 @@ static void iosocket_listen_finish(struct _IOSocket *iosock) { if((iosock->socket_flags & IOSOCKETFLAG_IPV6SOCKET)) { struct sockaddr_in6 *ip6bind = (void*) iosock->bind.addr.address; ip6bind->sin6_family = AF_INET6; - ip6bind->sin6_port = htons(0); + ip6bind->sin6_port = htons(iosock->port); int opt = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt)); @@ -560,7 +563,7 @@ static void iosocket_listen_finish(struct _IOSocket *iosock) { } else { struct sockaddr_in *ip4bind = (void*) iosock->bind.addr.address; ip4bind->sin_family = AF_INET; - ip4bind->sin_port = htons(0); + ip4bind->sin_port = htons(iosock->port); int opt = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt)); @@ -591,6 +594,7 @@ struct _IOSocket *iosocket_accept_client(struct _IOSocket *iosock) { } new_iosocket->iosocket = new_iosock; new_iosocket->status = IOSOCKET_CONNECTED; + new_iosocket->data = iosock; new_iosock->parent = new_iosocket; new_iosock->socket_flags |= IOSOCKETFLAG_PARENT_PUBLIC | IOSOCKETFLAG_INCOMING | (iosock->socket_flags & IOSOCKETFLAG_IPV6SOCKET); @@ -753,7 +757,7 @@ struct IOSocket *iosocket_listen_ssl(const char *hostname, unsigned int port, co struct IOSocket *iosocket_listen_ssl_flags(const char *hostname, unsigned int port, const char *certfile, const char *keyfile, iosocket_callback *callback, int flags) { struct IOSocket *iosocket = iosocket_listen_flags(hostname, port, callback, flags); struct _IOSocket *iosock = iosocket->iosocket; - iosock->socket_flags |= IOSOCKETFLAG_SSLSOCKET | IOSOCKETFLAG_SSL_HANDSHAKE; + iosock->socket_flags |= IOSOCKETFLAG_SSLSOCKET; iossl_listen(iosock, certfile, keyfile); return iosocket; } @@ -910,7 +914,12 @@ void iosocket_events_callback(struct _IOSocket *iosock, int readable, int writea //incoming SSL connection accepted iosock->socket_flags &= ~IOSOCKETFLAG_SSL_HANDSHAKE; callback_event.type = IOSOCKETEVENT_ACCEPT; - callback_event.data.accept_socket = iosock->parent; + callback_event.data.accept_socket = iosock->parent; + struct _IOSocket *parent_socket = iosocket->data; + callback_event.socket = parent_socket->parent; + + //initialize readbuf + iosocket_increase_buffer(&iosock->readbuf, 1024); } else { //incoming SSL connection failed, simply drop iosock->socket_flags |= IOSOCKETFLAG_DEAD;