mirror of
https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
synced 2023-10-10 19:16:51 +02:00
fa578940f7
especially x264 still needs a SIGKILL sometimes - added --remove-destination to cp commands installing plugins - updated Italian translation (thanks to Diego Pierotto) - config option "client may suspend" hidden if not applicable - updated and enhanced README - added support for HTTP method HEAD - rewrite of externremux.sh, including support for various URL parameters, logging and improved shutdown - start externremux script in a separate process group - changed HTTP URL path for externremux from EXTERN to EXT (suggested by Rolf Ahrenberg) - HTTP headers now have to be emitted by externremux script - pass channel related information and URL parameters to externremux script through environment - implement CGI like interface for externremux script Modified Files: Tag: v0_4 CONTRIBUTORS HISTORY Makefile README common.c common.h i18n.c remux/extern.c remux/extern.h server/connection.c server/connection.h server/connectionHTTP.c server/connectionHTTP.h server/connectionIGMP.c server/connectionVTP.c server/livestreamer.c server/livestreamer.h server/menuHTTP.c server/setup.c server/setup.h server/streamer.c server/streamer.h streamdev/externremux.sh streamdev/streamdevhosts.conf
153 lines
2.9 KiB
C
153 lines
2.9 KiB
C
/*
|
|
* $Id: common.c,v 1.7.2.2 2010/07/19 13:50:11 schmirl Exp $
|
|
*/
|
|
|
|
#include <vdr/channels.h>
|
|
#include <iostream>
|
|
|
|
#include "common.h"
|
|
#include "tools/select.h"
|
|
|
|
using namespace std;
|
|
|
|
const char *VERSION = "0.4.0-CVS";
|
|
|
|
const char cMenuEditIpItem::IpCharacters[] = "0123456789.";
|
|
|
|
cMenuEditIpItem::cMenuEditIpItem(const char *Name, char *Value):
|
|
cMenuEditItem(Name) {
|
|
value = Value;
|
|
curNum = -1;
|
|
pos = -1;
|
|
step = false;
|
|
Set();
|
|
}
|
|
|
|
cMenuEditIpItem::~cMenuEditIpItem() {
|
|
}
|
|
|
|
void cMenuEditIpItem::Set(void) {
|
|
char buf[1000];
|
|
if (pos >= 0) {
|
|
in_addr_t addr = inet_addr(value);
|
|
if ((int)addr == -1)
|
|
addr = 0;
|
|
int p = 0;
|
|
for (int i = 0; i < 4; ++i) {
|
|
p += snprintf(buf + p, sizeof(buf) - p, pos == i ? "[%d]" : "%d",
|
|
pos == i ? curNum : (addr >> (i * 8)) & 0xff);
|
|
if (i < 3)
|
|
buf[p++] = '.';
|
|
}
|
|
SetValue(buf);
|
|
} else
|
|
SetValue(value);
|
|
}
|
|
|
|
eOSState cMenuEditIpItem::ProcessKey(eKeys Key) {
|
|
in_addr addr;
|
|
addr.s_addr = inet_addr(value);
|
|
if ((int)addr.s_addr == -1)
|
|
addr.s_addr = 0;
|
|
|
|
switch (Key) {
|
|
case kUp:
|
|
if (pos >= 0) {
|
|
if (curNum < 255) ++curNum;
|
|
} else
|
|
return cMenuEditItem::ProcessKey(Key);
|
|
break;
|
|
|
|
case kDown:
|
|
if (pos >= 0) {
|
|
if (curNum > 0) --curNum;
|
|
} else
|
|
return cMenuEditItem::ProcessKey(Key);
|
|
break;
|
|
|
|
case kOk:
|
|
if (pos >= 0) {
|
|
addr.s_addr = inet_addr(value);
|
|
if ((int)addr.s_addr == -1)
|
|
addr.s_addr = 0;
|
|
addr.s_addr &= ~(0xff << (pos * 8));
|
|
addr.s_addr |= curNum << (pos * 8);
|
|
strcpy(value, inet_ntoa(addr));
|
|
} else
|
|
return cMenuEditItem::ProcessKey(Key);
|
|
curNum = -1;
|
|
pos = -1;
|
|
break;
|
|
|
|
case kRight:
|
|
if (pos >= 0) {
|
|
addr.s_addr = inet_addr(value);
|
|
if ((int)addr.s_addr == -1)
|
|
addr.s_addr = 0;
|
|
addr.s_addr &= ~(0xff << (pos * 8));
|
|
addr.s_addr |= curNum << (pos * 8);
|
|
strcpy(value, inet_ntoa(addr));
|
|
}
|
|
|
|
if (pos == -1 || pos == 3)
|
|
pos = 0;
|
|
else
|
|
++pos;
|
|
|
|
curNum = (addr.s_addr >> (pos * 8)) & 0xff;
|
|
step = true;
|
|
break;
|
|
|
|
case kLeft:
|
|
if (pos >= 0) {
|
|
addr.s_addr = inet_addr(value);
|
|
if ((int)addr.s_addr == -1)
|
|
addr.s_addr = 0;
|
|
addr.s_addr &= ~(0xff << (pos * 8));
|
|
addr.s_addr |= curNum << (pos * 8);
|
|
strcpy(value, inet_ntoa(addr));
|
|
}
|
|
|
|
if (pos <= 0)
|
|
pos = 3;
|
|
else
|
|
--pos;
|
|
|
|
curNum = (addr.s_addr >> (pos * 8)) & 0xff;
|
|
step = true;
|
|
break;
|
|
|
|
case k0 ... k9:
|
|
if (pos == -1)
|
|
pos = 0;
|
|
|
|
if (curNum == -1 || step) {
|
|
curNum = Key - k0;
|
|
step = false;
|
|
} else
|
|
curNum = curNum * 10 + (Key - k0);
|
|
|
|
if ((curNum * 10 > 255) || (curNum == 0)) {
|
|
in_addr addr;
|
|
addr.s_addr = inet_addr(value);
|
|
if ((int)addr.s_addr == -1)
|
|
addr.s_addr = 0;
|
|
addr.s_addr &= ~(0xff << (pos * 8));
|
|
addr.s_addr |= curNum << (pos * 8);
|
|
strcpy(value, inet_ntoa(addr));
|
|
if (++pos == 4)
|
|
pos = 0;
|
|
curNum = (addr.s_addr >> (pos * 8)) & 0xff;
|
|
step = true;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return cMenuEditItem::ProcessKey(Key);
|
|
}
|
|
|
|
Set();
|
|
return osContinue;
|
|
}
|
|
|