use of com.acgist.snail.context.UpnpContext in project snail by acgist.
the class UpnpMessageHandler method onMessage.
@Override
public void onMessage(String message, InetSocketAddress address) {
final HeaderWrapper headers = HeaderWrapper.newInstance(message);
// 判断是否支持UPNP设置
final boolean support = headers.allHeaders().values().stream().anyMatch(list -> list.stream().anyMatch(value -> StringUtils.startsWith(value, UpnpServer.UPNP_ROOT_DEVICE)));
if (!support) {
LOGGER.warn("UPNP设置失败(不支持的驱动):{}", message);
return;
}
final String location = headers.header(HEADER_LOCATION);
if (StringUtils.isEmpty(location)) {
LOGGER.warn("UPNP设置失败(没有描述文件地址):{}", message);
return;
}
final UpnpContext upnpContext = UpnpContext.getInstance();
try {
upnpContext.load(location);
} catch (NetException e) {
LOGGER.error("UPNP端口映射异常:{}", location, e);
} finally {
// 可用才能释放:可能收到不是UPNP消息
if (upnpContext.available()) {
NatContext.getInstance().unlock();
}
}
}
Aggregations