From f44ecaa4f27e7538ddcad66d40e543bffa2d2d86 Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 4 Jun 2017 16:57:49 +0200 Subject: sync with upstream --- .../kodi-addon-dev-kit/include/kodi/Network.h | 187 +++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/Network.h (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/Network.h') diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/Network.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/Network.h new file mode 100644 index 0000000..f27b710 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/Network.h @@ -0,0 +1,187 @@ +#pragma once +/* + * Copyright (C) 2005-2017 Team Kodi + * http://kodi.tv + * + * This Program 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 2, 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * . + * + */ + +#include "AddonBase.h" + +/* + * For interface between add-on and kodi. + * + * This structure defines the addresses of functions stored inside Kodi which + * are then available for the add-on to call + * + * All function pointers there are used by the C++ interface functions below. + * You find the set of them on xbmc/addons/interfaces/General.cpp + * + * Note: For add-on development itself this is not needed + */ +typedef struct AddonToKodiFuncTable_kodi_network +{ + bool (*wake_on_lan)(void* kodiBase, const char *mac); + char* (*get_ip_address)(void* kodiBase); + char* (*dns_lookup)(void* kodiBase, const char* url, bool* ret); + char* (*url_encode)(void* kodiBase, const char* url); +} AddonToKodiFuncTable_kodi_network; + +//============================================================================== +/// +/// \defgroup cpp_kodi_network Interface - kodi::network +/// \ingroup cpp +/// @brief **Network functions** +/// +/// The network module offers functions that allow you to control it. +/// +/// It has the header \ref Network.h "#include " be included +/// to enjoy it. +/// +//------------------------------------------------------------------------------ + +namespace kodi +{ +namespace network +{ + + //============================================================================ + /// + /// \ingroup cpp_kodi_network + /// @brief Send WakeOnLan magic packet. + /// + /// @param[in] mac Network address of the host to wake. + /// @return True if the magic packet was successfully sent, false otherwise. + /// + inline bool WakeOnLan(const std::string& mac) + { + return ::kodi::addon::CAddonBase::m_interface->toKodi->kodi_network->wake_on_lan(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, mac.c_str()); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// + /// \ingroup cpp_kodi_network + /// @brief To the current own ip address as a string. + /// + /// @return Own system ip. + /// + /// + /// ------------------------------------------------------------------------ + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.cpp} + /// #include + /// ... + /// std::string ipAddress = kodi::network::GetIPAddress(); + /// fprintf(stderr, "My IP is '%s'\n", ipAddress.c_str()); + /// ... + /// ~~~~~~~~~~~~~ + /// + inline std::string GetIPAddress() + { + std::string ip; + char* string = ::kodi::addon::CAddonBase::m_interface->toKodi->kodi_network->get_ip_address(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase); + if (string != nullptr) + { + ip = string; + ::kodi::addon::CAddonBase::m_interface->toKodi->free_string(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, string); + } + return ip; + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// + /// \ingroup cpp_kodi_network + /// @brief URL encodes the given string + /// + /// This function converts the given input string to a URL encoded string and + /// returns that as a new allocated string. All input characters that are + /// not a-z, A-Z, 0-9, '-', '.', '_' or '~' are converted to their "URL escaped" + /// version (%NN where NN is a two-digit hexadecimal number). + /// + /// @param[in] url The code of the message to get. + /// @return Encoded URL string + /// + /// + /// ------------------------------------------------------------------------ + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.cpp} + /// #include + /// ... + /// std::string encodedUrl = kodi::network::URLEncode("François"); + /// fprintf(stderr, "Encoded URL is '%s'\n", encodedUrl.c_str()); + /// ... + /// ~~~~~~~~~~~~~ + /// For example, the string: François ,would be encoded as: Fran%C3%A7ois + /// + inline std::string URLEncode(const std::string& url) + { + std::string retString; + char* string = ::kodi::addon::CAddonBase::m_interface->toKodi->kodi_network->url_encode(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, url.c_str()); + if (string != nullptr) + { + retString = string; + ::kodi::addon::CAddonBase::m_interface->toKodi->free_string(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, string); + } + return retString; + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// + /// \ingroup cpp_kodi_network + /// @brief Lookup URL in DNS cache + /// + /// This test will get DNS record for a domain. The DNS lookup is done directly + /// against the domain's authoritative name server, so changes to DNS Records + /// should show up instantly. By default, the DNS lookup tool will return an + /// IP address if you give it a name (e.g. www.example.com) + /// + /// @param[in] hostName The code of the message to get. + /// @param[out] ipAddress Returned address + /// @return true if successfull + /// + /// + /// ------------------------------------------------------------------------ + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.cpp} + /// #include + /// ... + /// std::string ipAddress; + /// bool ret = kodi::network::DNSLookup("www.google.com", ipAddress); + /// fprintf(stderr, "DNSLookup returned for www.google.com the IP '%s', call was %s\n", ipAddress.c_str(), ret ? "ok" : "failed"); + /// ... + /// ~~~~~~~~~~~~~ + /// + inline bool DNSLookup(const std::string& hostName, std::string& ipAddress) + { + bool ret = false; + char* string = ::kodi::addon::CAddonBase::m_interface->toKodi->kodi_network->dns_lookup(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, hostName.c_str(), &ret); + if (string != nullptr) + { + ipAddress = string; + ::kodi::addon::CAddonBase::m_interface->toKodi->free_string(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, string); + } + return ret; + } + //---------------------------------------------------------------------------- + +} /* namespace network */ +} /* namespace kodi */ -- cgit v1.2.3