summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Clayton <alex.clayton@isode.com>2016-03-11 17:05:43 (GMT)
committerAlex Clayton <alex.clayton@isode.com>2016-03-14 15:33:25 (GMT)
commitde2704f8dfd9b807b37e72e61f2042a5e71227c5 (patch)
tree8694b4ea245a6f7fa7813f5ac8b3e045520378c6
parenta0a0b9fd74f6d99da1c756b36aad6cc0122f011b (diff)
downloadstroke-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
-rw-r--r--src/com/isode/stroke/filetransfer/FileTransfer.java5
-rw-r--r--src/com/isode/stroke/filetransfer/IncomingJingleFileTransfer.java61
-rw-r--r--src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java65
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) {