diff --git a/src/ice_transport.cpp b/src/ice_transport.cpp index f768cd92252db320a2a3de70913b436b5efa24c3..ffcbdd581aa72d3fcc0c40766946a3cb76d856b5 100644 --- a/src/ice_transport.cpp +++ b/src/ice_transport.cpp @@ -504,18 +504,33 @@ IceTransport::_isFailed() const IpAddr IceTransport::getLocalAddress(unsigned comp_id) const { + // Return the local IP of negotiated connection pair + if (isRunning()) { + if (auto sess = pj_ice_strans_get_valid_pair(icest_.get(), comp_id+1)) { + return sess->lcand->addr; + } + RING_WARN("Non-negotiated transport: try to return default local IP"); + } + + // Return the default IP (could be not nominated and valid after negotiation) if (isInitialized()) return cand_[comp_id].addr; + + RING_ERR("bad call: non-initialized transport"); return {}; } IpAddr IceTransport::getRemoteAddress(unsigned comp_id) const { - if (isInitialized()) { + // Return the remote IP of negotiated connection pair + if (isRunning()) { if (auto sess = pj_ice_strans_get_valid_pair(icest_.get(), comp_id+1)) return sess->rcand->addr; + RING_ERR("runtime error: negotiated transport without valid pair"); } + + RING_ERR("bad call: non-negotiated transport"); return {}; }