Refactor to use channel-based goupnp