]> git.sesse.net Git - vlc/blob - modules/demux/dash/http/HTTPConnection.cpp
demux: dash: move everything under demux/
[vlc] / modules / demux / dash / http / HTTPConnection.cpp
1 /*
2  * HTTPConnection.cpp
3  *****************************************************************************
4  * Copyright (C) 2010 - 2011 Klagenfurt University
5  *
6  * Created on: Aug 10, 2010
7  * Authors: Christopher Mueller <christopher.mueller@itec.uni-klu.ac.at>
8  *          Christian Timmerer  <christian.timmerer@itec.uni-klu.ac.at>
9  *
10  * This program is free software; you can redistribute it and/or modify it
11  * under the terms of the GNU Lesser General Public License as published
12  * by the Free Software Foundation; either version 2.1 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * along with this program; if not, write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23  *****************************************************************************/
24 #ifdef HAVE_CONFIG_H
25 # include "config.h"
26 #endif
27
28 #include "HTTPConnection.h"
29 #include "Chunk.h"
30
31 #include <sstream>
32
33 using namespace dash::http;
34
35 HTTPConnection::HTTPConnection  (stream_t *stream, Chunk *chunk_) :
36                 IHTTPConnection (stream)
37 {
38     toRead = 0;
39     chunk = NULL;
40     bindChunk(chunk_);
41 }
42
43 std::string HTTPConnection::buildRequestHeader(const std::string &path) const
44 {
45     std::string req = IHTTPConnection::buildRequestHeader(path);
46     return req.append("Connection: close\r\n");
47 }
48
49 void HTTPConnection::bindChunk(Chunk *chunk_)
50 {
51     if(chunk_ == chunk)
52         return;
53     if (chunk_)
54         chunk_->setConnection(this);
55     chunk = chunk_;
56 }
57
58 void HTTPConnection::releaseChunk()
59 {
60     if(chunk)
61     {
62         chunk->setConnection(NULL);
63         chunk = NULL;
64     }
65 }
66
67 void HTTPConnection::onHeader(const std::string &key,
68                               const std::string &value)
69 {
70     if(key == "Content-Length")
71     {
72         std::istringstream ss(value);
73         size_t length;
74         ss >> length;
75         chunk->setLength(length);
76         toRead = length;
77     }
78 }
79
80 std::string HTTPConnection::extraRequestHeaders() const
81 {
82     std::stringstream ss;
83     if(chunk->usesByteRange())
84     {
85         ss << "Range: bytes=" << chunk->getStartByte() << "-";
86         if(chunk->getEndByte())
87             ss << chunk->getEndByte();
88         ss << "\r\n";
89     }
90     return ss.str();
91 }
92
93 bool HTTPConnection::isAvailable() const
94 {
95     return chunk == NULL;
96 }
97
98 void HTTPConnection::disconnect()
99 {
100     toRead = 0;
101 }