Search in sources :

Example 1 with UpnpContext

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();
        }
    }
}
Also used : NatContext(com.acgist.snail.context.NatContext) StringMessageCodec(com.acgist.snail.net.codec.StringMessageCodec) HeaderWrapper(com.acgist.snail.pojo.wrapper.HeaderWrapper) NetException(com.acgist.snail.context.exception.NetException) LoggerFactory(com.acgist.snail.logger.LoggerFactory) UpnpContext(com.acgist.snail.context.UpnpContext) Logger(com.acgist.snail.logger.Logger) UdpMessageHandler(com.acgist.snail.net.UdpMessageHandler) IMessageDecoder(com.acgist.snail.net.codec.IMessageDecoder) StringUtils(com.acgist.snail.utils.StringUtils) InetSocketAddress(java.net.InetSocketAddress) NetException(com.acgist.snail.context.exception.NetException) HeaderWrapper(com.acgist.snail.pojo.wrapper.HeaderWrapper) UpnpContext(com.acgist.snail.context.UpnpContext)

Aggregations

NatContext (com.acgist.snail.context.NatContext)1 UpnpContext (com.acgist.snail.context.UpnpContext)1 NetException (com.acgist.snail.context.exception.NetException)1 Logger (com.acgist.snail.logger.Logger)1 LoggerFactory (com.acgist.snail.logger.LoggerFactory)1 UdpMessageHandler (com.acgist.snail.net.UdpMessageHandler)1 IMessageDecoder (com.acgist.snail.net.codec.IMessageDecoder)1 StringMessageCodec (com.acgist.snail.net.codec.StringMessageCodec)1 HeaderWrapper (com.acgist.snail.pojo.wrapper.HeaderWrapper)1 StringUtils (com.acgist.snail.utils.StringUtils)1 InetSocketAddress (java.net.InetSocketAddress)1