Merge pull request #4605 from CvH/patch-3

vdr-addon bump 7.0.1
This commit is contained in:
Stephan Raue 2016-01-13 13:06:21 +01:00
commit d445fcff0d
17 changed files with 362 additions and 48 deletions

View File

@ -1,3 +1,12 @@
7.0.1
- update to vdr-plugin-xmltv2vdr-b48e0bec
- update to vdr-plugin-streamdev-fc52e92
- update to vdr-plugin-restfulapi-0.2.5.6
- update to vdr-epgsearch-0b09f90
- update to vdr-plugin-dvbapi-31f409d
- update to vdr-plugin-vnsiserver-d96f211
- update to vdr-satip-9d5f7cc
7.0.0 7.0.0
- rebuild for OpenELEC-7.0 - rebuild for OpenELEC-7.0

View File

@ -19,7 +19,7 @@
PKG_NAME="vdr-addon" PKG_NAME="vdr-addon"
PKG_VERSION="7.0" PKG_VERSION="7.0"
PKG_REV="0" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"
PKG_SITE="http://www.openelec.tv" PKG_SITE="http://www.openelec.tv"

View File

@ -17,7 +17,7 @@
################################################################################ ################################################################################
PKG_NAME="vdr-epgsearch" PKG_NAME="vdr-epgsearch"
PKG_VERSION="29c174a" PKG_VERSION="0b09f90"
PKG_REV="1" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"

View File

@ -1,19 +0,0 @@
commit e8bb2e8e0ef3602fc8cb252cee541bed5d45fc5c
Author: Stefan Saraev <stefan@saraev.ca>
Date: Sat Oct 19 22:19:10 2013 +0300
vdr 2.1.2 buildfix
diff --git a/uservars.h b/uservars.h
index f098750..a0e047c 100644
--- a/uservars.h
+++ b/uservars.h
@@ -538,7 +538,7 @@ class cVideodirVar : public cInternalVar {
cVideodirVar() : cInternalVar("videodir") {}
string Evaluate(const cEvent*, bool escapeStrings = false)
{
- return VideoDirectory;
+ return cVideoDirectory::Name();
}
};

View File

