blob: a3a5081579bb2ac44cd2ea6c425eff16155647fd [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.14.1) on Mon Apr 04 09:09:38 CDT 2022 -->
<title>HttpInput.Interceptor (Eclipse Jetty API Doc - v10.0.9)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2022-04-04">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="HttpInput.Interceptor (Eclipse Jetty API Doc - v10.0.9)";
}
}
catch(err) {
}
//-->
var data = {"i0":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/HttpInput.Interceptor.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" id="allclasses_navbar_top">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</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>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&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>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.eclipse.jetty.server</a></div>
<h2 title="Interface HttpInput.Interceptor" class="title">Interface HttpInput.Interceptor</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="handler/gzip/GzipHttpInputInterceptor.html" title="class in org.eclipse.jetty.server.handler.gzip">GzipHttpInputInterceptor</a></code></dd>
</dl>
<dl>
<dt>Enclosing class:</dt>
<dd><a href="HttpInput.html" title="class in org.eclipse.jetty.server">HttpInput</a></dd>
</dl>
<hr>
<pre>public static interface <span class="typeNameLabel">HttpInput.Interceptor</span></pre>
<div class="block"><p><a href="HttpInput.Content.html" title="class in org.eclipse.jetty.server"><code>HttpInput.Content</code></a> interceptor that can be registered using <a href="HttpInput.html#setInterceptor(org.eclipse.jetty.server.HttpInput.Interceptor)"><code>HttpInput.setInterceptor(Interceptor)</code></a> or
<a href="HttpInput.html#addInterceptor(org.eclipse.jetty.server.HttpInput.Interceptor)"><code>HttpInput.addInterceptor(Interceptor)</code></a>.
When <a href="HttpInput.Content.html" title="class in org.eclipse.jetty.server"><code>HttpInput.Content</code></a> instances are generated, they are passed to the registered interceptor (if any)
that is then responsible for providing the actual content that is consumed by <a href="HttpInput.html#read(byte%5B%5D,int,int)"><code>HttpInput.read(byte[], int, int)</code></a> and its
sibling methods.</p>
A minimal implementation could be as simple as:
<pre>
public HttpInput.Content readFrom(HttpInput.Content content)
{
LOGGER.debug("read content: {}", asString(content));
return content;
}
</pre>
which would not do anything with the content besides logging it. A more involved implementation could look like the
following:
<pre>
public HttpInput.Content readFrom(HttpInput.Content content)
{
if (content.hasContent())
this.processedContent = processContent(content.getByteBuffer());
if (content.isEof())
disposeResources();
return content.isSpecial() ? content : this.processedContent;
}
</pre>
Implementors of this interface must keep the following in mind:
<ul>
<li>Calling <a href="HttpInput.Content.html#getByteBuffer()"><code>HttpInput.Content.getByteBuffer()</code></a> when <a href="HttpInput.Content.html#isSpecial()"><code>HttpInput.Content.isSpecial()</code></a> returns <code>true</code> throws
<code>IllegalStateException</code>.</li>
<li>A <a href="HttpInput.Content.html" title="class in org.eclipse.jetty.server"><code>HttpInput.Content</code></a> can both be non-special and have <a href="HttpInput.Content.html#isEof()"><code>HttpInput.Content.isEof()</code></a> return <code>true</code>.</li>
<li><a href="HttpInput.Content.html" title="class in org.eclipse.jetty.server"><code>HttpInput.Content</code></a> extends <a href="../util/Callback.html" title="interface in org.eclipse.jetty.util"><code>Callback</code></a> to manage the lifecycle of the contained byte buffer. The code calling
<a href="#readFrom(org.eclipse.jetty.server.HttpInput.Content)"><code>readFrom(Content)</code></a> is responsible for managing the lifecycle of both the passed and the returned content
instances, once <code>Buffer.hasRemaining()</code> returns <code>false</code> <a href="HttpInput.html" title="class in org.eclipse.jetty.server"><code>HttpInput</code></a> will make sure
<a href="../util/Callback.html#succeeded()"><code>Callback.succeeded()</code></a> is called, or <a href="../util/Callback.html#failed(java.lang.Throwable)"><code>Callback.failed(Throwable)</code></a> if an error occurs.</li>
<li>After <a href="#readFrom(org.eclipse.jetty.server.HttpInput.Content)"><code>readFrom(Content)</code></a> is called for the first time, subsequent <a href="#readFrom(org.eclipse.jetty.server.HttpInput.Content)"><code>readFrom(Content)</code></a> calls will
occur only after the contained byte buffer is empty (see above) or at any time if the returned content was special.</li>
<li>Once <a href="#readFrom(org.eclipse.jetty.server.HttpInput.Content)"><code>readFrom(Content)</code></a> returned a special content, subsequent calls to <a href="#readFrom(org.eclipse.jetty.server.HttpInput.Content)"><code>readFrom(Content)</code></a> must
always return the same special content.</li>
<li>Implementations implementing both this interface and <a href="../util/component/Destroyable.html" title="interface in org.eclipse.jetty.util.component"><code>Destroyable</code></a> will have their
<a href="../util/component/Destroyable.html#destroy()"><code>Destroyable.destroy()</code></a> method called when <a href="HttpInput.html#recycle()"><code>HttpInput.recycle()</code></a> is called.</li>
</ul></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="handler/gzip/GzipHttpInputInterceptor.html" title="class in org.eclipse.jetty.server.handler.gzip"><code>GzipHttpInputInterceptor</code></a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<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="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="HttpInput.Content.html" title="class in org.eclipse.jetty.server">HttpInput.Content</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readFrom(org.eclipse.jetty.server.HttpInput.Content)">readFrom</a></span>&#8203;(<a href="HttpInput.Content.html" title="class in org.eclipse.jetty.server">HttpInput.Content</a>&nbsp;content)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="readFrom(org.eclipse.jetty.server.HttpInput.Content)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>readFrom</h4>
<pre class="methodSignature"><a href="HttpInput.Content.html" title="class in org.eclipse.jetty.server">HttpInput.Content</a>&nbsp;readFrom&#8203;(<a href="HttpInput.Content.html" title="class in org.eclipse.jetty.server">HttpInput.Content</a>&nbsp;content)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>content</code> - The content to be intercepted.
The content will be modified with any data the interceptor consumes. There is no requirement
that all the data is consumed by the interceptor but at least one byte must be consumed
unless the returned content is the passed content instance.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The intercepted content or null if interception is completed for that content.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/HttpInput.Interceptor.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" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses.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>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&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>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 1995&#x2013;2022 <a href="https://webtide.com">Webtide</a>. All rights reserved.</small></p>
</footer>
</body>
</html>