#!/usr/bin/perl
use strict;
use warnings;

#use Net::UPnP::ControlPoint;
use LWP::Simple;
use XML::Simple;
use HTML::HeadParser;
use Device::Conf "EscapeList";

my $obj = Net::UPnP::ControlPoint->new();
my %devs = ();

my @dev_list = $obj->search(st =>'upnp:rootdevice', mx => 3);
foreach my $dev (@dev_list) {
    my ($addr,$port) = $dev->getlocation()=~m/http:\/\/([0-9a-z.]+)[:]*([0-9]*)\/.*/i;
    next unless $addr;
    next if $devs{$addr};
    next if $dev->getmanufacturer !~ /vivotek/i;
    $port = 80 unless $port;
    
    my $descr = $dev->getdescription();
    next unless $descr;
    my $xml = eval { XMLin($descr) };
    next if $@;
    my $presURL = $xml->{device}{presentationURL};
    $devs{$addr}{HTTP_PORT} = $2 if $presURL=~m|http://(.+?):(\d+)|;
    $devs{$addr}{NAME} = $dev->getfriendlyname();
    $devs{$addr}{DEVIP} = $addr;
}

print EscapeList(%$_),"\n" foreach values %devs;
