mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-12-26 22:27:58 +01:00
[SMACK-212] Added capability to try another way to establish the session. If just one side has Relay Server.
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@7987 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
parent
60e0222c14
commit
b47038b82f
2 changed files with 36 additions and 1 deletions
|
@ -367,7 +367,7 @@ public class AudioChannel {
|
|||
catch (InvalidSessionAddressException e) {
|
||||
// In case the local address is not allowed to read, we user another local address
|
||||
SessionAddress sessAddr = new SessionAddress();
|
||||
localAddr = new SessionAddress(InetAddress.getByName(sessAddr.getDataHostAddress()),
|
||||
localAddr = new SessionAddress(sessAddr.getDataAddress(),
|
||||
localPort);
|
||||
rtpMgrs[i].initialize(localAddr);
|
||||
}
|
||||
|
|
|
@ -321,16 +321,51 @@ public abstract class TransportNegotiator extends JingleNegotiator {
|
|||
TransportCandidate bestRemote = getBestRemoteCandidate();
|
||||
|
||||
if (bestRemote == null) {
|
||||
boolean foundRemoteRelay = false;
|
||||
for (TransportCandidate candidate : remoteCandidates) {
|
||||
if (candidate instanceof ICECandidate) {
|
||||
ICECandidate iceCandidate = (ICECandidate) candidate;
|
||||
if (iceCandidate.getType().equals("relay")) {
|
||||
//TODO Check if the relay is reacheable
|
||||
addValidRemoteCandidate(iceCandidate);
|
||||
foundRemoteRelay = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If not found, check if we offered a relay. If yes, we should accept any remote candidate.
|
||||
// We should accept the Public One if we received it, otherwise, accepts any.
|
||||
if (!foundRemoteRelay) {
|
||||
boolean foundLocalRelay = false;
|
||||
for (TransportCandidate candidate : offeredCandidates) {
|
||||
if (candidate instanceof ICECandidate) {
|
||||
ICECandidate iceCandidate = (ICECandidate) candidate;
|
||||
if (iceCandidate.getType().equals("relay")) {
|
||||
foundLocalRelay = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (foundLocalRelay) {
|
||||
boolean foundRemotePublic = false;
|
||||
for (TransportCandidate candidate : remoteCandidates) {
|
||||
if (candidate instanceof ICECandidate) {
|
||||
ICECandidate iceCandidate = (ICECandidate) candidate;
|
||||
if (iceCandidate.getType().equals("srflx")) {
|
||||
addValidRemoteCandidate(iceCandidate);
|
||||
foundRemotePublic = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!foundRemotePublic) {
|
||||
for (TransportCandidate candidate : remoteCandidates) {
|
||||
if (candidate instanceof ICECandidate) {
|
||||
ICECandidate iceCandidate = (ICECandidate) candidate;
|
||||
addValidRemoteCandidate(iceCandidate);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
|
|
Loading…
Reference in a new issue