# HG changeset patch # User Carl Byington # Date 1405738772 25200 # Node ID 5824a1475be41dbfb6edbac851a60ad716b524f9 # Parent db9b028016de05242611fe24ecaa83fc25c98617 start conversion from trilead to ganymed diff -r db9b028016de -r 5824a1475be4 src/ch/ethz/ssh2/channel/ChannelManager.java --- 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 remoteForwardings = new HashMap(); + private final HashMap remoteForwardings = new HashMap(); + + private AuthAgentCallback authAgent; private final List listenerThreads = new ArrayList(); @@ -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) { diff -r db9b028016de -r 5824a1475be4 src/ch/ethz/ssh2/packets/PacketChannelAuthAgentReq.java --- /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; + } +}