diff src/ch/ethz/ssh2/channel/ChannelManager.java @ 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 91a31873c42a
children d2ee20d9dff1
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) {