# This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # multimedia/vdr-plugin-upnp/ # multimedia/vdr-plugin-upnp/Makefile # multimedia/vdr-plugin-upnp/distinfo # multimedia/vdr-plugin-upnp/pkg-descr # multimedia/vdr-plugin-upnp/pkg-plist # multimedia/vdr-plugin-upnp/files/ # multimedia/vdr-plugin-upnp/files/patch-Makefile # multimedia/vdr-plugin-upnp/files/patch-badvideo # multimedia/vdr-plugin-upnp/files/patch-freebsd # multimedia/vdr-plugin-upnp/files/patch-fromgit # multimedia/vdr-plugin-upnp/files/patch-iconv # multimedia/vdr-plugin-upnp/files/patch-libupnp1.6.9 # multimedia/vdr-plugin-upnp/files/patch-livetv-channelname # multimedia/vdr-plugin-upnp/files/patch-recplayer-seek # multimedia/vdr-plugin-upnp/files/patch-size_t # multimedia/vdr-plugin-upnp/files/patch-strncpy # multimedia/vdr-plugin-upnp/ports-patches/ # multimedia/vdr-plugin-upnp/ports-patches/devel/ # multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/ # multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/files/ # multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/files/patch-upnp-src-gena-gena_device.c # multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/files/patch-upnp-src-genlib-net-http-webserver.c # echo c - multimedia/vdr-plugin-upnp/ mkdir -p multimedia/vdr-plugin-upnp/ > /dev/null 2>&1 echo x - multimedia/vdr-plugin-upnp/Makefile sed 's/^X//' >multimedia/vdr-plugin-upnp/Makefile << 'fb585f51a8b9238a2f502c5edc7364fb' X# New ports collection makefile for: vdr_plugin_upnp X# Date created: Tue Nov 16 18:34:10 CET 2010 X# Whom: Juergen Lock X# X# $FreeBSD: $ X# X XPORTNAME= vdr_plugin_upnp XPORTVERSION= 0.0.2a2 XPORTREVISION= 1 XCATEGORIES= multimedia XMASTER_SITES= http://projects.vdr-developer.org/attachments/download/177/ XDISTNAME= ${PORTNAME:S/_plugin_/-/}-${DISTVERSIONPREFIX}${DISTVERSION:S/a/-alpha/}${DISTVERSIONSUFFIX} XEXTRACT_SUFX= .tgz X XMAINTAINER= multimedia@FreeBSD.org XCOMMENT= Video Disk Recorder - UPnP/DLNA plugin (alpha!) X XLIB_DEPENDS+= avcodec.1:${PORTSDIR}/multimedia/ffmpeg \ X boost_system:${PORTSDIR}/devel/boost-libs \ X upnp.4:${PORTSDIR}/devel/upnp \ X sqlite3.8:${PORTSDIR}/databases/sqlite3 X XDIST_SUBDIR= vdr XPATCH_STRIP= -p1 XHAVE_CONFIGURE= yes XPORTDOCS= COPYING README XMAKE_JOBS_SAFE= yes XWRKSRC= ${WRKDIR}/${PLUGIN}-${DISTVERSION:S/a2//} X X.include "${.CURDIR}/../vdrdevel/Makefile.plugins" X Xpost-patch: post-patch-plugin X Xpost-install: X @${MKDIR} ${PREFIX}/etc/vdr/plugins/${PLUGIN}/http/icons X @${INSTALL_DATA} ${WRKSRC}/http/icons/* ${PREFIX}/etc/vdr/plugins/${PLUGIN}/http/icons X @${MKDIR} ${PREFIX}/etc/vdr/plugins/${PLUGIN}/http/xml X @${INSTALL_DATA} ${WRKSRC}/http/xml/* ${PREFIX}/etc/vdr/plugins/${PLUGIN}/http/xml X @${INSTALL} -o ${VDR_USER} -g ${VDR_GROUP} -d /var/cache/vdr-${PLUGIN} X.if !defined(NOPORTDOCS) X ${MKDIR} ${DOCSDIR} X (cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR}) X.endif X X.include fb585f51a8b9238a2f502c5edc7364fb echo x - multimedia/vdr-plugin-upnp/distinfo sed 's/^X//' >multimedia/vdr-plugin-upnp/distinfo << '2c44bd44c6ac48daed91faccfe0f7c28' XSHA256 (vdr/vdr-upnp-0.0.2-alpha2.tgz) = 5c5acff28e287b6ac59bd14c93cee1ce932bb8e2d0f9191cbb5a1314e6976ab3 XSIZE (vdr/vdr-upnp-0.0.2-alpha2.tgz) = 152762 2c44bd44c6ac48daed91faccfe0f7c28 echo x - multimedia/vdr-plugin-upnp/pkg-descr sed 's/^X//' >multimedia/vdr-plugin-upnp/pkg-descr << '2b658270e4913f810357176abaafd7ec' Xhttp://www.vdr-wiki.de/wiki/index.php/Upnp-plugin X XUPnP/DLNA Plugin for Video Disk Recorder X XThis Plugins extends the VDR with the possibility to act as an UPnP/DLNA Media XServer (DMS). It will serve VDR's contents in the network to any UPnP-AV and XDLNA capable devices. X XThis still is an alpha version, and currently (Nov 2010) also needs Xtwo patches (bugfixes) added to the libupnp (devel/upnp) port: X X ports-patches/devel/upnp/files/patch-upnp-src-gena-gena_device.c X ports-patches/devel/upnp/files/patch-upnp-src-genlib-net-http-webserver.c X XCopy them to ports/devel/upnp/files/ and rebuild devel/upnp . X XWWW: http://upnp.vdr-developer.org/ 2b658270e4913f810357176abaafd7ec echo x - multimedia/vdr-plugin-upnp/pkg-plist sed 's/^X//' >multimedia/vdr-plugin-upnp/pkg-plist << 'da2d05e0deaa9f75171e034a08c2a53c' Xlib/vdr/libvdr-upnp.so.1.7.16 Xetc/vdr/plugins/upnp/http/icons/upnpIconLrg.jpeg Xetc/vdr/plugins/upnp/http/icons/upnpIconLrg.png Xetc/vdr/plugins/upnp/http/icons/upnpIconSm.jpeg Xetc/vdr/plugins/upnp/http/icons/upnpIconSm.png Xetc/vdr/plugins/upnp/http/xml/cds_scpd.xml Xetc/vdr/plugins/upnp/http/xml/cms_scpd.xml X@exec /usr/bin/install -o %%VDR_USER%% -g %%VDR_GROUP%% -d /var/cache/vdr-upnp X@dirrm etc/vdr/plugins/upnp/http/xml X@dirrm etc/vdr/plugins/upnp/http/icons X@dirrm etc/vdr/plugins/upnp/http X@dirrmtry etc/vdr/plugins/upnp da2d05e0deaa9f75171e034a08c2a53c echo c - multimedia/vdr-plugin-upnp/files/ mkdir -p multimedia/vdr-plugin-upnp/files/ > /dev/null 2>&1 echo x - multimedia/vdr-plugin-upnp/files/patch-Makefile sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-Makefile << 'c05dfc47fe571dbee76e642a9b5decb7' X--- a/Makefile X+++ b/Makefile X@@ -42,6 +42,9 @@ PACKAGE = vdr-$(ARCHIVE) X X ### Includes and Defines (add further entries here): X X+ifdef FREEBSD X+LIBS += -L${LOCALBASE}/lib X+endif X LIBS += -lupnp -lixml -lsqlite3 -lavformat -lavcodec X X INCLUDES += -I$(VDRDIR)/include -I/usr/include -Iinc \ X@@ -150,7 +153,11 @@ i18n: $(I18Nmsgs) $(I18Npot) X X libvdr-$(PLUGIN).so: $(OBJS) X $(CXX) $(CXXFLAGS) $(LIBS) -shared $(OBJS) -o $@ -lc X+ifdef FREEBSD X+ @cp -f $@ $(LIBDIR)/$@.$(APIVERSION) X+else X @cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION) X+endif X X dist: clean X @-rm -rf $(TMPDIR)/$(ARCHIVE) X@@ -162,3 +169,6 @@ dist: clean X X clean: X @-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ $(PODIR)/*.mo $(PODIR)/*.pot X+ X+install: X+ ${INSTALL_PROGRAM} $(LIBDIR)/libvdr-$(PLUGIN).so.$(APIVERSION) $(PREFIX)/lib/vdr/libvdr-$(PLUGIN).so.$(APIVERSION) c05dfc47fe571dbee76e642a9b5decb7 echo x - multimedia/vdr-plugin-upnp/files/patch-badvideo sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-badvideo << '7ff2d321e6d12f7404051b757cb5fe98' X--- a/dlna/avdetector.cpp X+++ b/dlna/avdetector.cpp X@@ -262,7 +262,8 @@ int cAudioVideoDetector::detectDLNAProfi X } X X AVCodecContext* cCodecToolKit::getFirstCodecContext(AVFormatContext* FormatCtx, CodecType Type){ X- return cCodecToolKit::getFirstStream(FormatCtx, Type)->codec; X+ AVStream* ret = cCodecToolKit::getFirstStream(FormatCtx, Type); X+ return ret ? ret->codec : NULL; X } X X AVStream* cCodecToolKit::getFirstStream(AVFormatContext* FormatCtx, CodecType Type){ X--- a/dlna/profiles/mpeg2.cpp X+++ b/dlna/profiles/mpeg2.cpp X@@ -159,6 +159,8 @@ VideoPortionProfile cMPEG2Profiler::prob X AVCodecContext* VideoCodec = cCodecToolKit::getFirstCodecContext(FormatCtx, CODEC_TYPE_VIDEO); X AVStream* VideoStream = cCodecToolKit::getFirstStream(FormatCtx, CODEC_TYPE_VIDEO); X X+ if (VideoCodec == NULL || VideoStream == NULL) X+ return DLNA_VPP_UNKNOWN; X MESSAGE(VERBOSE_METADATA, "Codec-ID: %d", VideoCodec->codec_id); X MESSAGE(VERBOSE_METADATA, "Codec-Name: %s", VideoCodec->codec_name); X MESSAGE(VERBOSE_METADATA, "Codec Bitrate: %d", VideoCodec->bit_rate); 7ff2d321e6d12f7404051b757cb5fe98 echo x - multimedia/vdr-plugin-upnp/files/patch-freebsd sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-freebsd << '58b74f620bcd4003689d2301df41927c' X--- a/misc/util.cpp X+++ b/misc/util.cpp X@@ -12,6 +12,14 @@ X #include X #include X #include X+#ifdef __FreeBSD__ X+#include X+#include X+#include X+#include X+#include X+#include X+#endif X #include X #include X #include X@@ -74,6 +82,7 @@ char* substr(const char* str, unsigned i X } X X const char* getMACFromInterface(const char* Interface) { X+#ifndef __FreeBSD__ X int fd; X struct ifreq ifr; X X@@ -95,6 +104,31 @@ const char* getMACFromInterface(const ch X (unsigned char)ifr.ifr_hwaddr.sa_data[3], X (unsigned char)ifr.ifr_hwaddr.sa_data[4], X (unsigned char)ifr.ifr_hwaddr.sa_data[5]); X+#else X+ struct ifaddrs *ifa, *ifp = NULL; X+ char *ret = new char[18]; X+ strcpy(ret, "00:00:00:00:00:00"); X+ X+ if (!Interface || getifaddrs(&ifp) < 0) X+ return ret; X+ X+ for (ifa = ifp; ifa != NULL; ifa = ifa->ifa_next) { X+ if (strcmp(ifa->ifa_name, Interface)) X+ continue; X+ X+ if (ifa->ifa_addr->sa_family == AF_LINK) { X+ struct sockaddr_dl *sdl = X+ (struct sockaddr_dl *)ifa->ifa_addr; X+ X+ if (sdl->sdl_type == IFT_ETHER && X+ sdl->sdl_alen == ETHER_ADDR_LEN) X+ snprintf(ret, 18, "%s", X+ ether_ntoa((struct ether_addr *)LLADDR(sdl))); X+ break; X+ } X+ } X+ freeifaddrs(ifp); X+#endif X X return ret; X } X--- a/server/server.cpp X+++ b/server/server.cpp X@@ -8,6 +8,9 @@ X #include X #include X #include X+#ifdef __FreeBSD__ X+#include X+#endif X #include X #include X #include "server.h" 58b74f620bcd4003689d2301df41927c echo x - multimedia/vdr-plugin-upnp/files/patch-fromgit sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-fromgit << 'af6af6f2bc6071bbbcf05d252a906672' X--- a/database/metadata.cpp X+++ b/database/metadata.cpp X@@ -461,11 +471,20 @@ void cMediaDatabase::Action(){ X time_t LastEPGUpdate = 0; X while(this->Running()){ X X+#ifndef WITHOUT_TV X if(cSchedules::Modified() >= LastEPGUpdate){ X MESSAGE(VERBOSE_EPG_UPDATES, "Schedule changed. Updating..."); X updateChannelEPG(); X LastEPGUpdate = cSchedules::Modified(); X } X+#endif X+#ifndef WITHOUT_RECORDS X+ int NotUsed; X+ if(Recordings.StateChanged(NotUsed)){ X+ MESSAGE(VERBOSE_EPG_UPDATES, "Recordings changed. Updating..."); X+ loadRecordings(); X+ } X+#endif X X cCondWait::SleepMs(60 * 1000); // sleep a minute X } af6af6f2bc6071bbbcf05d252a906672 echo x - multimedia/vdr-plugin-upnp/files/patch-iconv sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-iconv << 'b1394fb2bdf4a168cce015f2a18bf2b6' X--- a/inc/upnp/contentdirectory.h X+++ b/inc/upnp/contentdirectory.h X@@ -39,6 +39,7 @@ public: X virtual void setError(Upnp_Action_Request* Request, int Error); X private: X cMediaDatabase* mMediaDatabase; X+ cCharSetConv* mconv; X void Action(); X int getSearchCapabilities(Upnp_Action_Request* Request); X int getSortCapabilities(Upnp_Action_Request* Request); X--- a/upnp/contentdirectory.cpp X+++ b/upnp/contentdirectory.cpp X@@ -14,9 +14,13 @@ X cContentDirectory::cContentDirectory(UpnpDevice_Handle DeviceHandle, cMediaDatabase* MediaDatabase) X : cUpnpService(DeviceHandle) { X this->mMediaDatabase = MediaDatabase; X+ this->mconv = new cCharSetConv((cCharSetConv::SystemCharacterTable() ? X+ cCharSetConv::SystemCharacterTable() : "UTF-8"), "UTF-8"); X } X X-cContentDirectory::~cContentDirectory() {} X+cContentDirectory::~cContentDirectory() { X+ delete this->mconv; X+} X X int cContentDirectory::subscribe(Upnp_Subscription_Request* Request){ X IXML_Document* PropertySet = NULL; X@@ -149,8 +153,15 @@ int cContentDirectory::browse(Upnp_Actio X return Request->ErrCode; X } X X+ const char *utf8Result = this->mconv->Convert(ResultSet->mResult); X+ if(!utf8Result){ X+ ERROR("Converting XML data failed"); X+ this->setError(Request, UPNP_SOAP_E_ACTION_FAILED); X+ return Request->ErrCode; X+ } X+ X char* escapedResult = NULL; X- escapeXMLCharacters(ResultSet->mResult, &escapedResult); X+ escapeXMLCharacters(utf8Result, &escapedResult); X X if(!escapedResult){ X ERROR("Escaping XML data failed"); b1394fb2bdf4a168cce015f2a18bf2b6 echo x - multimedia/vdr-plugin-upnp/files/patch-libupnp1.6.9 sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-libupnp1.6.9 << '7298bec934c2b3073ae16c10183b413a' X--- a/database/object.cpp X+++ b/database/object.cpp X@@ -7,6 +7,7 @@ X X #include X #include X+#include X #include X #include X #include X--- a/inc/util.h X+++ b/inc/util.h X@@ -20,6 +20,12 @@ extern "C" { X X #include X #include X+ X+#ifdef __FreeBSD__ X+#define off64_t off_t X+#endif X+#include X+ X /** X * Compares two strings X * X@@ -147,5 +153,7 @@ public: X virtual eOSState ProcessKey(eKeys Key); X }; X X+const char *IPAddrP(struct sockaddr_storage &IPAddr, char *buf, size_t buflen); X+ X #endif /* _UTIL_H */ X X--- a/inc/webserver.h X+++ b/inc/webserver.h X@@ -22,7 +22,9 @@ class cUPnPWebServer { X friend class cUPnPServer; X private: X static cUPnPWebServer *mInstance; X+#ifdef OLDUPNPAPI X static UpnpVirtualDirCallbacks mVirtualDirCallbacks; X+#endif X const char* mRootdir; X cUPnPWebServer(const char* root = "/"); X protected: X--- a/misc/util.cpp X+++ b/misc/util.cpp X@@ -532,4 +567,16 @@ IXML_Element* ixmlAddFilteredProperty(cS X return ixmlAddProperty(document, node, upnpproperty, value); X else X return NULL; X-} X\ No newline at end of file X+} X+ X+const char *IPAddrP(struct sockaddr_storage &IPAddr, char *buf, size_t buflen){ X+ *buf = '\0'; X+ if (IPAddr.ss_family == AF_INET) { X+ inet_ntop(AF_INET, (void *)&((struct sockaddr_in *)&IPAddr)->sin_addr, buf, buflen); X+ return buf; X+ } else if (IPAddr.ss_family == AF_INET6) { X+ inet_ntop(AF_INET6, (void *)&((struct sockaddr_in6 *)&IPAddr)->sin6_addr, buf, buflen); X+ return buf; X+ } X+ return "??"; X+} X--- a/server/webserver.cpp X+++ b/server/webserver.cpp X@@ -100,6 +100,7 @@ cUPnPWebServer::~cUPnPWebServer(){} X X cUPnPWebServer* cUPnPWebServer::mInstance = NULL; X X+#ifdef OLDUPNPAPI X UpnpVirtualDirCallbacks cUPnPWebServer::mVirtualDirCallbacks = { X cUPnPWebServer::getInfo, X cUPnPWebServer::open, X@@ -108,6 +109,7 @@ UpnpVirtualDirCallbacks cUPnPWebServer:: X cUPnPWebServer::seek, X cUPnPWebServer::close X }; X+#endif X X bool cUPnPWebServer::init(){ X MESSAGE(VERBOSE_WEBSERVER, "Initialize callbacks for virtual directories."); X@@ -118,7 +120,16 @@ bool cUPnPWebServer::init(){ X } X MESSAGE(VERBOSE_WEBSERVER, "Setting up callbacks"); X X+#ifdef OLDUPNPAPI X if(UpnpSetVirtualDirCallbacks(&cUPnPWebServer::mVirtualDirCallbacks) == UPNP_E_INVALID_ARGUMENT){ X+#else X+ if(UpnpVirtualDir_set_GetInfoCallback(&cUPnPWebServer::getInfo) != UPNP_E_SUCCESS || X+ UpnpVirtualDir_set_OpenCallback(&cUPnPWebServer::open) != UPNP_E_SUCCESS || X+ UpnpVirtualDir_set_ReadCallback(&cUPnPWebServer::read) != UPNP_E_SUCCESS || X+ UpnpVirtualDir_set_WriteCallback(&cUPnPWebServer::write) != UPNP_E_SUCCESS || X+ UpnpVirtualDir_set_SeekCallback(&cUPnPWebServer::seek) != UPNP_E_SUCCESS || X+ UpnpVirtualDir_set_CloseCallback(&cUPnPWebServer::close) != UPNP_E_SUCCESS){ X+#endif X ERROR("The virtual directory callbacks are invalid."); X return false; X } X--- a/upnp/connectionmanager.cpp X+++ b/upnp/connectionmanager.cpp X@@ -7,6 +7,8 @@ X X #include X #include X+/* XXX */ X+#define UPNP_HAVE_TOOLS 1 X #include X #include X #include "upnp/connectionmanager.h" X@@ -70,7 +72,8 @@ int cConnectionManager::execute(Upnp_Act X } X X int cConnectionManager::getProtocolInfo(Upnp_Action_Request* Request){ X- MESSAGE(VERBOSE_CMS, "Protocol info requested by %s.", inet_ntoa(Request->CtrlPtIPAddr)); X+ char buf[64]; X+ MESSAGE(VERBOSE_CMS, "Protocol info requested by %s.", IPAddrP(Request->CtrlPtIPAddr, buf, sizeof buf)); X cString Result = cString::sprintf( X " \ X %s \ X@@ -87,7 +90,8 @@ int cConnectionManager::getProtocolInfo( X } X X int cConnectionManager::getCurrentConnectionIDs(Upnp_Action_Request* Request){ X- MESSAGE(VERBOSE_CMS, "Current connection IDs requested by %s.", inet_ntoa(Request->CtrlPtIPAddr)); X+ char buf[64]; X+ MESSAGE(VERBOSE_CMS, "Current connection IDs requested by %s.", IPAddrP(Request->CtrlPtIPAddr, buf, sizeof buf)); X cString Result; X const char* IDs = this->getConnectionIDsCVS(); X if(!IDs){ X@@ -109,7 +113,8 @@ int cConnectionManager::getCurrentConnec X } X X int cConnectionManager::getCurrentConnectionInfo(Upnp_Action_Request* Request){ X- MESSAGE(VERBOSE_CMS, "Current connection info requested by %s.", inet_ntoa(Request->CtrlPtIPAddr)); X+ char buf[64]; X+ MESSAGE(VERBOSE_CMS, "Current connection info requested by %s.", IPAddrP(Request->CtrlPtIPAddr, buf, sizeof buf)); X int ConnectionID; X X if(this->parseIntegerValue(Request->ActionRequest, "ConnectionID", &ConnectionID) != 0){ X@@ -156,7 +161,8 @@ int cConnectionManager::getCurrentConnec X } X X int cConnectionManager::prepareForConnection(Upnp_Action_Request* Request){ X- MESSAGE(VERBOSE_CMS, "Request for a new connection by %s.", inet_ntoa(Request->CtrlPtIPAddr)); X+ char buf[64]; X+ MESSAGE(VERBOSE_CMS, "Request for a new connection by %s.", IPAddrP(Request->CtrlPtIPAddr, buf, sizeof buf)); X //char* Result = NULL; X char* RemoteProtocolInfo = NULL; X char* PeerConnectionManager = NULL; X@@ -198,7 +204,8 @@ int cConnectionManager::prepareForConnec X } X X int cConnectionManager::connectionComplete(Upnp_Action_Request* Request){ X- MESSAGE(VERBOSE_CMS, "Request for closing an open connection by %s.", inet_ntoa(Request->CtrlPtIPAddr)); X+ char buf[64]; X+ MESSAGE(VERBOSE_CMS, "Request for closing an open connection by %s.", IPAddrP(Request->CtrlPtIPAddr, buf, sizeof buf)); X //char* Result = NULL; X int ConnectionID; X X--- a/upnp/contentdirectory.cpp X+++ b/upnp/contentdirectory.cpp X@@ -6,6 +6,8 @@ X */ X X #include X+/* XXX */ X+#define UPNP_HAVE_TOOLS 1 X #include X #include "upnp/contentdirectory.h" X #include "../common.h" X@@ -84,7 +90,8 @@ int cContentDirectory::execute(Upnp_Acti X X X int cContentDirectory::browse(Upnp_Action_Request* Request){ X- MESSAGE(VERBOSE_CDS, "Browse requested by %s.", inet_ntoa(Request->CtrlPtIPAddr)); X+ char buf[64]; X+ MESSAGE(VERBOSE_CDS, "Browse requested by %s.", IPAddrP(Request->CtrlPtIPAddr, buf, sizeof buf)); X X char* ObjectID = NULL; X if(this->parseStringValue(Request->ActionRequest, "ObjectID", &ObjectID)){ 7298bec934c2b3073ae16c10183b413a echo x - multimedia/vdr-plugin-upnp/files/patch-livetv-channelname sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-livetv-channelname << 'cbd8b5f2c4d8b0cdc5b28702dc8b2db7' X--- a/database/metadata.cpp X+++ b/database/metadata.cpp X@@ -364,7 +364,11 @@ void cMediaDatabase::updateChannelEPG(){ X MESSAGE(VERBOSE_EPG_UPDATES, "Updating details"); X X if(Event){ X+#if 1 // XXX easier to find the channels at least on xbmc X+ ChannelItem->setTitle(Channel->Name()); X+#else X ChannelItem->setTitle(Event->Title()?Event->Title():Channel->Name()); X+#endif X ChannelItem->setLongDescription(Event->Description()); X ChannelItem->setDescription(Event->ShortText()); X } cbd8b5f2c4d8b0cdc5b28702dc8b2db7 echo x - multimedia/vdr-plugin-upnp/files/patch-recplayer-seek sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-recplayer-seek << '2f1b4972c1fa1276153a7296d8f78934' X--- a/receiver/recplayer.cpp X+++ b/receiver/recplayer.cpp X@@ -97,13 +97,14 @@ int cRecordingPlayer::seek(off_t offset, X } X // finally, we can seek X // TODO: binary search X- for(index = 1; this->mLastOffsets[index]; index++){ X+ for(index = 1; index <= this->mLastFileNumber; index++){ X if(this->mLastOffsets[index-1] <= offset && offset <= this->mLastOffsets[index]){ X relativeOffset = offset - this->mLastOffsets[index-1]; X break; X } X } X- if(!(this->mCurrentFile = this->mRecordingFile->SetOffset(index, relativeOffset))){ X+ if(index > this->mLastFileNumber || X+ !(this->mCurrentFile = this->mRecordingFile->SetOffset(index, relativeOffset))){ X // seeking failed!!! should never happen. X this->mCurrentFile = this->mRecordingFile->SetOffset(1); X return -1; X@@ -115,9 +116,12 @@ int cRecordingPlayer::seek(off_t offset, X void cRecordingPlayer::scanLastOffsets(){ X // rewind X this->mCurrentFile = this->mRecordingFile->SetOffset(1); X- for(int i = 1; (this->mCurrentFile = this->mRecordingFile->NextFile()); i++){ X+ this->mLastOffsets[0] = 0; X+ this->mLastFileNumber = 1; X+ for(int i = 1; this->mCurrentFile; i++){ X this->mLastOffsets[i] = this->mLastOffsets[i-1] + this->mCurrentFile->Seek(0, SEEK_END); X this->mLastFileNumber = this->mRecordingFile->Number(); X+ this->mCurrentFile = this->mRecordingFile->NextFile(); X } X } X 2f1b4972c1fa1276153a7296d8f78934 echo x - multimedia/vdr-plugin-upnp/files/patch-size_t sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-size_t << 'b580cdaf092048e7b8639054a1068097' X--- a/database/object.cpp X+++ b/database/object.cpp X@@ -1023,7 +1024,7 @@ void cUPnPObjectFactory::registerMediato X } X MESSAGE(VERBOSE_SDK, "Registering mediator for class '%s'", UPnPClass); X this->mMediators[UPnPClass] = Mediator; X- MESSAGE(VERBOSE_SDK, "Now %d mediators registered", this->mMediators.size()); X+ MESSAGE(VERBOSE_SDK, "Now %ld mediators registered", (long)this->mMediators.size()); X return; X } X X@@ -1040,7 +1041,7 @@ void cUPnPObjectFactory::unregisterMedia X MESSAGE(VERBOSE_SDK, "Unregistering mediator for class '%s'", UPnPClass); X this->mMediators.erase(MediatorIterator); X if(freeMediator) delete MediatorIterator->second; X- MESSAGE(VERBOSE_SDK, "Now %d mediators registered", this->mMediators.size()); X+ MESSAGE(VERBOSE_SDK, "Now %ld mediators registered", (long)this->mMediators.size()); X return; X } X X@@ -1067,7 +1068,7 @@ cMediatorInterface* cUPnPObjectFactory:: X X cMediatorInterface* cUPnPObjectFactory::findMediatorByClass(const char* Class){ X if(!Class){ ERROR("No class specified"); return NULL; } X- MESSAGE(VERBOSE_SQL, "Searching for mediator '%s' in %d mediators", Class, this->mMediators.size()); X+ MESSAGE(VERBOSE_SQL, "Searching for mediator '%s' in %ld mediators", Class, (long)this->mMediators.size()); X tMediatorMap::iterator MediatorIterator = this->mMediators.find(Class); X if(MediatorIterator==this->mMediators.end()){ X ERROR("No matching mediator for class '%s'",Class); X--- a/receiver/recplayer.cpp X+++ b/receiver/recplayer.cpp X@@ -58,7 +58,7 @@ int cRecordingPlayer::read(char* buf, si X ERROR("Current part of record is not open"); X return -1; X } X- MESSAGE(VERBOSE_RECORDS, "Reading %d from record", buflen); X+ MESSAGE(VERBOSE_RECORDS, "Reading %ld from record", (long)buflen); X int bytesread = 0; X while((bytesread = this->mCurrentFile->Read(buf, buflen)) == 0){ // EOF, try next file X if(!(this->mCurrentFile = this->mRecordingFile->NextFile())){ X--- a/server/server.cpp X+++ b/server/server.cpp X@@ -278,7 +281,7 @@ bool cUPnPServer::autoDetectSettings(voi X char** Ifaces = getNetworkInterfaces(&count); X int i=0; X bool ret = false; X- MESSAGE(VERBOSE_CUSTOM_OUTPUT, "AUTODETECT: Found %d possible interfaces.", sizeof(Ifaces)); X+ MESSAGE(VERBOSE_CUSTOM_OUTPUT, "AUTODETECT: Found %ld possible interfaces.", (long)sizeof(Ifaces)); X while(Ifaces[i]){ X if(strcmp(Ifaces[i],"lo")!=0){ X // true || false == true b580cdaf092048e7b8639054a1068097 echo x - multimedia/vdr-plugin-upnp/files/patch-strncpy sed 's/^X//' >multimedia/vdr-plugin-upnp/files/patch-strncpy << '908673aa107bcedf65cbb2320f405751' X--- a/misc/util.cpp X+++ b/misc/util.cpp X@@ -485,7 +519,8 @@ IXML_Element* ixmlAddProperty(IXML_Docum X char tvalue[UPNP_MAX_METADATA_LENGTH]; X // trim the value to max metadata size X if(value){ X- strncpy(tvalue, value, UPNP_MAX_METADATA_LENGTH); X+ strncpy(tvalue, value, UPNP_MAX_METADATA_LENGTH - 1); X+ tvalue[UPNP_MAX_METADATA_LENGTH - 1] = '\0'; X } X X const char* attribute = att(upnpproperty); 908673aa107bcedf65cbb2320f405751 echo c - multimedia/vdr-plugin-upnp/ports-patches/ mkdir -p multimedia/vdr-plugin-upnp/ports-patches/ > /dev/null 2>&1 echo c - multimedia/vdr-plugin-upnp/ports-patches/devel/ mkdir -p multimedia/vdr-plugin-upnp/ports-patches/devel/ > /dev/null 2>&1 echo c - multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/ mkdir -p multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/ > /dev/null 2>&1 echo c - multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/files/ mkdir -p multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/files/ > /dev/null 2>&1 echo x - multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/files/patch-upnp-src-gena-gena_device.c sed 's/^X//' >multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/files/patch-upnp-src-gena-gena_device.c << '142bde2cb19b1c7f26ea2ee722d1613f' X--- upnp/src/gena/gena_device.c.orig X+++ upnp/src/gena/gena_device.c X@@ -225,7 +225,7 @@ static UPNP_INLINE int notify_send_and_r X "bbb", X start_msg.buf, start_msg.length, X propertySet, strlen(propertySet), X- "\r\n", 2); X+ "\r\n", sizeof "\r\n" - 1); X if (ret_code) { X membuffer_destroy(&start_msg); X sock_destroy(&info, SD_BOTH); 142bde2cb19b1c7f26ea2ee722d1613f echo x - multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/files/patch-upnp-src-genlib-net-http-webserver.c sed 's/^X//' >multimedia/vdr-plugin-upnp/ports-patches/devel/upnp/files/patch-upnp-src-genlib-net-http-webserver.c << '5502f87a9244af26df07f2e245c0cccd' X--- upnp/src/genlib/net/http/webserver.c.orig X+++ upnp/src/genlib/net/http/webserver.c X@@ -1262,7 +1262,7 @@ static int process_request( X // Content-Range: bytes 222-3333/4000 HTTP_PARTIAL_CONTENT X // Transfer-Encoding: chunked X if (http_MakeMessage(headers, resp_major, resp_minor, X- "R" "TLD" "s" "tcS" "b" "Xc" "sCc", X+ "R" "TLD" "s" "tcS" "Xc" "sCc", X HTTP_OK, // status code X finfo.content_type, // content type X RespInstr, // language info 5502f87a9244af26df07f2e245c0cccd exit