/*
* Copyright (C) 2010 Teleal GmbH, Switzerland
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.teleal.cling;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.teleal.cling.controlpoint.ActionCallback;
import org.teleal.cling.model.action.ActionArgumentValue;
import org.teleal.cling.model.action.ActionInvocation;
import org.teleal.cling.model.message.header.STAllHeader;
import org.teleal.cling.model.meta.Action;
import org.teleal.cling.model.meta.LocalDevice;
import org.teleal.cling.model.meta.RemoteDevice;
import org.teleal.cling.model.meta.Service;
import org.teleal.cling.model.types.UDAServiceId;
import org.teleal.cling.registry.Registry;
import org.teleal.cling.registry.RegistryListener;
/**
* Runs a simple UPnP discovery procedure.
* <p>
* Call this class from the command-line to quickly evaluate Cling, it will
* search for all UPnP devices on your LAN and print out any discovered, added,
* and removed devices while it is running.
* </p>
*
* @author Christian Bauer
*/
public class MyMain {
public static void main(String[] args) throws Exception {
System.out.println("Starting Cling...");
UpnpService upnpService = new UpnpServiceImpl(
new RegistryListener() {
public void remoteDeviceDiscoveryStarted(Registry registry, RemoteDevice device) {
System.out.println("Discovery started: " + device.getDisplayString());
}
public void remoteDeviceDiscoveryFailed(Registry registry, RemoteDevice device, Exception ex) {
System.out.println("Discovery failed: " + device.getDisplayString() + " => " + ex);
}
public void remoteDeviceAdded(Registry registry, RemoteDevice device) {
System.out.println("Remote device added: " + device.getDisplayString());
}
public void remoteDeviceUpdated(Registry registry, RemoteDevice device) {
System.out.println("Remote device updated: " + device.getDisplayString());
}
public void remoteDeviceRemoved(Registry registry, RemoteDevice device) {
System.out.println("Remote device removed: " + device.getDisplayString());
}
public void localDeviceAdded(Registry registry, LocalDevice device) {
System.out.println("Local device added: " + device.getDisplayString());
}
public void localDeviceRemoved(Registry registry, LocalDevice device) {
System.out.println("Local device removed: " + device.getDisplayString());
}
public void beforeShutdown(Registry registry) {
System.out.println("Before shutdown, the registry has devices: " + registry.getDevices().size());
}
public void afterShutdown() {
System.out.println("Shutdown of registry complete!");
}
}
);
upnpService.getControlPoint().search(new STAllHeader()); // Search for all devices and services
Thread.sleep(10000); //暂停5秒 查找设备
Collection<RemoteDevice> dss = upnpService.getRegistry().getRemoteDevices();
MyMain mian = new MyMain();
for(RemoteDevice device:dss){
Map<String,Object> inputs = new HashMap<String,Object>();
inputs.put("ObjectID","200/516/517");
inputs.put("BrowseFlag","BrowseDirectChildren");
inputs.put("Filter","*");
inputs.put("StartingIndex","0");
inputs.put("RequestedCount","0");
inputs.put("SortCriteria","");
Map outputs = new HashMap();
outputs = mian.action(upnpService, device, "ContentDirectory", "Browse", inputs);
Set<String> keys = outputs.keySet();
for(String key:keys){
System.out.println("key:"+key+" values:"+outputs.get(key));
}
/*Service service = device.findService(new UDAServiceId("ContentDirectory"));
Action getStatusAction = service.getAction("Browse");
ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction);*/
/* //取第一个目录数据
getStatusInvocation.setInput("ObjectID", "200/516");
getStatusInvocation.setInput("BrowseFlag", "BrowseDirectChildren");
getStatusInvocation.setInput("Filter", "*");
getStatusInvocation.setInput("StartingIndex", "0");
getStatusInvocation.setInput("RequestedCount", "0");
getStatusInvocation.setInput("SortCriteria", "+dc:creator"); //按照 创建时间排序
*/ /* //取根目录数据
getStatusInvocation.setInput("ObjectID", "0");
getStatusInvocation.setInput("BrowseFlag", "BrowseDirectChildren");
getStatusInvocation.setInput("Filter", "*");
getStatusInvocation.setInput("StartingIndex", "0");
getStatusInvocation.setInput("RequestedCount", "3");
getStatusInvocation.setInput("SortCriteria", "");*/
//根目录元数据
/*getStatusInvocation.setInput("ObjectID", "0");
//getStatusInvocation.setInput("BrowseFlag", "BrowseDirectChildren");
getStatusInvocation.setInput("BrowseFlag", "BrowseMetadata");
getStatusInvocation.setInput("Filter", "*");
getStatusInvocation.setInput("StartingIndex", "0");
getStatusInvocation.setInput("RequestedCount", "0");
getStatusInvocation.setInput("SortCriteria", "");*/
//同步action 但是也没有发现怎么同步了 ,之前需要sleep
/*new ActionCallback.Default(getStatusInvocation, upnpService.getControlPoint()).run();
Map map = getStatusInvocation.getOutputMap();
ActionArgumentValue ss = getStatusInvocation.getOutput("Result");
System.out.println(ss.getValue());*/
//异步action
/* Service service = device.findService(new UDAServiceId("ContentDirectory"));
Action getStatusAction = service.getAction("GetSearchCapabilities");
ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction);
//getStatusInvocation.setInput("SourceURI", "");
//getStatusInvocation.setInput("DestinationURI", "");
ActionCallback getStatusCallback = new ActionCallback(getStatusInvocation) {
public void success(ActionInvocation invocation) {
ActionArgumentValue status = invocation.getOutput("SearchCaps");
System.out.println(status.getValue());
//assertEquals((Boolean) status.getValue(), Boolean.valueOf(false));
}
@Override
public void failure(ActionInvocation invocation, UpnpResponse res) {
System.err.println(
createDefaultFailureMessage(invocation, res)
);
}
@Override
public void failure(ActionInvocation invocation,
UpnpResponse operation, String defaultMsg) {
System.err.println(
createDefaultFailureMessage(invocation, operation)
);
}
};
upnpService.getControlPoint().execute(getStatusCallback);*/
}
System.out.println("Stopping Cling...");
upnpService.shutdown();
}
public Map action(UpnpService upnpService, RemoteDevice device, String serviceId, String actionId, Map inputs){
Map retMap = null;
Service service = device.findService(new UDAServiceId(serviceId));
Action getStatusAction = service.getAction(actionId);
ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction);
Set<String> keys = inputs.keySet();
for(String key:keys){
getStatusInvocation.setInput(key, inputs.get(key));
}
new ActionCallback.Default(getStatusInvocation, upnpService.getControlPoint()).run();
retMap = getStatusInvocation.getOutputMap();
System.out.println(retMap.size());
return retMap;
}
}
附件为文件管理开发文档
分享到:
相关推荐
1. 初始化:初始化UPNP控制点,查找并连接到网络中的UPNP设备。 2. 添加映射:接受内外端口号和协议类型(TCP或UDP),向指定的UPNP设备发送添加端口映射的请求。 3. 删除映射:根据内外端口号和协议类型,从UPNP...
1. **初始化UPNP库**:在应用启动时,初始化UPNP库,设置监听端口和超时时间。 2. **设备搜索**:使用`M-SEARCH` SSDP请求来搜索网络中的UPNP设备,通常会定期进行。 3. **解析响应**:收到设备响应后,解析XML...
在开始开发UPnP控制点之前,也需要完成一系列的初始化工作。 ##### 3.1.1、SDK初始化 初始化SDK的过程与开发设备类似,包括加载必要的库和设置环境变量等步骤。 ```c #include <upnp/upnp.h> int main() { ...
4. **BinaryLight.dpr**:项目源代码文件,这是Delphi应用程序的入口点,包含了程序的初始化和结束逻辑。 5. **BinaryLight.dsk**:可能是一个项目工作区文件,保存了关于项目窗口位置、布局和打开的文件的信息。 ...
这些代码可能包括初始化UPnP库,创建设备搜索器,解析设备响应,以及与特定服务交互的函数调用。 在实际开发中,你可能还需要考虑性能优化、用户界面设计、多设备兼容性等问题。总的来说,Android平台上实现UPnP ...
1. **初始化UPnP设备**:首先,我们需要查找网络上可用的UPnP设备。这可以通过调用`UPnPDeviceFinder.FindByTypeAsync("urn:schemas-upnp-org:service:WANIPConnection:1")`来实现。 2. **选择设备**:从发现的设备...
根据需要初始化设备的其他组件,比如加载服务描述文件、设置事件处理器等。 **2.1.5 发布设备公告(Advertising the Device)** 设备启动后,需要通过SSDP协议向网络广播其存在。SDK提供了一个简单的API `...
在编写UPnP设备之前,首先需要初始化SDK。这通常涉及到加载必要的库,设置配置参数,以及注册SDK的初始化回调函数。 ##### 2.1.2 设置根目录 设置根目录是必须的步骤,因为SDK需要知道在哪里查找设备描述文档和...
在这个`UpnpTest`类中,我们创建了一个`Start`方法来初始化UPNP库,搜索网络中的设备。`Stop`方法则用于清理资源并停止搜索。`RegisterEventHandlers`方法应该包含用于处理设备发现事件的代码,这可能涉及到订阅...
- 使用 SDK 创建设备实例:加载 XML 文件,通过 SDK 提供的函数初始化设备和服务。 - 控制点实现:编写控制点应用程序,扫描网络,发现并控制设备。 - 事件处理:订阅设备的事件,以便在状态变化时得到通知。 6....
你可能需要查看源码,了解如何初始化UPnP设备和服务,如何处理控制点的请求,以及如何发送和接收事件。 此外,对于DLNA的扩展,你需要关注多媒体内容的元数据表示、内容格式转换、流媒体传输等方面。例如,你可能...
- 文件中提到了设备类的概述、描述、初始化、通知、嵌入式设备、服务、控制、事件和用户数据等方面,这些是UPnP™设备开发中需要关注的关键部分。 5. 控制点开发: - 控制点是指能够发现并控制网络上的UPnP™设备...
1. 安装和初始化SDK,包括控制点应用相关的初始化。 2. 注册控制点。 3. 搜索感兴趣的服务。 4. 检索服务的详细描述。 5. 监视事件和调用动作。 6. 在不需要时关闭控制点。 为了实现多屏互动和DLNA(Digital Living...
然后,编写代码来初始化UPnP上下文,启动设备搜索,监听设备和服务的变化。例如,可以创建一个`UpnpService`实例,监听`UpnpServiceListener`事件来处理发现的设备。 为了进一步实现DLNA功能,你需要理解DLNA的相关...
1. **初始化UPNP库**:首先,程序需要加载UPNP库并初始化相关结构。这可能涉及到调用UPNPAPI提供的函数,如`IGDDiscover`来发现网络上的通用即插即用设备,如路由器。 2. **获取路由器控制URL**:找到UPNP设备后,...
1. 安装和初始化:初始化SDK和相关控制点应用。 2. 搜索感兴趣的服务:通过控制点搜索网络上的服务。 3. 检索描述:获取感兴趣设备或服务的详细描述。 4. 监视事件:注册事件通知,以便获得设备状态的变化。 5. 调用...
- `main.cpp`:程序入口,可能包含了主循环和控制点的初始化。 - `UPnPClass.cpp/hpp`:自定义的UPnP类实现,封装了UPnP操作。 - `SSDPPacket.cpp/hpp`:用于解析和构建SSDP消息的类。 - `SOAPRequest.cpp/hpp`...
在初始化和终止设备的流程中,`UpnpInit()`是关键的API函数,用于初始化UPnP SDK。在Linux环境中,如果用户没有指定IP地址,SDK会在初始化时自动从操作系统获取IP。这个过程包括设备的发现和广告消息的发送,以便...
1. 初始化:查找并连接到UPnP网关。 2. 获取路由器信息:包括IP地址和网关信息。 3. 添加端口映射:指定内外端口、协议类型(TCP或UDP)、映射名称、持续时间等。 4. 删除端口映射:根据映射的公共端口移除映射规则...