mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Improved performance of SVDRP command entry
This commit is contained in:
parent
5497970338
commit
08390642c8
1
HISTORY
1
HISTORY
@ -889,3 +889,4 @@ Video Disk Recorder Revision History
|
|||||||
Schreiber).
|
Schreiber).
|
||||||
- Prepared the OSD functions for multiple overlapping windows.
|
- Prepared the OSD functions for multiple overlapping windows.
|
||||||
- Removed the check to see whether the system time is running linearly.
|
- Removed the check to see whether the system time is running linearly.
|
||||||
|
- Improved performance of SVDRP command entry.
|
||||||
|
80
svdrp.c
80
svdrp.c
@ -10,7 +10,7 @@
|
|||||||
* and interact with the Video Disk Recorder - or write a full featured
|
* and interact with the Video Disk Recorder - or write a full featured
|
||||||
* graphical interface that sits on top of an SVDRP connection.
|
* graphical interface that sits on top of an SVDRP connection.
|
||||||
*
|
*
|
||||||
* $Id: svdrp.c 1.27 2001/11/04 11:25:05 kls Exp $
|
* $Id: svdrp.c 1.28 2002/01/13 16:07:42 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "svdrp.h"
|
#include "svdrp.h"
|
||||||
@ -899,49 +899,49 @@ void cSVDRP::Process(void)
|
|||||||
}
|
}
|
||||||
if (NewConnection)
|
if (NewConnection)
|
||||||
lastActivity = time(NULL);
|
lastActivity = time(NULL);
|
||||||
if (file.Ready(false)) {
|
while (file.Ready(false)) {
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
int r = safe_read(file, &c, 1);
|
int r = safe_read(file, &c, 1);
|
||||||
if (r > 0) {
|
if (r > 0) {
|
||||||
if (c == '\n' || c == 0x00) {
|
if (c == '\n' || c == 0x00) {
|
||||||
// strip trailing whitespace:
|
// strip trailing whitespace:
|
||||||
while (numChars > 0 && strchr(" \t\r\n", cmdLine[numChars - 1]))
|
while (numChars > 0 && strchr(" \t\r\n", cmdLine[numChars - 1]))
|
||||||
cmdLine[--numChars] = 0;
|
cmdLine[--numChars] = 0;
|
||||||
// make sure the string is terminated:
|
// make sure the string is terminated:
|
||||||
cmdLine[numChars] = 0;
|
cmdLine[numChars] = 0;
|
||||||
// showtime!
|
// showtime!
|
||||||
Execute(cmdLine);
|
Execute(cmdLine);
|
||||||
numChars = 0;
|
numChars = 0;
|
||||||
|
}
|
||||||
|
else if (c == 0x04 && numChars == 0) {
|
||||||
|
// end of file (only at beginning of line)
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
else if (c == 0x08 || c == 0x7F) {
|
||||||
|
// backspace or delete (last character)
|
||||||
|
if (numChars > 0)
|
||||||
|
numChars--;
|
||||||
|
}
|
||||||
|
else if (c <= 0x03 || c == 0x0D) {
|
||||||
|
// ignore control characters
|
||||||
|
}
|
||||||
|
else if (numChars < sizeof(cmdLine) - 1) {
|
||||||
|
cmdLine[numChars++] = c;
|
||||||
|
cmdLine[numChars] = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Reply(501, "Command line too long");
|
||||||
|
esyslog(LOG_ERR, "SVDRP: command line too long: '%s'", cmdLine);
|
||||||
|
numChars = 0;
|
||||||
|
}
|
||||||
|
lastActivity = time(NULL);
|
||||||
}
|
}
|
||||||
else if (c == 0x04 && numChars == 0) {
|
else if (r <= 0) {
|
||||||
// end of file (only at beginning of line)
|
isyslog(LOG_INFO, "lost connection to SVDRP client");
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
else if (c == 0x08 || c == 0x7F) {
|
|
||||||
// backspace or delete (last character)
|
|
||||||
if (numChars > 0)
|
|
||||||
numChars--;
|
|
||||||
}
|
|
||||||
else if (c <= 0x03 || c == 0x0D) {
|
|
||||||
// ignore control characters
|
|
||||||
}
|
|
||||||
else if (numChars < sizeof(cmdLine) - 1) {
|
|
||||||
cmdLine[numChars++] = c;
|
|
||||||
cmdLine[numChars] = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Reply(501, "Command line too long");
|
|
||||||
esyslog(LOG_ERR, "SVDRP: command line too long: '%s'", cmdLine);
|
|
||||||
numChars = 0;
|
|
||||||
}
|
|
||||||
lastActivity = time(NULL);
|
|
||||||
}
|
}
|
||||||
else if (r <= 0) {
|
if (Setup.SVDRPTimeout && time(NULL) - lastActivity > Setup.SVDRPTimeout) {
|
||||||
isyslog(LOG_INFO, "lost connection to SVDRP client");
|
|
||||||
Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (Setup.SVDRPTimeout && time(NULL) - lastActivity > Setup.SVDRPTimeout) {
|
|
||||||
isyslog(LOG_INFO, "timeout on SVDRP connection");
|
isyslog(LOG_INFO, "timeout on SVDRP connection");
|
||||||
Close(true);
|
Close(true);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user