Bläddra i källkod

2009-05-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Put a call to Socket::isReadable() in try block.
	* src/HttpServerBodyCommand.cc
	* src/HttpServerCommand.cc
Tatsuhiro Tsujikawa 16 år sedan
förälder
incheckning
64945c1f03
3 ändrade filer med 61 tillägg och 52 borttagningar
  1. 6 0
      ChangeLog
  2. 15 14
      src/HttpServerBodyCommand.cc
  3. 40 38
      src/HttpServerCommand.cc

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+2009-05-13  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Put a call to Socket::isReadable() in try block.
+	* src/HttpServerBodyCommand.cc
+	* src/HttpServerCommand.cc
+
 2009-05-12  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Fixed segmentation fault error. SocketBuffer::sendResponse() may throw

+ 15 - 14
src/HttpServerBodyCommand.cc

@@ -74,10 +74,10 @@ bool HttpServerBodyCommand::execute()
   if(_e->_requestGroupMan->downloadFinished() || _e->isHaltRequested()) {
     return true;
   }
-  if(_socket->isReadable(0) || _httpServer->getContentLength() == 0) {
-    _timeout.reset();
+  try {
+    if(_socket->isReadable(0) || _httpServer->getContentLength() == 0) {
+      _timeout.reset();
 
-    try {
       if(_httpServer->receiveBody()) {
 	// Do something for requestpath and body
 	if(_httpServer->getRequestPath() == "/rpc") {
@@ -101,20 +101,21 @@ bool HttpServerBodyCommand::execute()
 	_e->commands.push_back(this);
 	return false;
       }	
-    } catch(RecoverableException& e) {
-      logger->info("CUID#%d - Error occurred while reading HTTP request body",
-		   e, cuid);
-      return true;
-    }
-  } else {
-    if(_timeout.elapsed(30)) {
-      logger->info("HTTP request body timeout.");
-      return true;
     } else {
-      _e->commands.push_back(this);
-      return false;
+      if(_timeout.elapsed(30)) {
+	logger->info("HTTP request body timeout.");
+	return true;
+      } else {
+	_e->commands.push_back(this);
+	return false;
+      }
     }
+  } catch(RecoverableException& e) {
+    logger->info("CUID#%d - Error occurred while reading HTTP request body",
+		 e, cuid);
+    return true;
   }
+
 }
 
 } // namespace aria2

+ 40 - 38
src/HttpServerCommand.cc

@@ -82,48 +82,50 @@ bool HttpServerCommand::execute()
   if(_e->_requestGroupMan->downloadFinished() || _e->isHaltRequested()) {
     return true;
   }
-  if(_socket->isReadable(0)) {
-    _timeout.reset();
-    SharedHandle<HttpHeader> header;
-    try {
+  try {
+    if(_socket->isReadable(0)) {
+      _timeout.reset();
+      SharedHandle<HttpHeader> header;
+
       header = _httpServer->receiveRequest();
-    } catch(RecoverableException& e) {
-      logger->info("CUID#%d - Error occurred while reading HTTP request",
-		   e, cuid);
-      return true;
-    }
-    if(!_httpServer->authenticate()) {
-      _httpServer->disableKeepAlive();
-      _httpServer->feedResponse("401 Unauthorized",
-				"WWW-Authenticate: Basic realm=\"aria2\"",
-				"","text/html");
-      Command* command =
-	new HttpServerResponseCommand(cuid, _httpServer, _e, _socket);
-      command->setStatus(Command::STATUS_ONESHOT_REALTIME);
-      _e->commands.push_back(command);
-      _e->setNoWait(true);
-      return true;
-    }
-    if(header.isNull()) {
-      _e->commands.push_back(this);
-      return false;
+      if(!_httpServer->authenticate()) {
+	_httpServer->disableKeepAlive();
+	_httpServer->feedResponse("401 Unauthorized",
+				  "WWW-Authenticate: Basic realm=\"aria2\"",
+				  "","text/html");
+	Command* command =
+	  new HttpServerResponseCommand(cuid, _httpServer, _e, _socket);
+	command->setStatus(Command::STATUS_ONESHOT_REALTIME);
+	_e->commands.push_back(command);
+	_e->setNoWait(true);
+	return true;
+      }
+      if(header.isNull()) {
+	_e->commands.push_back(this);
+	return false;
+      } else {
+	Command* command = new HttpServerBodyCommand(cuid, _httpServer, _e,
+						     _socket);
+	command->setStatus(Command::STATUS_ONESHOT_REALTIME);
+	_e->commands.push_back(command);
+	_e->setNoWait(true);
+	return true;
+      }
     } else {
-      Command* command = new HttpServerBodyCommand(cuid, _httpServer, _e,
-						   _socket);
-      command->setStatus(Command::STATUS_ONESHOT_REALTIME);
-      _e->commands.push_back(command);
-      _e->setNoWait(true);
-      return true;
-    }
-  } else {
-    if(_timeout.elapsed(30)) {
-      logger->info("HTTP request timeout.");
-      return true;
-    } else {
-      _e->commands.push_back(this);
-      return false;
+      if(_timeout.elapsed(30)) {
+	logger->info("HTTP request timeout.");
+	return true;
+      } else {
+	_e->commands.push_back(this);
+	return false;
+      }
     }
+  } catch(RecoverableException& e) {
+    logger->info("CUID#%d - Error occurred while reading HTTP request",
+		 e, cuid);
+    return true;
   }
+
 }
 
 } // namespace aria2