diff options
| author | Alex Clayton <alex.clayton@isode.com> | 2016-03-11 17:05:43 (GMT) |
|---|---|---|
| committer | Alex Clayton <alex.clayton@isode.com> | 2016-03-14 15:33:25 (GMT) |
| commit | de2704f8dfd9b807b37e72e61f2042a5e71227c5 (patch) | |
| tree | 8694b4ea245a6f7fa7813f5ac8b3e045520378c6 | |
| parent | a0a0b9fd74f6d99da1c756b36aad6cc0122f011b (diff) | |
| download | stroke-de2704f8dfd9b807b37e72e61f2042a5e71227c5.zip stroke-de2704f8dfd9b807b37e72e61f2042a5e71227c5.tar.bz2 | |
Add FileTransfer.getState method
As per swiften patch of same name
(cb62de17d1e17fd3049a6bc8155a100574a42a85) add getState() method to
FileTransfer interface.
Test-information: Unit tests pass ok.
Change-Id: I27db4e60c3a8df251b813c90fc4a2e029762082d
3 files changed, 72 insertions, 59 deletions
diff --git a/src/com/isode/stroke/filetransfer/FileTransfer.java b/src/com/isode/stroke/filetransfer/FileTransfer.java index 8572d93..e12b07d 100644 --- a/src/com/isode/stroke/filetransfer/FileTransfer.java +++ b/src/com/isode/stroke/filetransfer/FileTransfer.java @@ -1,13 +1,13 @@ /* * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ /* - * Copyright (c) 2013-2015 Isode Limited. + * Copyright (c) 2013-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ /* * Copyright (c) 2015 Tarun Gupta. * Licensed under the simplified BSD license. @@ -61,7 +61,10 @@ public interface FileTransfer { public String getFileName(); public long getFileSizeInBytes(); public void setFileInfo(final String name, long size); + + public State getState(); + } diff --git a/src/com/isode/stroke/filetransfer/IncomingJingleFileTransfer.java b/src/com/isode/stroke/filetransfer/IncomingJingleFileTransfer.java index 92b185d..f7f9c70 100644 --- a/src/com/isode/stroke/filetransfer/IncomingJingleFileTransfer.java +++ b/src/com/isode/stroke/filetransfer/IncomingJingleFileTransfer.java @@ -1,8 +1,8 @@ /* - * Copyright (c) 2010-2015 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ /* * Copyright (c) 2015 Tarun Gupta. * Licensed under the simplified BSD license. @@ -66,13 +66,13 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In this.filename = name; this.fileSizeInBytes = size; } private JingleContentPayload initialContent; private CryptoProvider crypto; - private State state; + private State internalState; private JingleFileTransferDescription description; private WriteBytestream stream; private long receivedBytes; private IncrementalBytestreamHashCalculator hashCalculator; private Timer waitOnHashTimer; private Map<String, ByteArray> hashes = new HashMap<String, ByteArray>(); @@ -90,13 +90,13 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In FileTransferTransporterFactory transporterFactory, TimerFactory timerFactory, CryptoProvider crypto) { super(session, toJID, transporterFactory); this.initialContent = content; this.crypto = crypto; - this.state = State.Initial; + this.internalState = State.Initial; this. receivedBytes = 0; this.hashCalculator = null; this.description = initialContent.getDescription(new JingleFileTransferDescription()); assert(description != null); JingleFileTransferFileInfo fileInfo = description.getFileInfo(); setFileInfo(fileInfo.getName(), fileInfo.getSize()); @@ -122,13 +122,13 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In /** * IncomingFileTransferMethod. */ @Override public void accept(WriteBytestream stream, final FileTransferOptions options) { logger_.fine("\n"); - if (!State.Initial.equals(state)) { logger_.warning("Incorrect state \n"); return; } + if (!State.Initial.equals(internalState)) { logger_.warning("Incorrect state \n"); return; } assert(this.stream == null); this.stream = stream; this.options = options; assert(hashCalculator == null); @@ -144,13 +144,13 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In if (initialContent.getTransport(new JingleS5BTransportPayload()) != null) { JingleS5BTransportPayload s5bTransport = initialContent.getTransport(new JingleS5BTransportPayload()); logger_.fine("Got S5B transport as initial payload.\n"); setTransporter(transporterFactory.createResponderTransporter(getInitiator(), getResponder(), s5bTransport.getSessionID(), options)); transporter.addRemoteCandidates(s5bTransport.getCandidates(), s5bTransport.getDstAddr()); - setState(State.GeneratingInitialLocalCandidates); + setInternalState(State.GeneratingInitialLocalCandidates); transporter.startGeneratingLocalCandidates(); } else if(initialContent.getTransport(new JingleIBBTransportPayload()) != null) { JingleIBBTransportPayload ibbTransport = initialContent.getTransport(new JingleIBBTransportPayload()); logger_.fine("Got IBB transport as initial payload.\n"); setTransporter(transporterFactory.createResponderTransporter(getInitiator(), getResponder(), ibbTransport.getSessionID(), options)); @@ -184,31 +184,31 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In /** * JingleFileTransferMethod. */ @Override public void cancel() { logger_.fine("\n"); - terminate(State.Initial.equals(state) ? JinglePayload.Reason.Type.Decline : JinglePayload.Reason.Type.Cancel); + terminate(State.Initial.equals(internalState) ? JinglePayload.Reason.Type.Decline : JinglePayload.Reason.Type.Cancel); } protected void startTransferViaRemoteCandidate() { logger_.fine("\n"); if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(ourCandidateChoice.type)) { - setState(State.WaitingForPeerProxyActivate); + setInternalState(State.WaitingForPeerProxyActivate); } else { startTransferring(createRemoteCandidateSession()); } } protected void startTransferViaLocalCandidate() { logger_.fine("\n"); if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(theirCandidateChoice.type)) { - setState(State.WaitingForLocalProxyActivate); + setInternalState(State.WaitingForLocalProxyActivate); transporter.startActivatingProxy(theirCandidateChoice.jid); } else { startTransferring(createLocalCandidateSession()); } } @@ -221,17 +221,17 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In logger_.warning("Hash verification failed\n"); terminate(JinglePayload.Reason.Type.MediaError); } } protected void stopAll() { - if (!State.Initial.equals(state)) { + if (!State.Initial.equals(internalState)) { writeStreamDataReceivedConnection.disconnect(); hashCalculator = null; } - switch (state) { + switch (internalState) { case Initial: break; case GeneratingInitialLocalCandidates: transporter.stopGeneratingLocalCandidates(); break; case TryingCandidates: transporter.stopTryingRemoteCandidates(); break; case WaitingForFallbackOrTerminate: break; case WaitingForPeerProxyActivate: break; case WaitingForLocalProxyActivate: transporter.stopActivatingProxy(); break; @@ -241,26 +241,31 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In transferFinishedConnection.disconnect(); transportSession.stop(); transportSession = null; break; case Finished: logger_.warning("Already finished\n"); break; } - if (!State.Initial.equals(state)) { + if (!State.Initial.equals(internalState)) { removeTransporter(); } } - protected void setState(State state) { + protected void setInternalState(State state) { logger_.fine(state + "\n"); - this.state = state; + this.internalState = state; onStateChanged.emit(new FileTransfer.State(getExternalState(state))); } + + @Override + public com.isode.stroke.filetransfer.FileTransfer.State getState() { + return new FileTransfer.State(getExternalState(internalState)); + } protected void setFinishedState(FileTransfer.State.Type type, final FileTransferError error) { logger_.fine("\n"); - this.state = State.Finished; + this.internalState = State.Finished; onStateChanged.emit(new FileTransfer.State(type)); onFinished.emit(error); } protected static FileTransfer.State.Type getExternalState(State state) { switch (state) { @@ -280,39 +285,39 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In protected boolean hasPriorityOnCandidateTie() { return false; } protected void fallback() { - setState(State.WaitingForFallbackOrTerminate); + setInternalState(State.WaitingForFallbackOrTerminate); } protected void startTransferring(TransportSession transportSession) { logger_.fine("\n"); this.transportSession = transportSession; transferFinishedConnection = transportSession.onFinished.connect(new Slot1<FileTransferError>() { @Override public void call(FileTransferError e) { handleTransferFinished(e); } }); - setState(State.Transferring); + setInternalState(State.Transferring); transportSession.start(); } protected boolean isWaitingForPeerProxyActivate() { - return State.WaitingForPeerProxyActivate.equals(state); + return State.WaitingForPeerProxyActivate.equals(internalState); } protected boolean isWaitingForLocalProxyActivate() { - return State.WaitingForLocalProxyActivate.equals(state); + return State.WaitingForLocalProxyActivate.equals(internalState); } protected boolean isTryingCandidates() { - return State.TryingCandidates.equals(state); + return State.TryingCandidates.equals(internalState); } protected TransportSession createLocalCandidateSession() { return transporter.createLocalCandidateSession(stream, theirCandidateChoice); } @@ -320,13 +325,13 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In return transporter.createRemoteCandidateSession(stream, ourCandidateChoice); } protected void terminate(JinglePayload.Reason.Type reason) { logger_.fine(reason + "\n"); - if (!State.Finished.equals(state)) { + if (!State.Finished.equals(internalState)) { session.sendTerminate(reason); } stopAll(); setFinishedState(getExternalFinishedState(reason), getFileTransferError(reason)); } @@ -341,15 +346,15 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In WaitingForHash, Finished }; public void handleSessionTerminateReceived(JinglePayload.Reason reason) { logger_.fine("\n"); - if (State.Finished.equals(state)) { logger_.warning("Incorrect state\n"); return; } + if (State.Finished.equals(internalState)) { logger_.warning("Incorrect state\n"); return; } - if (State.Finished.equals(state)) { + if (State.Finished.equals(internalState)) { logger_.fine("Already terminated\n"); return; } stopAll(); if (reason != null && JinglePayload.Reason.Type.Cancel.equals(reason.type)) { @@ -373,24 +378,24 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In if (transferHash.getFileInfo().getHashes().containsKey("sha-1")) { hashes.put("sha-1", transferHash.getFileInfo().getHash("sha-1")); } if (transferHash.getFileInfo().getHashes().containsKey("md5")) { hashes.put("md5", transferHash.getFileInfo().getHash("md5")); } - if (State.WaitingForHash.equals(state)) { + if (State.WaitingForHash.equals(internalState)) { checkHashAndTerminate(); } } else { logger_.fine("Ignoring unknown session info\n"); } } public void handleTransportReplaceReceived(final JingleContentID content, JingleTransportPayload transport) { logger_.fine("\n"); - if (!State.WaitingForFallbackOrTerminate.equals(state)) { + if (!State.WaitingForFallbackOrTerminate.equals(internalState)) { logger_.warning("Incorrect state\n"); return; } if (options.isInBandAllowed() && transport instanceof JingleIBBTransportPayload) { JingleIBBTransportPayload ibbTransport = (JingleIBBTransportPayload)transport; @@ -404,26 +409,26 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In session.sendTransportReject(content, transport); } } protected void handleLocalTransportCandidatesGenerated(final String s5bSessionID, final Vector<JingleS5BTransportPayload.Candidate> candidates, final String dstAddr) { logger_.fine("\n"); - if (!State.GeneratingInitialLocalCandidates.equals(state)) { logger_.warning("Incorrect state\n"); return; } + if (!State.GeneratingInitialLocalCandidates.equals(internalState)) { logger_.warning("Incorrect state\n"); return; } fillCandidateMap(localCandidates, candidates); JingleS5BTransportPayload transport = new JingleS5BTransportPayload(); transport.setSessionID(s5bSessionID); transport.setMode(JingleS5BTransportPayload.Mode.TCPMode); transport.setDstAddr(dstAddr); for(JingleS5BTransportPayload.Candidate candidate : candidates) { transport.addCandidate(candidate); } session.sendAccept(getContentID(), initialContent.getDescriptions().get(0), transport); - setState(State.TryingCandidates); + setInternalState(State.TryingCandidates); transporter.startTryingRemoteCandidates(); } private void handleWriteStreamDataReceived(final ByteArray data) { hashCalculator.feedData(data); receivedBytes += data.getSize(); @@ -450,13 +455,13 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In for(final Map.Entry<String, ByteArray> hashElement : hashes.entrySet()) { hashInfoAvailable |= !(hashElement.getValue().isEmpty()); } if (!hashInfoAvailable) { logger_.fine("No hash information yet. Waiting a while on hash info.\n"); - setState(State.WaitingForHash); + setInternalState(State.WaitingForHash); waitOnHashTimer.start(); } else { checkHashAndTerminate(); } } @@ -489,11 +494,11 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In logger_.fine("\n"); waitOnHashTimer.stop(); terminate(JinglePayload.Reason.Type.Success); } private void handleTransferFinished(FileTransferError error) { - if (error != null && !State.WaitingForHash.equals(state)) { + if (error != null && !State.WaitingForHash.equals(internalState)) { terminate(JinglePayload.Reason.Type.MediaError); } } }
\ No newline at end of file diff --git a/src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java b/src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java index c5a1f11..63a11e8 100644 --- a/src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java +++ b/src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java @@ -74,13 +74,13 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou private IDGenerator idGenerator; private ReadBytestream stream; private JingleFileTransferFileInfo fileInfo; private FileTransferOptions options; private JingleContentID contentID; private IncrementalBytestreamHashCalculator hashCalculator; - private State state; + private State internalState; private boolean candidateAcknowledged; private Timer waitForRemoteTermination; private SignalConnection processedBytesConnection; private SignalConnection transferFinishedConnection; @@ -100,13 +100,13 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou this.idGenerator = idGenerator; this.stream = stream; this.fileInfo = fileInfo; this.options = options; this.session = session; this.contentID = new JingleContentID(idGenerator.generateID(), JingleContentPayload.Creator.InitiatorCreator); - this.state = State.Initial; + this.internalState = State.Initial; this.candidateAcknowledged = false; setFileInfo(fileInfo.getName(), fileInfo.getSize()); // calculate both, MD5 and SHA-1 since we don't know which one the other side supports hashCalculator = new IncrementalBytestreamHashCalculator(true, true, crypto); stream.onRead.connect(new Slot1<ByteArray>() { @@ -127,19 +127,19 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou /** * OutgoingFileTransferMethod. */ @Override public void start() { logger_.fine("\n"); - if (!State.Initial.equals(state)) { + if (!State.Initial.equals(internalState)) { logger_.warning("Incorrect state\n"); return; } setTransporter(transporterFactory.createInitiatorTransporter(getInitiator(), getResponder(), options)); - setState(State.GeneratingInitialLocalCandidates); + setInternalState(State.GeneratingInitialLocalCandidates); transporter.startGeneratingLocalCandidates(); } /** * JingleFileTransferMethod. */ @@ -161,32 +161,32 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou WaitForTermination, Finished }; public void handleSessionAcceptReceived(final JingleContentID contentID, JingleDescription description, JingleTransportPayload transportPayload) { logger_.fine("\n"); - if (!State.WaitingForAccept.equals(state)) { logger_.warning("Incorrect state\n"); return; } + if (!State.WaitingForAccept.equals(internalState)) { logger_.warning("Incorrect state\n"); return; } if (transportPayload instanceof JingleS5BTransportPayload) { JingleS5BTransportPayload s5bPayload = (JingleS5BTransportPayload)transportPayload; transporter.addRemoteCandidates(s5bPayload.getCandidates(), s5bPayload.getDstAddr()); - setState(State.TryingCandidates); + setInternalState(State.TryingCandidates); transporter.startTryingRemoteCandidates(); } else { logger_.fine("Unknown transport payload. Falling back.\n"); fallback(); } } public void handleSessionTerminateReceived(JinglePayload.Reason reason) { logger_.fine("\n"); - if (State.Finished.equals(state)) { logger_.warning("Incorrect state: " + state + "\n"); return; } + if (State.Finished.equals(internalState)) { logger_.warning("Incorrect state: " + internalState + "\n"); return; } stopAll(); - if (State.WaitForTermination.equals(state)) { + if (State.WaitForTermination.equals(internalState)) { waitForRemoteTermination.stop(); } if (reason != null && JinglePayload.Reason.Type.Cancel.equals(reason.type)) { setFinishedState(FileTransfer.State.Type.Canceled, new FileTransferError(FileTransferError.Type.PeerError)); } else if (reason != null && JinglePayload.Reason.Type.Decline.equals(reason.type)) { @@ -199,13 +199,13 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou setFinishedState(FileTransfer.State.Type.Failed, new FileTransferError(FileTransferError.Type.PeerError)); } } public void handleTransportAcceptReceived(final JingleContentID contentID, JingleTransportPayload transport) { logger_.fine("\n"); - if (!State.FallbackRequested.equals(state)) { logger_.warning("Incorrect state\n"); return; } + if (!State.FallbackRequested.equals(internalState)) { logger_.warning("Incorrect state\n"); return; } if (transport instanceof JingleIBBTransportPayload) { JingleIBBTransportPayload ibbPayload = (JingleIBBTransportPayload)transport; startTransferring(transporter.createIBBSendSession(ibbPayload.getSessionID(), ( ibbPayload.getBlockSize() != null ? ibbPayload.getBlockSize() : DEFAULT_BLOCK_SIZE), stream)); } else { @@ -221,25 +221,25 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou } protected void startTransferViaRemoteCandidate() { logger_.fine("\n"); if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(ourCandidateChoice.type)) { - setState(State.WaitingForPeerProxyActivate); + setInternalState(State.WaitingForPeerProxyActivate); } else { transportSession = createRemoteCandidateSession(); startTransferringIfCandidateAcknowledged(); } } protected void startTransferViaLocalCandidate() { logger_.fine("\n"); if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(theirCandidateChoice.type)) { - setState(State.WaitingForLocalProxyActivate); + setInternalState(State.WaitingForLocalProxyActivate); transporter.startActivatingProxy(theirCandidateChoice.jid); } else { transportSession = createLocalCandidateSession(); startTransferringIfCandidateAcknowledged(); } @@ -247,19 +247,19 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou private void startTransferringIfCandidateAcknowledged() { if (candidateAcknowledged) { startTransferring(transportSession); } else { - setState(State.WaitingForCandidateAcknowledge); + setInternalState(State.WaitingForCandidateAcknowledge); } } protected void handleLocalTransportCandidatesGenerated(final String s5bSessionID, final Vector<JingleS5BTransportPayload.Candidate> candidates, final String dstAddr) { logger_.fine("\n"); - if (!State.GeneratingInitialLocalCandidates.equals(state)) { logger_.warning("Incorrect state\n"); return; } + if (!State.GeneratingInitialLocalCandidates.equals(internalState)) { logger_.warning("Incorrect state\n"); return; } fillCandidateMap(localCandidates, candidates); JingleFileTransferDescription description = new JingleFileTransferDescription(); fileInfo.addHash(new HashElement("sha-1", new ByteArray())); fileInfo.addHash(new HashElement("md5", new ByteArray())); @@ -270,66 +270,66 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou transport.setMode(JingleS5BTransportPayload.Mode.TCPMode); transport.setDstAddr(dstAddr); for(JingleS5BTransportPayload.Candidate candidate : candidates) { transport.addCandidate(candidate); logger_.fine("\t" + "S5B candidate: " + candidate.hostPort.toString() + "\n"); } - setState(State.WaitingForAccept); + setInternalState(State.WaitingForAccept); session.sendInitiate(contentID, description, transport); } public void handleTransportInfoAcknowledged(final String id) { if (id.equals(candidateSelectRequestID)) { candidateAcknowledged = true; } - if (State.WaitingForCandidateAcknowledge.equals(state)) { + if (State.WaitingForCandidateAcknowledge.equals(internalState)) { startTransferring(transportSession); } } protected JingleContentID getContentID() { return contentID; } protected void terminate(JinglePayload.Reason.Type reason) { logger_.fine(reason + "\n"); - if (!State.Initial.equals(state) && !State.GeneratingInitialLocalCandidates.equals(state) && !State.Finished.equals(state)) { + if (!State.Initial.equals(internalState) && !State.GeneratingInitialLocalCandidates.equals(internalState) && !State.Finished.equals(internalState)) { session.sendTerminate(reason); } stopAll(); setFinishedState(getExternalFinishedState(reason), getFileTransferError(reason)); } protected void fallback() { if (options.isInBandAllowed()) { logger_.fine("Trying to fallback to IBB transport.\n"); JingleIBBTransportPayload ibbTransport = new JingleIBBTransportPayload(); ibbTransport.setBlockSize(DEFAULT_BLOCK_SIZE); ibbTransport.setSessionID(idGenerator.generateID()); - setState(State.FallbackRequested); + setInternalState(State.FallbackRequested); session.sendTransportReplace(contentID, ibbTransport); } else { logger_.fine("Fallback to IBB transport not allowed.\n"); terminate(JinglePayload.Reason.Type.ConnectivityError); } } private void handleTransferFinished(FileTransferError error) { logger_.fine("\n"); - if (!State.Transferring.equals(state)) { logger_.warning("Incorrect state: " + state + "\n"); return; } + if (!State.Transferring.equals(internalState)) { logger_.warning("Incorrect state: " + internalState + "\n"); return; } if (error != null) { terminate(JinglePayload.Reason.Type.ConnectivityError); } else { sendSessionInfoHash(); // wait for other party to terminate session after they have verified the hash - setState(State.WaitForTermination); + setInternalState(State.WaitForTermination); waitForRemoteTermination.start(); } } private void sendSessionInfoHash() { logger_.fine("\n"); @@ -348,50 +348,50 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou transferFinishedConnection = transportSession.onFinished.connect(new Slot1<FileTransferError>() { @Override public void call(FileTransferError e) { handleTransferFinished(e); } }); - setState(State.Transferring); + setInternalState(State.Transferring); transportSession.start(); } protected boolean hasPriorityOnCandidateTie() { return true; } protected boolean isWaitingForPeerProxyActivate() { - return State.WaitingForPeerProxyActivate.equals(state); + return State.WaitingForPeerProxyActivate.equals(internalState); } protected boolean isWaitingForLocalProxyActivate() { - return State.WaitingForLocalProxyActivate.equals(state); + return State.WaitingForLocalProxyActivate.equals(internalState); } protected boolean isTryingCandidates() { - return State.TryingCandidates.equals(state); + return State.TryingCandidates.equals(internalState); } protected TransportSession createLocalCandidateSession() { return transporter.createLocalCandidateSession(stream, theirCandidateChoice); } protected TransportSession createRemoteCandidateSession() { return transporter.createRemoteCandidateSession(stream, ourCandidateChoice); } private void handleWaitForRemoteTerminationTimeout() { - assert(state.equals(State.WaitForTermination)); + assert(internalState.equals(State.WaitForTermination)); logger_.warning("Other party did not terminate session. Terminate it now.\n"); waitForRemoteTermination.stop(); terminate(JinglePayload.Reason.Type.MediaError); } private void stopAll() { - logger_.fine(state + "\n"); - switch (state) { + logger_.fine(internalState + "\n"); + switch (internalState) { case Initial: logger_.warning("Not yet started\n"); break; case GeneratingInitialLocalCandidates: transporter.stopGeneratingLocalCandidates(); break; case WaitingForAccept: break; case TryingCandidates: transporter.stopTryingRemoteCandidates(); break; case FallbackRequested: break; case WaitingForPeerProxyActivate: break; @@ -405,26 +405,31 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou transportSession = null; break; case WaitForTermination: break; case Finished: logger_.warning("Already finished\n"); break; } - if (!State.Initial.equals(state)) { + if (!State.Initial.equals(internalState)) { removeTransporter(); } } - private void setState(State state) { + private void setInternalState(State state) { logger_.fine(state + "\n"); - this.state = state; + this.internalState = state; onStateChanged.emit(new FileTransfer.State(getExternalState(state))); } + @Override + public com.isode.stroke.filetransfer.FileTransfer.State getState() { + return new FileTransfer.State(getExternalState(internalState)); + } + private void setFinishedState(FileTransfer.State.Type type, final FileTransferError error) { logger_.fine("\n"); - this.state = State.Finished; + this.internalState = State.Finished; onStateChanged.emit(new FileTransfer.State(type)); onFinished.emit(error); } private static FileTransfer.State.Type getExternalState(State state) { switch (state) { |
Swift