summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
@@ -4,7 +4,7 @@
4 * See Documentation/Licenses/BSD-simplified.txt for more information. 4 * See Documentation/Licenses/BSD-simplified.txt for more information.
5 */ 5 */
6/* 6/*
7 * Copyright (c) 2013-2015 Isode Limited. 7 * Copyright (c) 2013-2016 Isode Limited.
8 * All rights reserved. 8 * All rights reserved.
9 * See the COPYING file for more information. 9 * See the COPYING file for more information.
10 */ 10 */
@@ -64,4 +64,7 @@ public interface FileTransfer {
64 public long getFileSizeInBytes(); 64 public long getFileSizeInBytes();
65 65
66 public void setFileInfo(final String name, long size); 66 public void setFileInfo(final String name, long size);
67
68 public State getState();
69
67} 70}
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,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2010-2015 Isode Limited. 2 * Copyright (c) 2010-2016 Isode Limited.
3 * All rights reserved. 3 * All rights reserved.
4 * See the COPYING file for more information. 4 * See the COPYING file for more information.
5 */ 5 */
@@ -69,7 +69,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
69 69
70 private JingleContentPayload initialContent; 70 private JingleContentPayload initialContent;
71 private CryptoProvider crypto; 71 private CryptoProvider crypto;
72 private State state; 72 private State internalState;
73 private JingleFileTransferDescription description; 73 private JingleFileTransferDescription description;
74 private WriteBytestream stream; 74 private WriteBytestream stream;
75 private long receivedBytes; 75 private long receivedBytes;
@@ -93,7 +93,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
93 super(session, toJID, transporterFactory); 93 super(session, toJID, transporterFactory);
94 this.initialContent = content; 94 this.initialContent = content;
95 this.crypto = crypto; 95 this.crypto = crypto;
96 this.state = State.Initial; 96 this.internalState = State.Initial;
97 this. receivedBytes = 0; 97 this. receivedBytes = 0;
98 this.hashCalculator = null; 98 this.hashCalculator = null;
99 this.description = initialContent.getDescription(new JingleFileTransferDescription()); 99 this.description = initialContent.getDescription(new JingleFileTransferDescription());
@@ -125,7 +125,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
125 @Override 125 @Override
126 public void accept(WriteBytestream stream, final FileTransferOptions options) { 126 public void accept(WriteBytestream stream, final FileTransferOptions options) {
127 logger_.fine("\n"); 127 logger_.fine("\n");
128 if (!State.Initial.equals(state)) { logger_.warning("Incorrect state \n"); return; } 128 if (!State.Initial.equals(internalState)) { logger_.warning("Incorrect state \n"); return; }
129 129
130 assert(this.stream == null); 130 assert(this.stream == null);
131 this.stream = stream; 131 this.stream = stream;
@@ -147,7 +147,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
147 logger_.fine("Got S5B transport as initial payload.\n"); 147 logger_.fine("Got S5B transport as initial payload.\n");
148 setTransporter(transporterFactory.createResponderTransporter(getInitiator(), getResponder(), s5bTransport.getSessionID(), options)); 148 setTransporter(transporterFactory.createResponderTransporter(getInitiator(), getResponder(), s5bTransport.getSessionID(), options));
149 transporter.addRemoteCandidates(s5bTransport.getCandidates(), s5bTransport.getDstAddr()); 149 transporter.addRemoteCandidates(s5bTransport.getCandidates(), s5bTransport.getDstAddr());
150 setState(State.GeneratingInitialLocalCandidates); 150 setInternalState(State.GeneratingInitialLocalCandidates);
151 transporter.startGeneratingLocalCandidates(); 151 transporter.startGeneratingLocalCandidates();
152 } 152 }
153 else if(initialContent.getTransport(new JingleIBBTransportPayload()) != null) { 153 else if(initialContent.getTransport(new JingleIBBTransportPayload()) != null) {
@@ -187,14 +187,14 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
187 @Override 187 @Override
188 public void cancel() { 188 public void cancel() {
189 logger_.fine("\n"); 189 logger_.fine("\n");
190 terminate(State.Initial.equals(state) ? JinglePayload.Reason.Type.Decline : JinglePayload.Reason.Type.Cancel); 190 terminate(State.Initial.equals(internalState) ? JinglePayload.Reason.Type.Decline : JinglePayload.Reason.Type.Cancel);
191 } 191 }
192 192
193 protected void startTransferViaRemoteCandidate() { 193 protected void startTransferViaRemoteCandidate() {
194 logger_.fine("\n"); 194 logger_.fine("\n");
195 195
196 if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(ourCandidateChoice.type)) { 196 if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(ourCandidateChoice.type)) {
197 setState(State.WaitingForPeerProxyActivate); 197 setInternalState(State.WaitingForPeerProxyActivate);
198 } 198 }
199 else { 199 else {
200 startTransferring(createRemoteCandidateSession()); 200 startTransferring(createRemoteCandidateSession());
@@ -205,7 +205,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
205 logger_.fine("\n"); 205 logger_.fine("\n");
206 206
207 if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(theirCandidateChoice.type)) { 207 if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(theirCandidateChoice.type)) {
208 setState(State.WaitingForLocalProxyActivate); 208 setInternalState(State.WaitingForLocalProxyActivate);
209 transporter.startActivatingProxy(theirCandidateChoice.jid); 209 transporter.startActivatingProxy(theirCandidateChoice.jid);
210 } 210 }
211 else { 211 else {
@@ -224,11 +224,11 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
224 } 224 }
225 225
226 protected void stopAll() { 226 protected void stopAll() {
227 if (!State.Initial.equals(state)) { 227 if (!State.Initial.equals(internalState)) {
228 writeStreamDataReceivedConnection.disconnect(); 228 writeStreamDataReceivedConnection.disconnect();
229 hashCalculator = null; 229 hashCalculator = null;
230 } 230 }
231 switch (state) { 231 switch (internalState) {
232 case Initial: break; 232 case Initial: break;
233 case GeneratingInitialLocalCandidates: transporter.stopGeneratingLocalCandidates(); break; 233 case GeneratingInitialLocalCandidates: transporter.stopGeneratingLocalCandidates(); break;
234 case TryingCandidates: transporter.stopTryingRemoteCandidates(); break; 234 case TryingCandidates: transporter.stopTryingRemoteCandidates(); break;
@@ -244,20 +244,25 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
244 break; 244 break;
245 case Finished: logger_.warning("Already finished\n"); break; 245 case Finished: logger_.warning("Already finished\n"); break;
246 } 246 }
247 if (!State.Initial.equals(state)) { 247 if (!State.Initial.equals(internalState)) {
248 removeTransporter(); 248 removeTransporter();
249 } 249 }
250 } 250 }
251 251
252 protected void setState(State state) { 252 protected void setInternalState(State state) {
253 logger_.fine(state + "\n"); 253 logger_.fine(state + "\n");
254 this.state = state; 254 this.internalState = state;
255 onStateChanged.emit(new FileTransfer.State(getExternalState(state))); 255 onStateChanged.emit(new FileTransfer.State(getExternalState(state)));
256 } 256 }
257
258 @Override
259 public com.isode.stroke.filetransfer.FileTransfer.State getState() {
260 return new FileTransfer.State(getExternalState(internalState));
261 }
257 262
258 protected void setFinishedState(FileTransfer.State.Type type, final FileTransferError error) { 263 protected void setFinishedState(FileTransfer.State.Type type, final FileTransferError error) {
259 logger_.fine("\n"); 264 logger_.fine("\n");
260 this.state = State.Finished; 265 this.internalState = State.Finished;
261 onStateChanged.emit(new FileTransfer.State(type)); 266 onStateChanged.emit(new FileTransfer.State(type));
262 onFinished.emit(error); 267 onFinished.emit(error);
263 } 268 }
@@ -283,7 +288,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
283 } 288 }
284 289
285 protected void fallback() { 290 protected void fallback() {
286 setState(State.WaitingForFallbackOrTerminate); 291 setInternalState(State.WaitingForFallbackOrTerminate);
287 } 292 }
288 293
289 protected void startTransferring(TransportSession transportSession) { 294 protected void startTransferring(TransportSession transportSession) {
@@ -296,20 +301,20 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
296 handleTransferFinished(e); 301 handleTransferFinished(e);
297 } 302 }
298 }); 303 });
299 setState(State.Transferring); 304 setInternalState(State.Transferring);
300 transportSession.start(); 305 transportSession.start();
301 } 306 }
302 307
303 protected boolean isWaitingForPeerProxyActivate() { 308 protected boolean isWaitingForPeerProxyActivate() {
304 return State.WaitingForPeerProxyActivate.equals(state); 309 return State.WaitingForPeerProxyActivate.equals(internalState);
305 } 310 }
306 311
307 protected boolean isWaitingForLocalProxyActivate() { 312 protected boolean isWaitingForLocalProxyActivate() {
308 return State.WaitingForLocalProxyActivate.equals(state); 313 return State.WaitingForLocalProxyActivate.equals(internalState);
309 } 314 }
310 315
311 protected boolean isTryingCandidates() { 316 protected boolean isTryingCandidates() {
312 return State.TryingCandidates.equals(state); 317 return State.TryingCandidates.equals(internalState);
313 } 318 }
314 319
315 protected TransportSession createLocalCandidateSession() { 320 protected TransportSession createLocalCandidateSession() {
@@ -323,7 +328,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
323 protected void terminate(JinglePayload.Reason.Type reason) { 328 protected void terminate(JinglePayload.Reason.Type reason) {
324 logger_.fine(reason + "\n"); 329 logger_.fine(reason + "\n");
325 330
326 if (!State.Finished.equals(state)) { 331 if (!State.Finished.equals(internalState)) {
327 session.sendTerminate(reason); 332 session.sendTerminate(reason);
328 } 333 }
329 stopAll(); 334 stopAll();
@@ -344,9 +349,9 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
344 349
345 public void handleSessionTerminateReceived(JinglePayload.Reason reason) { 350 public void handleSessionTerminateReceived(JinglePayload.Reason reason) {
346 logger_.fine("\n"); 351 logger_.fine("\n");
347 if (State.Finished.equals(state)) { logger_.warning("Incorrect state\n"); return; } 352 if (State.Finished.equals(internalState)) { logger_.warning("Incorrect state\n"); return; }
348 353
349 if (State.Finished.equals(state)) { 354 if (State.Finished.equals(internalState)) {
350 logger_.fine("Already terminated\n"); 355 logger_.fine("Already terminated\n");
351 return; 356 return;
352 } 357 }
@@ -376,7 +381,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
376 if (transferHash.getFileInfo().getHashes().containsKey("md5")) { 381 if (transferHash.getFileInfo().getHashes().containsKey("md5")) {
377 hashes.put("md5", transferHash.getFileInfo().getHash("md5")); 382 hashes.put("md5", transferHash.getFileInfo().getHash("md5"));
378 } 383 }
379 if (State.WaitingForHash.equals(state)) { 384 if (State.WaitingForHash.equals(internalState)) {
380 checkHashAndTerminate(); 385 checkHashAndTerminate();
381 } 386 }
382 } 387 }
@@ -387,7 +392,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
387 392
388 public void handleTransportReplaceReceived(final JingleContentID content, JingleTransportPayload transport) { 393 public void handleTransportReplaceReceived(final JingleContentID content, JingleTransportPayload transport) {
389 logger_.fine("\n"); 394 logger_.fine("\n");
390 if (!State.WaitingForFallbackOrTerminate.equals(state)) { 395 if (!State.WaitingForFallbackOrTerminate.equals(internalState)) {
391 logger_.warning("Incorrect state\n"); 396 logger_.warning("Incorrect state\n");
392 return; 397 return;
393 } 398 }
@@ -407,7 +412,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
407 412
408 protected void handleLocalTransportCandidatesGenerated(final String s5bSessionID, final Vector<JingleS5BTransportPayload.Candidate> candidates, final String dstAddr) { 413 protected void handleLocalTransportCandidatesGenerated(final String s5bSessionID, final Vector<JingleS5BTransportPayload.Candidate> candidates, final String dstAddr) {
409 logger_.fine("\n"); 414 logger_.fine("\n");
410 if (!State.GeneratingInitialLocalCandidates.equals(state)) { logger_.warning("Incorrect state\n"); return; } 415 if (!State.GeneratingInitialLocalCandidates.equals(internalState)) { logger_.warning("Incorrect state\n"); return; }
411 416
412 fillCandidateMap(localCandidates, candidates); 417 fillCandidateMap(localCandidates, candidates);
413 418
@@ -420,7 +425,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
420 } 425 }
421 session.sendAccept(getContentID(), initialContent.getDescriptions().get(0), transport); 426 session.sendAccept(getContentID(), initialContent.getDescriptions().get(0), transport);
422 427
423 setState(State.TryingCandidates); 428 setInternalState(State.TryingCandidates);
424 transporter.startTryingRemoteCandidates(); 429 transporter.startTryingRemoteCandidates();
425 } 430 }
426 431
@@ -453,7 +458,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
453 458
454 if (!hashInfoAvailable) { 459 if (!hashInfoAvailable) {
455 logger_.fine("No hash information yet. Waiting a while on hash info.\n"); 460 logger_.fine("No hash information yet. Waiting a while on hash info.\n");
456 setState(State.WaitingForHash); 461 setInternalState(State.WaitingForHash);
457 waitOnHashTimer.start(); 462 waitOnHashTimer.start();
458 } 463 }
459 else { 464 else {
@@ -492,7 +497,7 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In
492 } 497 }
493 498
494 private void handleTransferFinished(FileTransferError error) { 499 private void handleTransferFinished(FileTransferError error) {
495 if (error != null && !State.WaitingForHash.equals(state)) { 500 if (error != null && !State.WaitingForHash.equals(internalState)) {
496 terminate(JinglePayload.Reason.Type.MediaError); 501 terminate(JinglePayload.Reason.Type.MediaError);
497 } 502 }
498 } 503 }
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
@@ -77,7 +77,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
77 private FileTransferOptions options; 77 private FileTransferOptions options;
78 private JingleContentID contentID; 78 private JingleContentID contentID;
79 private IncrementalBytestreamHashCalculator hashCalculator; 79 private IncrementalBytestreamHashCalculator hashCalculator;
80 private State state; 80 private State internalState;
81 private boolean candidateAcknowledged; 81 private boolean candidateAcknowledged;
82 82
83 private Timer waitForRemoteTermination; 83 private Timer waitForRemoteTermination;
@@ -103,7 +103,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
103 this.options = options; 103 this.options = options;
104 this.session = session; 104 this.session = session;
105 this.contentID = new JingleContentID(idGenerator.generateID(), JingleContentPayload.Creator.InitiatorCreator); 105 this.contentID = new JingleContentID(idGenerator.generateID(), JingleContentPayload.Creator.InitiatorCreator);
106 this.state = State.Initial; 106 this.internalState = State.Initial;
107 this.candidateAcknowledged = false; 107 this.candidateAcknowledged = false;
108 setFileInfo(fileInfo.getName(), fileInfo.getSize()); 108 setFileInfo(fileInfo.getName(), fileInfo.getSize());
109 109
@@ -130,13 +130,13 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
130 @Override 130 @Override
131 public void start() { 131 public void start() {
132 logger_.fine("\n"); 132 logger_.fine("\n");
133 if (!State.Initial.equals(state)) { 133 if (!State.Initial.equals(internalState)) {
134 logger_.warning("Incorrect state\n"); 134 logger_.warning("Incorrect state\n");
135 return; 135 return;
136 } 136 }
137 137
138 setTransporter(transporterFactory.createInitiatorTransporter(getInitiator(), getResponder(), options)); 138 setTransporter(transporterFactory.createInitiatorTransporter(getInitiator(), getResponder(), options));
139 setState(State.GeneratingInitialLocalCandidates); 139 setInternalState(State.GeneratingInitialLocalCandidates);
140 transporter.startGeneratingLocalCandidates(); 140 transporter.startGeneratingLocalCandidates();
141 } 141 }
142 142
@@ -164,12 +164,12 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
164 164
165 public void handleSessionAcceptReceived(final JingleContentID contentID, JingleDescription description, JingleTransportPayload transportPayload) { 165 public void handleSessionAcceptReceived(final JingleContentID contentID, JingleDescription description, JingleTransportPayload transportPayload) {
166 logger_.fine("\n"); 166 logger_.fine("\n");
167 if (!State.WaitingForAccept.equals(state)) { logger_.warning("Incorrect state\n"); return; } 167 if (!State.WaitingForAccept.equals(internalState)) { logger_.warning("Incorrect state\n"); return; }
168 168
169 if (transportPayload instanceof JingleS5BTransportPayload) { 169 if (transportPayload instanceof JingleS5BTransportPayload) {
170 JingleS5BTransportPayload s5bPayload = (JingleS5BTransportPayload)transportPayload; 170 JingleS5BTransportPayload s5bPayload = (JingleS5BTransportPayload)transportPayload;
171 transporter.addRemoteCandidates(s5bPayload.getCandidates(), s5bPayload.getDstAddr()); 171 transporter.addRemoteCandidates(s5bPayload.getCandidates(), s5bPayload.getDstAddr());
172 setState(State.TryingCandidates); 172 setInternalState(State.TryingCandidates);
173 transporter.startTryingRemoteCandidates(); 173 transporter.startTryingRemoteCandidates();
174 } 174 }
175 else { 175 else {
@@ -180,10 +180,10 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
180 180
181 public void handleSessionTerminateReceived(JinglePayload.Reason reason) { 181 public void handleSessionTerminateReceived(JinglePayload.Reason reason) {
182 logger_.fine("\n"); 182 logger_.fine("\n");
183 if (State.Finished.equals(state)) { logger_.warning("Incorrect state: " + state + "\n"); return; } 183 if (State.Finished.equals(internalState)) { logger_.warning("Incorrect state: " + internalState + "\n"); return; }
184 184
185 stopAll(); 185 stopAll();
186 if (State.WaitForTermination.equals(state)) { 186 if (State.WaitForTermination.equals(internalState)) {
187 waitForRemoteTermination.stop(); 187 waitForRemoteTermination.stop();
188 } 188 }
189 if (reason != null && JinglePayload.Reason.Type.Cancel.equals(reason.type)) { 189 if (reason != null && JinglePayload.Reason.Type.Cancel.equals(reason.type)) {
@@ -202,7 +202,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
202 202
203 public void handleTransportAcceptReceived(final JingleContentID contentID, JingleTransportPayload transport) { 203 public void handleTransportAcceptReceived(final JingleContentID contentID, JingleTransportPayload transport) {
204 logger_.fine("\n"); 204 logger_.fine("\n");
205 if (!State.FallbackRequested.equals(state)) { logger_.warning("Incorrect state\n"); return; } 205 if (!State.FallbackRequested.equals(internalState)) { logger_.warning("Incorrect state\n"); return; }
206 206
207 if (transport instanceof JingleIBBTransportPayload) { 207 if (transport instanceof JingleIBBTransportPayload) {
208 JingleIBBTransportPayload ibbPayload = (JingleIBBTransportPayload)transport; 208 JingleIBBTransportPayload ibbPayload = (JingleIBBTransportPayload)transport;
@@ -224,7 +224,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
224 logger_.fine("\n"); 224 logger_.fine("\n");
225 225
226 if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(ourCandidateChoice.type)) { 226 if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(ourCandidateChoice.type)) {
227 setState(State.WaitingForPeerProxyActivate); 227 setInternalState(State.WaitingForPeerProxyActivate);
228 } 228 }
229 else { 229 else {
230 transportSession = createRemoteCandidateSession(); 230 transportSession = createRemoteCandidateSession();
@@ -236,7 +236,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
236 logger_.fine("\n"); 236 logger_.fine("\n");
237 237
238 if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(theirCandidateChoice.type)) { 238 if (JingleS5BTransportPayload.Candidate.Type.ProxyType.equals(theirCandidateChoice.type)) {
239 setState(State.WaitingForLocalProxyActivate); 239 setInternalState(State.WaitingForLocalProxyActivate);
240 transporter.startActivatingProxy(theirCandidateChoice.jid); 240 transporter.startActivatingProxy(theirCandidateChoice.jid);
241 } 241 }
242 else { 242 else {
@@ -250,13 +250,13 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
250 startTransferring(transportSession); 250 startTransferring(transportSession);
251 } 251 }
252 else { 252 else {
253 setState(State.WaitingForCandidateAcknowledge); 253 setInternalState(State.WaitingForCandidateAcknowledge);
254 } 254 }
255 } 255 }
256 256
257 protected void handleLocalTransportCandidatesGenerated(final String s5bSessionID, final Vector<JingleS5BTransportPayload.Candidate> candidates, final String dstAddr) { 257 protected void handleLocalTransportCandidatesGenerated(final String s5bSessionID, final Vector<JingleS5BTransportPayload.Candidate> candidates, final String dstAddr) {
258 logger_.fine("\n"); 258 logger_.fine("\n");
259 if (!State.GeneratingInitialLocalCandidates.equals(state)) { logger_.warning("Incorrect state\n"); return; } 259 if (!State.GeneratingInitialLocalCandidates.equals(internalState)) { logger_.warning("Incorrect state\n"); return; }
260 260
261 fillCandidateMap(localCandidates, candidates); 261 fillCandidateMap(localCandidates, candidates);
262 262
@@ -273,7 +273,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
273 transport.addCandidate(candidate); 273 transport.addCandidate(candidate);
274 logger_.fine("\t" + "S5B candidate: " + candidate.hostPort.toString() + "\n"); 274 logger_.fine("\t" + "S5B candidate: " + candidate.hostPort.toString() + "\n");
275 } 275 }
276 setState(State.WaitingForAccept); 276 setInternalState(State.WaitingForAccept);
277 session.sendInitiate(contentID, description, transport); 277 session.sendInitiate(contentID, description, transport);
278 } 278 }
279 279
@@ -281,7 +281,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
281 if (id.equals(candidateSelectRequestID)) { 281 if (id.equals(candidateSelectRequestID)) {
282 candidateAcknowledged = true; 282 candidateAcknowledged = true;
283 } 283 }
284 if (State.WaitingForCandidateAcknowledge.equals(state)) { 284 if (State.WaitingForCandidateAcknowledge.equals(internalState)) {
285 startTransferring(transportSession); 285 startTransferring(transportSession);
286 } 286 }
287 } 287 }
@@ -293,7 +293,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
293 protected void terminate(JinglePayload.Reason.Type reason) { 293 protected void terminate(JinglePayload.Reason.Type reason) {
294 logger_.fine(reason + "\n"); 294 logger_.fine(reason + "\n");
295 295
296 if (!State.Initial.equals(state) && !State.GeneratingInitialLocalCandidates.equals(state) && !State.Finished.equals(state)) { 296 if (!State.Initial.equals(internalState) && !State.GeneratingInitialLocalCandidates.equals(internalState) && !State.Finished.equals(internalState)) {
297 session.sendTerminate(reason); 297 session.sendTerminate(reason);
298 } 298 }
299 stopAll(); 299 stopAll();
@@ -306,7 +306,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
306 JingleIBBTransportPayload ibbTransport = new JingleIBBTransportPayload(); 306 JingleIBBTransportPayload ibbTransport = new JingleIBBTransportPayload();
307 ibbTransport.setBlockSize(DEFAULT_BLOCK_SIZE); 307 ibbTransport.setBlockSize(DEFAULT_BLOCK_SIZE);
308 ibbTransport.setSessionID(idGenerator.generateID()); 308 ibbTransport.setSessionID(idGenerator.generateID());
309 setState(State.FallbackRequested); 309 setInternalState(State.FallbackRequested);
310 session.sendTransportReplace(contentID, ibbTransport); 310 session.sendTransportReplace(contentID, ibbTransport);
311 } 311 }
312 else { 312 else {
@@ -317,7 +317,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
317 317
318 private void handleTransferFinished(FileTransferError error) { 318 private void handleTransferFinished(FileTransferError error) {
319 logger_.fine("\n"); 319 logger_.fine("\n");
320 if (!State.Transferring.equals(state)) { logger_.warning("Incorrect state: " + state + "\n"); return; } 320 if (!State.Transferring.equals(internalState)) { logger_.warning("Incorrect state: " + internalState + "\n"); return; }
321 321
322 if (error != null) { 322 if (error != null) {
323 terminate(JinglePayload.Reason.Type.ConnectivityError); 323 terminate(JinglePayload.Reason.Type.ConnectivityError);
@@ -326,7 +326,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
326 sendSessionInfoHash(); 326 sendSessionInfoHash();
327 327
328 // wait for other party to terminate session after they have verified the hash 328 // wait for other party to terminate session after they have verified the hash
329 setState(State.WaitForTermination); 329 setInternalState(State.WaitForTermination);
330 waitForRemoteTermination.start(); 330 waitForRemoteTermination.start();
331 } 331 }
332 } 332 }
@@ -351,7 +351,7 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
351 handleTransferFinished(e); 351 handleTransferFinished(e);
352 } 352 }
353 }); 353 });
354 setState(State.Transferring); 354 setInternalState(State.Transferring);
355 transportSession.start(); 355 transportSession.start();
356 } 356 }
357 357
@@ -360,15 +360,15 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
360 } 360 }
361 361
362 protected boolean isWaitingForPeerProxyActivate() { 362 protected boolean isWaitingForPeerProxyActivate() {
363 return State.WaitingForPeerProxyActivate.equals(state); 363 return State.WaitingForPeerProxyActivate.equals(internalState);
364 } 364 }
365 365
366 protected boolean isWaitingForLocalProxyActivate() { 366 protected boolean isWaitingForLocalProxyActivate() {
367 return State.WaitingForLocalProxyActivate.equals(state); 367 return State.WaitingForLocalProxyActivate.equals(internalState);
368 } 368 }
369 369
370 protected boolean isTryingCandidates() { 370 protected boolean isTryingCandidates() {
371 return State.TryingCandidates.equals(state); 371 return State.TryingCandidates.equals(internalState);
372 } 372 }
373 373
374 protected TransportSession createLocalCandidateSession() { 374 protected TransportSession createLocalCandidateSession() {
@@ -380,15 +380,15 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
380 } 380 }
381 381
382 private void handleWaitForRemoteTerminationTimeout() { 382 private void handleWaitForRemoteTerminationTimeout() {
383 assert(state.equals(State.WaitForTermination)); 383 assert(internalState.equals(State.WaitForTermination));
384 logger_.warning("Other party did not terminate session. Terminate it now.\n"); 384 logger_.warning("Other party did not terminate session. Terminate it now.\n");
385 waitForRemoteTermination.stop(); 385 waitForRemoteTermination.stop();
386 terminate(JinglePayload.Reason.Type.MediaError); 386 terminate(JinglePayload.Reason.Type.MediaError);
387 } 387 }
388 388
389 private void stopAll() { 389 private void stopAll() {
390 logger_.fine(state + "\n"); 390 logger_.fine(internalState + "\n");
391 switch (state) { 391 switch (internalState) {
392 case Initial: logger_.warning("Not yet started\n"); break; 392 case Initial: logger_.warning("Not yet started\n"); break;
393 case GeneratingInitialLocalCandidates: transporter.stopGeneratingLocalCandidates(); break; 393 case GeneratingInitialLocalCandidates: transporter.stopGeneratingLocalCandidates(); break;
394 case WaitingForAccept: break; 394 case WaitingForAccept: break;
@@ -408,20 +408,25 @@ public class OutgoingJingleFileTransfer extends JingleFileTransfer implements Ou
408 break; 408 break;
409 case Finished: logger_.warning("Already finished\n"); break; 409 case Finished: logger_.warning("Already finished\n"); break;
410 } 410 }
411 if (!State.Initial.equals(state)) { 411 if (!State.Initial.equals(internalState)) {
412 removeTransporter(); 412 removeTransporter();
413 } 413 }
414 } 414 }
415 415
416 private void setState(State state) { 416 private void setInternalState(State state) {
417 logger_.fine(state + "\n"); 417 logger_.fine(state + "\n");
418 this.state = state; 418 this.internalState = state;
419 onStateChanged.emit(new FileTransfer.State(getExternalState(state))); 419 onStateChanged.emit(new FileTransfer.State(getExternalState(state)));
420 } 420 }
421 421
422 @Override
423 public com.isode.stroke.filetransfer.FileTransfer.State getState() {
424 return new FileTransfer.State(getExternalState(internalState));
425 }
426
422 private void setFinishedState(FileTransfer.State.Type type, final FileTransferError error) { 427 private void setFinishedState(FileTransfer.State.Type type, final FileTransferError error) {
423 logger_.fine("\n"); 428 logger_.fine("\n");
424 this.state = State.Finished; 429 this.internalState = State.Finished;
425 onStateChanged.emit(new FileTransfer.State(type)); 430 onStateChanged.emit(new FileTransfer.State(type));
426 onFinished.emit(error); 431 onFinished.emit(error);
427 } 432 }