forked from soutade/libgourou
Add support for MacOS and old compilers (not supporting C++11). Main patch is from Samuel Marks.
This commit is contained in:
parent
6e3958f09e
commit
7878f91cdd
|
@ -42,7 +42,6 @@ _externals_ :
|
||||||
_internals_ :
|
_internals_ :
|
||||||
|
|
||||||
* PugiXML
|
* PugiXML
|
||||||
* Base64
|
|
||||||
* uPDFParser
|
* uPDFParser
|
||||||
|
|
||||||
For utils :
|
For utils :
|
||||||
|
|
|
@ -33,7 +33,11 @@ class Base64 {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static std::string Encode(const std::string data) {
|
static std::string Encode(const std::string data) {
|
||||||
static constexpr char sEncodingTable[] = {
|
static
|
||||||
|
#if __STDC_VERSION__ >= 201112L
|
||||||
|
constexpr
|
||||||
|
#endif /* __STDC_VERSION__ >= 201112L */
|
||||||
|
char sEncodingTable[] = {
|
||||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
|
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
|
||||||
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
|
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
|
||||||
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
|
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
|
||||||
|
@ -73,7 +77,11 @@ class Base64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string Decode(const std::string& input, std::string& out) {
|
static std::string Decode(const std::string& input, std::string& out) {
|
||||||
static constexpr unsigned char kDecodingTable[] = {
|
static
|
||||||
|
#if __STDC_VERSION__ >= 201112L
|
||||||
|
constexpr
|
||||||
|
#endif /* __STDC_VERSION__ >= 201112L */
|
||||||
|
unsigned char kDecodingTable[] = {
|
||||||
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
|
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
|
||||||
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
|
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
|
||||||
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
|
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
|
||||||
|
|
|
@ -132,6 +132,16 @@ namespace gourou
|
||||||
DRM_ERR_ENCRYPTION_KEY_FP
|
DRM_ERR_ENCRYPTION_KEY_FP
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef _NOEXCEPT
|
||||||
|
#if __STDC_VERSION__ >= 201112L
|
||||||
|
# define _NOEXCEPT noexcept
|
||||||
|
# define _NOEXCEPT_(x) noexcept(x)
|
||||||
|
#else
|
||||||
|
# define _NOEXCEPT throw()
|
||||||
|
# define _NOEXCEPT_(x)
|
||||||
|
#endif
|
||||||
|
#endif /* !_NOEXCEPT */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generic exception class
|
* Generic exception class
|
||||||
*/
|
*/
|
||||||
|
@ -157,7 +167,7 @@ namespace gourou
|
||||||
this->fullmessage = strdup(other.fullmessage);
|
this->fullmessage = strdup(other.fullmessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
~Exception()
|
~Exception() _NOEXCEPT
|
||||||
{
|
{
|
||||||
free(fullmessage);
|
free(fullmessage);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,13 +29,23 @@
|
||||||
#include <libgourou_log.h>
|
#include <libgourou_log.h>
|
||||||
#include <device.h>
|
#include <device.h>
|
||||||
|
|
||||||
// From https://stackoverflow.com/questions/1779715/how-to-get-mac-address-of-your-machine-using-a-c-program/35242525
|
#include <string.h>
|
||||||
|
#if defined(__linux__) || defined(linux) || defined(__linux)
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <string.h>
|
#elif (defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) \
|
||||||
|
|| defined(__bsdi__) || defined(__DragonFly__) || defined(__APPLE__))
|
||||||
|
#include <ifaddrs.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <net/if_dl.h>
|
||||||
|
|
||||||
|
#define BSD_HEADERS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__linux__) || defined(linux) || defined(__linux)
|
||||||
|
// From https://stackoverflow.com/questions/1779715/how-to-get-mac-address-of-your-machine-using-a-c-program/35242525
|
||||||
int get_mac_address(unsigned char* mac_address)
|
int get_mac_address(unsigned char* mac_address)
|
||||||
{
|
{
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
|
@ -74,6 +84,43 @@ int get_mac_address(unsigned char* mac_address)
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#elif BSD_HEADERS
|
||||||
|
// https://stackoverflow.com/a/3978293
|
||||||
|
int get_mac_address(unsigned char* mac_address, const char* if_name = "en0")
|
||||||
|
{
|
||||||
|
ifaddrs* iflist;
|
||||||
|
int found = 0;
|
||||||
|
if (getifaddrs(&iflist) == 0) {
|
||||||
|
for (ifaddrs* cur = iflist; cur; cur = cur->ifa_next) {
|
||||||
|
if ((cur->ifa_addr->sa_family == AF_LINK) &&
|
||||||
|
(strcmp(cur->ifa_name, if_name) == 0) &&
|
||||||
|
cur->ifa_addr) {
|
||||||
|
sockaddr_dl* sdl = (sockaddr_dl*)cur->ifa_addr;
|
||||||
|
memcpy(mac_address, LLADDR(sdl), sdl->sdl_alen);
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
freeifaddrs(iflist);
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
int get_mac_address(unsigned char* mac_address)
|
||||||
|
{
|
||||||
|
GOUROU_LOG(INFO, "get_mac_address() not implemented for your platform, using a static address");
|
||||||
|
|
||||||
|
mac_address[0] = 0x8D;
|
||||||
|
mac_address[1] = 0x70;
|
||||||
|
mac_address[2] = 0x13;
|
||||||
|
mac_address[3] = 0x8D;
|
||||||
|
mac_address[4] = 0x43;
|
||||||
|
mac_address[5] = 0x27;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif /* defined(__linux__) || defined(linux) || defined(__linux) */
|
||||||
|
|
||||||
|
|
||||||
namespace gourou
|
namespace gourou
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
along with libgourou. If not, see <http://www.gnu.org/licenses/>.
|
along with libgourou. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <cctype>
|
||||||
#include <fulfillment_item.h>
|
#include <fulfillment_item.h>
|
||||||
#include <libgourou_common.h>
|
#include <libgourou_common.h>
|
||||||
#include "user.h"
|
#include "user.h"
|
||||||
|
@ -93,8 +94,12 @@ namespace gourou
|
||||||
std::string FulfillmentItem::getMetadata(std::string name)
|
std::string FulfillmentItem::getMetadata(std::string name)
|
||||||
{
|
{
|
||||||
// https://stackoverflow.com/questions/313970/how-to-convert-an-instance-of-stdstring-to-lower-case
|
// https://stackoverflow.com/questions/313970/how-to-convert-an-instance-of-stdstring-to-lower-case
|
||||||
|
#if __STDC_VERSION__ >= 201112L
|
||||||
std::transform(name.begin(), name.end(), name.begin(),
|
std::transform(name.begin(), name.end(), name.begin(),
|
||||||
[](unsigned char c){ return std::tolower(c); });
|
[](unsigned char c){ return std::tolower(c); });
|
||||||
|
#else
|
||||||
|
std::transform(name.begin(), name.end(), name.begin(), tolower);
|
||||||
|
#endif
|
||||||
name = std::string("dc:") + name;
|
name = std::string("dc:") + name;
|
||||||
pugi::xpath_node path = metadatas.select_node(name.c_str());
|
pugi::xpath_node path = metadatas.select_node(name.c_str());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user