mirror of
https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
synced 2023-10-10 19:16:51 +02:00
Replaced server-side suspend modes with priority based precedence handling
This commit is contained in:
parent
ae634538f8
commit
c3ac597623
9
HISTORY
9
HISTORY
@ -7,12 +7,15 @@ VDR Plugin 'streamdev' Revision History
|
||||
anonymous user)
|
||||
- New special meaning "show current channel" when channel 0 is requested.
|
||||
Applies to HTTP streaming only (thanks to Rolf Ahrenberg)
|
||||
- Added streamdev-client support for upcoming streamdev-server versions
|
||||
with purely priority driven precedence.
|
||||
- API change of VDR 1.7.26: "avoid device" is no longer available
|
||||
- Fixed ProvidesChannel() on client always returning true since the new timeout
|
||||
option has been added.
|
||||
- Updated Finnish translation (thanks to Rolf Ahrenberg)
|
||||
- Replaced server-side suspend modes with priority based precedence handling
|
||||
- Client-side priority handling for VDR >= 1.7.25 and servers running VTP > 1.0
|
||||
- Introduced VTP protocol version numbering for easier compatibility handling
|
||||
between different client and server versions. The server includes the protocol
|
||||
version in its greeting string, the client reports its version with the new
|
||||
command "VERS".
|
||||
- Dropped compatibility of streamdev-server with VDR < 1.7.25
|
||||
- With VDR 1.7.25 priorities down to -99 will be used. Please update
|
||||
"Minimum Priority" in streamdev-client setup.
|
||||
|
7
common.h
7
common.h
@ -49,13 +49,6 @@ enum eStreamType {
|
||||
st_Count
|
||||
};
|
||||
|
||||
enum eSuspendMode {
|
||||
smOffer,
|
||||
smAlways,
|
||||
smNever,
|
||||
sm_Count
|
||||
};
|
||||
|
||||
enum eSocketId {
|
||||
siLive,
|
||||
siReplay,
|
||||
|
@ -14,71 +14,6 @@
|
||||
#include <stdarg.h>
|
||||
#include <errno.h>
|
||||
|
||||
class cSwitchLive {
|
||||
private:
|
||||
cMutex mutex;
|
||||
cCondWait switched;
|
||||
cDevice *device;
|
||||
const cChannel *channel;
|
||||
public:
|
||||
cDevice* Switch(cDevice *Device, const cChannel *Channel);
|
||||
void Switch(void);
|
||||
cSwitchLive(void);
|
||||
};
|
||||
|
||||
cSwitchLive::cSwitchLive(): device(NULL), channel(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
cDevice* cSwitchLive::Switch(cDevice *Device, const cChannel *Channel)
|
||||
{
|
||||
mutex.Lock();
|
||||
device = Device;
|
||||
channel = Channel;
|
||||
mutex.Unlock();
|
||||
switched.Wait();
|
||||
return device;
|
||||
}
|
||||
|
||||
void cSwitchLive::Switch(void)
|
||||
{
|
||||
mutex.Lock();
|
||||
if (channel && device) {
|
||||
#if APIVERSNUM >= 10726
|
||||
cChannel *current = Channels.GetByNumber(cDevice::CurrentChannel());
|
||||
cDevice *newdev = cServerConnection::CheckDevice(current, 0, true, device);
|
||||
if (!newdev) {
|
||||
if (StreamdevServerSetup.SuspendMode == smAlways) {
|
||||
Channels.SwitchTo(channel->Number());
|
||||
Skins.Message(mtInfo, tr("Streaming active"));
|
||||
}
|
||||
else {
|
||||
esyslog("streamdev: Can't receive channel %d (%s) from device %d. Moving live TV to other device failed (PrimaryDevice=%d, ActualDevice=%d)", channel->Number(), channel->Name(), device->CardIndex(), cDevice::PrimaryDevice()->CardIndex(), cDevice::ActualDevice()->CardIndex());
|
||||
device = NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
newdev->SwitchChannel(current, true);
|
||||
}
|
||||
#else
|
||||
cDevice::SetAvoidDevice(device);
|
||||
if (!Channels.SwitchTo(cDevice::CurrentChannel())) {
|
||||
if (StreamdevServerSetup.SuspendMode == smAlways) {
|
||||
Channels.SwitchTo(channel->Number());
|
||||
Skins.Message(mtInfo, tr("Streaming active"));
|
||||
}
|
||||
else {
|
||||
esyslog("streamdev: Can't receive channel %d (%s) from device %d. Moving live TV to other device failed (PrimaryDevice=%d, ActualDevice=%d)", channel->Number(), channel->Name(), device->CardIndex(), cDevice::PrimaryDevice()->CardIndex(), cDevice::ActualDevice()->CardIndex());
|
||||
device = NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// make sure we don't come in here next time
|
||||
channel = NULL;
|
||||
switched.Signal();
|
||||
}
|
||||
mutex.Unlock();
|
||||
}
|
||||
|
||||
cServerConnection::cServerConnection(const char *Protocol, int Type):
|
||||
cTBSocket(Type),
|
||||
@ -87,14 +22,13 @@ cServerConnection::cServerConnection(const char *Protocol, int Type):
|
||||
m_Pending(false),
|
||||
m_ReadBytes(0),
|
||||
m_WriteBytes(0),
|
||||
m_WriteIndex(0)
|
||||
m_WriteIndex(0),
|
||||
m_SwitchTo(NULL)
|
||||
{
|
||||
m_SwitchLive = new cSwitchLive();
|
||||
}
|
||||
|
||||
cServerConnection::~cServerConnection()
|
||||
{
|
||||
delete m_SwitchLive;
|
||||
}
|
||||
|
||||
const cChannel* cServerConnection::ChannelFromString(const char *String, int *Apid, int *Dpid) {
|
||||
@ -264,99 +198,6 @@ bool cServerConnection::Close()
|
||||
return cTBSocket::Close();
|
||||
}
|
||||
|
||||
static int GetClippedNumProvidedSystems(int AvailableBits, cDevice *Device)
|
||||
{
|
||||
int MaxNumProvidedSystems = (1 << AvailableBits) - 1;
|
||||
int NumProvidedSystems = Device->NumProvidedSystems();
|
||||
if (NumProvidedSystems > MaxNumProvidedSystems) {
|
||||
esyslog("ERROR: device %d supports %d modulation systems but cDevice::GetDevice() currently only supports %d delivery systems which should be fixed", Device->CardIndex() + 1, NumProvidedSystems, MaxNumProvidedSystems);
|
||||
NumProvidedSystems = MaxNumProvidedSystems;
|
||||
}
|
||||
else if (NumProvidedSystems <= 0) {
|
||||
esyslog("ERROR: device %d reported an invalid number (%d) of supported delivery systems - assuming 1", Device->CardIndex() + 1, NumProvidedSystems);
|
||||
NumProvidedSystems = 1;
|
||||
}
|
||||
return NumProvidedSystems;
|
||||
}
|
||||
|
||||
/*
|
||||
* copy of cDevice::GetDevice(...) but without side effects (not detaching receivers)
|
||||
*/
|
||||
cDevice* cServerConnection::CheckDevice(const cChannel *Channel, int Priority, bool LiveView, const cDevice *AvoidDevice)
|
||||
{
|
||||
//cDevice *AvoidDevice = avoidDevice;
|
||||
//avoidDevice = NULL;
|
||||
// Collect the current priorities of all CAM slots that can decrypt the channel:
|
||||
int NumCamSlots = CamSlots.Count();
|
||||
int SlotPriority[NumCamSlots];
|
||||
int NumUsableSlots = 0;
|
||||
if (Channel->Ca() >= CA_ENCRYPTED_MIN) {
|
||||
for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot)) {
|
||||
SlotPriority[CamSlot->Index()] = MAXPRIORITY + 1; // assumes it can't be used
|
||||
if (CamSlot->ModuleStatus() == msReady) {
|
||||
if (CamSlot->ProvidesCa(Channel->Caids())) {
|
||||
if (!ChannelCamRelations.CamChecked(Channel->GetChannelID(), CamSlot->SlotNumber())) {
|
||||
SlotPriority[CamSlot->Index()] = CamSlot->Priority();
|
||||
NumUsableSlots++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!NumUsableSlots)
|
||||
return NULL; // no CAM is able to decrypt this channel
|
||||
}
|
||||
|
||||
cDevice *d = NULL;
|
||||
//cCamSlot *s = NULL;
|
||||
|
||||
uint32_t Impact = 0xFFFFFFFF; // we're looking for a device with the least impact
|
||||
for (int j = 0; j < NumCamSlots || !NumUsableSlots; j++) {
|
||||
if (NumUsableSlots && SlotPriority[j] > MAXPRIORITY)
|
||||
continue; // there is no CAM available in this slot
|
||||
for (int i = 0; i < cDevice::NumDevices(); i++) {
|
||||
cDevice *device = cDevice::GetDevice(i);
|
||||
if (device == AvoidDevice)
|
||||
continue; // we've been asked to skip this device
|
||||
if (Channel->Ca() && Channel->Ca() <= CA_DVB_MAX && Channel->Ca() != device->CardIndex() + 1)
|
||||
continue; // a specific card was requested, but not this one
|
||||
if (NumUsableSlots && !CamSlots.Get(j)->Assign(device, true))
|
||||
continue; // CAM slot can't be used with this device
|
||||
bool ndr;
|
||||
if (device->ProvidesChannel(Channel, Priority, &ndr)) { // this device is basicly able to do the job
|
||||
if (NumUsableSlots && device->CamSlot() && device->CamSlot() != CamSlots.Get(j))
|
||||
ndr = true; // using a different CAM slot requires detaching receivers
|
||||
// Put together an integer number that reflects the "impact" using
|
||||
// this device would have on the overall system. Each condition is represented
|
||||
// by one bit in the number (or several bits, if the condition is actually
|
||||
// a numeric value). The sequence in which the conditions are listed corresponds
|
||||
// to their individual severity, where the one listed first will make the most
|
||||
// difference, because it results in the most significant bit of the result.
|
||||
uint32_t imp = 0;
|
||||
imp <<= 1; imp |= LiveView ? !device->IsPrimaryDevice() || ndr : 0; // prefer the primary device for live viewing if we don't need to detach existing receivers
|
||||
imp <<= 1; imp |= !device->Receiving() && (device != cTransferControl::ReceiverDevice() || device->IsPrimaryDevice()) || ndr; // use receiving devices if we don't need to detach existing receivers, but avoid primary device in local transfer mode
|
||||
imp <<= 1; imp |= device->Receiving(); // avoid devices that are receiving
|
||||
imp <<= 4; imp |= GetClippedNumProvidedSystems(4, device) - 1; // avoid cards which support multiple delivery systems
|
||||
imp <<= 1; imp |= device == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device
|
||||
imp <<= 8; imp |= min(max(device->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)
|
||||
imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)
|
||||
imp <<= 1; imp |= ndr; // avoid devices if we need to detach existing receivers
|
||||
imp <<= 1; imp |= NumUsableSlots ? 0 : device->HasCi(); // avoid cards with Common Interface for FTA channels
|
||||
imp <<= 1; imp |= device->AvoidRecording(); // avoid SD full featured cards
|
||||
imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel
|
||||
imp <<= 1; imp |= device->IsPrimaryDevice(); // avoid the primary device
|
||||
if (imp < Impact) {
|
||||
// This device has less impact than any previous one, so we take it.
|
||||
Impact = imp;
|
||||
d = device;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!NumUsableSlots)
|
||||
break; // no CAM necessary, so just one loop over the devices
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
bool cServerConnection::UsedByLiveTV(cDevice *device)
|
||||
{
|
||||
return device == cTransferControl::ReceiverDevice() ||
|
||||
@ -367,59 +208,40 @@ cDevice *cServerConnection::GetDevice(const cChannel *Channel, int Priority)
|
||||
{
|
||||
// turn off the streams of this connection
|
||||
Detach();
|
||||
// This call may detach receivers of the device it returns
|
||||
|
||||
cDevice *device = cDevice::GetDevice(Channel, Priority, false);
|
||||
|
||||
if (device && !device->IsTunedToTransponder(Channel)
|
||||
&& UsedByLiveTV(device)) {
|
||||
// now we would have to switch away live tv...let's see if live tv
|
||||
// can be handled by another device
|
||||
device = m_SwitchLive->Switch(device, Channel);
|
||||
}
|
||||
|
||||
if (!device) {
|
||||
// can't switch - continue the current stream
|
||||
Attach();
|
||||
dsyslog("streamdev: GetDevice failed for channel %d (%s) at priority %d (PrimaryDevice=%d, ActualDevice=%d)", Channel->Number(), Channel->Name(), Priority, cDevice::PrimaryDevice()->CardIndex(), cDevice::ActualDevice()->CardIndex());
|
||||
}
|
||||
else if (!device->IsTunedToTransponder(Channel) && UsedByLiveTV(device)) {
|
||||
// switched away live TV
|
||||
m_SwitchTo = Channel;
|
||||
}
|
||||
return device;
|
||||
}
|
||||
|
||||
bool cServerConnection::ProvidesChannel(const cChannel *Channel, int Priority)
|
||||
{
|
||||
cDevice *device = CheckDevice(Channel, Priority, false);
|
||||
if (!device || (StreamdevServerSetup.SuspendMode != smAlways
|
||||
&& !device->IsTunedToTransponder(Channel)
|
||||
&& UsedByLiveTV(device))) {
|
||||
// no device available or the device is in use for live TV and suspend mode doesn't allow us to switch it:
|
||||
// maybe a device would be free if THIS connection did turn off its streams?
|
||||
Detach();
|
||||
device = CheckDevice(Channel, Priority, false);
|
||||
Attach();
|
||||
if (device && StreamdevServerSetup.SuspendMode != smAlways
|
||||
&& !device->IsTunedToTransponder(Channel)
|
||||
&& UsedByLiveTV(device)) {
|
||||
// now we would have to switch away live tv...let's see if live tv
|
||||
// can be handled by another device
|
||||
const cChannel *current = Channels.GetByNumber(cDevice::CurrentChannel());
|
||||
cDevice *newdev = current ? CheckDevice(current, 0, true, device) : NULL;
|
||||
if (newdev) {
|
||||
dsyslog("streamdev: Providing channel %d (%s) at priority %d requires moving live TV to device %d (PrimaryDevice=%d, ActualDevice=%d)", Channel->Number(), Channel->Name(), Priority, newdev->CardIndex(), cDevice::PrimaryDevice()->CardIndex(), cDevice::ActualDevice()->CardIndex());
|
||||
}
|
||||
else {
|
||||
device = NULL;
|
||||
dsyslog("streamdev: Not providing channel %d (%s) at priority %d - live TV not suspended", Channel->Number(), Channel->Name(), Priority);
|
||||
}
|
||||
}
|
||||
else if (!device)
|
||||
dsyslog("streamdev: No device provides channel %d (%s) at priority %d", Channel->Number(), Channel->Name(), Priority);
|
||||
}
|
||||
cDevice *device = cDevice::GetDevice(Channel, Priority, false, true);
|
||||
if (!device)
|
||||
dsyslog("streamdev: No device provides channel %d (%s) at priority %d", Channel->Number(), Channel->Name(), Priority);
|
||||
return device;
|
||||
}
|
||||
|
||||
void cServerConnection::MainThreadHook()
|
||||
{
|
||||
m_SwitchLive->Switch();
|
||||
if (m_SwitchTo)
|
||||
{
|
||||
// switched away live TV. Try previous channel on other device first
|
||||
if (!Channels.SwitchTo(cDevice::CurrentChannel())) {
|
||||
// switch to streamdev channel otherwise
|
||||
Channels.SwitchTo(m_SwitchTo->Number());
|
||||
Skins.Message(mtInfo, tr("Streaming active"));
|
||||
}
|
||||
m_SwitchTo = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
cString cServerConnection::ToText() const
|
||||
|
@ -15,7 +15,6 @@ typedef std::pair<std::string,std::string> tStrStr;
|
||||
|
||||
class cChannel;
|
||||
class cDevice;
|
||||
class cSwitchLive;
|
||||
|
||||
/* Basic capabilities of a straight text-based protocol, most functions
|
||||
virtual to support more complicated protocols */
|
||||
@ -34,7 +33,8 @@ private:
|
||||
uint m_WriteBytes;
|
||||
uint m_WriteIndex;
|
||||
|
||||
cSwitchLive *m_SwitchLive;
|
||||
/* Set to this connection's current channel when live TV was interrupted */
|
||||
const cChannel *m_SwitchTo;
|
||||
|
||||
tStrStrMap m_Headers;
|
||||
|
||||
|
@ -150,11 +150,11 @@ bool cConnectionHTTP::ProcessRequest(void)
|
||||
return Respond("%s", true, m_ChannelList->HttpHeader().c_str());
|
||||
else if (m_Channel != NULL) {
|
||||
cDevice *device = NULL;
|
||||
if (ProvidesChannel(m_Channel, 0))
|
||||
device = GetDevice(m_Channel, 0);
|
||||
if (ProvidesChannel(m_Channel, StreamdevServerSetup.HTTPPriority))
|
||||
device = GetDevice(m_Channel, StreamdevServerSetup.HTTPPriority);
|
||||
if (device != NULL) {
|
||||
device->SwitchChannel(m_Channel, false);
|
||||
m_LiveStreamer = new cStreamdevLiveStreamer(0, this);
|
||||
m_LiveStreamer = new cStreamdevLiveStreamer(StreamdevServerSetup.HTTPPriority, this);
|
||||
if (m_LiveStreamer->SetChannel(m_Channel, m_StreamType, m_Apid[0] ? m_Apid : NULL, m_Dpid[0] ? m_Dpid : NULL)) {
|
||||
m_LiveStreamer->SetDevice(device);
|
||||
if (!SetDSCP())
|
||||
|
@ -43,11 +43,11 @@ bool cConnectionIGMP::SetChannel(cChannel *Channel, in_addr_t Dst)
|
||||
void cConnectionIGMP::Welcome()
|
||||
{
|
||||
cDevice *device = NULL;
|
||||
if (ProvidesChannel(m_Channel, 0))
|
||||
device = GetDevice(m_Channel, 0);
|
||||
if (ProvidesChannel(m_Channel, StreamdevServerSetup.IGMPPriority))
|
||||
device = GetDevice(m_Channel, StreamdevServerSetup.IGMPPriority);
|
||||
if (device != NULL) {
|
||||
device->SwitchChannel(m_Channel, false);
|
||||
m_LiveStreamer = new cStreamdevLiveStreamer(0, this);
|
||||
m_LiveStreamer = new cStreamdevLiveStreamer(StreamdevServerSetup.IGMPPriority, this);
|
||||
if (m_LiveStreamer->SetChannel(m_Channel, m_StreamType)) {
|
||||
m_LiveStreamer->SetDevice(device);
|
||||
if (!SetDSCP())
|
||||
|
@ -733,6 +733,7 @@ cConnectionVTP::cConnectionVTP(void):
|
||||
m_DataSocket(NULL),
|
||||
m_LastCommand(NULL),
|
||||
m_StreamType(stTSPIDS),
|
||||
m_ClientVersion(0),
|
||||
m_FiltersSupport(false),
|
||||
m_RecPlayer(NULL),
|
||||
m_TuneChannel(NULL),
|
||||
@ -773,7 +774,7 @@ bool cConnectionVTP::Abort(void) const
|
||||
|
||||
void cConnectionVTP::Welcome(void)
|
||||
{
|
||||
Respond(220, "Welcome to Video Disk Recorder (VTP)");
|
||||
Respond(220, "VTP/1.0 Welcome to Video Disk Recorder");
|
||||
}
|
||||
|
||||
void cConnectionVTP::Reject(void)
|
||||
@ -827,6 +828,7 @@ bool cConnectionVTP::Command(char *Cmd)
|
||||
}
|
||||
|
||||
if (strcasecmp(Cmd, "CAPS") == 0) return CmdCAPS(param);
|
||||
else if (strcasecmp(Cmd, "VERS") == 0) return CmdVERS(param);
|
||||
else if (strcasecmp(Cmd, "PROV") == 0) return CmdPROV(param);
|
||||
else if (strcasecmp(Cmd, "PORT") == 0) return CmdPORT(param);
|
||||
else if (strcasecmp(Cmd, "READ") == 0) return CmdREAD(param);
|
||||
@ -900,6 +902,17 @@ bool cConnectionVTP::CmdCAPS(char *Opts)
|
||||
return Respond(561, "Capability \"%s\" not known", Opts);
|
||||
}
|
||||
|
||||
bool cConnectionVTP::CmdVERS(char *Opts)
|
||||
{
|
||||
unsigned int major, minor;
|
||||
if (sscanf(Opts, " %u.%u", &major, &minor) != 2)
|
||||
return Respond(501, "Use: VERS version (with version in format major.minor)");
|
||||
|
||||
m_ClientVersion = major * 100 + minor;
|
||||
m_FiltersSupport = true;
|
||||
return Respond(220, "Protocol version %u.%u accepted", major, minor);
|
||||
}
|
||||
|
||||
bool cConnectionVTP::CmdPROV(char *Opts)
|
||||
{
|
||||
const cChannel *chan;
|
||||
@ -914,6 +927,10 @@ bool cConnectionVTP::CmdPROV(char *Opts)
|
||||
if ((chan = ChannelFromString(Opts)) == NULL)
|
||||
return Respond(550, "Undefined channel \"%s\"", Opts);
|
||||
|
||||
// legacy clients use priority 0 even if live TV has priority
|
||||
if (m_ClientVersion == 0 && prio == 0)
|
||||
prio = StreamdevServerSetup.VTPPriority;
|
||||
|
||||
LOOP_PREVENTION(chan);
|
||||
|
||||
if (ProvidesChannel(chan, prio)) {
|
||||
@ -921,10 +938,20 @@ bool cConnectionVTP::CmdPROV(char *Opts)
|
||||
m_TunePriority = prio;
|
||||
return Respond(220, "Channel available");
|
||||
}
|
||||
else {
|
||||
m_TuneChannel = NULL;
|
||||
return Respond(560, "Channel not available");
|
||||
// legacy clients didn't lower priority when switching channels,
|
||||
// so get our own receiver temporarily out of the way
|
||||
if (m_ClientVersion == 0) {
|
||||
Detach();
|
||||
bool provided = ProvidesChannel(chan, prio);
|
||||
Attach();
|
||||
if (provided) {
|
||||
m_TuneChannel = chan;
|
||||
m_TunePriority = prio;
|
||||
return Respond(220, "Channel available");
|
||||
}
|
||||
}
|
||||
m_TuneChannel = NULL;
|
||||
return Respond(560, "Channel not available");
|
||||
}
|
||||
|
||||
bool cConnectionVTP::CmdPORT(char *Opts)
|
||||
@ -1286,10 +1313,9 @@ bool cConnectionVTP::CmdQUIT(void)
|
||||
|
||||
bool cConnectionVTP::CmdSUSP(void)
|
||||
{
|
||||
if (StreamdevServerSetup.SuspendMode == smAlways || cSuspendCtl::IsActive())
|
||||
if (cSuspendCtl::IsActive())
|
||||
return Respond(220, "Server is suspended");
|
||||
else if (StreamdevServerSetup.SuspendMode == smOffer
|
||||
&& StreamdevServerSetup.AllowSuspend) {
|
||||
else if (StreamdevServerSetup.AllowSuspend) {
|
||||
cControl::Launch(new cSuspendCtl);
|
||||
cControl::Attach();
|
||||
return Respond(220, "Server is suspended");
|
||||
|
@ -28,6 +28,7 @@ private:
|
||||
|
||||
char *m_LastCommand;
|
||||
eStreamType m_StreamType;
|
||||
unsigned int m_ClientVersion;
|
||||
bool m_FiltersSupport;
|
||||
bool m_LoopPrevention;
|
||||
RecPlayer *m_RecPlayer;
|
||||
@ -62,6 +63,7 @@ public:
|
||||
|
||||
virtual bool Command(char *Cmd);
|
||||
bool CmdCAPS(char *Opts);
|
||||
bool CmdVERS(char *Opts);
|
||||
bool CmdPROV(char *Opts);
|
||||
bool CmdPORT(char *Opts);
|
||||
bool CmdREAD(char *Opts);
|
||||
|
@ -24,7 +24,7 @@ cStreamdevServerMenu::~cStreamdevServerMenu() {
|
||||
}
|
||||
|
||||
void cStreamdevServerMenu::SetHelpKeys() {
|
||||
SetHelp(Count() ? tr("Disconnect") : NULL, NULL, NULL, StreamdevServerSetup.SuspendMode == smOffer ? tr("Suspend") : NULL);
|
||||
SetHelp(Count() ? tr("Disconnect") : NULL, NULL, NULL, tr("Suspend"));
|
||||
}
|
||||
|
||||
eOSState cStreamdevServerMenu::Disconnect() {
|
||||
@ -47,7 +47,7 @@ eOSState cStreamdevServerMenu::Disconnect() {
|
||||
}
|
||||
|
||||
eOSState cStreamdevServerMenu::Suspend() {
|
||||
if (StreamdevServerSetup.SuspendMode == smOffer && !cSuspendCtl::IsActive()) {
|
||||
if (!cSuspendCtl::IsActive()) {
|
||||
cControl::Launch(new cSuspendCtl);
|
||||
return osBack;
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2011-12-11 11:25+0100\n"
|
||||
"POT-Creation-Date: 2012-03-31 15:06+0200\n"
|
||||
"PO-Revision-Date: 2008-03-30 02:11+0200\n"
|
||||
"Last-Translator: Frank Schmirler <vdrdev@schmirler.de>\n"
|
||||
"Language-Team: German <vdr@linuxtv.org>\n"
|
||||
@ -31,15 +31,6 @@ msgstr "Trennen"
|
||||
msgid "Suspend"
|
||||
msgstr "Pausieren"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Pausieren anbieten"
|
||||
|
||||
msgid "Always suspended"
|
||||
msgstr "Immer pausiert"
|
||||
|
||||
msgid "Never suspended"
|
||||
msgstr "Nie pausiert"
|
||||
|
||||
msgid "Common Settings"
|
||||
msgstr "Allgemeines"
|
||||
|
||||
@ -49,12 +40,6 @@ msgstr "Hauptmen
|
||||
msgid "Maximum Number of Clients"
|
||||
msgstr "Maximalanzahl an Clients"
|
||||
|
||||
msgid "Suspend behaviour"
|
||||
msgstr "Pausierverhalten"
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Client darf pausieren"
|
||||
|
||||
msgid "VDR-to-VDR Server"
|
||||
msgstr "VDR-zu-VDR Server"
|
||||
|
||||
@ -67,6 +52,12 @@ msgstr "Port des VDR-zu-VDR Servers"
|
||||
msgid "Bind to IP"
|
||||
msgstr "Binde an IP"
|
||||
|
||||
msgid "Legacy Client Priority"
|
||||
msgstr "Priorität für alte Clients"
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Client darf pausieren"
|
||||
|
||||
msgid "Loop Prevention"
|
||||
msgstr "Schleifen verhindern"
|
||||
|
||||
@ -79,6 +70,9 @@ msgstr "HTTP Server starten"
|
||||
msgid "HTTP Server Port"
|
||||
msgstr "Port des HTTP Servers"
|
||||
|
||||
msgid "Priority"
|
||||
msgstr "Priorität"
|
||||
|
||||
msgid "HTTP Streamtype"
|
||||
msgstr "HTTP Streamtyp"
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2011-12-11 11:25+0100\n"
|
||||
"POT-Creation-Date: 2012-03-31 15:06+0200\n"
|
||||
"PO-Revision-Date: 2010-06-19 03:58+0100\n"
|
||||
"Last-Translator: Javier Bradineras <jbradi@hotmail.com>\n"
|
||||
"Language-Team: Spanish <vdr@linuxtv.org>\n"
|
||||
@ -31,15 +31,6 @@ msgstr ""
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Ofrecer modo de suspensión"
|
||||
|
||||
msgid "Always suspended"
|
||||
msgstr "Siempre suspendido"
|
||||
|
||||
msgid "Never suspended"
|
||||
msgstr "Nunca suspendido"
|
||||
|
||||
msgid "Common Settings"
|
||||
msgstr "Configuración común"
|
||||
|
||||
@ -49,12 +40,6 @@ msgstr ""
|
||||
msgid "Maximum Number of Clients"
|
||||
msgstr "Numero máximo de clientes"
|
||||
|
||||
msgid "Suspend behaviour"
|
||||
msgstr "Comportamiento de la suspensión"
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Permitir suspender al cliente"
|
||||
|
||||
msgid "VDR-to-VDR Server"
|
||||
msgstr "Servidor VDR-a-VDR"
|
||||
|
||||
@ -67,6 +52,12 @@ msgstr "Puerto del Servidor VDR-a-VDR"
|
||||
msgid "Bind to IP"
|
||||
msgstr "IP asociada"
|
||||
|
||||
msgid "Legacy Client Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Permitir suspender al cliente"
|
||||
|
||||
msgid "Loop Prevention"
|
||||
msgstr ""
|
||||
|
||||
@ -79,6 +70,9 @@ msgstr "Iniciar Servidor HTTP"
|
||||
msgid "HTTP Server Port"
|
||||
msgstr "Puerto del Servidor HTTP"
|
||||
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "HTTP Streamtype"
|
||||
msgstr "Tipo de flujo HTTP"
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2011-12-11 11:25+0100\n"
|
||||
"POT-Creation-Date: 2012-03-31 15:06+0200\n"
|
||||
"PO-Revision-Date: 2008-03-30 02:11+0200\n"
|
||||
"Last-Translator: Rolf Ahrenberg\n"
|
||||
"Language-Team: Finnish <vdr@linuxtv.org>\n"
|
||||
@ -31,15 +31,6 @@ msgstr "Katkaise"
|
||||
msgid "Suspend"
|
||||
msgstr "Pysäytä"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "tyrkytä"
|
||||
|
||||
msgid "Always suspended"
|
||||
msgstr "aina"
|
||||
|
||||
msgid "Never suspended"
|
||||
msgstr "ei koskaan"
|
||||
|
||||
msgid "Common Settings"
|
||||
msgstr "Yleiset asetukset"
|
||||
|
||||
@ -49,12 +40,6 @@ msgstr "Piilota valinta päävalikosta"
|
||||
msgid "Maximum Number of Clients"
|
||||
msgstr "Suurin sallittu asiakkaiden määrä"
|
||||
|
||||
msgid "Suspend behaviour"
|
||||
msgstr "Pysäytystoiminto"
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Asiakas saa pysäyttää palvelimen"
|
||||
|
||||
msgid "VDR-to-VDR Server"
|
||||
msgstr "VDR-palvelin"
|
||||
|
||||
@ -67,6 +52,12 @@ msgstr "VDR-palvelimen portti"
|
||||
msgid "Bind to IP"
|
||||
msgstr "Sido osoitteeseen"
|
||||
|
||||
msgid "Legacy Client Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Asiakas saa pysäyttää palvelimen"
|
||||
|
||||
msgid "Loop Prevention"
|
||||
msgstr "Estä asiakaslaitesilmukat"
|
||||
|
||||
@ -79,6 +70,9 @@ msgstr "Käynnistä HTTP-palvelin"
|
||||
msgid "HTTP Server Port"
|
||||
msgstr "HTTP-palvelimen portti"
|
||||
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "HTTP Streamtype"
|
||||
msgstr "HTTP-lähetysmuoto"
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2011-12-11 11:25+0100\n"
|
||||
"POT-Creation-Date: 2012-03-31 15:06+0200\n"
|
||||
"PO-Revision-Date: 2008-03-30 02:11+0200\n"
|
||||
"Last-Translator: micky979 <micky979@free.fr>\n"
|
||||
"Language-Team: French <vdr@linuxtv.org>\n"
|
||||
@ -31,15 +31,6 @@ msgstr ""
|
||||
msgid "Suspend"
|
||||
msgstr "Suspendre"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Offrir le mode suspendre"
|
||||
|
||||
msgid "Always suspended"
|
||||
msgstr "Toujours suspendre"
|
||||
|
||||
msgid "Never suspended"
|
||||
msgstr "Jamais suspendre"
|
||||
|
||||
msgid "Common Settings"
|
||||
msgstr "Paramètres communs"
|
||||
|
||||
@ -49,12 +40,6 @@ msgstr ""
|
||||
msgid "Maximum Number of Clients"
|
||||
msgstr "Nombre maximun de clients"
|
||||
|
||||
msgid "Suspend behaviour"
|
||||
msgstr "Suspendre"
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Le client peut suspendre"
|
||||
|
||||
msgid "VDR-to-VDR Server"
|
||||
msgstr "VDR-to-VDR Serveur"
|
||||
|
||||
@ -67,6 +52,12 @@ msgstr "Port du serveur VDR-to-VDR"
|
||||
msgid "Bind to IP"
|
||||
msgstr "Attacher aux IP"
|
||||
|
||||
msgid "Legacy Client Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Le client peut suspendre"
|
||||
|
||||
msgid "Loop Prevention"
|
||||
msgstr ""
|
||||
|
||||
@ -79,6 +70,9 @@ msgstr "D
|
||||
msgid "HTTP Server Port"
|
||||
msgstr "Port du serveur HTTP"
|
||||
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "HTTP Streamtype"
|
||||
msgstr "Type de Streaming HTTP"
|
||||
|
||||
|
@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2011-12-11 11:25+0100\n"
|
||||
"POT-Creation-Date: 2012-03-31 15:06+0200\n"
|
||||
"PO-Revision-Date: 2010-06-19 03:58+0100\n"
|
||||
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
||||
"Language-Team: Italian <vdr@linuxtv.org>\n"
|
||||
@ -33,15 +33,6 @@ msgstr ""
|
||||
msgid "Suspend"
|
||||
msgstr "Sospendi"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Offri mod. sospensione"
|
||||
|
||||
msgid "Always suspended"
|
||||
msgstr "Sempre sospeso"
|
||||
|
||||
msgid "Never suspended"
|
||||
msgstr "Mai sospeso"
|
||||
|
||||
msgid "Common Settings"
|
||||
msgstr "Impostazioni comuni"
|
||||
|
||||
@ -51,12 +42,6 @@ msgstr "Nascondi voce menu principale"
|
||||
msgid "Maximum Number of Clients"
|
||||
msgstr "Numero massimo di Client"
|
||||
|
||||
msgid "Suspend behaviour"
|
||||
msgstr "Tipo sospensione"
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Permetti sospensione al Client"
|
||||
|
||||
msgid "VDR-to-VDR Server"
|
||||
msgstr "Server VDR-a-VDR"
|
||||
|
||||
@ -69,6 +54,12 @@ msgstr "Porta Server VDR-a-VDR"
|
||||
msgid "Bind to IP"
|
||||
msgstr "IP associati"
|
||||
|
||||
msgid "Legacy Client Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Permetti sospensione al Client"
|
||||
|
||||
msgid "Loop Prevention"
|
||||
msgstr ""
|
||||
|
||||
@ -81,6 +72,9 @@ msgstr "Avvia Server HTTP"
|
||||
msgid "HTTP Server Port"
|
||||
msgstr "Porta Server HTTP"
|
||||
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "HTTP Streamtype"
|
||||
msgstr "Tipo flusso HTTP"
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2011-12-11 11:25+0100\n"
|
||||
"POT-Creation-Date: 2012-03-31 15:06+0200\n"
|
||||
"PO-Revision-Date: 2009-11-26 21:57+0200\n"
|
||||
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
||||
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
|
||||
@ -31,15 +31,6 @@ msgstr ""
|
||||
msgid "Suspend"
|
||||
msgstr "Pristabdyti"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Klausti dėl sustabdymo"
|
||||
|
||||
msgid "Always suspended"
|
||||
msgstr "Visada stabdyti"
|
||||
|
||||
msgid "Never suspended"
|
||||
msgstr "Niekada nestabdyti"
|
||||
|
||||
msgid "Common Settings"
|
||||
msgstr "Bendri nustatymai"
|
||||
|
||||
@ -49,12 +40,6 @@ msgstr ""
|
||||
msgid "Maximum Number of Clients"
|
||||
msgstr "Maksimalus klientų skaičius"
|
||||
|
||||
msgid "Suspend behaviour"
|
||||
msgstr "Pristabdyti veikimą"
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Klientas gali pristabdyti"
|
||||
|
||||
msgid "VDR-to-VDR Server"
|
||||
msgstr "VDR-su-VDR Serveris"
|
||||
|
||||
@ -67,6 +52,12 @@ msgstr "VDR-su-VDR Serverio portas"
|
||||
msgid "Bind to IP"
|
||||
msgstr "Pririšti IP"
|
||||
|
||||
msgid "Legacy Client Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Klientas gali pristabdyti"
|
||||
|
||||
msgid "Loop Prevention"
|
||||
msgstr ""
|
||||
|
||||
@ -79,6 +70,9 @@ msgstr "Paleisti HTTP serverį"
|
||||
msgid "HTTP Server Port"
|
||||
msgstr "HTTP serverio portas"
|
||||
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "HTTP Streamtype"
|
||||
msgstr "HTTP transliavimo tipas"
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2011-12-11 11:25+0100\n"
|
||||
"POT-Creation-Date: 2012-03-31 15:06+0200\n"
|
||||
"PO-Revision-Date: 2008-06-26 15:36+0100\n"
|
||||
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
||||
"Language-Team: Russian <vdr@linuxtv.org>\n"
|
||||
@ -31,15 +31,6 @@ msgstr ""
|
||||
msgid "Suspend"
|
||||
msgstr "¾áâÐÝÞÒÚÐ"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Предлагать остановку"
|
||||
|
||||
msgid "Always suspended"
|
||||
msgstr "Всегда остановлен"
|
||||
|
||||
msgid "Never suspended"
|
||||
msgstr "Никогда не остановлен"
|
||||
|
||||
msgid "Common Settings"
|
||||
msgstr "½ÐáâàÞÙÚØ"
|
||||
|
||||
@ -49,12 +40,6 @@ msgstr ""
|
||||
msgid "Maximum Number of Clients"
|
||||
msgstr "¼ÐÚá. ÚÞÛØçÕáâÒÞ ÚÛØÕÝâÞÒ"
|
||||
|
||||
msgid "Suspend behaviour"
|
||||
msgstr "Поведение остановки"
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Клиент может останавливать"
|
||||
|
||||
msgid "VDR-to-VDR Server"
|
||||
msgstr "VDR-to-VDR áÕàÒÕà"
|
||||
|
||||
@ -67,6 +52,12 @@ msgstr "VDR-to-VDR
|
||||
msgid "Bind to IP"
|
||||
msgstr "¿àØáÞÕÔØÝØâìáï Ú IP"
|
||||
|
||||
msgid "Legacy Client Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "ºÛØÕÝâ ÜÞÖÕâ ÞáâÐÝÐÒÛØÒÐâì"
|
||||
|
||||
msgid "Loop Prevention"
|
||||
msgstr ""
|
||||
|
||||
@ -79,6 +70,9 @@ msgstr "
|
||||
msgid "HTTP Server Port"
|
||||
msgstr "HTTP áÕàÒÕà ¿Þàâ"
|
||||
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "HTTP Streamtype"
|
||||
msgstr "ÂØß HTTP ßÞâÞÚÐ"
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev_SK\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2011-12-11 11:25+0100\n"
|
||||
"POT-Creation-Date: 2012-03-31 15:06+0200\n"
|
||||
"PO-Revision-Date: 2011-12-11 11:25+0100\n"
|
||||
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
||||
"Language-Team: Slovak <hrala.milan@gmail.com>\n"
|
||||
@ -33,15 +33,6 @@ msgstr ""
|
||||
msgid "Suspend"
|
||||
msgstr "Pozastavenie"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Výber re¾ímu pozastavenia"
|
||||
|
||||
msgid "Always suspended"
|
||||
msgstr "V¾dy pozastavi»"
|
||||
|
||||
msgid "Never suspended"
|
||||
msgstr "Nikdy nepozastavi»"
|
||||
|
||||
msgid "Common Settings"
|
||||
msgstr "V¹eobecné nastavenia"
|
||||
|
||||
@ -51,12 +42,6 @@ msgstr "Schova
|
||||
msgid "Maximum Number of Clients"
|
||||
msgstr "Maximály poèet klientov"
|
||||
|
||||
msgid "Suspend behaviour"
|
||||
msgstr "Správanie preru¹enia"
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Klient mô¾e pozastavi»"
|
||||
|
||||
msgid "VDR-to-VDR Server"
|
||||
msgstr "VDR-do-VDR server"
|
||||
|
||||
@ -69,6 +54,12 @@ msgstr "Port serveru pre VDR-do-VDR"
|
||||
msgid "Bind to IP"
|
||||
msgstr "viaza» na IP"
|
||||
|
||||
msgid "Legacy Client Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "Client may suspend"
|
||||
msgstr "Klient mô¾e pozastavi»"
|
||||
|
||||
msgid "Loop Prevention"
|
||||
msgstr ""
|
||||
|
||||
@ -81,6 +72,9 @@ msgstr "Spusti
|
||||
msgid "HTTP Server Port"
|
||||
msgstr "Port serveru HTTP"
|
||||
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
msgid "HTTP Streamtype"
|
||||
msgstr "typ prúdu HTTP"
|
||||
|
||||
|
@ -14,14 +14,16 @@ cStreamdevServerSetup::cStreamdevServerSetup(void) {
|
||||
MaxClients = 5;
|
||||
StartVTPServer = true;
|
||||
VTPServerPort = 2004;
|
||||
VTPPriority = 0;
|
||||
LoopPrevention = false;
|
||||
StartHTTPServer = true;
|
||||
HTTPServerPort = 3000;
|
||||
HTTPPriority = 0;
|
||||
HTTPStreamType = stTS;
|
||||
StartIGMPServer = false;
|
||||
IGMPClientPort = 1234;
|
||||
IGMPPriority = 0;
|
||||
IGMPStreamType = stTS;
|
||||
SuspendMode = smAlways;
|
||||
AllowSuspend = false;
|
||||
strcpy(VTPBindIP, "0.0.0.0");
|
||||
strcpy(HTTPBindIP, "0.0.0.0");
|
||||
@ -33,17 +35,19 @@ bool cStreamdevServerSetup::SetupParse(const char *Name, const char *Value) {
|
||||
else if (strcmp(Name, "MaxClients") == 0) MaxClients = atoi(Value);
|
||||
else if (strcmp(Name, "StartServer") == 0) StartVTPServer = atoi(Value);
|
||||
else if (strcmp(Name, "ServerPort") == 0) VTPServerPort = atoi(Value);
|
||||
else if (strcmp(Name, "VTPPriority") == 0) VTPPriority = atoi(Value);
|
||||
else if (strcmp(Name, "VTPBindIP") == 0) strcpy(VTPBindIP, Value);
|
||||
else if (strcmp(Name, "LoopPrevention") == 0) LoopPrevention = atoi(Value);
|
||||
else if (strcmp(Name, "StartHTTPServer") == 0) StartHTTPServer = atoi(Value);
|
||||
else if (strcmp(Name, "HTTPServerPort") == 0) HTTPServerPort = atoi(Value);
|
||||
else if (strcmp(Name, "HTTPPriority") == 0) HTTPPriority = atoi(Value);
|
||||
else if (strcmp(Name, "HTTPStreamType") == 0) HTTPStreamType = atoi(Value);
|
||||
else if (strcmp(Name, "HTTPBindIP") == 0) strcpy(HTTPBindIP, Value);
|
||||
else if (strcmp(Name, "StartIGMPServer") == 0) StartIGMPServer = atoi(Value);
|
||||
else if (strcmp(Name, "IGMPClientPort") == 0) IGMPClientPort = atoi(Value);
|
||||
else if (strcmp(Name, "IGMPPriority") == 0) IGMPPriority = atoi(Value);
|
||||
else if (strcmp(Name, "IGMPStreamType") == 0) IGMPStreamType = atoi(Value);
|
||||
else if (strcmp(Name, "IGMPBindIP") == 0) strcpy(IGMPBindIP, Value);
|
||||
else if (strcmp(Name, "SuspendMode") == 0) SuspendMode = atoi(Value);
|
||||
else if (strcmp(Name, "AllowSuspend") == 0) AllowSuspend = atoi(Value);
|
||||
else return false;
|
||||
return true;
|
||||
@ -57,12 +61,6 @@ const char* cStreamdevServerMenuSetupPage::StreamTypes[st_Count - 1] = {
|
||||
"EXT"
|
||||
};
|
||||
|
||||
const char* cStreamdevServerMenuSetupPage::SuspendModes[sm_Count] = {
|
||||
trNOOP("Offer suspend mode"),
|
||||
trNOOP("Always suspended"),
|
||||
trNOOP("Never suspended")
|
||||
};
|
||||
|
||||
cStreamdevServerMenuSetupPage::cStreamdevServerMenuSetupPage(void) {
|
||||
m_NewSetup = StreamdevServerSetup;
|
||||
|
||||
@ -73,37 +71,35 @@ cStreamdevServerMenuSetupPage::~cStreamdevServerMenuSetupPage() {
|
||||
}
|
||||
|
||||
void cStreamdevServerMenuSetupPage::Set(void) {
|
||||
static const char* modes[sm_Count];
|
||||
for (int i = 0; i < sm_Count; i++)
|
||||
modes[i] = tr(SuspendModes[i]);
|
||||
|
||||
int current = Current();
|
||||
Clear();
|
||||
AddCategory (tr("Common Settings"));
|
||||
Add(new cMenuEditBoolItem(tr("Hide Mainmenu Entry"), &m_NewSetup.HideMenuEntry));
|
||||
Add(new cMenuEditIntItem (tr("Maximum Number of Clients"), &m_NewSetup.MaxClients, 0, 100));
|
||||
|
||||
Add(new cMenuEditStraItem(tr("Suspend behaviour"), &m_NewSetup.SuspendMode, sm_Count, modes));
|
||||
if (m_NewSetup.SuspendMode == smOffer)
|
||||
Add(new cMenuEditBoolItem(tr("Client may suspend"), &m_NewSetup.AllowSuspend));
|
||||
|
||||
AddCategory (tr("VDR-to-VDR Server"));
|
||||
Add(new cMenuEditBoolItem(tr("Start VDR-to-VDR Server"), &m_NewSetup.StartVTPServer));
|
||||
Add(new cMenuEditIntItem (tr("VDR-to-VDR Server Port"), &m_NewSetup.VTPServerPort, 0, 65535));
|
||||
Add(new cMenuEditIpItem (tr("Bind to IP"), m_NewSetup.VTPBindIP));
|
||||
Add(new cMenuEditIntItem (tr("Legacy Client Priority"), &m_NewSetup.VTPPriority, MINPRIORITY, MAXPRIORITY));
|
||||
Add(new cMenuEditBoolItem(tr("Client may suspend"), &m_NewSetup.AllowSuspend));
|
||||
if (cPluginManager::CallFirstService(LOOP_PREVENTION_SERVICE))
|
||||
Add(new cMenuEditBoolItem(tr("Loop Prevention"), &m_NewSetup.LoopPrevention));
|
||||
|
||||
AddCategory (tr("HTTP Server"));
|
||||
Add(new cMenuEditBoolItem(tr("Start HTTP Server"), &m_NewSetup.StartHTTPServer));
|
||||
Add(new cMenuEditIntItem (tr("HTTP Server Port"), &m_NewSetup.HTTPServerPort, 0, 65535));
|
||||
Add(new cMenuEditStraItem(tr("HTTP Streamtype"), &m_NewSetup.HTTPStreamType, st_Count - 1, StreamTypes));
|
||||
Add(new cMenuEditIpItem (tr("Bind to IP"), m_NewSetup.HTTPBindIP));
|
||||
Add(new cMenuEditIntItem (tr("Priority"), &m_NewSetup.HTTPPriority, MINPRIORITY, MAXPRIORITY));
|
||||
Add(new cMenuEditStraItem(tr("HTTP Streamtype"), &m_NewSetup.HTTPStreamType, st_Count - 1, StreamTypes));
|
||||
|
||||
AddCategory (tr("Multicast Streaming Server"));
|
||||
Add(new cMenuEditBoolItem(tr("Start IGMP Server"), &m_NewSetup.StartIGMPServer));
|
||||
Add(new cMenuEditIntItem (tr("Multicast Client Port"), &m_NewSetup.IGMPClientPort, 0, 65535));
|
||||
Add(new cMenuEditStraItem(tr("Multicast Streamtype"), &m_NewSetup.IGMPStreamType, st_Count - 1, StreamTypes));
|
||||
Add(new cMenuEditIpItem (tr("Bind to IP"), m_NewSetup.IGMPBindIP));
|
||||
Add(new cMenuEditIntItem (tr("Priority"), &m_NewSetup.IGMPPriority, MINPRIORITY, MAXPRIORITY));
|
||||
Add(new cMenuEditStraItem(tr("Multicast Streamtype"), &m_NewSetup.IGMPStreamType, st_Count - 1, StreamTypes));
|
||||
SetCurrent(Get(current));
|
||||
Display();
|
||||
}
|
||||
@ -138,16 +134,18 @@ void cStreamdevServerMenuSetupPage::Store(void) {
|
||||
SetupStore("StartServer", m_NewSetup.StartVTPServer);
|
||||
SetupStore("ServerPort", m_NewSetup.VTPServerPort);
|
||||
SetupStore("VTPBindIP", m_NewSetup.VTPBindIP);
|
||||
SetupStore("VTPPriority", m_NewSetup.VTPPriority);
|
||||
SetupStore("LoopPrevention", m_NewSetup.LoopPrevention);
|
||||
SetupStore("StartHTTPServer", m_NewSetup.StartHTTPServer);
|
||||
SetupStore("HTTPServerPort", m_NewSetup.HTTPServerPort);
|
||||
SetupStore("HTTPStreamType", m_NewSetup.HTTPStreamType);
|
||||
SetupStore("HTTPBindIP", m_NewSetup.HTTPBindIP);
|
||||
SetupStore("HTTPPriority", m_NewSetup.HTTPPriority);
|
||||
SetupStore("HTTPStreamType", m_NewSetup.HTTPStreamType);
|
||||
SetupStore("StartIGMPServer", m_NewSetup.StartIGMPServer);
|
||||
SetupStore("IGMPClientPort", m_NewSetup.IGMPClientPort);
|
||||
SetupStore("IGMPStreamType", m_NewSetup.IGMPStreamType);
|
||||
SetupStore("IGMPBindIP", m_NewSetup.IGMPBindIP);
|
||||
SetupStore("SuspendMode", m_NewSetup.SuspendMode);
|
||||
SetupStore("IGMPPriority", m_NewSetup.IGMPPriority);
|
||||
SetupStore("IGMPStreamType", m_NewSetup.IGMPStreamType);
|
||||
SetupStore("AllowSuspend", m_NewSetup.AllowSuspend);
|
||||
|
||||
StreamdevServerSetup = m_NewSetup;
|
||||
@ -155,11 +153,3 @@ void cStreamdevServerMenuSetupPage::Store(void) {
|
||||
if (restart)
|
||||
cStreamdevServer::Initialize();
|
||||
}
|
||||
|
||||
eOSState cStreamdevServerMenuSetupPage::ProcessKey(eKeys Key) {
|
||||
int oldMode = m_NewSetup.SuspendMode;
|
||||
eOSState state = cMenuSetupPage::ProcessKey(Key);
|
||||
if (oldMode != m_NewSetup.SuspendMode)
|
||||
Set();
|
||||
return state;
|
||||
}
|
||||
|
@ -17,17 +17,19 @@ struct cStreamdevServerSetup {
|
||||
int StartVTPServer;
|
||||
int VTPServerPort;
|
||||
char VTPBindIP[20];
|
||||
int VTPPriority;
|
||||
int AllowSuspend;
|
||||
int LoopPrevention;
|
||||
int StartHTTPServer;
|
||||
int HTTPServerPort;
|
||||
int HTTPPriority;
|
||||
int HTTPStreamType;
|
||||
char HTTPBindIP[20];
|
||||
int StartIGMPServer;
|
||||
int IGMPClientPort;
|
||||
int IGMPPriority;
|
||||
int IGMPStreamType;
|
||||
char IGMPBindIP[20];
|
||||
int SuspendMode;
|
||||
int AllowSuspend;
|
||||
};
|
||||
|
||||
extern cStreamdevServerSetup StreamdevServerSetup;
|
||||
@ -35,14 +37,12 @@ extern cStreamdevServerSetup StreamdevServerSetup;
|
||||
class cStreamdevServerMenuSetupPage: public cMenuSetupPage {
|
||||
private:
|
||||
static const char* StreamTypes[];
|
||||
static const char* SuspendModes[];
|
||||
cStreamdevServerSetup m_NewSetup;
|
||||
|
||||
void AddCategory(const char *Title);
|
||||
void Set();
|
||||
protected:
|
||||
virtual void Store(void);
|
||||
virtual eOSState ProcessKey(eKeys Key);
|
||||
|
||||
public:
|
||||
cStreamdevServerMenuSetupPage(void);
|
||||
|
Loading…
Reference in New Issue
Block a user