01: /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */
02: /*
03: Copyright (c) 2002-2008 ymnk, JCraft,Inc. All rights reserved.
04:
05: Redistribution and use in source and binary forms, with or without
06: modification, are permitted provided that the following conditions are met:
07:
08: 1. Redistributions of source code must retain the above copyright notice,
09: this list of conditions and the following disclaimer.
10:
11: 2. Redistributions in binary form must reproduce the above copyright
12: notice, this list of conditions and the following disclaimer in
13: the documentation and/or other materials provided with the distribution.
14:
15: 3. The names of the authors may not be used to endorse or promote products
16: derived from this software without specific prior written permission.
17:
18: THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
19: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20: FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
21: INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
22: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
24: OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25: LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26: NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
27: EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28: */
29:
30: package com.jcraft.jsch;
31:
32: abstract class Request {
33: private boolean reply = false;
34: private Session session = null;
35: private Channel channel = null;
36:
37: void request(Session session, Channel channel) throws Exception {
38: this .session = session;
39: this .channel = channel;
40: if (channel.connectTimeout > 0) {
41: setReply(true);
42: }
43: }
44:
45: boolean waitForReply() {
46: return reply;
47: }
48:
49: void setReply(boolean reply) {
50: this .reply = reply;
51: }
52:
53: void write(Packet packet) throws Exception {
54: if (reply) {
55: channel.reply = -1;
56: }
57: session.write(packet);
58: if (reply) {
59: long start = System.currentTimeMillis();
60: long timeout = channel.connectTimeout;
61: while (channel.isConnected() && channel.reply == -1) {
62: try {
63: Thread.sleep(10);
64: } catch (Exception ee) {
65: }
66: if (timeout > 0L
67: && (System.currentTimeMillis() - start) > timeout) {
68: channel.reply = 0;
69: throw new JSchException("channel request: timeout");
70: }
71: }
72:
73: if (channel.reply == 0) {
74: throw new JSchException(
75: "failed to send channel request");
76: }
77: }
78: }
79: }
|