opnsense-ports/multimedia/vdr-plugin-upnp/files/patch-freebsd

84 lines
2.4 KiB
Plaintext

--- a/misc/util.cpp
+++ b/misc/util.cpp
@@ -12,6 +12,14 @@
#include <string.h>
#include <string>
#include <sys/ioctl.h>
+#ifdef __FreeBSD__
+#include <sys/socket.h>
+#include <ifaddrs.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_types.h>
+#include <net/ethernet.h>
+#endif
#include <net/if.h>
#include <upnp/ixml.h>
#include <arpa/inet.h>
@@ -74,6 +82,7 @@ char* substr(const char* str, unsigned i
}
const char* getMACFromInterface(const char* Interface) {
+#ifndef __FreeBSD__
int fd;
struct ifreq ifr;
@@ -95,6 +104,31 @@ const char* getMACFromInterface(const ch
(unsigned char)ifr.ifr_hwaddr.sa_data[3],
(unsigned char)ifr.ifr_hwaddr.sa_data[4],
(unsigned char)ifr.ifr_hwaddr.sa_data[5]);
+#else
+ struct ifaddrs *ifa, *ifp = NULL;
+ char *ret = new char[18];
+ strcpy(ret, "00:00:00:00:00:00");
+
+ if (!Interface || getifaddrs(&ifp) < 0)
+ return ret;
+
+ for (ifa = ifp; ifa != NULL; ifa = ifa->ifa_next) {
+ if (strcmp(ifa->ifa_name, Interface))
+ continue;
+
+ if (ifa->ifa_addr->sa_family == AF_LINK) {
+ struct sockaddr_dl *sdl =
+ (struct sockaddr_dl *)ifa->ifa_addr;
+
+ if (sdl->sdl_type == IFT_ETHER &&
+ sdl->sdl_alen == ETHER_ADDR_LEN)
+ snprintf(ret, 18, "%s",
+ ether_ntoa((struct ether_addr *)LLADDR(sdl)));
+ break;
+ }
+ }
+ freeifaddrs(ifp);
+#endif
return ret;
}
--- a/server/server.cpp
+++ b/server/server.cpp
@@ -8,6 +8,9 @@
#include <vdr/plugin.h>
#include <stdlib.h>
#include <string.h>
+#ifdef __FreeBSD__
+#include <sys/socket.h>
+#endif
#include <arpa/inet.h>
#include <upnp/upnp.h>
#include "server.h"
--- a/database/database.cpp
+++ b/database/database.cpp
@@ -161,7 +161,11 @@ bool cRow::fetchColumn(char** Column, ch
int cSQLiteDatabase::initialize(){
int ret;
+#ifdef __FreeBSD__
+ const char* dbdir = (cUPnPConfig::get()->mDatabaseFolder) ? cUPnPConfig::get()->mDatabaseFolder : "/var/cache/vdr/upnp";
+#else
const char* dbdir = (cUPnPConfig::get()->mDatabaseFolder) ? cUPnPConfig::get()->mDatabaseFolder : cPluginUpnp::getConfigDirectory();
+#endif
cString File = cString::sprintf("%s/%s", dbdir, SQLITE_DB_FILE);
if((ret = sqlite3_open(File, &this->mDatabase))){
ERROR("Unable to open database file %s (Error code: %d)!", *File, ret);