From 626f5415c74641c4dace8a6b38e2ff0a88da360e Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Thu, 26 Nov 2015 17:00:32 +0000
Subject: [PATCH] add FROM_PORT and TO_PORT to client

---
 apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java | 8 +++++++-
 apps/sam/java/src/net/i2p/sam/client/SAMStreamSink.java | 5 +++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java
index 9c36091d02..c031ea8c69 100644
--- a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java
+++ b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java
@@ -227,7 +227,13 @@ public class SAMStreamSend {
                 _context.statManager().createRateStat("send." + _connectionId + ".started", "When we start", "swarm", new long[] { 5*60*1000 });
                 _context.statManager().createRateStat("send." + _connectionId + ".lifetime", "How long we talk to a peer", "swarm", new long[] { 5*60*1000 });
                 
-                byte msg[] = ("STREAM CONNECT ID=" + _connectionId + " DESTINATION=" + _remoteDestination + "\n").getBytes();
+                StringBuilder buf = new StringBuilder(1024);
+                buf.append("STREAM CONNECT ID=").append(_connectionId).append(" DESTINATION=").append(_remoteDestination);
+                // not supported until 3.2 but 3.0-3.1 will ignore
+                if (_isV3)
+                    buf.append(" FROM_PORT=1234 TO_PORT=5678");
+                buf.append('\n');
+                byte[] msg = DataHelper.getASCII(buf.toString());
                 synchronized (_samOut) {
                     _samOut.write(msg);
                     _samOut.flush();
diff --git a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSink.java b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSink.java
index 1289691ea6..24500eb62d 100644
--- a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSink.java
+++ b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSink.java
@@ -258,7 +258,8 @@ public class SAMStreamSink {
                 if (!isMaster) {
                     // only for v3
                     //String req = "STREAM ACCEPT SILENT=true ID=" + _v3ID + "\n";
-                    String req = "STREAM ACCEPT SILENT=false ID=" + _v3ID + "\n";
+                    // TO_PORT not supported until 3.2 but 3.0-3.1 will ignore
+                    String req = "STREAM ACCEPT SILENT=false TO_PORT=5678 ID=" + _v3ID + "\n";
                     samOut.write(req.getBytes());
                     samOut.flush();
                     if (_log.shouldLog(Log.DEBUG))
@@ -268,7 +269,7 @@ public class SAMStreamSink {
                     //if (!ok) 
                     //    throw new IOException("Stream status failed");
                     if (_log.shouldLog(Log.DEBUG))
-                        _log.debug("got STREAM STATUS, awaiting connetion");
+                        _log.debug("got STREAM STATUS, awaiting connection");
                     return "OK";
                 }
                 _isV3 = VersionComparator.comp(hisVersion, "3") >= 0;
-- 
GitLab