ensure that jingle ft transport is terminated

This commit is contained in:
Daniel Gultsch 2024-03-12 19:01:39 +01:00
parent 0f50f71176
commit a2c67a6e38
No known key found for this signature in database
GPG key ID: F43D18AD2A0982C2

View file

@ -253,6 +253,7 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
id.account.getJid().asBareJid() + ": improperly formatted contents",
Throwables.getRootCause(e));
respondOk(jinglePacket);
terminateTransport();
sendSessionTerminate(Reason.of(e), e.getMessage());
return;
}
@ -534,6 +535,7 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
if (isTerminated()) {
return;
}
terminateTransport();
final Throwable rootCause = Throwables.getRootCause(throwable);
Log.d(Config.LOGTAG, "unable to send session accept", rootCause);
sendSessionTerminate(Reason.ofThrowable(rootCause), rootCause.getMessage());
@ -603,6 +605,7 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
id.account.getJid().asBareJid() + ": improperly formatted contents",
Throwables.getRootCause(e));
respondOk(jinglePacket);
terminateTransport();
sendSessionTerminate(Reason.of(e), e.getMessage());
return;
}
@ -646,6 +649,7 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
id.account.getJid().asBareJid() + ": improperly formatted contents",
Throwables.getRootCause(e));
respondOk(jinglePacket);
terminateTransport();
sendSessionTerminate(Reason.of(e), e.getMessage());
return;
}
@ -708,6 +712,7 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
} else if (transportInfo
instanceof SocksByteStreamsTransportInfo.CandidateUsed candidateUsed) {
if (!socksBytestreamsTransport.setCandidateUsed(candidateUsed.cid)) {
terminateTransport();
sendSessionTerminate(
Reason.FAILED_TRANSPORT,
String.format(
@ -734,6 +739,7 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
id.account.getJid().asBareJid() + ": improperly formatted contents",
Throwables.getRootCause(e));
respondOk(jinglePacket);
terminateTransport();
sendSessionTerminate(Reason.of(e), e.getMessage());
return;
}
@ -843,8 +849,9 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
if (transport == null) {
return;
}
// TODO consider setting transport callback to null. requires transport to handle null callback
//transport.setTransportCallback(null);
// TODO consider setting transport callback to null. requires transport to handle null
// callback
// transport.setTransportCallback(null);
transport.terminate();
this.transport = null;
}
@ -875,8 +882,12 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
}
@Override
public void onFailure(@NonNull Throwable throwable) {
onFileTransmissionFailed(throwable);
public void onFailure(@NonNull final Throwable throwable) {
// The state transition in here should be synchronized to not race with the
// state transition in receiveSessionTerminate
synchronized (JingleFileTransferConnection.this) {
onFileTransmissionFailed(throwable);
}
}
},
MoreExecutors.directExecutor());