@ -17,7 +17,7 @@
################################################################################ ################################################################################
PKG_NAME="vdr-plugin-dvbapi" PKG_NAME="vdr-plugin-dvbapi"
PKG_VERSION="0489e01" PKG_VERSION="31f409d"
PKG_REV="1" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################ ################################################################################
PKG_NAME="vdr-plugin-restfulapi" PKG_NAME="vdr-plugin-restfulapi"
PKG_VERSION="0.2.1.4" PKG_VERSION="0.2.5.6"
PKG_REV="1" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"
@ -45,7 +45,8 @@ make_target() {
make \ make \
LIBDIR="." \ LIBDIR="." \
LOCDIR="./locale" \ LOCDIR="./locale" \
all install-i18n all install-i18n \
USE_LIBMAGICKPLUSPLUS=0
} }
post_make_target() { post_make_target() {

View File

@ -17,11 +17,11 @@
################################################################################ ################################################################################
PKG_NAME="vdr-plugin-streamdev" PKG_NAME="vdr-plugin-streamdev"
PKG_VERSION="84c6f6b" PKG_VERSION="fc52e92"
PKG_REV="1" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"
PKG_SITE="http://projects.vdr-developer.org/projects/show/plg-streamdev" PKG_SITE="http://projects.vdr-developer.org/projects/plg-streamdev"
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
PKG_DEPENDS_TARGET="toolchain vdr libressl" PKG_DEPENDS_TARGET="toolchain vdr libressl"
PKG_PRIORITY="optional" PKG_PRIORITY="optional"

View File

@ -17,7 +17,7 @@
################################################################################ ################################################################################
PKG_NAME="vdr-plugin-vnsiserver" PKG_NAME="vdr-plugin-vnsiserver"
PKG_VERSION="1c63a8a" PKG_VERSION="d96f211"
PKG_REV="1" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"

View File

@ -17,7 +17,7 @@
################################################################################ ################################################################################
PKG_NAME="vdr-plugin-xmltv2vdr" PKG_NAME="vdr-plugin-xmltv2vdr"
PKG_VERSION="30903cc0" PKG_VERSION="b48e0bec"
PKG_REV="1" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"

View File

@ -1,19 +0,0 @@
commit 6d5c30323f49c7960c873a423ec948834bbe8737
Author: Stefan Saraev <stefan@saraev.ca>
Date: Sat Oct 19 22:24:10 2013 +0300
vdr 2.1.2 buildfix
diff --git a/xmltv2vdr.cpp b/xmltv2vdr.cpp
index b367508..7b61c61 100644
--- a/xmltv2vdr.cpp
+++ b/xmltv2vdr.cpp
@@ -274,7 +274,7 @@ cGlobals::cGlobals()
imgdelafter=30;
soundex=false;
- if (asprintf(&epgfile_store,"%s/epg.db",VideoDirectory)==-1) {};
+ if (asprintf(&epgfile_store,"%s/epg.db",cVideoDirectory::Name())==-1) {};
if (!CheckEPGDir("/var/run/vdr"))
{

View File

@ -17,7 +17,7 @@
################################################################################ ################################################################################
PKG_NAME="vdr-satip" PKG_NAME="vdr-satip"
PKG_VERSION="2.2.2" PKG_VERSION="2.2.3"
PKG_REV="1" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"

View File

@ -0,0 +1,342 @@
From 165fd5b14af2327f3cd5d5b6fbe814737a0ea423 Mon Sep 17 00:00:00 2001
From: Tobias Grimm <etobi@debian.org>
Date: Sat, 5 Dec 2015 16:59:28 +0100
Subject: [PATCH 1/3] Reorderd the transponder URL parameter in a way the
Panasonic CXW804 expects them (src/freq/pol/ro/msys/mtype/plts/sr/fec)
This only applies to DVB-S. DVB-C and DVB-T might need further tweaking.
It's actually a bug of the Panasonic TV to expect the transponder parameters in
a specific order in the query string, but for now this seems to be the most
pragmatic workaround.
---
param.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/param.c b/param.c
index c71902d..b5eaf1c 100644
--- a/param.c
+++ b/param.c
@@ -163,11 +163,20 @@ cString GetTransponderUrlParameters(const cChannel *channelP)
dtp.SetModulation(QPSK);
dtp.SetRollOff(ROLLOFF_35);
}
+ ST(" S *") q += snprintf(q, STBUFLEFT, "src=%d&", ((src > 0) && (src <= 255)) ? src : 1);
q += snprintf(q, STBUFLEFT, "freq=%s", *dtoa(freq, "%lg"));
- ST(" S *") q += snprintf(q, STBUFLEFT, "&src=%d", ((src > 0) && (src <= 255)) ? src : 1);
+ ST(" S *") q += snprintf(q, STBUFLEFT, "&pol=%c", tolower(dtp.Polarization()));
+ ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.RollOff(), SatipRollOffValues);
+ ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesSat);
+ ST("C *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesCable);
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesTerrestrial);
+ ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
+ ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
+ ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Pilot(), SatipPilotValues);
ST(" S *") q += snprintf(q, STBUFLEFT, "&sr=%d", channelP->Srate());
+ ST("CST*") q += PrintUrlString(q, STBUFLEFT, dtp.CoderateH(), SatipCodeRateValues);
ST("C 1") q += snprintf(q, STBUFLEFT, "&sr=%d", channelP->Srate());
- ST(" S *") q += snprintf(q, STBUFLEFT, "&pol=%c", tolower(dtp.Polarization()));
ST("C T2") q += snprintf(q, STBUFLEFT, "&plp=%d", dtp.StreamId());
ST(" T2") q += snprintf(q, STBUFLEFT, "&t2id=%d", dtp.T2SystemId());
ST("C 2") q += snprintf(q, STBUFLEFT, "&c2tft=%d", C2TuningFrequencyType);
@@ -177,15 +186,6 @@ cString GetTransponderUrlParameters(const cChannel *channelP)
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
ST("C 2") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Guard(), SatipGuardValues);
- ST("CST*") q += PrintUrlString(q, STBUFLEFT, dtp.CoderateH(), SatipCodeRateValues);
- ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Pilot(), SatipPilotValues);
- ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
- ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
- ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.RollOff(), SatipRollOffValues);
- ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesSat);
- ST("C *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesCable);
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesTerrestrial);
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Transmission(), SatipTransmissionValues);
if ((channelP->Rid() % 100) > 0)
snprintf(q, STBUFLEFT, "&fe=%d", channelP->Rid() % 100);
From c1a881ba9459146541ef07ea1519fd45e5603d2c Mon Sep 17 00:00:00 2001
From: Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>
Date: Sat, 5 Dec 2015 20:23:32 +0200
Subject: [PATCH 2/3] Reorder also terrestrial and cable query parameters as
introduced in the satip specification 1.2.2, although the ordering shouldn't
matter according to it.
---
param.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/param.c b/param.c
index b5eaf1c..c9c4529 100644
--- a/param.c
+++ b/param.c
@@ -163,32 +163,32 @@ cString GetTransponderUrlParameters(const cChannel *channelP)
dtp.SetModulation(QPSK);
dtp.SetRollOff(ROLLOFF_35);
}
+ if ((channelP->Rid() % 100) > 0)
+ q += snprintf(q, STBUFLEFT, "&fe=%d", channelP->Rid() % 100);
ST(" S *") q += snprintf(q, STBUFLEFT, "src=%d&", ((src > 0) && (src <= 255)) ? src : 1);
q += snprintf(q, STBUFLEFT, "freq=%s", *dtoa(freq, "%lg"));
ST(" S *") q += snprintf(q, STBUFLEFT, "&pol=%c", tolower(dtp.Polarization()));
ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.RollOff(), SatipRollOffValues);
+ ST("C 2") q += snprintf(q, STBUFLEFT, "&c2tft=%d", C2TuningFrequencyType);
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
+ ST("C 2") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesSat);
ST("C *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesCable);
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesTerrestrial);
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Transmission(), SatipTransmissionValues);
ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Pilot(), SatipPilotValues);
ST(" S *") q += snprintf(q, STBUFLEFT, "&sr=%d", channelP->Srate());
- ST("CST*") q += PrintUrlString(q, STBUFLEFT, dtp.CoderateH(), SatipCodeRateValues);
ST("C 1") q += snprintf(q, STBUFLEFT, "&sr=%d", channelP->Srate());
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Guard(), SatipGuardValues);
+ ST("CST*") q += PrintUrlString(q, STBUFLEFT, dtp.CoderateH(), SatipCodeRateValues);
+ ST("C 2") q += snprintf(q, STBUFLEFT, "&ds=%d", DataSlice);
ST("C T2") q += snprintf(q, STBUFLEFT, "&plp=%d", dtp.StreamId());
ST(" T2") q += snprintf(q, STBUFLEFT, "&t2id=%d", dtp.T2SystemId());
- ST("C 2") q += snprintf(q, STBUFLEFT, "&c2tft=%d", C2TuningFrequencyType);
- ST("C 2") q += snprintf(q, STBUFLEFT, "&ds=%d", DataSlice);
- ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Inversion(), SatipInversionValues);
ST(" T2") q += PrintUrlString(q, STBUFLEFT, dtp.SisoMiso(), SatipSisoMisoValues);
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
- ST("C 2") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Guard(), SatipGuardValues);
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Transmission(), SatipTransmissionValues);
- if ((channelP->Rid() % 100) > 0)
- snprintf(q, STBUFLEFT, "&fe=%d", channelP->Rid() % 100);
+ ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Inversion(), SatipInversionValues);
#undef ST
return buffer;
}
From 9d5f7cc7030657f38c56f6041ff7f697774a9624 Mon Sep 17 00:00:00 2001
From: chriszero <zerov83@gmail.com>
Date: Thu, 7 Jan 2016 20:56:39 +0100
Subject: [PATCH 3/3] Make it possible to specify the rtp and rtcp ports this
makes it possible to use the satip through a NAT (e.g. a docker bridged
network)
---
README | 5 +++++
config.c | 2 ++
config.h | 6 ++++++
satip.c | 40 ++++++++++++++++++++++++++++++++++++++--
socket.c | 4 ++--
socket.h | 2 +-
tuner.c | 7 +++++--
7 files changed, 59 insertions(+), 7 deletions(-)
diff --git a/README b/README
index 49b0b38..1c3b610 100644
--- a/README
+++ b/README
@@ -56,6 +56,11 @@ vdr -P 'satip -s <ipaddress>|<model>|<description>;...'
vdr -P 'satip -s 192.168.0.1|DVBS2-2,DVBT2-2|Octo1'
vdr -P 'satip -s 192.168.0.1|DVBS2-4|Octo1;192.168.0.2|DVBT2-4|Octo2'
+The plugin accepts a "--portrange" (-p) command-line parameter, that can
+be used to manually specify the RTP & RTCP port range and therefore
+enables using the plugin through a NAT (e.g. Docker bridged network).
+A minimum of 2 ports per device is required.
+
SAT>IP satellite positions (aka. signal sources) shall be defined via
sources.conf. If the source description begins with a number, it's used
as SAT>IP signal source selection parameter. A special number zero can
diff --git a/config.c b/config.c
index 050453c..2243aaa 100644
--- a/config.c
+++ b/config.c
@@ -17,6 +17,8 @@ cSatipConfig::cSatipConfig(void)
ciExtensionM(0),
eitScanM(1),
useBytesM(1),
+ portRangeStartM(0),
+ portRangeStopM(0),
detachedModeM(false),
disableServerQuirksM(false),
useSingleModelServersM(false)
diff --git a/config.h b/config.h
index b7745cf..b11b1d8 100644
--- a/config.h
+++ b/config.h
@@ -19,6 +19,8 @@ class cSatipConfig
unsigned int ciExtensionM;
unsigned int eitScanM;
unsigned int useBytesM;
+ unsigned int portRangeStartM;
+ unsigned int portRangeStopM;
bool detachedModeM;
bool disableServerQuirksM;
bool useSingleModelServersM;
@@ -74,6 +76,8 @@ class cSatipConfig
int GetDisabledSources(unsigned int indexP) const;
unsigned int GetDisabledFiltersCount(void) const;
int GetDisabledFilters(unsigned int indexP) const;
+ unsigned int GetPortRangeStart(void) const { return portRangeStartM; }
+ unsigned int GetPortRangeStop(void) const { return portRangeStopM; }
void SetOperatingMode(unsigned int operatingModeP) { operatingModeM = operatingModeP; }
void SetTraceMode(unsigned int modeP) { traceModeM = (modeP & eTraceModeMask); }
@@ -86,6 +90,8 @@ class cSatipConfig
void SetUseSingleModelServers(bool onOffP) { useSingleModelServersM = onOffP; }
void SetDisabledSources(unsigned int indexP, int sourceP);
void SetDisabledFilters(unsigned int indexP, int numberP);
+ void SetPortRangeStart(unsigned int rangeStartP) { portRangeStartM = rangeStartP; }
+ void SetPortRangeStop(unsigned int rangeStopP) { portRangeStopM = rangeStopP; }
};
extern cSatipConfig SatipConfig;
diff --git a/satip.c b/satip.c
index 3453c48..35a92fe 100644
--- a/satip.c
+++ b/satip.c
@@ -35,6 +35,7 @@ class cPluginSatip : public cPlugin {
unsigned int deviceCountM;
cSatipDiscoverServers *serversM;
void ParseServer(const char *paramP);
+ void ParsePortRange(const char *paramP);
int ParseCicams(const char *valueP, int *cicamsP);
int ParseSources(const char *valueP, int *sourcesP);
int ParseFilters(const char *valueP, int *filtersP);
@@ -87,7 +88,9 @@ const char *cPluginSatip::CommandLineHelp(void)
" define hard-coded SAT>IP server(s)\n"
" -D, --detach set the detached mode on\n"
" -S, --single set the single model server mode on\n"
- " -n, --noquirks disable all the server quirks\n";
+ " -n, --noquirks disable all the server quirks\n"
+ " -p, --portrange=<start>-<end> set a range of ports used for the RT[C]P server\n"
+ " a minimum of 2 ports per device is required.\n";
}
bool cPluginSatip::ProcessArgs(int argc, char *argv[])
@@ -98,6 +101,7 @@ bool cPluginSatip::ProcessArgs(int argc, char *argv[])
{ "devices", required_argument, NULL, 'd' },
{ "trace", required_argument, NULL, 't' },
{ "server", required_argument, NULL, 's' },
+ { "portrange",required_argument, NULL, 'p' },
{ "detach", no_argument, NULL, 'D' },
{ "single", no_argument, NULL, 'S' },
{ "noquirks", no_argument, NULL, 'n' },
@@ -105,8 +109,9 @@ bool cPluginSatip::ProcessArgs(int argc, char *argv[])
};
cString server;
+ cString portrange;
int c;
- while ((c = getopt_long(argc, argv, "d:t:s:DSn", long_options, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "d:t:s:p:DSn", long_options, NULL)) != -1) {
switch (c) {
case 'd':
deviceCountM = strtol(optarg, NULL, 0);
@@ -126,10 +131,15 @@ bool cPluginSatip::ProcessArgs(int argc, char *argv[])
case 'n':
SatipConfig.SetDisableServerQuirks(true);
break;
+ case 'p':
+ portrange = optarg;
+ break;
default:
return false;
}
}
+ if (!isempty(*portrange))
+ ParsePortRange(portrange);
// this must be done after all parameters are parsed
if (!isempty(*server))
ParseServer(*server);
@@ -255,6 +265,32 @@ void cPluginSatip::ParseServer(const char *paramP)
FREE_POINTER(p);
}
+void cPluginSatip::ParsePortRange(const char *paramP)
+{
+ char *s, *p = skipspace(paramP);
+ char *r = strtok_r(p, "-", &s);
+ unsigned int rangeStart = 0;
+ unsigned int rangeStop = 0;
+ if (r) {
+ rangeStart = strtol(r, NULL, 0);
+ r = strtok_r(NULL, "-", &s);
+ }
+ if (r)
+ rangeStop = strtol(r, NULL, 0);
+ else {
+ error("Port range argument not valid '%s'", paramP);
+ rangeStart = 0;
+ rangeStop = 0;
+ }
+ if (rangeStop - rangeStart + 1 < deviceCountM * 2) {
+ error("The given port range is to small: %d < %d!", rangeStop - rangeStart + 1, deviceCountM * 2);
+ rangeStart = 0;
+ rangeStop = 0;
+ }
+ SatipConfig.SetPortRangeStart(rangeStart);
+ SatipConfig.SetPortRangeStop(rangeStop);
+}
+
int cPluginSatip::ParseCicams(const char *valueP, int *cicamsP)
{
debug1("%s (%s,)", __PRETTY_FUNCTION__, valueP);
diff --git a/socket.c b/socket.c
index 29c2602..35bc035 100644
--- a/socket.c
+++ b/socket.c
@@ -34,7 +34,7 @@ cSatipSocket::~cSatipSocket()
Close();
}
-bool cSatipSocket::Open(const int portP)
+bool cSatipSocket::Open(const int portP, const bool reuseAddrP)
{
// Bind to the socket if it is not active already
if (socketDescM < 0) {
@@ -46,7 +46,7 @@ bool cSatipSocket::Open(const int portP)
ERROR_IF_FUNC(fcntl(socketDescM, F_SETFL, O_NONBLOCK), "fcntl(O_NONBLOCK)",
Close(), return false);
// Allow multiple sockets to use the same PORT number
- int yes = 1;
+ int yes = reuseAddrP;
ERROR_IF_FUNC(setsockopt(socketDescM, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0,
"setsockopt(SO_REUSEADDR)", Close(), return false);
// Bind socket
diff --git a/socket.h b/socket.h
index f9a93d8..79bc991 100644
--- a/socket.h
+++ b/socket.h
@@ -19,7 +19,7 @@ class cSatipSocket {
public:
cSatipSocket();
virtual ~cSatipSocket();
- bool Open(const int portP = 0);
+ bool Open(const int portP = 0, const bool reuseAddrP = false);
virtual void Close(void);
int Fd(void) { return socketDescM; }
int Port(void) { return socketPortM; }
diff --git a/tuner.c b/tuner.c
index c12a19e..fc47b51 100644
--- a/tuner.c
+++ b/tuner.c
@@ -50,12 +50,15 @@ cSatipTuner::cSatipTuner(cSatipDeviceIf &deviceP, unsigned int packetLenP)
debug1("%s (, %d) [device %d]", __PRETTY_FUNCTION__, packetLenP, deviceIdM);
// Open sockets
- int i = 100;
+ int i = SatipConfig.GetPortRangeStart() ? SatipConfig.GetPortRangeStop() - SatipConfig.GetPortRangeStart() - 1 : 100;
+ int port = SatipConfig.GetPortRangeStart();
while (i-- > 0) {
- if (rtpM.Open(0) && rtcpM.Open(rtpM.Port() + 1))
+ if (rtpM.Open(port) && rtcpM.Open(rtpM.Port() + 1))
break;
rtpM.Close();
rtcpM.Close();
+ if (SatipConfig.GetPortRangeStart())
+ ++port;
}
if ((rtpM.Port() <= 0) || (rtcpM.Port() <= 0)) {
error("Cannot open required RTP/RTCP ports [device %d]", deviceIdM);