mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Improved performance of SVDRP command entry
This commit is contained in:
		
							
								
								
									
										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); | ||||||
|         } |         } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user