url: remove vlc_UrlParse() option parameter
[vlc.git] / modules / demux / adaptative / http / Chunk.cpp
1 /*
2  * Chunk.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 "Chunk.h"
29
30 #include <vlc_common.h>
31 #include <vlc_url.h>
32
33 using namespace adaptative::http;
34
35 Chunk::Chunk        (const std::string& url) :
36        startByte    (0),
37        endByte      (0),
38        bitrate      (1),
39        port         (0),
40        length       (0),
41        bytesRead    (0),
42        bytesToRead  (0),
43        connection   (NULL)
44 {
45     this->url = url;
46
47     std::size_t pos = url.find("://");
48     if(pos != std::string::npos)
49     {
50         scheme = url.substr(0, pos);
51     }
52
53     if(scheme != "http" && scheme != "https")
54         throw VLC_EGENERIC;
55
56     vlc_url_t url_components;
57     vlc_UrlParse(&url_components, url.c_str());
58
59     if(url_components.psz_path)
60         path = url_components.psz_path;
61     if(url_components.psz_option)
62     {
63         path += "?";
64         path += url_components.psz_option;
65     }
66     port = url_components.i_port ? url_components.i_port :
67                          ((scheme == "https") ? 443 : 80);
68     if(url_components.psz_host)
69         hostname = url_components.psz_host;
70
71     vlc_UrlClean(&url_components);
72
73     if(path.empty() || hostname.empty())
74         throw VLC_EGENERIC;
75 }
76
77 size_t              Chunk::getEndByte           () const
78 {
79     return endByte;
80 }
81 size_t              Chunk::getStartByte         () const
82 {
83     return startByte;
84 }
85 const std::string&  Chunk::getUrl               () const
86 {
87     return url;
88 }
89 void                Chunk::setEndByte           (size_t endByte)
90 {
91     this->endByte = endByte;
92     if (endByte > startByte)
93         bytesToRead = endByte - startByte;
94 }
95 void                Chunk::setStartByte         (size_t startByte)
96 {
97     this->startByte = startByte;
98     if (endByte > startByte)
99         bytesToRead = endByte - startByte;
100 }
101 void                Chunk::addOptionalUrl       (const std::string& url)
102 {
103     this->optionalUrls.push_back(url);
104 }
105 bool                Chunk::usesByteRange        () const
106 {
107     return (startByte != endByte);
108 }
109
110 void                Chunk::setBitrate           (uint64_t bitrate)
111 {
112     this->bitrate = bitrate;
113 }
114 int                 Chunk::getBitrate           ()
115 {
116     return this->bitrate;
117 }
118
119 const std::string&  Chunk::getScheme            () const
120 {
121     return scheme;
122 }
123
124 const std::string&  Chunk::getHostname          () const
125 {
126     return hostname;
127 }
128 const std::string&  Chunk::getPath              () const
129 {
130     return this->path;
131 }
132 int                 Chunk::getPort              () const
133 {
134     return this->port;
135 }
136 uint64_t            Chunk::getLength            () const
137 {
138     return this->length;
139 }
140 void                Chunk::setLength            (uint64_t length)
141 {
142     this->length = length;
143 }
144 uint64_t            Chunk::getBytesRead         () const
145 {
146     return this->bytesRead;
147 }
148 void                Chunk::setBytesRead         (uint64_t bytes)
149 {
150     this->bytesRead = bytes;
151 }
152
153 void                Chunk::setBytesToRead         (uint64_t bytes)
154 {
155     bytesToRead = bytes;
156 }
157
158 uint64_t            Chunk::getBytesToRead       () const
159 {
160         return length - bytesRead;
161 }
162
163 size_t              Chunk::getPercentDownloaded () const
164 {
165     return (size_t)(((float)this->bytesRead / this->length) * 100);
166 }
167 HTTPConnection*     Chunk::getConnection           () const
168 {
169     return this->connection;
170 }
171 void                Chunk::setConnection   (HTTPConnection *connection)
172 {
173     this->connection = connection;
174 }