Adding possibility to stream live video by avoiding to cache mpd. The mpd is always... 43/7843/3
authorMauro Sardara <[email protected]>
Fri, 28 Jul 2017 17:38:23 +0000 (19:38 +0200)
committerMauro Sardara <[email protected]>
Mon, 31 Jul 2017 08:13:34 +0000 (08:13 +0000)
Change-Id: I8573b0a25bc2cea4f6a3193b0048433e12119306
Signed-off-by: Mauro Sardara <[email protected]>
http-server/http_server.cc
http-server/icn_response.cc
http-server/response.cc
http-server/response.h
main.cc

index 5199468..478d072 100644 (file)
@@ -71,7 +71,11 @@ void HttpServer::onIcnRequest(std::shared_ptr<libl4::http::HTTPServerPublisher>
       std::cout << "Received request for: " << request->getPath() << std::endl;
       icn_publishers_[request_id] = publisher;
       icn_publishers_[request_id]->attachPublisher();
-      icn_publishers_[request_id]->setTimeout(5);
+      if (request->getPath().substr(request->getPath().find_last_of(".") + 1) == "mpd") {
+        icn_publishers_[request_id]->setTimeout(1);
+      } else {
+        icn_publishers_[request_id]->setTimeout(5);
+      }
       std::cout << "Starting new thread" << std::endl;
       io_service_.dispatch([this, request, request_id]() {
         find_resource(nullptr, request);
index 241eda5..9741556 100644 (file)
@@ -32,6 +32,7 @@ void IcnResponse::send(const SendCallback &callback) {
 
   this->publisher_->publishContent(boost::asio::buffer_cast<const uint8_t *>(this->streambuf_.data()),
                                    buffer_size,
+                                   this->response_lifetime_,
                                    this->response_id_,
                                    this->is_last_);
 
index b322cad..779eced 100644 (file)
 #include "common.h"
 #include "response.h"
 
+#define DEFAULT_LIFETIME 1024 * 1024
+
 namespace icn_httpserver {
 
 Response::Response()
-    : std::ostream(&streambuf_), is_last_(false) {
+    : std::ostream(&streambuf_),
+      is_last_(false),
+      response_length_(0),
+      response_lifetime_(DEFAULT_LIFETIME) {
 }
 
 Response::~Response() {
@@ -37,6 +42,13 @@ void Response::setIsLast(bool is_last) {
   Response::is_last_ = is_last;
 }
 
+const std::chrono::milliseconds &Response::getResponseLifetime() const {
+  return response_lifetime_;
+}
+void Response::setResponseLifetime(const std::chrono::milliseconds &response_lifetime) {
+  Response::response_lifetime_ = response_lifetime_;
+}
+
 void Response::setResponseLength(std::size_t length) {
   response_length_ = length;
 }
index 649bcea..cc8df9c 100644 (file)
@@ -39,10 +39,16 @@ class Response
 
   void setResponseLength(std::size_t length);
 
+  const std::chrono::milliseconds &getResponseLifetime() const;
+
+  void setResponseLifetime(const std::chrono::milliseconds &response_lifetime);
+
+
  protected:
   boost::asio::streambuf streambuf_;
   bool is_last_;
   std::size_t response_length_;
+  std::chrono::milliseconds response_lifetime_; 
 };
 
 } // end namespace icn_httpserver
diff --git a/main.cc b/main.cc
index e5eb804..c222db2 100644 (file)
--- a/main.cc
+++ b/main.cc
@@ -67,7 +67,7 @@ void afterSignal(HttpServer *webServer, const boost::system::error_code &errorCo
 }
 
 void usage(const char *programName) {
-  cerr << programName << " [-p PATH_TO_ROOT_FOOT_FOLDER] [-l WEBSERVER_PREFIX] [-x PROXY_ADDRESS]\n"
+  cerr << programName << " [-p PATH_TO_ROOT_FOOT_FOLDER] [-o TCP_LISTEN_PORT] [-l WEBSERVER_PREFIX] [-x PROXY_ADDRESS]\n"
        << "Web server able to publish content and generate http responses over TCP/ICN\n" << endl;
 
   exit(1);
@@ -188,6 +188,10 @@ int main(int argc, char **argv) {
               *response << "HTTP/1.0 200 OK\r\nContent-Length: " << length << "\r\n\r\n";
             }
 
+            if (path.extension().string() == ".mpd") {
+              response->setResponseLifetime(std::chrono::milliseconds(1000));
+            }
+
             default_resource_send(server, response, ifs, buffer, length);
 
             return;