/* * SSDPDevice * Connect SDK * * Copyright (c) 2014 LG Electronics. * Created by Hyun Kook Khang on 6 Jan 2015 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.connectsdk.discovery.provider.ssdp; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Scanner; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; public class SSDPDevice { /* Required. UPnP device type. */ public String deviceType; /* Required. Short description for end user. */ public String friendlyName; /* Required. Manufacturer's name. */ public String manufacturer; // /* Optional. Web site for manufacturer. */ // public String manufacturerURL; /* Recommended. Long description for end user. */ public String modelDescription; /* Required. Model name. */ public String modelName; /* Recommended. Model number. */ public String modelNumber; // /* Optional. Web site for model. */ // public String modelURL; // /* Recommended. Serial number. */ // public String serialNumber; /* Required. Unique Device Name. */ public String UDN; // /* Optional. Universal Product Code. */ // public String UPC; /* Required. */ // List<Icon> iconList = new ArrayList<Icon>(); public String locationXML; /* Optional. */ public List<Service> serviceList = new ArrayList<Service>(); public String ST; public String applicationURL; public String serviceURI; public String baseURL; public String ipAddress; public int port; public String UUID; public Map<String, List<String>> headers; public SSDPDevice(String url, String ST) throws IOException, ParserConfigurationException, SAXException { this(new URL(url), ST); } public SSDPDevice(URL urlObject, String ST) throws IOException, ParserConfigurationException, SAXException { if (urlObject.getPort() == -1) { baseURL = String.format("%s://%s", urlObject.getProtocol(), urlObject.getHost()); } else { baseURL = String.format("%s://%s:%d", urlObject.getProtocol(), urlObject.getHost(), urlObject.getPort()); } ipAddress = urlObject.getHost(); port = urlObject.getPort(); UUID = null; serviceURI = String.format("%s://%s", urlObject.getProtocol(), urlObject.getHost()); parse(urlObject); } public void parse(URL url) throws IOException, ParserConfigurationException, SAXException { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser; SSDPDeviceDescriptionParser parser = new SSDPDeviceDescriptionParser(this); URLConnection urlConnection = url.openConnection(); applicationURL = urlConnection.getHeaderField("Application-URL"); if (applicationURL != null && !applicationURL.substring(applicationURL.length() - 1).equals("/")) { applicationURL = applicationURL.concat("/"); } InputStream in = new BufferedInputStream(urlConnection.getInputStream()); Scanner s = null; try { s = new Scanner(in).useDelimiter("\\A"); locationXML = s.hasNext() ? s.next() : ""; saxParser = factory.newSAXParser(); saxParser.parse(new ByteArrayInputStream(locationXML.getBytes()), parser); } finally { in.close(); if (s != null) s.close(); } headers = urlConnection.getHeaderFields(); } @Override public String toString() { return friendlyName; } }