[vlc-devel] [PATCH] DASH: fix URL parsing

Christopher Müller christopher.mueller at itec.uni-klu.ac.at
Wed Feb 22 11:36:50 CET 2012


> Von: vlc-devel-bounces at videolan.org [mailto:vlc-devel-
> bounces at videolan.org] Im Auftrag von Frederic YHUEL
> Gesendet: Mittwoch, 22. Februar 2012 11:29
> An: vlc-devel at videolan.org
> Betreff: Re: [vlc-devel] [PATCH] DASH: fix URL parsing
> 
> 2012/2/22  <fyhuel at viotech.net>:
> > From: Frédéric Yhuel <fyhuel at viotech.net>
> >
> > use vlc_UrlParse() instead of home made code and handle the case
> where
> > the port is not equal to 80.
> > ---
> >  modules/stream_filter/dash/http/HTTPConnection.cpp |   15
> > +++++++--------
> >  modules/stream_filter/dash/http/HTTPConnection.h   |    1 +
> >  2 files changed, 8 insertions(+), 8 deletions(-)
> >
> > diff --git a/modules/stream_filter/dash/http/HTTPConnection.cpp
> > b/modules/stream_filter/dash/http/HTTPConnection.cpp
> > index f98c9c7..a764fa7 100644
> > --- a/modules/stream_filter/dash/http/HTTPConnection.cpp
> > +++ b/modules/stream_filter/dash/http/HTTPConnection.cpp
> > @@ -26,6 +26,7 @@
> >  #endif
> >
> >  #include "HTTPConnection.h"
> > +#include <vlc_url.h>
> >
> >  using namespace dash::http;
> >
> > @@ -74,14 +75,12 @@ int             HTTPConnection::peek
> > (const uint8_t **pp_peek, size_t
> >  }
> >  void            HTTPConnection::parseURL        ()
> >  {
> > -    this->hostname = this->url;
> > -    this->hostname.erase(0, 7);
> > -    this->path = this->hostname;
> > +    vlc_url_t url_components;
> > +    vlc_UrlParse(&url_components, this->url.c_str(), 0);
> > +    this->hostname.assign(url_components.psz_host);
> > +    this->path.assign(url_components.psz_path);
> > +    this->port = url_components.i_port ? url_components.i_port : 80;
> >
> > -    size_t pos = this->hostname.find("/");
> > -
> > -    this->hostname  = this->hostname.substr(0, pos);
> > -    this->path      = this->path.substr(pos, this->path.size());
> >
> >     this->request = "GET " + this->path + " HTTP/1.1\r\n" +
> >                     "Host: " + this->hostname + "\r\nConnection:
> > close\r\n\r\n"; @@ -110,7 +109,7 @@ bool
> > HTTPConnection::init            ()
> >     this->parseURL();
> >     this->prepareRequest();
> >
> > -    this->httpSocket = net_ConnectTCP(this->stream,
> > this->hostname.c_str(), 80);
> > +    this->httpSocket = net_ConnectTCP(this->stream,
> > + this->hostname.c_str(), this->port);
> >
> >     if(this->sendData(this->request))
> >         return this->parseHeader();
> > diff --git a/modules/stream_filter/dash/http/HTTPConnection.h
> > b/modules/stream_filter/dash/http/HTTPConnection.h
> > index 7cb97a0..19826bc 100644
> > --- a/modules/stream_filter/dash/http/HTTPConnection.h
> > +++ b/modules/stream_filter/dash/http/HTTPConnection.h
> > @@ -61,6 +61,7 @@ namespace dash
> >                 std::string             url;
> >                 std::string             hostname;
> >                 std::string             path;
> > +                int                     port;
> >                 std::string             request;
> >                 stream_t                *stream;
> >                 Chunk                   *chunk;
> > --
> > 1.7.5.4
> >
> 
> I'm sorry I had in mind that two patches of Chris were still waiting to
> get merged, but I said to myself "the odds for a conflict are very low"
> :-)
> 
> I think my solution is better though, at least it would be nice that
> the case port != 80 be handled.

My solution should not fix that problem ;) it sets the url of the segments relative to the mpd path in the case when the segment url is not valid. I think you can integrate your solution into mine.

BR
Chris




More information about the vlc-devel mailing list