changeset 288:5824a1475be4 ganymed

start conversion from trilead to ganymed
author Carl Byington <carl@five-ten-sg.com>
date Fri, 18 Jul 2014 19:59:32 -0700
parents db9b028016de
children d2ee20d9dff1
files src/ch/ethz/ssh2/channel/ChannelManager.java src/ch/ethz/ssh2/packets/PacketChannelAuthAgentReq.java
diffstat 2 files changed, 62 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ch/ethz/ssh2/channel/ChannelManager.java	Fri Jul 18 19:52:08 2014 -0700
+++ b/src/ch/ethz/ssh2/channel/ChannelManager.java	Fri Jul 18 19:59:32 2014 -0700
@@ -46,7 +46,9 @@
     private int globalSuccessCounter = 0;
     private int globalFailedCounter = 0;
 
-    private final Map<Integer, RemoteForwardingData> remoteForwardings = new HashMap<Integer, RemoteForwardingData>();
+    private final HashMap<Integer, RemoteForwardingData> remoteForwardings = new HashMap<Integer, RemoteForwardingData>();
+
+    private AuthAgentCallback authAgent;
 
     private final List<IChannelWorkerThread> listenerThreads = new ArrayList<IChannelWorkerThread>();
 
@@ -460,6 +462,35 @@
         }
     }
 
+    /**
+     * @param agent
+     * @throws IOException
+     */
+    public boolean requestChannelAgentForwarding(Channel c, AuthAgentCallback authAgent) throws IOException {
+        synchronized (this) {
+            if (this.authAgent != null)
+                throw new IllegalStateException("Auth agent already exists");
+
+            this.authAgent = authAgent;
+        }
+
+        synchronized (channels) {
+            globalSuccessCounter = globalFailedCounter = 0;
+        }
+
+        log.debug("Requesting agent forwarding");
+
+        PacketChannelAuthAgentReq aar = new PacketChannelAuthAgentReq(c.remoteID);
+        tm.sendMessage(aar.getPayload());
+
+        if (waitForChannelRequestResult(c) == false) {
+            authAgent = null;
+            return false;
+        }
+
+        return true;
+    }
+
     public void registerThread(IChannelWorkerThread thr) throws IOException {
         synchronized(listenerThreads) {
             if(listenerThreadsAllowed == false) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ch/ethz/ssh2/packets/PacketChannelAuthAgentReq.java	Fri Jul 18 19:59:32 2014 -0700
@@ -0,0 +1,30 @@
+package ch.ethz.ssh2.packets;
+
+/**
+ * PacketGlobalAuthAgent.
+ *
+ * @author Kenny Root, kenny@the-b.org
+ * @version $Id$
+ */
+public class PacketChannelAuthAgentReq {
+    byte[] payload;
+
+    public int recipientChannelID;
+
+    public PacketChannelAuthAgentReq(int recipientChannelID) {
+        this.recipientChannelID = recipientChannelID;
+    }
+
+    public byte[] getPayload() {
+        if (payload == null) {
+            TypesWriter tw = new TypesWriter();
+            tw.writeByte(Packets.SSH_MSG_CHANNEL_REQUEST);
+            tw.writeUINT32(recipientChannelID);
+            tw.writeString("auth-agent-req@openssh.com");
+            tw.writeBoolean(true); // want reply
+            payload = tw.getBytes();
+        }
+
+        return payload;
+    }
+}