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)
|
anonymous user)
|
||||||
- New special meaning "show current channel" when channel 0 is requested.
|
- New special meaning "show current channel" when channel 0 is requested.
|
||||||
Applies to HTTP streaming only (thanks to Rolf Ahrenberg)
|
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
|
- Fixed ProvidesChannel() on client always returning true since the new timeout
|
||||||
option has been added.
|
option has been added.
|
||||||
- Updated Finnish translation (thanks to Rolf Ahrenberg)
|
- 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
|
- Dropped compatibility of streamdev-server with VDR < 1.7.25
|
||||||
- With VDR 1.7.25 priorities down to -99 will be used. Please update
|
- With VDR 1.7.25 priorities down to -99 will be used. Please update
|
||||||
"Minimum Priority" in streamdev-client setup.
|
"Minimum Priority" in streamdev-client setup.
|
||||||
|
7
common.h
7
common.h
@ -49,13 +49,6 @@ enum eStreamType {
|
|||||||
st_Count
|
st_Count
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eSuspendMode {
|
|
||||||
smOffer,
|
|
||||||
smAlways,
|
|
||||||
smNever,
|
|
||||||
sm_Count
|
|
||||||
};
|
|
||||||
|
|
||||||
enum eSocketId {
|
enum eSocketId {
|
||||||
siLive,
|
siLive,
|
||||||
siReplay,
|
siReplay,
|
||||||
|
@ -14,71 +14,6 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <errno.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):
|
cServerConnection::cServerConnection(const char *Protocol, int Type):
|
||||||
cTBSocket(Type),
|
cTBSocket(Type),
|
||||||
@ -87,14 +22,13 @@ cServerConnection::cServerConnection(const char *Protocol, int Type):
|
|||||||
m_Pending(false),
|
m_Pending(false),
|
||||||
m_ReadBytes(0),
|
m_ReadBytes(0),
|
||||||
m_WriteBytes(0),
|
m_WriteBytes(0),
|
||||||
m_WriteIndex(0)
|
m_WriteIndex(0),
|
||||||
|
m_SwitchTo(NULL)
|
||||||
{
|
{
|
||||||
m_SwitchLive = new cSwitchLive();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cServerConnection::~cServerConnection()
|
cServerConnection::~cServerConnection()
|
||||||
{
|
{
|
||||||
delete m_SwitchLive;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const cChannel* cServerConnection::ChannelFromString(const char *String, int *Apid, int *Dpid) {
|
const cChannel* cServerConnection::ChannelFromString(const char *String, int *Apid, int *Dpid) {
|
||||||
@ -264,99 +198,6 @@ bool cServerConnection::Close()
|
|||||||
return cTBSocket::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)
|
bool cServerConnection::UsedByLiveTV(cDevice *device)
|
||||||
{
|
{
|
||||||
return device == cTransferControl::ReceiverDevice() ||
|
return device == cTransferControl::ReceiverDevice() ||
|
||||||
@ -367,59 +208,40 @@ cDevice *cServerConnection::GetDevice(const cChannel *Channel, int Priority)
|
|||||||
{
|
{
|
||||||
// turn off the streams of this connection
|
// turn off the streams of this connection
|
||||||
Detach();
|
Detach();
|
||||||
// This call may detach receivers of the device it returns
|
|
||||||
cDevice *device = cDevice::GetDevice(Channel, Priority, false);
|
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) {
|
if (!device) {
|
||||||
// can't switch - continue the current stream
|
// can't switch - continue the current stream
|
||||||
Attach();
|
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());
|
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;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cServerConnection::ProvidesChannel(const cChannel *Channel, int Priority)
|
bool cServerConnection::ProvidesChannel(const cChannel *Channel, int Priority)
|
||||||
{
|
{
|
||||||
cDevice *device = CheckDevice(Channel, Priority, false);
|
cDevice *device = cDevice::GetDevice(Channel, Priority, false, true);
|
||||||
if (!device || (StreamdevServerSetup.SuspendMode != smAlways
|
if (!device)
|
||||||
&& !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);
|
dsyslog("streamdev: No device provides channel %d (%s) at priority %d", Channel->Number(), Channel->Name(), Priority);
|
||||||
}
|
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cServerConnection::MainThreadHook()
|
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
|
cString cServerConnection::ToText() const
|
||||||
|
@ -15,7 +15,6 @@ typedef std::pair<std::string,std::string> tStrStr;
|
|||||||
|
|
||||||
class cChannel;
|
class cChannel;
|
||||||
class cDevice;
|
class cDevice;
|
||||||
class cSwitchLive;
|
|
||||||
|
|
||||||
/* Basic capabilities of a straight text-based protocol, most functions
|
/* Basic capabilities of a straight text-based protocol, most functions
|
||||||
virtual to support more complicated protocols */
|
virtual to support more complicated protocols */
|
||||||
@ -34,7 +33,8 @@ private:
|
|||||||
uint m_WriteBytes;
|
uint m_WriteBytes;
|
||||||
uint m_WriteIndex;
|
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;
|
tStrStrMap m_Headers;
|
||||||
|
|
||||||
|
@ -150,11 +150,11 @@ bool cConnectionHTTP::ProcessRequest(void)
|
|||||||
return Respond("%s", true, m_ChannelList->HttpHeader().c_str());
|
return Respond("%s", true, m_ChannelList->HttpHeader().c_str());
|
||||||
else if (m_Channel != NULL) {
|
else if (m_Channel != NULL) {
|
||||||
cDevice *device = NULL;
|
cDevice *device = NULL;
|
||||||
if (ProvidesChannel(m_Channel, 0))
|
if (ProvidesChannel(m_Channel, StreamdevServerSetup.HTTPPriority))
|
||||||
device = GetDevice(m_Channel, 0);
|
device = GetDevice(m_Channel, StreamdevServerSetup.HTTPPriority);
|
||||||
if (device != NULL) {
|
if (device != NULL) {
|
||||||
device->SwitchChannel(m_Channel, false);
|
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)) {
|
if (m_LiveStreamer->SetChannel(m_Channel, m_StreamType, m_Apid[0] ? m_Apid : NULL, m_Dpid[0] ? m_Dpid : NULL)) {
|
||||||
m_LiveStreamer->SetDevice(device);
|
m_LiveStreamer->SetDevice(device);
|
||||||
if (!SetDSCP())
|
if (!SetDSCP())
|
||||||
|
@ -43,11 +43,11 @@ bool cConnectionIGMP::SetChannel(cChannel *Channel, in_addr_t Dst)
|
|||||||
void cConnectionIGMP::Welcome()
|
void cConnectionIGMP::Welcome()
|
||||||
{
|
{
|
||||||
cDevice *device = NULL;
|
cDevice *device = NULL;
|
||||||
if (ProvidesChannel(m_Channel, 0))
|
if (ProvidesChannel(m_Channel, StreamdevServerSetup.IGMPPriority))
|
||||||
device = GetDevice(m_Channel, 0);
|
device = GetDevice(m_Channel, StreamdevServerSetup.IGMPPriority);
|
||||||
if (device != NULL) {
|
if (device != NULL) {
|
||||||
device->SwitchChannel(m_Channel, false);
|
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)) {
|
if (m_LiveStreamer->SetChannel(m_Channel, m_StreamType)) {
|
||||||
m_LiveStreamer->SetDevice(device);
|
m_LiveStreamer->SetDevice(device);
|
||||||
if (!SetDSCP())
|
if (!SetDSCP())
|
||||||
|
@ -733,6 +733,7 @@ cConnectionVTP::cConnectionVTP(void):
|
|||||||
m_DataSocket(NULL),
|
m_DataSocket(NULL),
|
||||||
m_LastCommand(NULL),
|
m_LastCommand(NULL),
|
||||||
m_StreamType(stTSPIDS),
|
m_StreamType(stTSPIDS),
|
||||||
|
m_ClientVersion(0),
|
||||||
m_FiltersSupport(false),
|
m_FiltersSupport(false),
|
||||||
m_RecPlayer(NULL),
|
m_RecPlayer(NULL),
|
||||||
m_TuneChannel(NULL),
|
m_TuneChannel(NULL),
|
||||||
@ -773,7 +774,7 @@ bool cConnectionVTP::Abort(void) const
|
|||||||
|
|
||||||
void cConnectionVTP::Welcome(void)
|
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)
|
void cConnectionVTP::Reject(void)
|
||||||
@ -827,6 +828,7 @@ bool cConnectionVTP::Command(char *Cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (strcasecmp(Cmd, "CAPS") == 0) return CmdCAPS(param);
|
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, "PROV") == 0) return CmdPROV(param);
|
||||||
else if (strcasecmp(Cmd, "PORT") == 0) return CmdPORT(param);
|
else if (strcasecmp(Cmd, "PORT") == 0) return CmdPORT(param);
|
||||||
else if (strcasecmp(Cmd, "READ") == 0) return CmdREAD(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);
|
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)
|
bool cConnectionVTP::CmdPROV(char *Opts)
|
||||||
{
|
{
|
||||||
const cChannel *chan;
|
const cChannel *chan;
|
||||||
@ -914,6 +927,10 @@ bool cConnectionVTP::CmdPROV(char *Opts)
|
|||||||
if ((chan = ChannelFromString(Opts)) == NULL)
|
if ((chan = ChannelFromString(Opts)) == NULL)
|
||||||
return Respond(550, "Undefined channel \"%s\"", Opts);
|
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);
|
LOOP_PREVENTION(chan);
|
||||||
|
|
||||||
if (ProvidesChannel(chan, prio)) {
|
if (ProvidesChannel(chan, prio)) {
|
||||||
@ -921,11 +938,21 @@ bool cConnectionVTP::CmdPROV(char *Opts)
|
|||||||
m_TunePriority = prio;
|
m_TunePriority = prio;
|
||||||
return Respond(220, "Channel available");
|
return Respond(220, "Channel available");
|
||||||
}
|
}
|
||||||
else {
|
// 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;
|
m_TuneChannel = NULL;
|
||||||
return Respond(560, "Channel not available");
|
return Respond(560, "Channel not available");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
bool cConnectionVTP::CmdPORT(char *Opts)
|
bool cConnectionVTP::CmdPORT(char *Opts)
|
||||||
{
|
{
|
||||||
@ -1286,10 +1313,9 @@ bool cConnectionVTP::CmdQUIT(void)
|
|||||||
|
|
||||||
bool cConnectionVTP::CmdSUSP(void)
|
bool cConnectionVTP::CmdSUSP(void)
|
||||||
{
|
{
|
||||||
if (StreamdevServerSetup.SuspendMode == smAlways || cSuspendCtl::IsActive())
|
if (cSuspendCtl::IsActive())
|
||||||
return Respond(220, "Server is suspended");
|
return Respond(220, "Server is suspended");
|
||||||
else if (StreamdevServerSetup.SuspendMode == smOffer
|
else if (StreamdevServerSetup.AllowSuspend) {
|
||||||
&& StreamdevServerSetup.AllowSuspend) {
|
|
||||||
cControl::Launch(new cSuspendCtl);
|
cControl::Launch(new cSuspendCtl);
|
||||||
cControl::Attach();
|
cControl::Attach();
|
||||||
return Respond(220, "Server is suspended");
|
return Respond(220, "Server is suspended");
|
||||||
|
@ -28,6 +28,7 @@ private:
|
|||||||
|
|
||||||
char *m_LastCommand;
|
char *m_LastCommand;
|
||||||
eStreamType m_StreamType;
|
eStreamType m_StreamType;
|
||||||
|
unsigned int m_ClientVersion;
|
||||||
bool m_FiltersSupport;
|
bool m_FiltersSupport;
|
||||||
bool m_LoopPrevention;
|
bool m_LoopPrevention;
|
||||||
RecPlayer *m_RecPlayer;
|
RecPlayer *m_RecPlayer;
|
||||||
@ -62,6 +63,7 @@ public:
|
|||||||
|
|
||||||
virtual bool Command(char *Cmd);
|
virtual bool Command(char *Cmd);
|
||||||
bool CmdCAPS(char *Opts);
|
bool CmdCAPS(char *Opts);
|
||||||
|
bool CmdVERS(char *Opts);
|
||||||
bool CmdPROV(char *Opts);
|
bool CmdPROV(char *Opts);
|
||||||
bool CmdPORT(char *Opts);
|
bool CmdPORT(char *Opts);
|
||||||
bool CmdREAD(char *Opts);
|
bool CmdREAD(char *Opts);
|
||||||
|
@ -24,7 +24,7 @@ cStreamdevServerMenu::~cStreamdevServerMenu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cStreamdevServerMenu::SetHelpKeys() {
|
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() {
|
eOSState cStreamdevServerMenu::Disconnect() {
|
||||||
@ -47,7 +47,7 @@ eOSState cStreamdevServerMenu::Disconnect() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
eOSState cStreamdevServerMenu::Suspend() {
|
eOSState cStreamdevServerMenu::Suspend() {
|
||||||
if (StreamdevServerSetup.SuspendMode == smOffer && !cSuspendCtl::IsActive()) {
|
if (!cSuspendCtl::IsActive()) {
|
||||||
cControl::Launch(new cSuspendCtl);
|
cControl::Launch(new cSuspendCtl);
|
||||||
return osBack;
|
return osBack;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: streamdev 0.5.0\n"
|
"Project-Id-Version: streamdev 0.5.0\n"
|
||||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\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"
|
"PO-Revision-Date: 2008-03-30 02:11+0200\n"
|
||||||
"Last-Translator: Frank Schmirler <vdrdev@schmirler.de>\n"
|
"Last-Translator: Frank Schmirler <vdrdev@schmirler.de>\n"
|
||||||
"Language-Team: German <vdr@linuxtv.org>\n"
|
"Language-Team: German <vdr@linuxtv.org>\n"
|
||||||
@ -31,15 +31,6 @@ msgstr "Trennen"
|
|||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Pausieren"
|
msgstr "Pausieren"
|
||||||
|
|
||||||
msgid "Offer suspend mode"
|
|
||||||
msgstr "Pausieren anbieten"
|
|
||||||
|
|
||||||
msgid "Always suspended"
|
|
||||||
msgstr "Immer pausiert"
|
|
||||||
|
|
||||||
msgid "Never suspended"
|
|
||||||
msgstr "Nie pausiert"
|
|
||||||
|
|
||||||
msgid "Common Settings"
|
msgid "Common Settings"
|
||||||
msgstr "Allgemeines"
|
msgstr "Allgemeines"
|
||||||
|
|
||||||
@ -49,12 +40,6 @@ msgstr "Hauptmen
|
|||||||
msgid "Maximum Number of Clients"
|
msgid "Maximum Number of Clients"
|
||||||
msgstr "Maximalanzahl an Clients"
|
msgstr "Maximalanzahl an Clients"
|
||||||
|
|
||||||
msgid "Suspend behaviour"
|
|
||||||
msgstr "Pausierverhalten"
|
|
||||||
|
|
||||||
msgid "Client may suspend"
|
|
||||||
msgstr "Client darf pausieren"
|
|
||||||
|
|
||||||
msgid "VDR-to-VDR Server"
|
msgid "VDR-to-VDR Server"
|
||||||
msgstr "VDR-zu-VDR Server"
|
msgstr "VDR-zu-VDR Server"
|
||||||
|
|
||||||
@ -67,6 +52,12 @@ msgstr "Port des VDR-zu-VDR Servers"
|
|||||||
msgid "Bind to IP"
|
msgid "Bind to IP"
|
||||||
msgstr "Binde an 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"
|
msgid "Loop Prevention"
|
||||||
msgstr "Schleifen verhindern"
|
msgstr "Schleifen verhindern"
|
||||||
|
|
||||||
@ -79,6 +70,9 @@ msgstr "HTTP Server starten"
|
|||||||
msgid "HTTP Server Port"
|
msgid "HTTP Server Port"
|
||||||
msgstr "Port des HTTP Servers"
|
msgstr "Port des HTTP Servers"
|
||||||
|
|
||||||
|
msgid "Priority"
|
||||||
|
msgstr "Priorität"
|
||||||
|
|
||||||
msgid "HTTP Streamtype"
|
msgid "HTTP Streamtype"
|
||||||
msgstr "HTTP Streamtyp"
|
msgstr "HTTP Streamtyp"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: streamdev 0.5.0\n"
|
"Project-Id-Version: streamdev 0.5.0\n"
|
||||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\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"
|
"PO-Revision-Date: 2010-06-19 03:58+0100\n"
|
||||||
"Last-Translator: Javier Bradineras <jbradi@hotmail.com>\n"
|
"Last-Translator: Javier Bradineras <jbradi@hotmail.com>\n"
|
||||||
"Language-Team: Spanish <vdr@linuxtv.org>\n"
|
"Language-Team: Spanish <vdr@linuxtv.org>\n"
|
||||||
@ -31,15 +31,6 @@ msgstr ""
|
|||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspender"
|
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"
|
msgid "Common Settings"
|
||||||
msgstr "Configuración común"
|
msgstr "Configuración común"
|
||||||
|
|
||||||
@ -49,12 +40,6 @@ msgstr ""
|
|||||||
msgid "Maximum Number of Clients"
|
msgid "Maximum Number of Clients"
|
||||||
msgstr "Numero máximo de clientes"
|
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"
|
msgid "VDR-to-VDR Server"
|
||||||
msgstr "Servidor VDR-a-VDR"
|
msgstr "Servidor VDR-a-VDR"
|
||||||
|
|
||||||
@ -67,6 +52,12 @@ msgstr "Puerto del Servidor VDR-a-VDR"
|
|||||||
msgid "Bind to IP"
|
msgid "Bind to IP"
|
||||||
msgstr "IP asociada"
|
msgstr "IP asociada"
|
||||||
|
|
||||||
|
msgid "Legacy Client Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Client may suspend"
|
||||||
|
msgstr "Permitir suspender al cliente"
|
||||||
|
|
||||||
msgid "Loop Prevention"
|
msgid "Loop Prevention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -79,6 +70,9 @@ msgstr "Iniciar Servidor HTTP"
|
|||||||
msgid "HTTP Server Port"
|
msgid "HTTP Server Port"
|
||||||
msgstr "Puerto del Servidor HTTP"
|
msgstr "Puerto del Servidor HTTP"
|
||||||
|
|
||||||
|
msgid "Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "HTTP Streamtype"
|
msgid "HTTP Streamtype"
|
||||||
msgstr "Tipo de flujo HTTP"
|
msgstr "Tipo de flujo HTTP"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: streamdev 0.5.0\n"
|
"Project-Id-Version: streamdev 0.5.0\n"
|
||||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\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"
|
"PO-Revision-Date: 2008-03-30 02:11+0200\n"
|
||||||
"Last-Translator: Rolf Ahrenberg\n"
|
"Last-Translator: Rolf Ahrenberg\n"
|
||||||
"Language-Team: Finnish <vdr@linuxtv.org>\n"
|
"Language-Team: Finnish <vdr@linuxtv.org>\n"
|
||||||
@ -31,15 +31,6 @@ msgstr "Katkaise"
|
|||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Pysäytä"
|
msgstr "Pysäytä"
|
||||||
|
|
||||||
msgid "Offer suspend mode"
|
|
||||||
msgstr "tyrkytä"
|
|
||||||
|
|
||||||
msgid "Always suspended"
|
|
||||||
msgstr "aina"
|
|
||||||
|
|
||||||
msgid "Never suspended"
|
|
||||||
msgstr "ei koskaan"
|
|
||||||
|
|
||||||
msgid "Common Settings"
|
msgid "Common Settings"
|
||||||
msgstr "Yleiset asetukset"
|
msgstr "Yleiset asetukset"
|
||||||
|
|
||||||
@ -49,12 +40,6 @@ msgstr "Piilota valinta päävalikosta"
|
|||||||
msgid "Maximum Number of Clients"
|
msgid "Maximum Number of Clients"
|
||||||
msgstr "Suurin sallittu asiakkaiden määrä"
|
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"
|
msgid "VDR-to-VDR Server"
|
||||||
msgstr "VDR-palvelin"
|
msgstr "VDR-palvelin"
|
||||||
|
|
||||||
@ -67,6 +52,12 @@ msgstr "VDR-palvelimen portti"
|
|||||||
msgid "Bind to IP"
|
msgid "Bind to IP"
|
||||||
msgstr "Sido osoitteeseen"
|
msgstr "Sido osoitteeseen"
|
||||||
|
|
||||||
|
msgid "Legacy Client Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Client may suspend"
|
||||||
|
msgstr "Asiakas saa pysäyttää palvelimen"
|
||||||
|
|
||||||
msgid "Loop Prevention"
|
msgid "Loop Prevention"
|
||||||
msgstr "Estä asiakaslaitesilmukat"
|
msgstr "Estä asiakaslaitesilmukat"
|
||||||
|
|
||||||
@ -79,6 +70,9 @@ msgstr "Käynnistä HTTP-palvelin"
|
|||||||
msgid "HTTP Server Port"
|
msgid "HTTP Server Port"
|
||||||
msgstr "HTTP-palvelimen portti"
|
msgstr "HTTP-palvelimen portti"
|
||||||
|
|
||||||
|
msgid "Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "HTTP Streamtype"
|
msgid "HTTP Streamtype"
|
||||||
msgstr "HTTP-lähetysmuoto"
|
msgstr "HTTP-lähetysmuoto"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: streamdev 0.5.0\n"
|
"Project-Id-Version: streamdev 0.5.0\n"
|
||||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\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"
|
"PO-Revision-Date: 2008-03-30 02:11+0200\n"
|
||||||
"Last-Translator: micky979 <micky979@free.fr>\n"
|
"Last-Translator: micky979 <micky979@free.fr>\n"
|
||||||
"Language-Team: French <vdr@linuxtv.org>\n"
|
"Language-Team: French <vdr@linuxtv.org>\n"
|
||||||
@ -31,15 +31,6 @@ msgstr ""
|
|||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspendre"
|
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"
|
msgid "Common Settings"
|
||||||
msgstr "Paramètres communs"
|
msgstr "Paramètres communs"
|
||||||
|
|
||||||
@ -49,12 +40,6 @@ msgstr ""
|
|||||||
msgid "Maximum Number of Clients"
|
msgid "Maximum Number of Clients"
|
||||||
msgstr "Nombre maximun de 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"
|
msgid "VDR-to-VDR Server"
|
||||||
msgstr "VDR-to-VDR Serveur"
|
msgstr "VDR-to-VDR Serveur"
|
||||||
|
|
||||||
@ -67,6 +52,12 @@ msgstr "Port du serveur VDR-to-VDR"
|
|||||||
msgid "Bind to IP"
|
msgid "Bind to IP"
|
||||||
msgstr "Attacher aux IP"
|
msgstr "Attacher aux IP"
|
||||||
|
|
||||||
|
msgid "Legacy Client Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Client may suspend"
|
||||||
|
msgstr "Le client peut suspendre"
|
||||||
|
|
||||||
msgid "Loop Prevention"
|
msgid "Loop Prevention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -79,6 +70,9 @@ msgstr "D
|
|||||||
msgid "HTTP Server Port"
|
msgid "HTTP Server Port"
|
||||||
msgstr "Port du serveur HTTP"
|
msgstr "Port du serveur HTTP"
|
||||||
|
|
||||||
|
msgid "Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "HTTP Streamtype"
|
msgid "HTTP Streamtype"
|
||||||
msgstr "Type de Streaming HTTP"
|
msgstr "Type de Streaming HTTP"
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: streamdev 0.5.0\n"
|
"Project-Id-Version: streamdev 0.5.0\n"
|
||||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\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"
|
"PO-Revision-Date: 2010-06-19 03:58+0100\n"
|
||||||
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
||||||
"Language-Team: Italian <vdr@linuxtv.org>\n"
|
"Language-Team: Italian <vdr@linuxtv.org>\n"
|
||||||
@ -33,15 +33,6 @@ msgstr ""
|
|||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Sospendi"
|
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"
|
msgid "Common Settings"
|
||||||
msgstr "Impostazioni comuni"
|
msgstr "Impostazioni comuni"
|
||||||
|
|
||||||
@ -51,12 +42,6 @@ msgstr "Nascondi voce menu principale"
|
|||||||
msgid "Maximum Number of Clients"
|
msgid "Maximum Number of Clients"
|
||||||
msgstr "Numero massimo di Client"
|
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"
|
msgid "VDR-to-VDR Server"
|
||||||
msgstr "Server VDR-a-VDR"
|
msgstr "Server VDR-a-VDR"
|
||||||
|
|
||||||
@ -69,6 +54,12 @@ msgstr "Porta Server VDR-a-VDR"
|
|||||||
msgid "Bind to IP"
|
msgid "Bind to IP"
|
||||||
msgstr "IP associati"
|
msgstr "IP associati"
|
||||||
|
|
||||||
|
msgid "Legacy Client Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Client may suspend"
|
||||||
|
msgstr "Permetti sospensione al Client"
|
||||||
|
|
||||||
msgid "Loop Prevention"
|
msgid "Loop Prevention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -81,6 +72,9 @@ msgstr "Avvia Server HTTP"
|
|||||||
msgid "HTTP Server Port"
|
msgid "HTTP Server Port"
|
||||||
msgstr "Porta Server HTTP"
|
msgstr "Porta Server HTTP"
|
||||||
|
|
||||||
|
msgid "Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "HTTP Streamtype"
|
msgid "HTTP Streamtype"
|
||||||
msgstr "Tipo flusso HTTP"
|
msgstr "Tipo flusso HTTP"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: streamdev 0.5.0\n"
|
"Project-Id-Version: streamdev 0.5.0\n"
|
||||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\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"
|
"PO-Revision-Date: 2009-11-26 21:57+0200\n"
|
||||||
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
||||||
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
|
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
|
||||||
@ -31,15 +31,6 @@ msgstr ""
|
|||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Pristabdyti"
|
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"
|
msgid "Common Settings"
|
||||||
msgstr "Bendri nustatymai"
|
msgstr "Bendri nustatymai"
|
||||||
|
|
||||||
@ -49,12 +40,6 @@ msgstr ""
|
|||||||
msgid "Maximum Number of Clients"
|
msgid "Maximum Number of Clients"
|
||||||
msgstr "Maksimalus klientų skaičius"
|
msgstr "Maksimalus klientų skaičius"
|
||||||
|
|
||||||
msgid "Suspend behaviour"
|
|
||||||
msgstr "Pristabdyti veikimą"
|
|
||||||
|
|
||||||
msgid "Client may suspend"
|
|
||||||
msgstr "Klientas gali pristabdyti"
|
|
||||||
|
|
||||||
msgid "VDR-to-VDR Server"
|
msgid "VDR-to-VDR Server"
|
||||||
msgstr "VDR-su-VDR Serveris"
|
msgstr "VDR-su-VDR Serveris"
|
||||||
|
|
||||||
@ -67,6 +52,12 @@ msgstr "VDR-su-VDR Serverio portas"
|
|||||||
msgid "Bind to IP"
|
msgid "Bind to IP"
|
||||||
msgstr "Pririšti IP"
|
msgstr "Pririšti IP"
|
||||||
|
|
||||||
|
msgid "Legacy Client Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Client may suspend"
|
||||||
|
msgstr "Klientas gali pristabdyti"
|
||||||
|
|
||||||
msgid "Loop Prevention"
|
msgid "Loop Prevention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -79,6 +70,9 @@ msgstr "Paleisti HTTP serverį"
|
|||||||
msgid "HTTP Server Port"
|
msgid "HTTP Server Port"
|
||||||
msgstr "HTTP serverio portas"
|
msgstr "HTTP serverio portas"
|
||||||
|
|
||||||
|
msgid "Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "HTTP Streamtype"
|
msgid "HTTP Streamtype"
|
||||||
msgstr "HTTP transliavimo tipas"
|
msgstr "HTTP transliavimo tipas"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: streamdev 0.5.0\n"
|
"Project-Id-Version: streamdev 0.5.0\n"
|
||||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\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"
|
"PO-Revision-Date: 2008-06-26 15:36+0100\n"
|
||||||
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
||||||
"Language-Team: Russian <vdr@linuxtv.org>\n"
|
"Language-Team: Russian <vdr@linuxtv.org>\n"
|
||||||
@ -31,15 +31,6 @@ msgstr ""
|
|||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "¾áâÐÝÞÒÚÐ"
|
msgstr "¾áâÐÝÞÒÚÐ"
|
||||||
|
|
||||||
msgid "Offer suspend mode"
|
|
||||||
msgstr "Предлагать остановку"
|
|
||||||
|
|
||||||
msgid "Always suspended"
|
|
||||||
msgstr "Всегда остановлен"
|
|
||||||
|
|
||||||
msgid "Never suspended"
|
|
||||||
msgstr "Никогда не остановлен"
|
|
||||||
|
|
||||||
msgid "Common Settings"
|
msgid "Common Settings"
|
||||||
msgstr "½ÐáâàÞÙÚØ"
|
msgstr "½ÐáâàÞÙÚØ"
|
||||||
|
|
||||||
@ -49,12 +40,6 @@ msgstr ""
|
|||||||
msgid "Maximum Number of Clients"
|
msgid "Maximum Number of Clients"
|
||||||
msgstr "¼ÐÚá. ÚÞÛØçÕáâÒÞ ÚÛØÕÝâÞÒ"
|
msgstr "¼ÐÚá. ÚÞÛØçÕáâÒÞ ÚÛØÕÝâÞÒ"
|
||||||
|
|
||||||
msgid "Suspend behaviour"
|
|
||||||
msgstr "Поведение остановки"
|
|
||||||
|
|
||||||
msgid "Client may suspend"
|
|
||||||
msgstr "Клиент может останавливать"
|
|
||||||
|
|
||||||
msgid "VDR-to-VDR Server"
|
msgid "VDR-to-VDR Server"
|
||||||
msgstr "VDR-to-VDR áÕàÒÕà"
|
msgstr "VDR-to-VDR áÕàÒÕà"
|
||||||
|
|
||||||
@ -67,6 +52,12 @@ msgstr "VDR-to-VDR
|
|||||||
msgid "Bind to IP"
|
msgid "Bind to IP"
|
||||||
msgstr "¿àØáÞÕÔØÝØâìáï Ú IP"
|
msgstr "¿àØáÞÕÔØÝØâìáï Ú IP"
|
||||||
|
|
||||||
|
msgid "Legacy Client Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Client may suspend"
|
||||||
|
msgstr "ºÛØÕÝâ ÜÞÖÕâ ÞáâÐÝÐÒÛØÒÐâì"
|
||||||
|
|
||||||
msgid "Loop Prevention"
|
msgid "Loop Prevention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -79,6 +70,9 @@ msgstr "
|
|||||||
msgid "HTTP Server Port"
|
msgid "HTTP Server Port"
|
||||||
msgstr "HTTP áÕàÒÕà ¿Þàâ"
|
msgstr "HTTP áÕàÒÕà ¿Þàâ"
|
||||||
|
|
||||||
|
msgid "Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "HTTP Streamtype"
|
msgid "HTTP Streamtype"
|
||||||
msgstr "ÂØß HTTP ßÞâÞÚÐ"
|
msgstr "ÂØß HTTP ßÞâÞÚÐ"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: streamdev_SK\n"
|
"Project-Id-Version: streamdev_SK\n"
|
||||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\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"
|
"PO-Revision-Date: 2011-12-11 11:25+0100\n"
|
||||||
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
||||||
"Language-Team: Slovak <hrala.milan@gmail.com>\n"
|
"Language-Team: Slovak <hrala.milan@gmail.com>\n"
|
||||||
@ -33,15 +33,6 @@ msgstr ""
|
|||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Pozastavenie"
|
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"
|
msgid "Common Settings"
|
||||||
msgstr "V¹eobecné nastavenia"
|
msgstr "V¹eobecné nastavenia"
|
||||||
|
|
||||||
@ -51,12 +42,6 @@ msgstr "Schova
|
|||||||
msgid "Maximum Number of Clients"
|
msgid "Maximum Number of Clients"
|
||||||
msgstr "Maximály poèet klientov"
|
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"
|
msgid "VDR-to-VDR Server"
|
||||||
msgstr "VDR-do-VDR server"
|
msgstr "VDR-do-VDR server"
|
||||||
|
|
||||||
@ -69,6 +54,12 @@ msgstr "Port serveru pre VDR-do-VDR"
|
|||||||
msgid "Bind to IP"
|
msgid "Bind to IP"
|
||||||
msgstr "viaza» na IP"
|
msgstr "viaza» na IP"
|
||||||
|
|
||||||
|
msgid "Legacy Client Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Client may suspend"
|
||||||
|
msgstr "Klient mô¾e pozastavi»"
|
||||||
|
|
||||||
msgid "Loop Prevention"
|
msgid "Loop Prevention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -81,6 +72,9 @@ msgstr "Spusti
|
|||||||
msgid "HTTP Server Port"
|
msgid "HTTP Server Port"
|
||||||
msgstr "Port serveru HTTP"
|
msgstr "Port serveru HTTP"
|
||||||
|
|
||||||
|
msgid "Priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "HTTP Streamtype"
|
msgid "HTTP Streamtype"
|
||||||
msgstr "typ prúdu HTTP"
|
msgstr "typ prúdu HTTP"
|
||||||
|
|
||||||
|
@ -14,14 +14,16 @@ cStreamdevServerSetup::cStreamdevServerSetup(void) {
|
|||||||
MaxClients = 5;
|
MaxClients = 5;
|
||||||
StartVTPServer = true;
|
StartVTPServer = true;
|
||||||
VTPServerPort = 2004;
|
VTPServerPort = 2004;
|
||||||
|
VTPPriority = 0;
|
||||||
LoopPrevention = false;
|
LoopPrevention = false;
|
||||||
StartHTTPServer = true;
|
StartHTTPServer = true;
|
||||||
HTTPServerPort = 3000;
|
HTTPServerPort = 3000;
|
||||||
|
HTTPPriority = 0;
|
||||||
HTTPStreamType = stTS;
|
HTTPStreamType = stTS;
|
||||||
StartIGMPServer = false;
|
StartIGMPServer = false;
|
||||||
IGMPClientPort = 1234;
|
IGMPClientPort = 1234;
|
||||||
|
IGMPPriority = 0;
|
||||||
IGMPStreamType = stTS;
|
IGMPStreamType = stTS;
|
||||||
SuspendMode = smAlways;
|
|
||||||
AllowSuspend = false;
|
AllowSuspend = false;
|
||||||
strcpy(VTPBindIP, "0.0.0.0");
|
strcpy(VTPBindIP, "0.0.0.0");
|
||||||
strcpy(HTTPBindIP, "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, "MaxClients") == 0) MaxClients = atoi(Value);
|
||||||
else if (strcmp(Name, "StartServer") == 0) StartVTPServer = atoi(Value);
|
else if (strcmp(Name, "StartServer") == 0) StartVTPServer = atoi(Value);
|
||||||
else if (strcmp(Name, "ServerPort") == 0) VTPServerPort = 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, "VTPBindIP") == 0) strcpy(VTPBindIP, Value);
|
||||||
else if (strcmp(Name, "LoopPrevention") == 0) LoopPrevention = atoi(Value);
|
else if (strcmp(Name, "LoopPrevention") == 0) LoopPrevention = atoi(Value);
|
||||||
else if (strcmp(Name, "StartHTTPServer") == 0) StartHTTPServer = atoi(Value);
|
else if (strcmp(Name, "StartHTTPServer") == 0) StartHTTPServer = atoi(Value);
|
||||||
else if (strcmp(Name, "HTTPServerPort") == 0) HTTPServerPort = 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, "HTTPStreamType") == 0) HTTPStreamType = atoi(Value);
|
||||||
else if (strcmp(Name, "HTTPBindIP") == 0) strcpy(HTTPBindIP, Value);
|
else if (strcmp(Name, "HTTPBindIP") == 0) strcpy(HTTPBindIP, Value);
|
||||||
else if (strcmp(Name, "StartIGMPServer") == 0) StartIGMPServer = atoi(Value);
|
else if (strcmp(Name, "StartIGMPServer") == 0) StartIGMPServer = atoi(Value);
|
||||||
else if (strcmp(Name, "IGMPClientPort") == 0) IGMPClientPort = 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, "IGMPStreamType") == 0) IGMPStreamType = atoi(Value);
|
||||||
else if (strcmp(Name, "IGMPBindIP") == 0) strcpy(IGMPBindIP, 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 if (strcmp(Name, "AllowSuspend") == 0) AllowSuspend = atoi(Value);
|
||||||
else return false;
|
else return false;
|
||||||
return true;
|
return true;
|
||||||
@ -57,12 +61,6 @@ const char* cStreamdevServerMenuSetupPage::StreamTypes[st_Count - 1] = {
|
|||||||
"EXT"
|
"EXT"
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* cStreamdevServerMenuSetupPage::SuspendModes[sm_Count] = {
|
|
||||||
trNOOP("Offer suspend mode"),
|
|
||||||
trNOOP("Always suspended"),
|
|
||||||
trNOOP("Never suspended")
|
|
||||||
};
|
|
||||||
|
|
||||||
cStreamdevServerMenuSetupPage::cStreamdevServerMenuSetupPage(void) {
|
cStreamdevServerMenuSetupPage::cStreamdevServerMenuSetupPage(void) {
|
||||||
m_NewSetup = StreamdevServerSetup;
|
m_NewSetup = StreamdevServerSetup;
|
||||||
|
|
||||||
@ -73,37 +71,35 @@ cStreamdevServerMenuSetupPage::~cStreamdevServerMenuSetupPage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cStreamdevServerMenuSetupPage::Set(void) {
|
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();
|
int current = Current();
|
||||||
Clear();
|
Clear();
|
||||||
AddCategory (tr("Common Settings"));
|
AddCategory (tr("Common Settings"));
|
||||||
Add(new cMenuEditBoolItem(tr("Hide Mainmenu Entry"), &m_NewSetup.HideMenuEntry));
|
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 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"));
|
AddCategory (tr("VDR-to-VDR Server"));
|
||||||
Add(new cMenuEditBoolItem(tr("Start VDR-to-VDR Server"), &m_NewSetup.StartVTPServer));
|
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 cMenuEditIntItem (tr("VDR-to-VDR Server Port"), &m_NewSetup.VTPServerPort, 0, 65535));
|
||||||
Add(new cMenuEditIpItem (tr("Bind to IP"), m_NewSetup.VTPBindIP));
|
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))
|
if (cPluginManager::CallFirstService(LOOP_PREVENTION_SERVICE))
|
||||||
Add(new cMenuEditBoolItem(tr("Loop Prevention"), &m_NewSetup.LoopPrevention));
|
Add(new cMenuEditBoolItem(tr("Loop Prevention"), &m_NewSetup.LoopPrevention));
|
||||||
|
|
||||||
AddCategory (tr("HTTP Server"));
|
AddCategory (tr("HTTP Server"));
|
||||||
Add(new cMenuEditBoolItem(tr("Start HTTP Server"), &m_NewSetup.StartHTTPServer));
|
Add(new cMenuEditBoolItem(tr("Start HTTP Server"), &m_NewSetup.StartHTTPServer));
|
||||||
Add(new cMenuEditIntItem (tr("HTTP Server Port"), &m_NewSetup.HTTPServerPort, 0, 65535));
|
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 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"));
|
AddCategory (tr("Multicast Streaming Server"));
|
||||||
Add(new cMenuEditBoolItem(tr("Start IGMP Server"), &m_NewSetup.StartIGMPServer));
|
Add(new cMenuEditBoolItem(tr("Start IGMP Server"), &m_NewSetup.StartIGMPServer));
|
||||||
Add(new cMenuEditIntItem (tr("Multicast Client Port"), &m_NewSetup.IGMPClientPort, 0, 65535));
|
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 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));
|
SetCurrent(Get(current));
|
||||||
Display();
|
Display();
|
||||||
}
|
}
|
||||||
@ -138,16 +134,18 @@ void cStreamdevServerMenuSetupPage::Store(void) {
|
|||||||
SetupStore("StartServer", m_NewSetup.StartVTPServer);
|
SetupStore("StartServer", m_NewSetup.StartVTPServer);
|
||||||
SetupStore("ServerPort", m_NewSetup.VTPServerPort);
|
SetupStore("ServerPort", m_NewSetup.VTPServerPort);
|
||||||
SetupStore("VTPBindIP", m_NewSetup.VTPBindIP);
|
SetupStore("VTPBindIP", m_NewSetup.VTPBindIP);
|
||||||
|
SetupStore("VTPPriority", m_NewSetup.VTPPriority);
|
||||||
SetupStore("LoopPrevention", m_NewSetup.LoopPrevention);
|
SetupStore("LoopPrevention", m_NewSetup.LoopPrevention);
|
||||||
SetupStore("StartHTTPServer", m_NewSetup.StartHTTPServer);
|
SetupStore("StartHTTPServer", m_NewSetup.StartHTTPServer);
|
||||||
SetupStore("HTTPServerPort", m_NewSetup.HTTPServerPort);
|
SetupStore("HTTPServerPort", m_NewSetup.HTTPServerPort);
|
||||||
SetupStore("HTTPStreamType", m_NewSetup.HTTPStreamType);
|
|
||||||
SetupStore("HTTPBindIP", m_NewSetup.HTTPBindIP);
|
SetupStore("HTTPBindIP", m_NewSetup.HTTPBindIP);
|
||||||
|
SetupStore("HTTPPriority", m_NewSetup.HTTPPriority);
|
||||||
|
SetupStore("HTTPStreamType", m_NewSetup.HTTPStreamType);
|
||||||
SetupStore("StartIGMPServer", m_NewSetup.StartIGMPServer);
|
SetupStore("StartIGMPServer", m_NewSetup.StartIGMPServer);
|
||||||
SetupStore("IGMPClientPort", m_NewSetup.IGMPClientPort);
|
SetupStore("IGMPClientPort", m_NewSetup.IGMPClientPort);
|
||||||
SetupStore("IGMPStreamType", m_NewSetup.IGMPStreamType);
|
|
||||||
SetupStore("IGMPBindIP", m_NewSetup.IGMPBindIP);
|
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);
|
SetupStore("AllowSuspend", m_NewSetup.AllowSuspend);
|
||||||
|
|
||||||
StreamdevServerSetup = m_NewSetup;
|
StreamdevServerSetup = m_NewSetup;
|
||||||
@ -155,11 +153,3 @@ void cStreamdevServerMenuSetupPage::Store(void) {
|
|||||||
if (restart)
|
if (restart)
|
||||||
cStreamdevServer::Initialize();
|
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 StartVTPServer;
|
||||||
int VTPServerPort;
|
int VTPServerPort;
|
||||||
char VTPBindIP[20];
|
char VTPBindIP[20];
|
||||||
|
int VTPPriority;
|
||||||
|
int AllowSuspend;
|
||||||
int LoopPrevention;
|
int LoopPrevention;
|
||||||
int StartHTTPServer;
|
int StartHTTPServer;
|
||||||
int HTTPServerPort;
|
int HTTPServerPort;
|
||||||
|
int HTTPPriority;
|
||||||
int HTTPStreamType;
|
int HTTPStreamType;
|
||||||
char HTTPBindIP[20];
|
char HTTPBindIP[20];
|
||||||
int StartIGMPServer;
|
int StartIGMPServer;
|
||||||
int IGMPClientPort;
|
int IGMPClientPort;
|
||||||
|
int IGMPPriority;
|
||||||
int IGMPStreamType;
|
int IGMPStreamType;
|
||||||
char IGMPBindIP[20];
|
char IGMPBindIP[20];
|
||||||
int SuspendMode;
|
|
||||||
int AllowSuspend;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern cStreamdevServerSetup StreamdevServerSetup;
|
extern cStreamdevServerSetup StreamdevServerSetup;
|
||||||
@ -35,14 +37,12 @@ extern cStreamdevServerSetup StreamdevServerSetup;
|
|||||||
class cStreamdevServerMenuSetupPage: public cMenuSetupPage {
|
class cStreamdevServerMenuSetupPage: public cMenuSetupPage {
|
||||||
private:
|
private:
|
||||||
static const char* StreamTypes[];
|
static const char* StreamTypes[];
|
||||||
static const char* SuspendModes[];
|
|
||||||
cStreamdevServerSetup m_NewSetup;
|
cStreamdevServerSetup m_NewSetup;
|
||||||
|
|
||||||
void AddCategory(const char *Title);
|
void AddCategory(const char *Title);
|
||||||
void Set();
|
void Set();
|
||||||
protected:
|
protected:
|
||||||
virtual void Store(void);
|
virtual void Store(void);
|
||||||
virtual eOSState ProcessKey(eKeys Key);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
cStreamdevServerMenuSetupPage(void);
|
cStreamdevServerMenuSetupPage(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user