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 bab944162e5f5c646b3775f53ed009aad984fdc2..551e686acc0e13c142bcec9df0226f5f95a7298f 100644 --- a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java +++ b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java @@ -44,12 +44,13 @@ public class SAMStreamSend { private static I2PSSLSocketFactory _sslSocketFactory; private static final int STREAM=0, DG=1, V1DG=2, RAW=3, V1RAW=4; - private static final String USAGE = "Usage: SAMStreamSend [-s] [-m mode] [-v version] [-b samHost] [-p samPort] [-u user] [-w password] peerDestFile dataDir\n" + + private static final String USAGE = "Usage: SAMStreamSend [-s] [-m mode] [-v version] [-b samHost] [-p samPort] [-o opt=val] [-u user] [-w password] peerDestFile dataDir\n" + " modes: stream: 0; datagram: 1; v1datagram: 2; raw: 3; v1raw: 4\n" + - " -s: use SSL"; + " -s: use SSL\n" + + " multiple -o session options are allowed"; public static void main(String args[]) { - Getopt g = new Getopt("SAM", args, "sb:m:p:u:v:w:"); + Getopt g = new Getopt("SAM", args, "sb:m:o:p:u:v:w:"); boolean isSSL = false; int mode = STREAM; String version = "1.0"; @@ -57,6 +58,7 @@ public class SAMStreamSend { String port = "7656"; String user = null; String password = null; + String opts = ""; int c; while ((c = g.getopt()) != -1) { switch (c) { @@ -80,6 +82,10 @@ public class SAMStreamSend { host = g.getOptarg(); break; + case 'o': + opts = opts + ' ' + g.getOptarg(); + break; + case 'p': port = g.getOptarg(); break; @@ -118,7 +124,7 @@ public class SAMStreamSend { I2PAppContext ctx = I2PAppContext.getGlobalContext(); SAMStreamSend sender = new SAMStreamSend(ctx, host, port, args[startArgs], args[startArgs + 1]); - sender.startup(version, isSSL, mode, user, password); + sender.startup(version, isSSL, mode, user, password, opts); } public SAMStreamSend(I2PAppContext ctx, String samHost, String samPort, String destFile, String dataFile) { @@ -133,7 +139,7 @@ public class SAMStreamSend { _remotePeers = new HashMap<String, Sender>(); } - public void startup(String version, boolean isSSL, int mode, String user, String password) { + public void startup(String version, boolean isSSL, int mode, String user, String password, String sessionOpts) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Starting up"); try { @@ -144,7 +150,7 @@ public class SAMStreamSend { if (_log.shouldLog(Log.DEBUG)) _log.debug("Reader created"); OutputStream out = sock.getOutputStream(); - String ourDest = handshake(out, version, true, eventHandler, mode, user, password); + String ourDest = handshake(out, version, true, eventHandler, mode, user, password, sessionOpts); if (ourDest == null) throw new IOException("handshake failed"); if (_log.shouldLog(Log.DEBUG)) @@ -157,7 +163,7 @@ public class SAMStreamSend { if (_log.shouldLog(Log.DEBUG)) _log.debug("Reader2 created"); out = sock2.getOutputStream(); - String ok = handshake(out, version, false, eventHandler, mode, user, password); + String ok = handshake(out, version, false, eventHandler, mode, user, password, ""); if (ok == null) throw new IOException("2nd handshake failed"); if (_log.shouldLog(Log.DEBUG)) @@ -215,7 +221,8 @@ public class SAMStreamSend { /** @return our b64 dest or null */ private String handshake(OutputStream samOut, String version, boolean isMaster, - SAMEventHandler eventHandler, int mode, String user, String password) { + SAMEventHandler eventHandler, int mode, String user, String password, + String opts) { synchronized (samOut) { try { if (user != null && password != null) @@ -246,7 +253,7 @@ public class SAMStreamSend { style = "DATAGRAM"; else style = "RAW"; - String req = "SESSION CREATE STYLE=" + style + " DESTINATION=TRANSIENT " + _conOptions + "\n"; + String req = "SESSION CREATE STYLE=" + style + " DESTINATION=TRANSIENT " + _conOptions + ' ' + opts + '\n'; samOut.write(req.getBytes()); samOut.flush(); if (_log.shouldLog(Log.DEBUG)) 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 19c7e21d34b379f613d28a455cda30d58fb47043..e8682fb512403d9c84e9d439e2ac41e40a79b417 100644 --- a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSink.java +++ b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSink.java @@ -47,9 +47,10 @@ public class SAMStreamSink { private static I2PSSLSocketFactory _sslSocketFactory; private static final int STREAM=0, DG=1, V1DG=2, RAW=3, V1RAW=4; - private static final String USAGE = "Usage: SAMStreamSink [-s] [-m mode] [-v version] [-b samHost] [-p samPort] [-u user] [-w password] myDestFile sinkDir\n" + + private static final String USAGE = "Usage: SAMStreamSink [-s] [-m mode] [-v version] [-b samHost] [-p samPort] [-o opt=val] [-u user] [-w password] myDestFile sinkDir\n" + " modes: stream: 0; datagram: 1; v1datagram: 2; raw: 3; v1raw: 4\n" + - " -s: use SSL"; + " -s: use SSL\n" + + " multiple -o session options are allowed"; public static void main(String args[]) { Getopt g = new Getopt("SAM", args, "sb:m:p:u:v:w:"); @@ -60,6 +61,7 @@ public class SAMStreamSink { String port = "7656"; String user = null; String password = null; + String opts = ""; int c; while ((c = g.getopt()) != -1) { switch (c) { @@ -83,6 +85,10 @@ public class SAMStreamSink { host = g.getOptarg(); break; + case 'o': + opts = opts + ' ' + g.getOptarg(); + break; + case 'p': port = g.getOptarg(); break; @@ -121,7 +127,7 @@ public class SAMStreamSink { I2PAppContext ctx = I2PAppContext.getGlobalContext(); SAMStreamSink sink = new SAMStreamSink(ctx, host, port, args[startArgs], args[startArgs + 1]); - sink.startup(version, isSSL, mode, user, password); + sink.startup(version, isSSL, mode, user, password, opts); } public SAMStreamSink(I2PAppContext ctx, String samHost, String samPort, String destFile, String sinkDir) { @@ -136,7 +142,7 @@ public class SAMStreamSink { _remotePeers = new HashMap<String, Sink>(); } - public void startup(String version, boolean isSSL, int mode, String user, String password) { + public void startup(String version, boolean isSSL, int mode, String user, String password, String sessionOpts) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Starting up"); try { @@ -147,7 +153,7 @@ public class SAMStreamSink { _reader.startReading(); if (_log.shouldLog(Log.DEBUG)) _log.debug("Reader created"); - String ourDest = handshake(out, version, true, eventHandler, mode, user, password); + String ourDest = handshake(out, version, true, eventHandler, mode, user, password, sessionOpts); if (ourDest == null) throw new IOException("handshake failed"); if (_log.shouldLog(Log.DEBUG)) @@ -165,7 +171,7 @@ public class SAMStreamSink { _reader2.startReading(); if (_log.shouldLog(Log.DEBUG)) _log.debug("Reader2 created"); - String ok = handshake(out, version, false, eventHandler, mode, user, password); + String ok = handshake(out, version, false, eventHandler, mode, user, password, ""); if (ok == null) throw new IOException("2nd handshake failed"); if (_log.shouldLog(Log.DEBUG)) @@ -393,7 +399,8 @@ public class SAMStreamSink { /** @return our b64 dest or null */ private String handshake(OutputStream samOut, String version, boolean isMaster, - SAMEventHandler eventHandler, int mode, String user, String password) { + SAMEventHandler eventHandler, int mode, String user, String password, + String sopts) { synchronized (samOut) { try { if (user != null && password != null) @@ -468,7 +475,7 @@ public class SAMStreamSink { style = "DATAGRAM"; else style = "RAW"; - String req = "SESSION CREATE STYLE=" + style + " DESTINATION=" + dest + " " + _conOptions + "\n"; + String req = "SESSION CREATE STYLE=" + style + " DESTINATION=" + dest + ' ' + _conOptions + ' ' + sopts + '\n'; samOut.write(req.getBytes()); samOut.flush(); if (_log.shouldLog(Log.DEBUG))