summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/filetransfer')
-rw-r--r--src/com/isode/stroke/filetransfer/ByteArrayReadBytestream.java10
-rw-r--r--src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java3
-rw-r--r--src/com/isode/stroke/filetransfer/SOCKS5BytestreamClientSession.java15
-rw-r--r--src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerSession.java17
4 files changed, 26 insertions, 19 deletions
diff --git a/src/com/isode/stroke/filetransfer/ByteArrayReadBytestream.java b/src/com/isode/stroke/filetransfer/ByteArrayReadBytestream.java
index 41528fa..5b3542f 100644
--- a/src/com/isode/stroke/filetransfer/ByteArrayReadBytestream.java
+++ b/src/com/isode/stroke/filetransfer/ByteArrayReadBytestream.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010-2015 Isode Limited.
+ * Copyright (c) 2010-2016 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
@@ -11,6 +11,8 @@
package com.isode.stroke.filetransfer;
+import java.util.Arrays;
+
import com.isode.stroke.base.ByteArray;
public class ByteArrayReadBytestream extends ReadBytestream {
@@ -30,9 +32,9 @@ public class ByteArrayReadBytestream extends ReadBytestream {
if (position + readSize > data.getSize()) {
readSize = data.getSize() - position;
}
- String s = data.toString();
- s = s.substring(position, position+readSize);
- ByteArray result = new ByteArray(s);
+ byte[] rawBytes = data.getData();
+ byte[] resultRawBytes = Arrays.copyOfRange(rawBytes, position, position+readSize);
+ ByteArray result = new ByteArray(resultRawBytes);
onRead.emit(result);
position += readSize;
diff --git a/src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java b/src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java
index 10760a1..c5a1f11 100644
--- a/src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java
+++ b/src/com/isode/stroke/filetransfer/OutgoingJingleFileTransfer.java
@@ -4,7 +4,7 @@
* 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.
*/
@@ -100,6 +100,7 @@ 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;
diff --git a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamClientSession.java b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamClientSession.java
index 3e51b5f..18e4484 100644
--- a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamClientSession.java
+++ b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamClientSession.java
@@ -55,7 +55,7 @@ public class SOCKS5BytestreamClientSession extends SOCKS5AbstractBytestreamSessi
private State state;
- private ByteArray unprocessedData;
+ private final ByteArray unprocessedData = new ByteArray();
private ByteArray authenticateAddress;
private int chunkSize;
@@ -227,12 +227,9 @@ public class SOCKS5BytestreamClientSession extends SOCKS5AbstractBytestreamSessi
private void authenticate() {
logger_.fine("\n");
- SafeByteArray header = new SafeByteArray(new byte[]{0x05, 0x01, 0x00, 0x03});
- SafeByteArray message = header;
- String destinationlength = Integer.toString(destination.length());
- message.append(new SafeByteArray(destinationlength));
- authenticateAddress = new ByteArray(destination);
- message.append(authenticateAddress);
+ SafeByteArray message = new SafeByteArray(new byte[]{0x05, 0x01, 0x00, 0x03});
+ message.append((byte)destination.length());
+ message.append(destination);
message.append(new SafeByteArray(new byte[]{0x00, 0x00})); // 2 byte for port
connection.write(message);
state = State.Authenticating;
@@ -324,7 +321,9 @@ public class SOCKS5BytestreamClientSession extends SOCKS5AbstractBytestreamSessi
private void closeConnection() {
connectFinishedConnection.disconnect();
- dataWrittenConnection.disconnect();
+ if (dataWrittenConnection != null) {
+ dataWrittenConnection.disconnect();
+ }
dataReadConnection.disconnect();
disconnectedConnection.disconnect();
connection.disconnect();
diff --git a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerSession.java b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerSession.java
index 8452e36..8facca0 100644
--- a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerSession.java
+++ b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerSession.java
@@ -15,6 +15,7 @@ import com.isode.stroke.network.Connection;
import com.isode.stroke.network.HostAddressPort;
import com.isode.stroke.base.ByteArray;
import com.isode.stroke.base.SafeByteArray;
+import com.isode.stroke.base.StartStoppable;
import com.isode.stroke.signals.SignalConnection;
import com.isode.stroke.signals.Signal1;
import com.isode.stroke.signals.Signal;
@@ -23,11 +24,11 @@ import com.isode.stroke.signals.Slot1;
import java.util.logging.Logger;
-public class SOCKS5BytestreamServerSession extends SOCKS5AbstractBytestreamSession {
+public class SOCKS5BytestreamServerSession extends SOCKS5AbstractBytestreamSession implements StartStoppable {
private Connection connection;
private SOCKS5BytestreamRegistry bytestreams;
- private ByteArray unprocessedData;
+ private ByteArray unprocessedData = new ByteArray();
private State state;
private int chunkSize;
private String streamID = "";
@@ -131,8 +132,12 @@ public class SOCKS5BytestreamServerSession extends SOCKS5AbstractBytestreamSess
disconnectedConnection.disconnect();
dataReadConnection.disconnect();
- dataWrittenConnection.disconnect();
- dataAvailableConnection.disconnect();
+ if (dataWrittenConnection != null) {
+ dataWrittenConnection.disconnect();
+ }
+ if (dataAvailableConnection != null) {
+ dataAvailableConnection.disconnect();
+ }
readBytestream = null;
state = State.Finished;
if (error) {
@@ -180,10 +185,10 @@ public class SOCKS5BytestreamServerSession extends SOCKS5AbstractBytestreamSess
unprocessedData.clear();
streamID = requestID.toString();
boolean hasBytestream = bytestreams.hasBytestream(streamID);
- SafeByteArray result = new SafeByteArray("0x05");
+ SafeByteArray result = new SafeByteArray((byte)0x05);
result.append(hasBytestream ? (byte)0x0 : (byte)0x4);
result.append(new ByteArray(new byte[]{0x00, 0x03}));
- result.append(Integer.toString(requestID.getSize()));
+ result.append((byte)requestID.getSize());
result.append(requestID.append(new ByteArray(new byte[]{0x00, 0x00})));
if (!hasBytestream) {
logger_.fine("Readstream or Wrtiestream with ID " + streamID + " not found!\n");