private byte[] WaitHandle(SFTPPacket requestPacket, uint requestId)
{
byte[] handle = null;
_eventHandler.ClearResponseBuffer();
Transmit(requestPacket);
_eventHandler.WaitResponse(
delegate(SFTPPacketType packetType, SSHDataReader dataReader) {
if (packetType == SFTPPacketType.SSH_FXP_STATUS) {
SFTPClientErrorException exception = SFTPClientErrorException.Create(dataReader);
if (exception.ID == requestId)
throw exception;
}
else if (packetType == SFTPPacketType.SSH_FXP_HANDLE) {
uint id = dataReader.ReadUInt32();
if (id == requestId) {
handle = dataReader.ReadByteString();
return true; // processed
}
}
return false; // ignored
},
_protocolTimeout
);
// sanity check
if (Volatile.Read(ref handle) == null) {
throw new SFTPClientException("Missing SSH_FXP_HANDLE");
}
return handle;
}