From c4d0bd96912f22ed9a467e08a6adbdf3f16720b7 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Mon, 6 Aug 2012 05:34:32 +0200 Subject: [PATCH] Fix several HTTP bugs. Update libmist also for best results. --- src/conn_http.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/conn_http.cpp b/src/conn_http.cpp index 10a05d3e..bb5a1ebe 100644 --- a/src/conn_http.cpp +++ b/src/conn_http.cpp @@ -159,9 +159,9 @@ namespace Connector_HTTP{ H.Clean(); //check if a connection exists, and if not create one - std::cout << "Creating connection" << std::endl; conn_mutex.lock(); if (!connconn.count(uid)){ + std::cout << "Creating connection" << std::endl; connconn[uid] = new ConnConn(new Socket::Connection("/tmp/mist/http_"+connector)); connconn[uid]->conn->setBlocking(false);//do not block on spool() with no data } @@ -181,6 +181,7 @@ namespace Connector_HTTP{ tthread::lock_guard guard(connconn[uid]->in_use); //if the server connection is dead, handle as timeout. if (!connconn.count(uid) || !connconn[uid]->conn->connected()){ + std::cout << "Dimeout" << std::endl; Handle_Timeout(H, conn); return; } @@ -199,12 +200,13 @@ namespace Connector_HTTP{ } }else{ //keep trying unless the timeout triggers - timeout++; - if (timeout > 50){ + if (timeout++ > 50){ + std::cout << "Timeout" << std::endl; Handle_Timeout(H, conn); return; + }else{ + usleep(100000); } - usleep(100000); } } if (!connconn.count(uid) || !connconn[uid]->conn->connected()){ @@ -218,21 +220,20 @@ namespace Connector_HTTP{ //known length - simply re-send the request with added headers and continue std::cout << "Known success" << std::endl; H.SetHeader("X-UID", uid); - H.protocol = "HTTP/1.0"; conn->Send(H.BuildResponse("200", "OK")); }else{ //unknown length std::cout << "Unknown success" << std::endl; H.SetHeader("X-UID", uid); - H.protocol = "HTTP/1.0"; conn->Send(H.BuildResponse("200", "OK")); //continue sending data from this socket and keep it permanently in use - while (connconn[uid]->conn->connected()){ + while (connconn.count(uid) && connconn[uid]->conn->connected() && conn->connected()){ if (connconn[uid]->conn->spool()){ //forward any and all incoming data directly without parsing conn->Send(connconn[uid]->conn->Received()); connconn[uid]->conn->Received().clear(); } + conn->spool(); } } }