blob: fbfd6f8e15d20b05c8f7960170ddb250c08f49f6 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_66) on Fri Jan 15 14:33:43 CET 2016 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PipeDataReceiver (Apache Mina SSHD :: Core 1.1.0 API)</title>
<meta name="date" content="2016-01-15">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="PipeDataReceiver (Apache Mina SSHD :: Core 1.1.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/PipeDataReceiver.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/sshd/server/channel/OpenChannelException.html" title="class in org.apache.sshd.server.channel"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/sshd/server/channel/PuttyRequestHandler.html" title="class in org.apache.sshd.server.channel"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/sshd/server/channel/PipeDataReceiver.html" target="_top">Frames</a></li>
<li><a href="PipeDataReceiver.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.org.apache.sshd.common.util.logging.AbstractLoggingBean">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.sshd.server.channel</div>
<h2 title="Class PipeDataReceiver" class="title">Class PipeDataReceiver</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li><a href="../../../../../org/apache/sshd/common/util/logging/AbstractLoggingBean.html" title="class in org.apache.sshd.common.util.logging">org.apache.sshd.common.util.logging.AbstractLoggingBean</a></li>
<li>
<ul class="inheritance">
<li>org.apache.sshd.server.channel.PipeDataReceiver</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a>, <a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html" title="interface in org.apache.sshd.server.channel">ChannelDataReceiver</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="typeNameLabel">PipeDataReceiver</span>
extends <a href="../../../../../org/apache/sshd/common/util/logging/AbstractLoggingBean.html" title="class in org.apache.sshd.common.util.logging">AbstractLoggingBean</a>
implements <a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html" title="interface in org.apache.sshd.server.channel">ChannelDataReceiver</a></pre>
<div class="block"><a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html" title="interface in org.apache.sshd.server.channel"><code>ChannelDataReceiver</code></a> that buffers the received data into byte buffer
and provides an <a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> to consume them.</div>
<dl>
<dt><span class="simpleTagLabel">Author:</span></dt>
<dd>Kohsuke Kawaguchi</dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.sshd.common.util.logging.AbstractLoggingBean">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.sshd.common.util.logging.<a href="../../../../../org/apache/sshd/common/util/logging/AbstractLoggingBean.html" title="class in org.apache.sshd.common.util.logging">AbstractLoggingBean</a></h3>
<code><a href="../../../../../org/apache/sshd/common/util/logging/AbstractLoggingBean.html#log">log</a></code></li>
</ul>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/sshd/server/channel/PipeDataReceiver.html#PipeDataReceiver-org.apache.sshd.common.PropertyResolver-org.apache.sshd.common.channel.Window-">PipeDataReceiver</a></span>(<a href="../../../../../org/apache/sshd/common/PropertyResolver.html" title="interface in org.apache.sshd.common">PropertyResolver</a>&nbsp;resolver,
<a href="../../../../../org/apache/sshd/common/channel/Window.html" title="class in org.apache.sshd.common.channel">Window</a>&nbsp;localWindow)</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/sshd/server/channel/PipeDataReceiver.html#close--">close</a></span>()</code>
<div class="block">Called to indicate EOF.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/sshd/server/channel/PipeDataReceiver.html#data-org.apache.sshd.server.channel.ChannelSession-byte:A-int-int-">data</a></span>(<a href="../../../../../org/apache/sshd/server/channel/ChannelSession.html" title="class in org.apache.sshd.server.channel">ChannelSession</a>&nbsp;channel,
byte[]&nbsp;buf,
int&nbsp;start,
int&nbsp;len)</code>
<div class="block">
Called when the server receives additional bytes from the client.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/sshd/server/channel/PipeDataReceiver.html#getIn--">getIn</a></span>()</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="PipeDataReceiver-org.apache.sshd.common.PropertyResolver-org.apache.sshd.common.channel.Window-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>PipeDataReceiver</h4>
<pre>public&nbsp;PipeDataReceiver(<a href="../../../../../org/apache/sshd/common/PropertyResolver.html" title="interface in org.apache.sshd.common">PropertyResolver</a>&nbsp;resolver,
<a href="../../../../../org/apache/sshd/common/channel/Window.html" title="class in org.apache.sshd.common.channel">Window</a>&nbsp;localWindow)</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getIn--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getIn</h4>
<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;getIn()</pre>
</li>
</ul>
<a name="close--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
<pre>public&nbsp;void&nbsp;close()
throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html#close--">ChannelDataReceiver</a></code></span></div>
<div class="block">Called to indicate EOF. The client will no longer send us any more data.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html?is-external=true#close--" title="class or interface in java.io">close</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html#close--">close</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html" title="interface in org.apache.sshd.server.channel">ChannelDataReceiver</a></code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if failed</dd>
</dl>
</li>
</ul>
<a name="data-org.apache.sshd.server.channel.ChannelSession-byte:A-int-int-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>data</h4>
<pre>public&nbsp;int&nbsp;data(<a href="../../../../../org/apache/sshd/server/channel/ChannelSession.html" title="class in org.apache.sshd.server.channel">ChannelSession</a>&nbsp;channel,
byte[]&nbsp;buf,
int&nbsp;start,
int&nbsp;len)
throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html#data-org.apache.sshd.server.channel.ChannelSession-byte:A-int-int-">ChannelDataReceiver</a></code></span></div>
<div class="block"><p>
Called when the server receives additional bytes from the client.
</p>
<p>
SSH channels use the windowing mechanism to perform flow control, much like TCP does.
The server gives the client the initial window size, which represents the number of
bytes the client can send to the server. As the server receives data, it can
send a message to the client to allow it to send more data.
</p>
<p>
The return value from this method is used to control this behaviour.
Intuitively speaking, the callee returns the number of bytes consumed by this method,
by the time this method returns. Picture a one-way long bridge (for example Golden Gate Bridge)
with toll plazas on both sides. The window size is the maximum number of cars
allowed on the bridge. Here we are on the receiving end, so our job here is to
count the number of cars as it leaves the bridge, and if enough of them left,
we'll signal the sending end that they can let in more cars. The return value of this
method counts the number of cars that are leaving in this batch.
</p>
<p>
In simple cases, where the callee has consumed the bytes before it returns,
the return value must be the same value as the 'len' parameter given.
</p>
<p>
On the other hand, if the callee is queueing up the received bytes somewhere
to be consumed later (for example by another thread), then this method should
return 0, for the bytes aren't really consumed yet. And when at some later point
the bytes are actually used, then you'll invoke <code>channel.getLocalWindow().consumeAndCheck(len)</code>
to let the channel know that bytes are consumed.
</p>
<p>
This behaviour will result in a better flow control, as the server will not
allow the SSH client to overflow its buffer. If instead you always return the value
passed in the 'len' parameter, the place where you are queueing up bytes may overflow.
</p>
<p>
In either case, the callee must account for every bytes it receives in this method.
Returning 0 and failing to call back <code>channel.getLocalWindow().consumeAndCheck(len)</code> later
will dry up the window size, and eventually the client will stop sending you any data.
</p>
<p>
In the SSH protocol, this method invocation is triggered by a <tt>SSH_MSG_CHANNEL_DATA</tt> message.
</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html#data-org.apache.sshd.server.channel.ChannelSession-byte:A-int-int-">data</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html" title="interface in org.apache.sshd.server.channel">ChannelDataReceiver</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>channel</code> - The caller to which this <a href="../../../../../org/apache/sshd/server/channel/ChannelDataReceiver.html" title="interface in org.apache.sshd.server.channel"><code>ChannelDataReceiver</code></a> is assigned. Never null.</dd>
<dd><code>buf</code> - Holds the bytes received. This buffer belongs to the caller, and it might get reused
by the caller as soon as this method returns.</dd>
<dd><code>start</code> - buf[start] is the first byte that received from the client.</dd>
<dd><code>len</code> - the length of the bytes received. Can be zero.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The number of bytes consumed, for the purpose of the flow control.
For a simple use case, you return the value given by the 'len' parameter.
See the method javadoc for more details.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if failed to consume the data</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/PipeDataReceiver.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/sshd/server/channel/OpenChannelException.html" title="class in org.apache.sshd.server.channel"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/sshd/server/channel/PuttyRequestHandler.html" title="class in org.apache.sshd.server.channel"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/sshd/server/channel/PipeDataReceiver.html" target="_top">Frames</a></li>
<li><a href="PipeDataReceiver.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.org.apache.sshd.common.util.logging.AbstractLoggingBean">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2008&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>