[vlc-devel] Factor HTTP/HTTPS/RTSP port in core

Rémi Denis-Courmont remi at remlab.net
Mon Sep 19 00:02:11 CEST 2011


   Hello,

On Friday 16 September 2011, Pierre Ynard wrote:
> > That won't work for dual-stack.
> 
> Sure, the code needs to be adapted a bit to make it work.

I don't believe you can get a correct purely boolean answer to the "Is this 
the same HTTP host" question? What if one host is unspecified, and another one 
is "0.0.0.0" ? What if one host is "localhost" and another one is "::1"? They 
_partially_ overlap. Too complicated to implement, and practically impossible 
to understand except for you and me.

> > Even if we ignore this, it would be confusing in any case.
> 
> No, I disagree. I don't understand why you keep throwing around the word
> "confusing" without facts.

HTTP host names are typically used for for virtual hosting (the HTTP Host 
field), not for DNS resolution. Frankly, I'd rather we just bind VLC to both :: 
and 0.0.0.0 always.

Binding to a specific address is tiny corner use case. I do not see a problem 
with requiring two separate VLC processes to bind VLC to different (non-
default) IP addresses. You can probably count the number of world-wide users 
with your fingers.

> > The current approach on the other hand, is quite clear, though
> > different from earlier.
> 
> Don't be a GNOME simplicity nazi; of course it's clear, because it's
> *dumbed down*

You've been following the IRC channel and you might have followed the web 
forum. HTTP streaming output is confusing. Any step toward simplification, that 
does not remove meaningful use cases is a good thing.

We can debate GNOME nazism the day VLC gets under one hundred command line 
switches...

> > And it still fails to address TLS certificate issues.
> 
> For the 4th time, what are the TLS issues? Anyway, the TLS and server
> address issues are not really bound together.

How do you configure the certificates? Currently, VLC can only use one 
certificate and key per HTTPd host. So per-chain / per-interface configuration 
did not work correctly.

Just like the bindind address, I think limitting VLC to one key pair per 
process/instance is good enough, and it eliminates the design bug.

> > >    * decide whether we want unspecified/zero port values that can mean
> > >    
> > >      an OS-assigned port instead of being replaced by the default
> > 
> > This is meant to be used for ephemeral ports, which those are not.
> > I don't know any software that would allocate an ephemeral port by
> > default, except where some kind of rendez-vous mechanism negotiates it
> > (e.g. UPnP, FTP data, RTSP RTP/RTCP pair).
> 
> Okay, but I didn't mean it should be the default; just a feature
> that could be used when you need it. A use-case mentioned earlier is
> automated tests of server functionality.

You can set the port to zero if you really want to. It might even make some 
sense if/when the HTTP interface gets Bonjour support (or any other rendez-
vous mechanism / discovery protocol).

It should work though I have not tested it. Still a non-zero default port is a 
lot clearer as far as preferences are concerned. I am not a huge fan of magic 
values (0, -1 or whatever) in the preferences, though they are sometimes 
unavoidable with the limitations of the subsystem.

> > >    * choose between URI, the de facto standard "<host>:<port>"
> > >    
> > >      representation, separate host and port parameters, something
> > >      else, or a combination thereof
> > 
> > This is NOT a de facto standard for on the server/listening side. In
> > fact, Apache separates the per host path "<Location /foo>" from the
> > host name "<VirtualHost IP:port>".
> 
> So Apache uses the "host:port" representation too? Yes, that's exactly
> my point. Right, that doesn't include the path, it would be separated in
> another parameter.

"host:post" as OPPOSED to "http://host:post/path".

> > >  - convert to this consistent syntax all these parameters throughout
> > >  
> > >    the vlc code base, without breaking compatibility, adding new
> > >    parameters where needed
> > 
> > Consistent across access output destinations?
> 
> No, across the code base. Including access outputs yes, --sout which
> also accepts an MRL in place of a sout block, the rtp sout and its sdp
> parameter, VoD which still uses the path component of --rtsp-host,
> the rc interface which expects <host>:<port>, telnet which accepts
> <host>:<port> *and* a separate --telnet-port, the lua CLI which now
> takes a telnet URL, DVB HTTP whose configuration is gone, and other
> stuff given by grepping the help: --rmtosd-{host,port}, --sout-raop-host

RAOP is a push protocol. DVB HTTP was a hack and is not working at all 
anymore.

It's not my fault if VoD and telnet are ill-designed too. Feel free to fix them 
to two separate configuration options. Most daemons split those two things, 
including Apache with its Port and Bind directives.

> > HTTP is now (mostly) consistent with file. FTP upload is kinda
> > "special". UDP is legacy crap and is special too.
> 
> There are no central --file-host and --file-port options.

HTTP is consistent with file as far as both of them now expect a file path 
relative to the host (implicitly the local file system for file).
 
> No, this doesn't set defaults, implying they can be overriden. This sets
> the one and unique value to be used everywhere.

They could be overriden with object variables, though glue code might be 
missing. I considered using a fixed table of three hosts (HTTP, HTTPS, RTSP) 
instead of a linked-list.

I still have not heard much of a real use case for using different port numbers 
in the same VLC instance for the same protocol. Shorter URL is not a good use 
case in my opinion. I won't mention binding addresses again.

-- 
Rémi Denis-Courmont
http://www.remlab.info



More information about the vlc-devel mailing list