--[[ Parse list of available streams on Anevia servers. The URI http://ipaddress/ws/Mgmt/* describes a list of available streams on the server. Copyright © 2009 M2X BV Authors: Jean-Paul Saman This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. --]] -- Probe function. function probe() return vlc.access == "http" and string.match( vlc.path, "/ws/Mgmt/" ) end -- Fake readline. Read <>(..*) whole, otherwise pretend a newline. -- In lua, indices are from 1, not 0, so no +1 needed. function readline() local n = string.find(vlc.peek(998),"><") -- A random large number return n and vlc.read(n) or vlc.readline() end -- Parse function. function parse() local p = {} local line _,_,server = string.find( vlc.path, "(.*)/ws/Mgmt/" ) while true do line = readline() if not line then break end if string.match( line, "" ) then while true do line = readline() if not line then break end if string.match( line, "" ) then _,_,name = string.find( line, "name=\"name\">(.*)" ) end if string.match( line, "" ) then while true do line = readline() if not line then break end if string.match( line, "" ) then _,_,protocol = string.find( line, "" ) while true do line = readline() if not line then break end if string.match( line, "(.*)" ) then _,_,address = string.find( line, "(.*)" ) end if string.match( line, "(.*)" ) then _,_,port = string.find( line, "(.*)" ) end -- end of struct tag if string.match( line, "" ) then media = tostring(protocol) .. "://@" .. tostring(address) .. ":" .. tostring(port) table.insert( p, { path = media; name = name, url = media } ) break end end end if not line then break end -- end of choice tag if string.match( line, "" ) then break end end end end end end return p end