From bbab73a63b8c7b50e8a8cb228999d45024fad984 Mon Sep 17 00:00:00 2001 From: "Matthias (think)" Date: Wed, 11 Jul 2012 11:49:12 +0200 Subject: added unmodified mmbtools --- src/InetAddress.cpp | 259 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 src/InetAddress.cpp (limited to 'src/InetAddress.cpp') diff --git a/src/InetAddress.cpp b/src/InetAddress.cpp new file mode 100644 index 0000000..8915285 --- /dev/null +++ b/src/InetAddress.cpp @@ -0,0 +1,259 @@ +/* + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the + Queen in Right of Canada (Communications Research Center Canada) + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see . + */ + +#include "InetAddress.h" +#include +#include + +#ifdef _WIN32 +#else +# include +# include +#endif + +#ifdef TRACE_ON +# ifndef TRACE_CLASS +# define TRACE_CLASS(clas, func) cout <<"-" <<(clas) <<"\t(" <h_addr); + } else { + addr.sin_addr.s_addr = htons(INADDR_ANY); + inetErrNo = 0; + inetErrMsg = "Could not find address"; + inetErrDesc = name; + return -1; + } + } + } else { + addr.sin_addr.s_addr = INADDR_ANY; + } + return 0; +} + + +void setInetError(const char* description) +{ + inetErrNo = 0; +#ifdef _WIN32 + inetErrNo = WSAGetLastError(); + switch (inetErrNo) { + case WSANOTINITIALISED: + inetErrMsg = "WSANOTINITIALISED A successful WSAStartup must occur before using this function."; + break; + case WSAENETDOWN: + inetErrMsg = "WSAENETDOWN The network subsystem has failed."; + break; + case WSAEFAULT: + inetErrMsg = "WSAEFAULT The buf or from parameters are not part of the user address space, or the fromlen parameter is too small to accommodate the peer address."; + break; + case WSAEINTR: + inetErrMsg = "WSAEINTR The (blocking) call was canceled through WSACancelBlockingCall."; + break; + case WSAEINPROGRESS: + inetErrMsg = "WSAEINPROGRESS A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function."; + break; + case WSAEINVAL: + inetErrMsg = "WSAEINVAL The socket has not been bound with bind, or an unknown flag was specified, or MSG_OOB was specified for a socket with SO_OOBINLINE enabled, or (for byte stream-style sockets only) len was zero or negative."; + break; + case WSAEISCONN: + inetErrMsg = "WSAEISCONN The socket is connected. This function is not permitted with a connected socket, whether the socket is connection-oriented or connectionless."; + break; + case WSAENETRESET: + inetErrMsg = "WSAENETRESET The connection has been broken due to the \"keep-alive\" activity detecting a failure while the operation was in progress."; + break; + case WSAENOTSOCK: + inetErrMsg = "WSAENOTSOCK The descriptor is not a socket."; + break; + case WSAEOPNOTSUPP: + inetErrMsg = "WSAEOPNOTSUPP MSG_OOB was specified, but the socket is not stream-style such as type SOCK_STREAM, out-of-band data is not supported in the communication domain associated with this socket, or the socket is unidirectional and supports only send operations."; + break; + case WSAESHUTDOWN: + inetErrMsg = "WSAESHUTDOWN The socket has been shut down; it is not possible to recvfrom on a socket after shutdown has been invoked with how set to SD_RECEIVE or SD_BOTH."; + break; + case WSAEWOULDBLOCK: + inetErrMsg = "WSAEWOULDBLOCK The socket is marked as nonblocking and the recvfrom operation would block."; + break; + case WSAEMSGSIZE: + inetErrMsg = "WSAEMSGSIZE The message was too large to fit into the specified buffer and was truncated."; + break; + case WSAETIMEDOUT: + inetErrMsg = "WSAETIMEDOUT The connection has been dropped, because of a network failure or because the system on the other end went down without notice."; + break; + case WSAECONNRESET: + inetErrMsg = "WSAECONNRESET"; + break; + case WSAEACCES: + inetErrMsg = "WSAEACCES The requested address is a broadcast address, but the appropriate flag was not set. Call setsockopt with the SO_BROADCAST parameter to allow the use of the broadcast address."; + break; + case WSAENOBUFS: + inetErrMsg = "WSAENOBUFS No buffer space is available."; + break; + case WSAENOTCONN: + inetErrMsg = "WSAENOTCONN The socket is not connected (connection-oriented sockets only)"; + break; + case WSAEHOSTUNREACH: + inetErrMsg = "WSAEHOSTUNREACH The remote host cannot be reached from this host at this time."; + break; + case WSAECONNABORTED: + inetErrMsg = "WSAECONNABORTED The virtual circuit was terminated due to a time-out or other failure. The application should close the socket as it is no longer usable."; + break; + case WSAEADDRNOTAVAIL: + inetErrMsg = "WSAEADDRNOTAVAIL The remote address is not a valid address, for example, ADDR_ANY."; + break; + case WSAEAFNOSUPPORT: + inetErrMsg = "WSAEAFNOSUPPORT Addresses in the specified family cannot be used with this socket."; + break; + case WSAEDESTADDRREQ: + inetErrMsg = "WSAEDESTADDRREQ A destination address is required."; + break; + case WSAENETUNREACH: + inetErrMsg = "WSAENETUNREACH The network cannot be reached from this host at this time."; + break; + case WSAEMFILE: + inetErrMsg = "No more socket descriptors are available."; + break; + case WSAEPROTONOSUPPORT: + inetErrMsg = "The specified protocol is not supported."; + break; + case WSAEPROTOTYPE: + inetErrMsg = "The specified protocol is the wrong type for this socket."; + break; + case WSAESOCKTNOSUPPORT: + inetErrMsg = "The specified socket type is not supported in this address family."; + break; + default: + inetErrMsg = "Unknown"; + }; +#else + inetErrNo = errno; + inetErrMsg = strerror(inetErrNo); +#endif + inetErrDesc = description; +} -- cgit v1.2.3