diff options
Diffstat (limited to 'src/3rd_party-static/message_broker/include/networking.h')
-rw-r--r-- | src/3rd_party-static/message_broker/include/networking.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/3rd_party-static/message_broker/include/networking.h b/src/3rd_party-static/message_broker/include/networking.h new file mode 100644 index 0000000000..a08853bb31 --- /dev/null +++ b/src/3rd_party-static/message_broker/include/networking.h @@ -0,0 +1,139 @@ +/* + * JsonRpc-Cpp - JSON-RPC implementation. + * Copyright (C) 2008-2011 Sebastien Vincent <sebastien.vincent@cppextrem.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * \file networking.h + * \brief Networking utils. + * \author Sebastien Vincent + */ + +#ifndef NETWORKING_H +#define NETWORKING_H + +#ifdef _WIN32 + +#ifndef _MSC_VER +#include <stdint.h> +#endif //_MSC_VER + +#include <winsock2.h> +#include <windows.h> + +#if _MSC_VER >= 1400 // VC++ 8.0 +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; +#define snprintf _snprintf +#endif //_MSC_VER >= 1400 + +/* to use getaddrinfo, _WIN32_WINNT have to + * equal at least 0x0501 + */ +#define OLD_WIN32_WINNT _WIN32_WINNT + +#if (_WIN32_WINNT < 0x0501) +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x501 +#endif //(_WIN32_WINNT < 0x0501) + +#include <ws2tcpip.h> + +#if (_WIN32_WINNT != OLD_WIN32_WINNT) +#undef _WIN32_WINNT +#define _WIN32_WINNT OLD_WIN32_WINNT +#endif //(_WIN32_WINNT != OLD_WIN32_WINNT) + +typedef int socklen_t; +#define close closesocket + +#else //_WIN32 + +#include <stdint.h> + +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/time.h> + +#include <unistd.h> + +#include <netinet/in.h> + +#include <netdb.h> + +#endif //_WIN32 + +#include <string> + +/** + * \namespace networking + * \brief Networking related functions. + */ +namespace networking +{ + /** + * \enum TransportProtocol + * \brief Transport protocol. + */ + enum TransportProtocol + { + UDP = IPPROTO_UDP, /**< UDP protocol. */ + TCP = IPPROTO_TCP /**< TCP protocol. */ + }; + + /** + * \brief Initialize networking. + * \return true if network is correctly initialized, false otherwise + * \note On MS Windows, this step is mandatory to use + * socket API (socket(), bind(), recvfrom(), ...). + */ + bool init(); + + /** + * \brief Cleanup networking. + * \note On MS Windows, after calling this function, + * it will be impossible to use socket API. + */ + void cleanup(); + + /** + * \brief Connect to remote machine. + * \param protocol transport protocol used + * \param address remote address + * \param port remote port + * \param sockaddr if function succeed, sockaddr + * representation of address/port + * \param addrlen if function succeed, length of sockaddr + * \return socket descriptor if success, -1 otherwise + */ + int connect(enum TransportProtocol protocol, const std::string& address, uint16_t port, struct sockaddr_storage* sockaddr, socklen_t* addrlen); + + /** + * \brief Bind on a local address. + * \param protocol transport protocol used + * \param address local address + * \param port local port + * \param sockaddr if function succeed, sockaddr + * representation of address/port + * \param addrlen if function succeed, length of sockaddr + * \return socket descriptor if success, -1 otherwise + */ + int bind(enum TransportProtocol protocol, const std::string& address, uint16_t port, struct sockaddr_storage* sockaddr, socklen_t* addrlen); + +} /* namespace networking */ + +#endif /* NETWORKING_H */ + |