<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>ProxyLogicHandler xref</title>
<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
</head>
<body>
<div id="overview"><a href="../../../../../apidocs/org/apache/mina/proxy/ProxyLogicHandler.html">View Javadoc</a></div><pre>

<a name="1" href="#1">1</a>   <em class="jxr_comment">/*</em>
<a name="2" href="#2">2</a>   <em class="jxr_comment"> *  Licensed to the Apache Software Foundation (ASF) under one</em>
<a name="3" href="#3">3</a>   <em class="jxr_comment"> *  or more contributor license agreements.  See the NOTICE file</em>
<a name="4" href="#4">4</a>   <em class="jxr_comment"> *  distributed with this work for additional information</em>
<a name="5" href="#5">5</a>   <em class="jxr_comment"> *  regarding copyright ownership.  The ASF licenses this file</em>
<a name="6" href="#6">6</a>   <em class="jxr_comment"> *  to you under the Apache License, Version 2.0 (the</em>
<a name="7" href="#7">7</a>   <em class="jxr_comment"> *  "License"); you may not use this file except in compliance</em>
<a name="8" href="#8">8</a>   <em class="jxr_comment"> *  with the License.  You may obtain a copy of the License at</em>
<a name="9" href="#9">9</a>   <em class="jxr_comment"> *</em>
<a name="10" href="#10">10</a>  <em class="jxr_comment"> *    <a href="http://www.apache.org/licenses/LICENSE-2.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></em>
<a name="11" href="#11">11</a>  <em class="jxr_comment"> *</em>
<a name="12" href="#12">12</a>  <em class="jxr_comment"> *  Unless required by applicable law or agreed to in writing,</em>
<a name="13" href="#13">13</a>  <em class="jxr_comment"> *  software distributed under the License is distributed on an</em>
<a name="14" href="#14">14</a>  <em class="jxr_comment"> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</em>
<a name="15" href="#15">15</a>  <em class="jxr_comment"> *  KIND, either express or implied.  See the License for the</em>
<a name="16" href="#16">16</a>  <em class="jxr_comment"> *  specific language governing permissions and limitations</em>
<a name="17" href="#17">17</a>  <em class="jxr_comment"> *  under the License.</em>
<a name="18" href="#18">18</a>  <em class="jxr_comment"> *</em>
<a name="19" href="#19">19</a>  <em class="jxr_comment"> */</em>
<a name="20" href="#20">20</a>  <strong class="jxr_keyword">package</strong> org.apache.mina.proxy;
<a name="21" href="#21">21</a>  
<a name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.buffer.IoBuffer;
<a name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.filterchain.IoFilter.NextFilter;
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.write.WriteRequest;
<a name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.proxy.session.ProxyIoSession;
<a name="26" href="#26">26</a>  
<a name="27" href="#27">27</a>  <em class="jxr_javadoccomment">/**</em>
<a name="28" href="#28">28</a>  <em class="jxr_javadoccomment"> * ProxyLogicHandler.java - Interface implemented by classes containing proxy type specific logic.</em>
<a name="29" href="#29">29</a>  <em class="jxr_javadoccomment"> * </em>
<a name="30" href="#30">30</a>  <em class="jxr_javadoccomment"> * @author The Apache MINA Project (dev@mina.apache.org)</em>
<a name="31" href="#31">31</a>  <em class="jxr_javadoccomment"> * @version $Rev: 685703 $, $Date: 2008-08-14 00:14:47 +0200 (Thu, 14 Aug 2008) $</em>
<a name="32" href="#32">32</a>  <em class="jxr_javadoccomment"> * @since MINA 2.0.0-M3</em>
<a name="33" href="#33">33</a>  <em class="jxr_javadoccomment"> */</em>
<a name="34" href="#34">34</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../org/apache/mina/proxy/ProxyLogicHandler.html">ProxyLogicHandler</a> {
<a name="35" href="#35">35</a>      <em class="jxr_javadoccomment">/**</em>
<a name="36" href="#36">36</a>  <em class="jxr_javadoccomment">     * Returns &lt;code&gt;true&lt;/code&gt; if handshaking is complete and</em>
<a name="37" href="#37">37</a>  <em class="jxr_javadoccomment">     * data can be sent through the proxy.</em>
<a name="38" href="#38">38</a>  <em class="jxr_javadoccomment">     */</em>
<a name="39" href="#39">39</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">boolean</strong> isHandshakeComplete();
<a name="40" href="#40">40</a>  
<a name="41" href="#41">41</a>      <em class="jxr_javadoccomment">/**</em>
<a name="42" href="#42">42</a>  <em class="jxr_javadoccomment">     * Handle incoming data during the handshake process. Should consume only the</em>
<a name="43" href="#43">43</a>  <em class="jxr_javadoccomment">     * handshake data from the buffer, leaving any extra data in place.</em>
<a name="44" href="#44">44</a>  <em class="jxr_javadoccomment">     */</em>
<a name="45" href="#45">45</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">void</strong> messageReceived(NextFilter nextFilter, <a href="../../../../org/apache/mina/core/buffer/IoBuffer.html">IoBuffer</a> buf)
<a name="46" href="#46">46</a>              <strong class="jxr_keyword">throws</strong> ProxyAuthException;
<a name="47" href="#47">47</a>  
<a name="48" href="#48">48</a>      <em class="jxr_javadoccomment">/**</em>
<a name="49" href="#49">49</a>  <em class="jxr_javadoccomment">     * Called at each step of the handshake procedure.</em>
<a name="50" href="#50">50</a>  <em class="jxr_javadoccomment">     */</em>
<a name="51" href="#51">51</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">void</strong> doHandshake(NextFilter nextFilter)
<a name="52" href="#52">52</a>              <strong class="jxr_keyword">throws</strong> ProxyAuthException;
<a name="53" href="#53">53</a>  
<a name="54" href="#54">54</a>      <em class="jxr_javadoccomment">/**</em>
<a name="55" href="#55">55</a>  <em class="jxr_javadoccomment">     * Returns the {@link ProxyIoSession}.</em>
<a name="56" href="#56">56</a>  <em class="jxr_javadoccomment">     */</em>
<a name="57" href="#57">57</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">abstract</strong> <a href="../../../../org/apache/mina/proxy/session/ProxyIoSession.html">ProxyIoSession</a> getProxyIoSession();
<a name="58" href="#58">58</a>  
<a name="59" href="#59">59</a>      <em class="jxr_javadoccomment">/**</em>
<a name="60" href="#60">60</a>  <em class="jxr_javadoccomment">     * Enqueue a message to be written once handshaking is complete.</em>
<a name="61" href="#61">61</a>  <em class="jxr_javadoccomment">     */</em>
<a name="62" href="#62">62</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">void</strong> enqueueWriteRequest(<strong class="jxr_keyword">final</strong> NextFilter nextFilter,
<a name="63" href="#63">63</a>              <strong class="jxr_keyword">final</strong> <a href="../../../../org/apache/mina/core/write/WriteRequest.html">WriteRequest</a> writeRequest);
<a name="64" href="#64">64</a>  }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

