You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by bu...@apache.org on 2018/01/18 10:06:33 UTC

svn commit: r1023954 [4/5] - in /websites/staging/directory/trunk/content: ./ api/ api/dev-guide/ api/internal-design-guide/ api/internal-design-guide/images/

Added: websites/staging/directory/trunk/content/api/internal-design-guide/4.1-asn1-tlv.html
==============================================================================
--- websites/staging/directory/trunk/content/api/internal-design-guide/4.1-asn1-tlv.html (added)
+++ websites/staging/directory/trunk/content/api/internal-design-guide/4.1-asn1-tlv.html Thu Jan 18 10:06:32 2018
@@ -0,0 +1,773 @@
+<!DOCTYPE html>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<html>
+	<head>
+		<title>4-1 - ASN/1 TLV &mdash; Apache Directory</title>
+		
+	    <link href="./../../css/common.css" rel="stylesheet" type="text/css">
+	    <link href="./../../css/brown.css" rel="stylesheet" type="text/css">
+    
+        
+        <link rel="shortcut icon" href="./../../images/api-icon_16x16.png">
+    
+        <!-- Google Analytics -->
+        <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
+        <script type="text/javascript">
+            _uacct = "UA-1358462-1";
+            urchinTracker();
+        </script>
+	</head>
+	<body>
+	    <div id="container">
+            <div id="header">
+                <div id="subProjectsNavBar">
+                    <a href="./../../">
+                        
+                        Main
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../apacheds">
+                        
+                        ApacheDS
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../studio">
+                        
+                        Studio
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../api">
+                        
+                        <STRONG>LDAP API</STRONG>
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../mavibot">
+                        
+                        Mavibot
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../escimo">
+                        
+                        eSCIMo
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../fortress">
+                        
+                        Fortress
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../kerby">
+                        
+                        Kerby
+                        
+                    </a>
+                </div><!-- subProjectsNavBar -->
+            </div><!-- header -->
+            <div id="content">
+                <div id="leftColumn">
+                    
+<div id="navigation">
+    
+    <!--ul>
+      <li>
+        <a href="http://bit.ly/1n9YlQT" target="_blank">
+          <img src="./../../images/ApacheConBudapest.png" width="125" height="125" alt="I'm Speaking at ApacheCon Europe 2014! Join me!" title="I'm Speaking at ApacheCon Europe 2014! Join me!" border="0" style="margin-bottom:-3px;"/>
+        </a>
+      </li>
+    </ul-->
+    <h5>LDAP API 1.0</h5>
+    <ul>
+        <li><a href="./../../api/">Home</a></li>
+        <li><a href="./../../api/news.html">News</a></li>
+    </ul>
+    <h5>Downloads</h5>
+    <ul>
+	    <li><a href="./../../api/downloads.html">Version 1.0.0</a>&nbsp;&nbsp;<IMG src="./../../images/new_badge.gif" alt="" style="margin-bottom:-3px;" border="0"></li>
+        <li><a href="./../../api/download-old-versions.html">Older versions</a></li>
+    </ul>
+    <h5>Getting Started</h5>
+    <ul>
+        <li><a href="./../../api/vision.html">Vision</a></li>
+        <li><a href="./../../api/java-api.html">Java API</a></li>
+    </ul>
+    <h5>Documentation</h5>
+    <ul>
+	    <li><a href="./../../api/five-minutes-tutorial.html">Five minutes tutorial</a></li>
+	    <li><a href="./../../api/user-guide.html">User Guide</a></li>
+        <li><a href="./../../api/gen-docs/latest/apidocs/">JavaDocs</a></li>
+        <li><a href="./../../api/gen-docs/latest/xref/">Cross-Reference</a></li>
+        <!--li><a href="./../../api/gen-docs/latest/">Generated Reports</a></li-->
+        <li><a href="./../../api/developer-guide.html">Developer Guide</a></li>
+    </ul>
+    
+    
+    <h5>Support</h5>
+    <ul>
+        <li><a href="./../../mailing-lists-and-irc.html">Mailing Lists &amp; IRC</a></li>
+        <li><a href="./../../sources.html">Sources</a></li>
+        <li><a href="./../../issue-tracking.html">Issue Tracking</a></li>
+        <li><a href="./../../commercial-support.html">Commercial Support</a></li>
+    </ul>
+    <h5>Community</h5>
+    <ul>
+        <li><a href="./../../contribute.html">How to Contribute</a></li>
+        <li><a href="./../../team.html">Team</a></li>
+        <li><a href="./../../original-project-proposal.html">Original Project Proposal</a></li>
+        <li><a href="./../../special-thanks.html" class="external-link" rel="nofollow">Special Thanks</a></li>
+    </ul>
+    <h5>About Apache</h5>
+    <ul>
+        <li><a href="http://www.apache.org/">Apache</a></li>
+        <li><a href="http://www.apache.org/licenses/">License</a></li>
+        <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+        <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+        <li><a href="http://www.apache.org/security/">Security</a></li>
+    </ul>
+    
+</div><!-- navigation -->
+
+                </div><!-- leftColumn -->
+                <div id="rightColumn">
+
+
+    <div class="nav">
+        <div class="nav_prev">
+        
+            <a href="4-asn1.html">4 - ASN/1</a>
+		
+        </div>
+        <div class="nav_up">
+        
+            <a href="../internal-design-guide.html">Internal Design Guide</a>
+		
+        </div>
+        <div class="nav_next">
+        
+            <a href="5-network.html">5 - Network</a>
+		
+        </div>
+        <div class="clearfix"></div>
+    </div>
+
+
+<style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
+<h1 id="41-asn1-tlv">4.1 - ASN/1 TLV<a class="headerlink" href="#41-asn1-tlv" title="Permanent link">&para;</a></h1>
+<h2 id="what-are-tlvs">What are TLVs ?<a class="headerlink" href="#what-are-tlvs" title="Permanent link">&para;</a></h2>
+<p>The acronym <strong>TLV</strong> stands for <strong>T</strong>ag, <strong>L</strong>ength and <strong>V</strong>alue. It's a way to encode a piece of information with a type, a length followed by the information itself. Three points must be known:</p>
+<ul>
+<li>The <strong>Value</strong> part may contents other <strong>TLV</strong>s. One can see <strong>TLV</strong>s as C structures, that can contain sub-structures.</li>
+<li>The <strong>Value</strong> may not exist, and in this case the <strong>Length</strong> will be 0.</li>
+<li>The <strong>Length</strong> part may not give the <strong>Value</strong> length: it is called an <em>indefinite Length</em>. In this - not so frequent - case, the <strong>Value</strong> must end with a specific terminator.</li>
+</ul>
+<h3 id="a-quick-sample">A quick sample<a class="headerlink" href="#a-quick-sample" title="Permanent link">&para;</a></h3>
+<p>Let's begin with a simple example, without too many explanations. This is the <strong>PDU</strong> (<strong>P</strong>acket <strong>D</strong>ata <strong>U</strong>nit) of a LDAP <em>BindRequest</em>:</p>
+<p><img alt="TLV" src="images/TLVs.png" /></p>
+<p>We can see in this picture that you have what is called a first level <strong>TLV</strong>. It encapsulates other <strong>TLV</strong>s. It's basically a stream of bytes.</p>
+<h3 id="type">Type<a class="headerlink" href="#type" title="Permanent link">&para;</a></h3>
+<p>Each <strong>Type</strong> contains information about the <strong>Value</strong> part of the <strong>TLV</strong>. It tells if the <strong>Value</strong> is a primitive or a constructed one, which type of primitive is the value, gives some contextual information. A <strong>Type</strong> can be coded on more than one byte. The first 3 bits give some contextual information about the <strong>Type</strong>, and the 5 following bits are either a label or the beginning of a multi-bytes label.</p>
+<ul>
+<li>Labels are numbers in [0..30], and they represent a specific <strong>ASN/1</strong> element in the protocol description, like _CompareRequest ::= [APPLICATION 14] _ (here, the label is 14). </li>
+<li>If the label is 31, then more than one byte is used to encode the <strong>Type</strong>. In this case, we use the following bytes to compute the label, where each byte which high bit is one will be followed by another byte. </li>
+</ul>
+<p>We limit the label to 2,097,151 as we encode the <strong>Type</strong> in one Java int : </p>
+<div class="codehilite"><pre><span class="n">b1</span> <span class="n">xxx</span><span class="p">[</span>1<span class="o">-</span>1111<span class="p">],</span> <span class="n">b2</span> 1<span class="p">[</span>111<span class="o">-</span>1111<span class="p">],</span> <span class="n">b3</span> 1<span class="p">[</span>111<span class="o">-</span>1111<span class="p">],</span> <span class="n">b4</span> 0<span class="p">[</span>111<span class="o">-</span>1111<span class="p">]</span>
+<span class="o">-&gt;</span>
+<span class="p">[</span>111<span class="o">-</span>1111<span class="p">][</span>111<span class="o">-</span>1111<span class="p">][</span>111<span class="o">-</span>1111<span class="p">]</span> 
+<span class="o">-&gt;</span>
+0001<span class="o">-</span>1111 1111<span class="o">-</span>1111 1111<span class="o">-</span>1111
+<span class="o">-&gt;</span>
+0<span class="n">x1FFFFF</span>
+<span class="o">-&gt;</span> 
+2<span class="p">,</span>097<span class="p">,</span>151
+</pre></div>
+
+
+<p>In <strong>LDAP</strong> or <strong>Kerberos</strong>, no label is higher than 30, so we always use 1 byte <strong>Type</strong>s.</p>
+<p>Other interesting information that we need to grab from a <em>Type</em> are stored in the two first bits (bit 7 and 6), and in the third bit (bit 5). The first two bits describe the class, the third tells if the <strong>TLV</strong> is a <strong>primitive</strong> (b5 = 0) or a <strong>constructed</strong> <strong>TLV</strong> (b5 = 1).</p>
+<h3 id="length">Length<a class="headerlink" href="#length" title="Permanent link">&para;</a></h3>
+<p><strong>Length</strong> gives the number of bytes of the <strong>Value</strong>, and nothing else. So the total length of a <strong>TLV</strong> will be:</p>
+<div class="codehilite"><pre><span class="n">TLV</span> <span class="nb">length</span> <span class="p">=</span> <span class="n">Tag</span> <span class="nb">length</span> <span class="o">+</span> <span class="n">Length</span> <span class="nb">length</span> <span class="o">+</span> <span class="n">Value</span> <span class="nb">length</span><span class="p">,</span>
+</pre></div>
+
+
+<p>where the <strong>Value</strong> length is stored in the <strong>Length</strong> element.</p>
+<p>The <strong>Length</strong> may be 0, which means that there is no value following.</p>
+<p>How is <strong>Length</strong> encoded? A <strong>Value</strong> may be from 0 to N bytes long, with N &lt; (256 ^ 126) - 1. This limit is purely hypothetic, of course. If we have to deal with huge objects like pictures or movies, their length will not exceed a few MBytes or a few GBytes</p>
+<p>Typically, we will find five kind of <strong>Length</strong>s :</p>
+<ul>
+<li>zero length values;</li>
+<li>values with a length less than 128 bytes</li>
+<li>values with a length between 128 and 256 ^ 4 bytes long (an int will be able to hold 4 bytes);</li>
+<li>values above 256 ^ 4 bytes long</li>
+<li>values which length is not defined by the <strong>Length</strong> element.</li>
+</ul>
+<p>The last type of Length could occurs if the sender does not know the length of the value while it is sending it. <strong>LDAP</strong> protocol does not allow those kind of values, which are dangerous because you need to read the full <strong>Value</strong> to know its length.</p>
+<p>The fourth type could also be ignored (4 GBytes is quite a huge size for an LDAP element ...), so we can decide that we won't accept those <strong>Values</strong>. It seems reasonable.</p>
+<p>As the <strong>Length</strong> can be stored in more than one byte, we have to take care of fragmented <strong>PDU</strong> : we may receive only the first bytes, and have to wait for the rest to be received. The idea is to freeze and start again when we receive some more data.</p>
+<p>In any case, if the first byte is &gt; 0x7F, that means it's a multi-bytes length, and we have to process the following bytesto get the real length. In this case, the first byte contains teh number of expected following bytes. Typically :</p>
+<div class="codehilite"><pre>0<span class="n">x74</span> <span class="o">-&gt;</span> 116
+0<span class="n">x82</span> 0<span class="n">x02</span> 0<span class="n">x84</span> <span class="p">:</span> 2 <span class="n">bytes</span><span class="p">,</span> <span class="nb">length</span> <span class="p">=</span> 2 <span class="o">*</span> 16 <span class="o">+</span> 132 <span class="o">-&gt;</span> 164
+0<span class="n">x81</span> 0<span class="n">x84</span> <span class="p">:</span> 1 <span class="n">byte</span><span class="p">,</span> <span class="nb">length</span> <span class="p">=</span> 132
+</pre></div>
+
+
+<h3 id="value">Value<a class="headerlink" href="#value" title="Permanent link">&para;</a></h3>
+<p><strong>Value</strong> carries the 'meat' of a <strong>TLV</strong>. Depending on the <strong>Type</strong>, it's either a primitive value, or a constructed one (which means it contains a <strong>TLV</strong> or a set of <strong>TLV</strong>s). Remember that bit 5 of the <strong>Type</strong> tells if the **Value is <em>primitive</em> ( b5 == 0) or _constructed (b5 == 1).</p>
+<ul>
+<li>If we have a <em>primitive</em> <strong>Value</strong>, we have to read <strong>Length</strong> byte and we are done
+<strong> If we have a <em>constructed</em> </strong>Value<strong>, we have to process it as one or more </strong>TLV**.</li>
+</ul>
+<h2 id="tlv-processing">TLV processing<a class="headerlink" href="#tlv-processing" title="Permanent link">&para;</a></h2>
+<p>In the <strong>API</strong>, the <strong>TLV</strong> processing is done in the <em>Asn1Decoder</em> class, and more specifically by the <em>decode( ByteBuffer stream, Asn1Container container )</em> method, which takes a ByteBuffer as input, and feed a container as a result. </p>
+<p>The important thing to understand is that this method can be called repetively, until a message is fully decoded, as soon as we feed it with some new <em>ByteBuffer</em>. The <em>Container</em> instance will contain the result, as soon as its state has switched to <strong>PDU_DECODED</strong>.</p>
+<p>While processing a <strong>TLV</strong>, when we are done with the <strong>Value</strong> part, the decoder will check if any action is to be executed. The action is associated to the grammar in use, which is stored in the container. Here is the part that call the action, in the <em>Asn1Decoder.treatTLVDoneState()</em> method :</p>
+<div class="codehilite"><pre><span class="kd">private</span> <span class="kt">boolean</span> <span class="nf">treatTLVDoneState</span><span class="o">(</span> <span class="n">ByteBuffer</span> <span class="n">stream</span><span class="o">,</span> <span class="n">Asn1Container</span> <span class="n">container</span> <span class="o">)</span> <span class="kd">throws</span> <span class="n">DecoderException</span>
+<span class="o">{</span>
+    <span class="c1">// First, we have to execute the associated action</span>
+    <span class="n">container</span><span class="o">.</span><span class="na">getGrammar</span><span class="o">().</span><span class="na">executeAction</span><span class="o">(</span> <span class="n">container</span> <span class="o">);</span>
+    <span class="o">...</span>
+</pre></div>
+
+
+<p>So the <em>Container</em> must contain the grammar, and the current state. We may not have any action to execute, either because none is associated with the current transition or because we are at the end of the message.</p>
+<h3 id="tlv-implementation">TLV implementation<a class="headerlink" href="#tlv-implementation" title="Permanent link">&para;</a></h3>
+<p>The <strong>TLV</strong> class stores the <strong>Type</strong>, <strong>Length</strong> and <strong>Value</strong>, plus some extra information, like a unique <em>id</em>, a reference to its parent's <strong>TLV</strong> and the expected length when the included <strong>Value</strong> is a set of <strong>TLV</strong>.</p>
+<p><img alt="TLV/BerValue" src="images/tlv-bervalue.png" /></p>
+<p>You won't have tp manipulate <strong>TLV</strong> frequently, except in the actions, where you might fetch its <em>Length<strong> and </strong>Value</em>* content, using <em>getLength()</em> and <em>getValue().getData()</em> methods respectively.</p>
+<h3 id="action">Action<a class="headerlink" href="#action" title="Permanent link">&para;</a></h3>
+<p>This is quite a simple class and hierarchy :</p>
+<p><img alt="GrammarAction" src="images/grammar-action.png" /></p>
+<p>As we can see, each <strong>Action</strong> has a name (this is only used for debug purpose) and a <em>action(Asn1Container)</em> method, which does what it needs. The <em>Asn1Container</em> parameter gives access to the data through the <em>Asn1Container.getCurrentTLV().getValue().getData()</em> method, and to the message being processed.</p>
+<p>At this point, an example would be useful.</p>
+<h2 id="example">Example<a class="headerlink" href="#example" title="Permanent link">&para;</a></h2>
+<p>Let say we want to implement a decoder for the following message :</p>
+<div class="codehilite"><pre><span class="n">EntryChangeNotification</span> <span class="p">::=</span> <span class="n">SEQUENCE</span>
+<span class="p">{</span>
+    <span class="n">changeType</span> <span class="n">ENUMERATED</span>
+    <span class="p">{</span>
+        <span class="n">add</span>             <span class="p">(</span>1<span class="p">),</span>
+        <span class="n">delete</span>          <span class="p">(</span>2<span class="p">),</span>
+        <span class="n">modify</span>          <span class="p">(</span>4<span class="p">),</span>
+        <span class="n">modDN</span>           <span class="p">(</span>8<span class="p">)</span>
+    <span class="p">},</span>
+    <span class="n">previousDN</span>   <span class="n">LDAPDN</span> <span class="n">OPTIONAL</span><span class="p">,</span>     <span class="o">--</span> <span class="n">modifyDN</span> <span class="n">ops</span><span class="p">.</span> <span class="n">only</span>
+    <span class="n">changeNumber</span> <span class="n">INTEGER</span> <span class="n">OPTIONAL</span>     <span class="o">--</span> <span class="k">if</span> <span class="n">supported</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>You don't need to know anything about this message, what is important is how we will decode it.</p>
+<p>The first thing we need to create is an interface and a implementation for the Java object that will represent the <strong>EntryChange</strong> object.</p>
+<p>Here is the interface (note that it's a <em>Control</em>, but it's a irrelevant information here) :</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">EntryChange</span> <span class="kd">extends</span> <span class="n">Control</span>
+<span class="o">{</span>
+    <span class="cm">/** No defined change number */</span> 
+    <span class="kt">int</span> <span class="n">UNDEFINED_CHANGE_NUMBER</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="o">;</span>
+
+    <span class="cm">/** The EntryChange control */</span>
+    <span class="n">String</span> <span class="n">OID</span> <span class="o">=</span> <span class="s">&quot;2.16.840.1.113730.3.4.7&quot;</span><span class="o">;</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * @return The ChangeType</span>
+<span class="cm">     */</span>
+    <span class="n">ChangeType</span> <span class="nf">getChangeType</span><span class="o">();</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * Set the ChangeType</span>
+<span class="cm">     *</span>
+<span class="cm">     * @param changeType Add, Delete; Modify or ModifyDN</span>
+<span class="cm">     */</span>
+    <span class="kt">void</span> <span class="nf">setChangeType</span><span class="o">(</span> <span class="n">ChangeType</span> <span class="n">changeType</span> <span class="o">);</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * @return The previous DN</span>
+<span class="cm">     */</span>
+    <span class="n">Dn</span> <span class="nf">getPreviousDn</span><span class="o">();</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * Sets the previous DN</span>
+<span class="cm">     * </span>
+<span class="cm">     * @param previousDn The previous DN</span>
+<span class="cm">     */</span>
+    <span class="kt">void</span> <span class="nf">setPreviousDn</span><span class="o">(</span> <span class="n">Dn</span> <span class="n">previousDn</span> <span class="o">);</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * @return The change number</span>
+<span class="cm">     */</span>
+    <span class="kt">long</span> <span class="nf">getChangeNumber</span><span class="o">();</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * Sets the ChangeNumber</span>
+<span class="cm">     * </span>
+<span class="cm">     * @param changeNumber The ChanegNumber</span>
+<span class="cm">     */</span>
+    <span class="kt">void</span> <span class="nf">setChangeNumber</span><span class="o">(</span> <span class="kt">long</span> <span class="n">changeNumber</span> <span class="o">);</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>What is important is that we declare all the setters and getters for the object fields that matter : <em>changeType</em>, <em>previousDN</em> and <em>changeNumber</em></p>
+<p>The implementation is not really complex :</p>
+<div class="codehilite"><pre><span class="cm">/**</span>
+<span class="cm"> * A simple implementation of the EntryChange response control.</span>
+<span class="cm"> *</span>
+<span class="cm"> * @author &lt;a href=&quot;mailto:dev@directory.apache.org&quot;&gt;Apache Directory Project&lt;/a&gt;</span>
+<span class="cm"> */</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">EntryChangeImpl</span> <span class="kd">extends</span> <span class="n">AbstractControl</span> <span class="kd">implements</span> <span class="n">EntryChange</span>
+<span class="o">{</span>
+    <span class="cm">/** The changeType */</span>
+    <span class="kd">private</span> <span class="n">ChangeType</span> <span class="n">changeType</span> <span class="o">=</span> <span class="n">ChangeType</span><span class="o">.</span><span class="na">ADD</span><span class="o">;</span>
+
+    <span class="kd">private</span> <span class="kt">long</span> <span class="n">changeNumber</span> <span class="o">=</span> <span class="n">UNDEFINED_CHANGE_NUMBER</span><span class="o">;</span>
+
+    <span class="cm">/** The previous Dn */</span>
+    <span class="kd">private</span> <span class="n">Dn</span> <span class="n">previousDn</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     *</span>
+<span class="cm">     * Creates a new instance of EntryChangeControl.</span>
+<span class="cm">     *</span>
+<span class="cm">     */</span>
+    <span class="kd">public</span> <span class="nf">EntryChangeImpl</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="kd">super</span><span class="o">(</span> <span class="n">OID</span> <span class="o">);</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">ChangeType</span> <span class="nf">getChangeType</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="n">changeType</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setChangeType</span><span class="o">(</span> <span class="n">ChangeType</span> <span class="n">changeType</span> <span class="o">)</span>
+    <span class="o">{</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">changeType</span> <span class="o">=</span> <span class="n">changeType</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">Dn</span> <span class="nf">getPreviousDn</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="n">previousDn</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setPreviousDn</span><span class="o">(</span> <span class="n">Dn</span> <span class="n">previousDn</span> <span class="o">)</span>
+    <span class="o">{</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">previousDn</span> <span class="o">=</span> <span class="n">previousDn</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">long</span> <span class="nf">getChangeNumber</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="n">changeNumber</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setChangeNumber</span><span class="o">(</span> <span class="kt">long</span> <span class="n">changeNumber</span> <span class="o">)</span>
+    <span class="o">{</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">changeNumber</span> <span class="o">=</span> <span class="n">changeNumber</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * @see Object#hashCode()</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">int</span> <span class="nf">hashCode</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="kt">int</span> <span class="n">h</span> <span class="o">=</span> <span class="kd">super</span><span class="o">.</span><span class="na">hashCode</span><span class="o">();</span>
+
+        <span class="n">h</span> <span class="o">=</span> <span class="n">h</span> <span class="o">*</span> <span class="mi">37</span> <span class="o">+</span> <span class="o">(</span> <span class="kt">int</span> <span class="o">)</span> <span class="n">changeNumber</span><span class="o">;</span>
+        <span class="n">h</span> <span class="o">=</span> <span class="n">h</span> <span class="o">*</span> <span class="mi">37</span> <span class="o">+</span> <span class="o">(</span> <span class="n">changeType</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="mi">0</span> <span class="o">:</span> <span class="n">changeType</span><span class="o">.</span><span class="na">hashCode</span><span class="o">()</span> <span class="o">);</span>
+        <span class="n">h</span> <span class="o">=</span> <span class="n">h</span> <span class="o">*</span> <span class="mi">37</span> <span class="o">+</span> <span class="o">(</span> <span class="n">previousDn</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="mi">0</span> <span class="o">:</span> <span class="n">previousDn</span><span class="o">.</span><span class="na">hashCode</span><span class="o">()</span> <span class="o">);</span>
+
+        <span class="k">return</span> <span class="n">h</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">equals</span><span class="o">(</span> <span class="n">Object</span> <span class="n">o</span> <span class="o">)</span>
+    <span class="o">{</span>
+        <span class="k">if</span> <span class="o">(</span> <span class="o">!</span><span class="kd">super</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span> <span class="n">o</span> <span class="o">)</span> <span class="o">)</span>
+        <span class="o">{</span>
+            <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
+        <span class="o">}</span>
+
+        <span class="n">EntryChange</span> <span class="n">otherControl</span> <span class="o">=</span> <span class="o">(</span> <span class="n">EntryChange</span> <span class="o">)</span> <span class="n">o</span><span class="o">;</span>
+
+        <span class="k">return</span> <span class="o">(</span> <span class="n">changeNumber</span> <span class="o">==</span> <span class="n">otherControl</span><span class="o">.</span><span class="na">getChangeNumber</span><span class="o">()</span> <span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="o">(</span> <span class="n">changeType</span> <span class="o">==</span> <span class="n">otherControl</span><span class="o">.</span><span class="na">getChangeType</span><span class="o">()</span> <span class="o">)</span>
+            <span class="o">&amp;&amp;</span> <span class="o">(</span> <span class="n">previousDn</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span> <span class="n">otherControl</span><span class="o">.</span><span class="na">getPreviousDn</span><span class="o">()</span> <span class="o">)</span> <span class="o">);</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * Return a String representing this EntryChangeControl.</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">String</span> <span class="nf">toString</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="n">StringBuilder</span> <span class="n">sb</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="o">();</span>
+
+        <span class="n">sb</span><span class="o">.</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;    Entry Change Control\n&quot;</span> <span class="o">);</span>
+        <span class="n">sb</span><span class="o">.</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;        oid : &quot;</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="n">getOid</span><span class="o">()</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="sc">&#39;\n&#39;</span> <span class="o">);</span>
+        <span class="n">sb</span><span class="o">.</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;        critical : &quot;</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="n">isCritical</span><span class="o">()</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="sc">&#39;\n&#39;</span> <span class="o">);</span>
+        <span class="n">sb</span><span class="o">.</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;        changeType   : &#39;&quot;</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="n">changeType</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;&#39;\n&quot;</span> <span class="o">);</span>
+        <span class="n">sb</span><span class="o">.</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;        previousDN   : &#39;&quot;</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="n">previousDn</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;&#39;\n&quot;</span> <span class="o">);</span>
+
+        <span class="k">if</span> <span class="o">(</span> <span class="n">changeNumber</span> <span class="o">==</span> <span class="n">UNDEFINED_CHANGE_NUMBER</span> <span class="o">)</span>
+        <span class="o">{</span>
+            <span class="n">sb</span><span class="o">.</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;        changeNumber : &#39;&quot;</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;UNDEFINED&quot;</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;&#39;\n&quot;</span> <span class="o">);</span>
+        <span class="o">}</span>
+        <span class="k">else</span>
+        <span class="o">{</span>
+            <span class="n">sb</span><span class="o">.</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;        changeNumber : &#39;&quot;</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="n">changeNumber</span> <span class="o">).</span><span class="na">append</span><span class="o">(</span> <span class="s">&quot;&#39;\n&quot;</span> <span class="o">);</span>
+        <span class="o">}</span>
+
+        <span class="k">return</span> <span class="n">sb</span><span class="o">.</span><span class="na">toString</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>This is pretty much trivial.</p>
+<p>We now need a _Decorator to manipulate this instance. Here is the code :</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">EntryChangeDecorator</span> <span class="kd">extends</span> <span class="n">ControlDecorator</span><span class="o">&lt;</span><span class="n">EntryChange</span><span class="o">&gt;</span> <span class="kd">implements</span> <span class="n">EntryChange</span>
+<span class="o">{</span>
+    <span class="cm">/** Default value when no change number is provided */</span>
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="kt">int</span> <span class="n">UNDEFINED_CHANGE_NUMBER</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="o">;</span>
+
+    <span class="cm">/** A temporary storage for the previous Dn */</span>
+    <span class="kd">private</span> <span class="kt">byte</span><span class="o">[]</span> <span class="n">previousDnBytes</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
+
+    <span class="cm">/** The entry change global length */</span>
+    <span class="kd">private</span> <span class="kt">int</span> <span class="n">eccSeqLength</span><span class="o">;</span>
+
+    <span class="cm">/** An instance of this decoder */</span>
+    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Asn1Decoder</span> <span class="n">DECODER</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Asn1Decoder</span><span class="o">();</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * Creates a new instance of EntryChangeDecoder wrapping a newly created</span>
+<span class="cm">     * EntryChange Control object.</span>
+<span class="cm">     * </span>
+<span class="cm">     * @param codec The LDAP service instance</span>
+<span class="cm">     */</span>
+    <span class="kd">public</span> <span class="nf">EntryChangeDecorator</span><span class="o">(</span> <span class="n">LdapApiService</span> <span class="n">codec</span> <span class="o">)</span>
+    <span class="o">{</span>
+        <span class="kd">super</span><span class="o">(</span> <span class="n">codec</span><span class="o">,</span> <span class="k">new</span> <span class="n">EntryChangeImpl</span><span class="o">()</span> <span class="o">);</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * Creates a new instance of EntryChangeDecorator wrapping the supplied</span>
+<span class="cm">     * EntryChange Control.</span>
+<span class="cm">     *</span>
+<span class="cm">     * @param codec The LDAP service instance</span>
+<span class="cm">     * @param control The EntryChange Control to be decorated.</span>
+<span class="cm">     */</span>
+    <span class="kd">public</span> <span class="nf">EntryChangeDecorator</span><span class="o">(</span> <span class="n">LdapApiService</span> <span class="n">codec</span><span class="o">,</span> <span class="n">EntryChange</span> <span class="n">control</span> <span class="o">)</span>
+    <span class="o">{</span>
+        <span class="kd">super</span><span class="o">(</span> <span class="n">codec</span><span class="o">,</span> <span class="n">control</span> <span class="o">);</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * Internally used to not have to cast the decorated Control.</span>
+<span class="cm">     *</span>
+<span class="cm">     * @return the decorated Control.</span>
+<span class="cm">     */</span>
+    <span class="kd">private</span> <span class="n">EntryChange</span> <span class="nf">getEntryChange</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="nf">getDecorated</span><span class="o">();</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * Compute the EntryChangeControl length </span>
+<span class="cm">     * </span>
+<span class="cm">     * &lt;pre&gt;</span>
+<span class="cm">     * 0x30 L1 </span>
+<span class="cm">     *   | </span>
+<span class="cm">     *   +--&amp;gt; 0x0A 0x0(1-4) [1|2|4|8] (changeType) </span>
+<span class="cm">     *  [+--&amp;gt; 0x04 L2 previousDN] </span>
+<span class="cm">     *  [+--&amp;gt; 0x02 0x0(1-4) [0..2^63-1] (changeNumber)]</span>
+<span class="cm">     *  &lt;/pre&gt;</span>
+<span class="cm">     *  </span>
+<span class="cm">     * @return the control length.</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">int</span> <span class="nf">computeLength</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="kt">int</span> <span class="n">changeTypesLength</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">+</span> <span class="mi">1</span><span class="o">;</span>
+
+        <span class="kt">int</span> <span class="n">previousDnLength</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
+        <span class="kt">int</span> <span class="n">changeNumberLength</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
+
+        <span class="k">if</span> <span class="o">(</span> <span class="n">getPreviousDn</span><span class="o">()</span> <span class="o">!=</span> <span class="kc">null</span> <span class="o">)</span>
+        <span class="o">{</span>
+            <span class="n">previousDnBytes</span> <span class="o">=</span> <span class="n">Strings</span><span class="o">.</span><span class="na">getBytesUtf8</span><span class="o">(</span> <span class="n">getPreviousDn</span><span class="o">().</span><span class="na">getName</span><span class="o">()</span> <span class="o">);</span>
+            <span class="n">previousDnLength</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">TLV</span><span class="o">.</span><span class="na">getNbBytes</span><span class="o">(</span> <span class="n">previousDnBytes</span><span class="o">.</span><span class="na">length</span> <span class="o">)</span> <span class="o">+</span> <span class="n">previousDnBytes</span><span class="o">.</span><span class="na">length</span><span class="o">;</span>
+        <span class="o">}</span>
+
+        <span class="k">if</span> <span class="o">(</span> <span class="n">getChangeNumber</span><span class="o">()</span> <span class="o">!=</span> <span class="n">UNDEFINED_CHANGE_NUMBER</span> <span class="o">)</span>
+        <span class="o">{</span>
+            <span class="n">changeNumberLength</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">BerValue</span><span class="o">.</span><span class="na">getNbBytes</span><span class="o">(</span> <span class="n">getChangeNumber</span><span class="o">()</span> <span class="o">);</span>
+        <span class="o">}</span>
+
+        <span class="n">eccSeqLength</span> <span class="o">=</span> <span class="n">changeTypesLength</span> <span class="o">+</span> <span class="n">previousDnLength</span> <span class="o">+</span> <span class="n">changeNumberLength</span><span class="o">;</span>
+        <span class="n">valueLength</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">TLV</span><span class="o">.</span><span class="na">getNbBytes</span><span class="o">(</span> <span class="n">eccSeqLength</span> <span class="o">)</span> <span class="o">+</span> <span class="n">eccSeqLength</span><span class="o">;</span>
+
+        <span class="k">return</span> <span class="n">valueLength</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * Encodes the entry change control.</span>
+<span class="cm">     * </span>
+<span class="cm">     * @param buffer The encoded sink</span>
+<span class="cm">     * @return A ByteBuffer that contains the encoded PDU</span>
+<span class="cm">     * @throws EncoderException If anything goes wrong.</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">ByteBuffer</span> <span class="nf">encode</span><span class="o">(</span> <span class="n">ByteBuffer</span> <span class="n">buffer</span> <span class="o">)</span> <span class="kd">throws</span> <span class="n">EncoderException</span>
+    <span class="o">{</span>
+        <span class="k">if</span> <span class="o">(</span> <span class="n">buffer</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">)</span>
+        <span class="o">{</span>
+            <span class="k">throw</span> <span class="k">new</span> <span class="nf">EncoderException</span><span class="o">(</span> <span class="n">I18n</span><span class="o">.</span><span class="na">err</span><span class="o">(</span> <span class="n">I18n</span><span class="o">.</span><span class="na">ERR_04023</span> <span class="o">)</span> <span class="o">);</span>
+        <span class="o">}</span>
+
+        <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="n">UniversalTag</span><span class="o">.</span><span class="na">SEQUENCE</span><span class="o">.</span><span class="na">getValue</span><span class="o">()</span> <span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="n">TLV</span><span class="o">.</span><span class="na">getBytes</span><span class="o">(</span> <span class="n">eccSeqLength</span> <span class="o">)</span> <span class="o">);</span>
+
+        <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="n">UniversalTag</span><span class="o">.</span><span class="na">ENUMERATED</span><span class="o">.</span><span class="na">getValue</span><span class="o">()</span> <span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="o">(</span> <span class="kt">byte</span> <span class="o">)</span> <span class="mi">1</span> <span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="n">BerValue</span><span class="o">.</span><span class="na">getBytes</span><span class="o">(</span> <span class="n">getChangeType</span><span class="o">().</span><span class="na">getValue</span><span class="o">()</span> <span class="o">)</span> <span class="o">);</span>
+
+        <span class="k">if</span> <span class="o">(</span> <span class="n">getPreviousDn</span><span class="o">()</span> <span class="o">!=</span> <span class="kc">null</span> <span class="o">)</span>
+        <span class="o">{</span>
+            <span class="n">BerValue</span><span class="o">.</span><span class="na">encode</span><span class="o">(</span> <span class="n">buffer</span><span class="o">,</span> <span class="n">previousDnBytes</span> <span class="o">);</span>
+        <span class="o">}</span>
+
+        <span class="k">if</span> <span class="o">(</span> <span class="n">getChangeNumber</span><span class="o">()</span> <span class="o">!=</span> <span class="n">UNDEFINED_CHANGE_NUMBER</span> <span class="o">)</span>
+        <span class="o">{</span>
+            <span class="n">BerValue</span><span class="o">.</span><span class="na">encode</span><span class="o">(</span> <span class="n">buffer</span><span class="o">,</span> <span class="n">getChangeNumber</span><span class="o">()</span> <span class="o">);</span>
+        <span class="o">}</span>
+
+        <span class="k">return</span> <span class="n">buffer</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">byte</span><span class="o">[]</span> <span class="nf">getValue</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="k">if</span> <span class="o">(</span> <span class="n">value</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">)</span>
+        <span class="o">{</span>
+            <span class="k">try</span>
+            <span class="o">{</span>
+                <span class="n">computeLength</span><span class="o">();</span>
+                <span class="n">ByteBuffer</span> <span class="n">buffer</span> <span class="o">=</span> <span class="n">ByteBuffer</span><span class="o">.</span><span class="na">allocate</span><span class="o">(</span> <span class="n">valueLength</span> <span class="o">);</span>
+
+                <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="n">UniversalTag</span><span class="o">.</span><span class="na">SEQUENCE</span><span class="o">.</span><span class="na">getValue</span><span class="o">()</span> <span class="o">);</span>
+                <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="n">TLV</span><span class="o">.</span><span class="na">getBytes</span><span class="o">(</span> <span class="n">eccSeqLength</span> <span class="o">)</span> <span class="o">);</span>
+
+                <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="n">UniversalTag</span><span class="o">.</span><span class="na">ENUMERATED</span><span class="o">.</span><span class="na">getValue</span><span class="o">()</span> <span class="o">);</span>
+                <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="o">(</span> <span class="kt">byte</span> <span class="o">)</span> <span class="mi">1</span> <span class="o">);</span>
+                <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span> <span class="n">BerValue</span><span class="o">.</span><span class="na">getBytes</span><span class="o">(</span> <span class="n">getChangeType</span><span class="o">().</span><span class="na">getValue</span><span class="o">()</span> <span class="o">)</span> <span class="o">);</span>
+
+                <span class="k">if</span> <span class="o">(</span> <span class="n">getPreviousDn</span><span class="o">()</span> <span class="o">!=</span> <span class="kc">null</span> <span class="o">)</span>
+                <span class="o">{</span>
+                    <span class="n">BerValue</span><span class="o">.</span><span class="na">encode</span><span class="o">(</span> <span class="n">buffer</span><span class="o">,</span> <span class="n">previousDnBytes</span> <span class="o">);</span>
+                <span class="o">}</span>
+
+                <span class="k">if</span> <span class="o">(</span> <span class="n">getChangeNumber</span><span class="o">()</span> <span class="o">!=</span> <span class="n">UNDEFINED_CHANGE_NUMBER</span> <span class="o">)</span>
+                <span class="o">{</span>
+                    <span class="n">BerValue</span><span class="o">.</span><span class="na">encode</span><span class="o">(</span> <span class="n">buffer</span><span class="o">,</span> <span class="n">getChangeNumber</span><span class="o">()</span> <span class="o">);</span>
+                <span class="o">}</span>
+
+                <span class="n">value</span> <span class="o">=</span> <span class="n">buffer</span><span class="o">.</span><span class="na">array</span><span class="o">();</span>
+            <span class="o">}</span>
+            <span class="k">catch</span> <span class="o">(</span> <span class="n">Exception</span> <span class="n">e</span> <span class="o">)</span>
+            <span class="o">{</span>
+                <span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
+            <span class="o">}</span>
+        <span class="o">}</span>
+
+        <span class="k">return</span> <span class="n">value</span><span class="o">;</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">ChangeType</span> <span class="nf">getChangeType</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="nf">getEntryChange</span><span class="o">().</span><span class="na">getChangeType</span><span class="o">();</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setChangeType</span><span class="o">(</span> <span class="n">ChangeType</span> <span class="n">changeType</span> <span class="o">)</span>
+    <span class="o">{</span>
+        <span class="n">getEntryChange</span><span class="o">().</span><span class="na">setChangeType</span><span class="o">(</span> <span class="n">changeType</span> <span class="o">);</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">Dn</span> <span class="nf">getPreviousDn</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="nf">getEntryChange</span><span class="o">().</span><span class="na">getPreviousDn</span><span class="o">();</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setPreviousDn</span><span class="o">(</span> <span class="n">Dn</span> <span class="n">previousDn</span> <span class="o">)</span>
+    <span class="o">{</span>
+        <span class="n">getEntryChange</span><span class="o">().</span><span class="na">setPreviousDn</span><span class="o">(</span> <span class="n">previousDn</span> <span class="o">);</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">long</span> <span class="nf">getChangeNumber</span><span class="o">()</span>
+    <span class="o">{</span>
+        <span class="k">return</span> <span class="nf">getEntryChange</span><span class="o">().</span><span class="na">getChangeNumber</span><span class="o">();</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setChangeNumber</span><span class="o">(</span> <span class="kt">long</span> <span class="n">changeNumber</span> <span class="o">)</span>
+    <span class="o">{</span>
+        <span class="n">getEntryChange</span><span class="o">().</span><span class="na">setChangeNumber</span><span class="o">(</span> <span class="n">changeNumber</span> <span class="o">);</span>
+    <span class="o">}</span>
+
+
+    <span class="cm">/**</span>
+<span class="cm">     * {@inheritDoc}</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">Asn1Object</span> <span class="nf">decode</span><span class="o">(</span> <span class="kt">byte</span><span class="o">[]</span> <span class="n">controlBytes</span> <span class="o">)</span> <span class="kd">throws</span> <span class="n">DecoderException</span>
+    <span class="o">{</span>
+        <span class="n">ByteBuffer</span> <span class="n">bb</span> <span class="o">=</span> <span class="n">ByteBuffer</span><span class="o">.</span><span class="na">wrap</span><span class="o">(</span> <span class="n">controlBytes</span> <span class="o">);</span>
+        <span class="n">EntryChangeContainer</span> <span class="n">container</span> <span class="o">=</span> <span class="k">new</span> <span class="n">EntryChangeContainer</span><span class="o">(</span> <span class="n">getCodecService</span><span class="o">(),</span> <span class="k">this</span> <span class="o">);</span>
+        <span class="n">DECODER</span><span class="o">.</span><span class="na">decode</span><span class="o">(</span> <span class="n">bb</span><span class="o">,</span> <span class="n">container</span> <span class="o">);</span>
+        <span class="k">return</span> <span class="k">this</span><span class="o">;</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+    <div class="nav">
+        <div class="nav_prev">
+        
+            <a href="4-asn1.html">4 - ASN/1</a>
+		
+        </div>
+        <div class="nav_up">
+        
+            <a href="../internal-design-guide.html">Internal Design Guide</a>
+		
+        </div>
+        <div class="nav_next">
+        
+            <a href="5-network.html">5 - Network</a>
+		
+        </div>
+        <div class="clearfix"></div>
+    </div>
+
+
+                </div><!-- rightColumn -->
+                <div id="endContent"></div>
+            </div><!-- content -->
+            <div id="footer">&copy; 2003-2015, <a href="http://www.apache.org">The Apache Software Foundation</a> - <a href="./../../privacy-policy.html">Privacy Policy</a><br />
+                Apache Directory, ApacheDS, Apache Directory Server, Apache Directory Studio, Apache LDAP API, Apache Triplesec, Triplesec, Apache Mavibot, Mavibot, Apache eSCIMo, eSCIMo, Fortress, Apache Fortress, EnMasse, Apache EnMasse, Apache Kerby, Kerby
+                Apache, the Apache feather logo, and the Apache Directory project logos are trademarks of The Apache Software Foundation.
+            </div>
+        </div><!-- container -->
+    </body>
+</html>
\ No newline at end of file

Added: websites/staging/directory/trunk/content/api/internal-design-guide/5-network.html
==============================================================================
--- websites/staging/directory/trunk/content/api/internal-design-guide/5-network.html (added)
+++ websites/staging/directory/trunk/content/api/internal-design-guide/5-network.html Thu Jan 18 10:06:32 2018
@@ -0,0 +1,219 @@
+<!DOCTYPE html>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<html>
+	<head>
+		<title>5 - Network &mdash; Apache Directory</title>
+		
+	    <link href="./../../css/common.css" rel="stylesheet" type="text/css">
+	    <link href="./../../css/brown.css" rel="stylesheet" type="text/css">
+    
+        
+        <link rel="shortcut icon" href="./../../images/api-icon_16x16.png">
+    
+        <!-- Google Analytics -->
+        <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
+        <script type="text/javascript">
+            _uacct = "UA-1358462-1";
+            urchinTracker();
+        </script>
+	</head>
+	<body>
+	    <div id="container">
+            <div id="header">
+                <div id="subProjectsNavBar">
+                    <a href="./../../">
+                        
+                        Main
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../apacheds">
+                        
+                        ApacheDS
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../studio">
+                        
+                        Studio
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../api">
+                        
+                        <STRONG>LDAP API</STRONG>
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../mavibot">
+                        
+                        Mavibot
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../escimo">
+                        
+                        eSCIMo
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../fortress">
+                        
+                        Fortress
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../kerby">
+                        
+                        Kerby
+                        
+                    </a>
+                </div><!-- subProjectsNavBar -->
+            </div><!-- header -->
+            <div id="content">
+                <div id="leftColumn">
+                    
+<div id="navigation">
+    
+    <!--ul>
+      <li>
+        <a href="http://bit.ly/1n9YlQT" target="_blank">
+          <img src="./../../images/ApacheConBudapest.png" width="125" height="125" alt="I'm Speaking at ApacheCon Europe 2014! Join me!" title="I'm Speaking at ApacheCon Europe 2014! Join me!" border="0" style="margin-bottom:-3px;"/>
+        </a>
+      </li>
+    </ul-->
+    <h5>LDAP API 1.0</h5>
+    <ul>
+        <li><a href="./../../api/">Home</a></li>
+        <li><a href="./../../api/news.html">News</a></li>
+    </ul>
+    <h5>Downloads</h5>
+    <ul>
+	    <li><a href="./../../api/downloads.html">Version 1.0.0</a>&nbsp;&nbsp;<IMG src="./../../images/new_badge.gif" alt="" style="margin-bottom:-3px;" border="0"></li>
+        <li><a href="./../../api/download-old-versions.html">Older versions</a></li>
+    </ul>
+    <h5>Getting Started</h5>
+    <ul>
+        <li><a href="./../../api/vision.html">Vision</a></li>
+        <li><a href="./../../api/java-api.html">Java API</a></li>
+    </ul>
+    <h5>Documentation</h5>
+    <ul>
+	    <li><a href="./../../api/five-minutes-tutorial.html">Five minutes tutorial</a></li>
+	    <li><a href="./../../api/user-guide.html">User Guide</a></li>
+        <li><a href="./../../api/gen-docs/latest/apidocs/">JavaDocs</a></li>
+        <li><a href="./../../api/gen-docs/latest/xref/">Cross-Reference</a></li>
+        <!--li><a href="./../../api/gen-docs/latest/">Generated Reports</a></li-->
+        <li><a href="./../../api/developer-guide.html">Developer Guide</a></li>
+    </ul>
+    
+    
+    <h5>Support</h5>
+    <ul>
+        <li><a href="./../../mailing-lists-and-irc.html">Mailing Lists &amp; IRC</a></li>
+        <li><a href="./../../sources.html">Sources</a></li>
+        <li><a href="./../../issue-tracking.html">Issue Tracking</a></li>
+        <li><a href="./../../commercial-support.html">Commercial Support</a></li>
+    </ul>
+    <h5>Community</h5>
+    <ul>
+        <li><a href="./../../contribute.html">How to Contribute</a></li>
+        <li><a href="./../../team.html">Team</a></li>
+        <li><a href="./../../original-project-proposal.html">Original Project Proposal</a></li>
+        <li><a href="./../../special-thanks.html" class="external-link" rel="nofollow">Special Thanks</a></li>
+    </ul>
+    <h5>About Apache</h5>
+    <ul>
+        <li><a href="http://www.apache.org/">Apache</a></li>
+        <li><a href="http://www.apache.org/licenses/">License</a></li>
+        <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+        <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+        <li><a href="http://www.apache.org/security/">Security</a></li>
+    </ul>
+    
+</div><!-- navigation -->
+
+                </div><!-- leftColumn -->
+                <div id="rightColumn">
+
+
+    <div class="nav">
+        <div class="nav_prev">
+        
+            <a href="4-asn1.html">4 - ASN/1</a>
+		
+        </div>
+        <div class="nav_up">
+        
+            <a href="../internal-design-guide.html">Internal Design Guide</a>
+		
+        </div>
+        <div class="nav_next">
+        
+            <a href="6-codec.html">6 - Encoding/Decoding</a>
+		
+        </div>
+        <div class="clearfix"></div>
+    </div>
+
+
+<style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
+<h1 id="5-network">5 - Network<a class="headerlink" href="#5-network" title="Permanent link">&para;</a></h1>
+<p>TODO...</p>
+
+
+    <div class="nav">
+        <div class="nav_prev">
+        
+            <a href="4-asn1.html">4 - ASN/1</a>
+		
+        </div>
+        <div class="nav_up">
+        
+            <a href="../internal-design-guide.html">Internal Design Guide</a>
+		
+        </div>
+        <div class="nav_next">
+        
+            <a href="6-codec.html">6 - Encoding/Decoding</a>
+		
+        </div>
+        <div class="clearfix"></div>
+    </div>
+
+
+                </div><!-- rightColumn -->
+                <div id="endContent"></div>
+            </div><!-- content -->
+            <div id="footer">&copy; 2003-2015, <a href="http://www.apache.org">The Apache Software Foundation</a> - <a href="./../../privacy-policy.html">Privacy Policy</a><br />
+                Apache Directory, ApacheDS, Apache Directory Server, Apache Directory Studio, Apache LDAP API, Apache Triplesec, Triplesec, Apache Mavibot, Mavibot, Apache eSCIMo, eSCIMo, Fortress, Apache Fortress, EnMasse, Apache EnMasse, Apache Kerby, Kerby
+                Apache, the Apache feather logo, and the Apache Directory project logos are trademarks of The Apache Software Foundation.
+            </div>
+        </div><!-- container -->
+    </body>
+</html>
\ No newline at end of file

Added: websites/staging/directory/trunk/content/api/internal-design-guide/6-codec.html
==============================================================================
--- websites/staging/directory/trunk/content/api/internal-design-guide/6-codec.html (added)
+++ websites/staging/directory/trunk/content/api/internal-design-guide/6-codec.html Thu Jan 18 10:06:32 2018
@@ -0,0 +1,219 @@
+<!DOCTYPE html>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<html>
+	<head>
+		<title>6 - Encoding/Decoding &mdash; Apache Directory</title>
+		
+	    <link href="./../../css/common.css" rel="stylesheet" type="text/css">
+	    <link href="./../../css/brown.css" rel="stylesheet" type="text/css">
+    
+        
+        <link rel="shortcut icon" href="./../../images/api-icon_16x16.png">
+    
+        <!-- Google Analytics -->
+        <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
+        <script type="text/javascript">
+            _uacct = "UA-1358462-1";
+            urchinTracker();
+        </script>
+	</head>
+	<body>
+	    <div id="container">
+            <div id="header">
+                <div id="subProjectsNavBar">
+                    <a href="./../../">
+                        
+                        Main
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../apacheds">
+                        
+                        ApacheDS
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../studio">
+                        
+                        Studio
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../api">
+                        
+                        <STRONG>LDAP API</STRONG>
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../mavibot">
+                        
+                        Mavibot
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../escimo">
+                        
+                        eSCIMo
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../fortress">
+                        
+                        Fortress
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../kerby">
+                        
+                        Kerby
+                        
+                    </a>
+                </div><!-- subProjectsNavBar -->
+            </div><!-- header -->
+            <div id="content">
+                <div id="leftColumn">
+                    
+<div id="navigation">
+    
+    <!--ul>
+      <li>
+        <a href="http://bit.ly/1n9YlQT" target="_blank">
+          <img src="./../../images/ApacheConBudapest.png" width="125" height="125" alt="I'm Speaking at ApacheCon Europe 2014! Join me!" title="I'm Speaking at ApacheCon Europe 2014! Join me!" border="0" style="margin-bottom:-3px;"/>
+        </a>
+      </li>
+    </ul-->
+    <h5>LDAP API 1.0</h5>
+    <ul>
+        <li><a href="./../../api/">Home</a></li>
+        <li><a href="./../../api/news.html">News</a></li>
+    </ul>
+    <h5>Downloads</h5>
+    <ul>
+	    <li><a href="./../../api/downloads.html">Version 1.0.0</a>&nbsp;&nbsp;<IMG src="./../../images/new_badge.gif" alt="" style="margin-bottom:-3px;" border="0"></li>
+        <li><a href="./../../api/download-old-versions.html">Older versions</a></li>
+    </ul>
+    <h5>Getting Started</h5>
+    <ul>
+        <li><a href="./../../api/vision.html">Vision</a></li>
+        <li><a href="./../../api/java-api.html">Java API</a></li>
+    </ul>
+    <h5>Documentation</h5>
+    <ul>
+	    <li><a href="./../../api/five-minutes-tutorial.html">Five minutes tutorial</a></li>
+	    <li><a href="./../../api/user-guide.html">User Guide</a></li>
+        <li><a href="./../../api/gen-docs/latest/apidocs/">JavaDocs</a></li>
+        <li><a href="./../../api/gen-docs/latest/xref/">Cross-Reference</a></li>
+        <!--li><a href="./../../api/gen-docs/latest/">Generated Reports</a></li-->
+        <li><a href="./../../api/developer-guide.html">Developer Guide</a></li>
+    </ul>
+    
+    
+    <h5>Support</h5>
+    <ul>
+        <li><a href="./../../mailing-lists-and-irc.html">Mailing Lists &amp; IRC</a></li>
+        <li><a href="./../../sources.html">Sources</a></li>
+        <li><a href="./../../issue-tracking.html">Issue Tracking</a></li>
+        <li><a href="./../../commercial-support.html">Commercial Support</a></li>
+    </ul>
+    <h5>Community</h5>
+    <ul>
+        <li><a href="./../../contribute.html">How to Contribute</a></li>
+        <li><a href="./../../team.html">Team</a></li>
+        <li><a href="./../../original-project-proposal.html">Original Project Proposal</a></li>
+        <li><a href="./../../special-thanks.html" class="external-link" rel="nofollow">Special Thanks</a></li>
+    </ul>
+    <h5>About Apache</h5>
+    <ul>
+        <li><a href="http://www.apache.org/">Apache</a></li>
+        <li><a href="http://www.apache.org/licenses/">License</a></li>
+        <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+        <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+        <li><a href="http://www.apache.org/security/">Security</a></li>
+    </ul>
+    
+</div><!-- navigation -->
+
+                </div><!-- leftColumn -->
+                <div id="rightColumn">
+
+
+    <div class="nav">
+        <div class="nav_prev">
+        
+            <a href="5-network.html">5 - Network</a>
+		
+        </div>
+        <div class="nav_up">
+        
+            <a href="../internal-design-guide.html">Internal Design Guide</a>
+		
+        </div>
+        <div class="nav_next">
+        
+            <a href="7-ldap-messages.html">7 - LDAP Messages</a>
+		
+        </div>
+        <div class="clearfix"></div>
+    </div>
+
+
+<style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
+<h1 id="6-encodingdecoding">6 - Encoding/Decoding<a class="headerlink" href="#6-encodingdecoding" title="Permanent link">&para;</a></h1>
+<p>TODO...</p>
+
+
+    <div class="nav">
+        <div class="nav_prev">
+        
+            <a href="5-network.html">5 - Network</a>
+		
+        </div>
+        <div class="nav_up">
+        
+            <a href="../internal-design-guide.html">Internal Design Guide</a>
+		
+        </div>
+        <div class="nav_next">
+        
+            <a href="7-ldap-messages.html">7 - LDAP Messages</a>
+		
+        </div>
+        <div class="clearfix"></div>
+    </div>
+
+
+                </div><!-- rightColumn -->
+                <div id="endContent"></div>
+            </div><!-- content -->
+            <div id="footer">&copy; 2003-2015, <a href="http://www.apache.org">The Apache Software Foundation</a> - <a href="./../../privacy-policy.html">Privacy Policy</a><br />
+                Apache Directory, ApacheDS, Apache Directory Server, Apache Directory Studio, Apache LDAP API, Apache Triplesec, Triplesec, Apache Mavibot, Mavibot, Apache eSCIMo, eSCIMo, Fortress, Apache Fortress, EnMasse, Apache EnMasse, Apache Kerby, Kerby
+                Apache, the Apache feather logo, and the Apache Directory project logos are trademarks of The Apache Software Foundation.
+            </div>
+        </div><!-- container -->
+    </body>
+</html>
\ No newline at end of file

Added: websites/staging/directory/trunk/content/api/internal-design-guide/7-ldap-messages.html
==============================================================================
--- websites/staging/directory/trunk/content/api/internal-design-guide/7-ldap-messages.html (added)
+++ websites/staging/directory/trunk/content/api/internal-design-guide/7-ldap-messages.html Thu Jan 18 10:06:32 2018
@@ -0,0 +1,219 @@
+<!DOCTYPE html>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<html>
+	<head>
+		<title>7 - LDAP Messages &mdash; Apache Directory</title>
+		
+	    <link href="./../../css/common.css" rel="stylesheet" type="text/css">
+	    <link href="./../../css/brown.css" rel="stylesheet" type="text/css">
+    
+        
+        <link rel="shortcut icon" href="./../../images/api-icon_16x16.png">
+    
+        <!-- Google Analytics -->
+        <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
+        <script type="text/javascript">
+            _uacct = "UA-1358462-1";
+            urchinTracker();
+        </script>
+	</head>
+	<body>
+	    <div id="container">
+            <div id="header">
+                <div id="subProjectsNavBar">
+                    <a href="./../../">
+                        
+                        Main
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../apacheds">
+                        
+                        ApacheDS
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../studio">
+                        
+                        Studio
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../api">
+                        
+                        <STRONG>LDAP API</STRONG>
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../mavibot">
+                        
+                        Mavibot
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../escimo">
+                        
+                        eSCIMo
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../fortress">
+                        
+                        Fortress
+                        
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../../kerby">
+                        
+                        Kerby
+                        
+                    </a>
+                </div><!-- subProjectsNavBar -->
+            </div><!-- header -->
+            <div id="content">
+                <div id="leftColumn">
+                    
+<div id="navigation">
+    
+    <!--ul>
+      <li>
+        <a href="http://bit.ly/1n9YlQT" target="_blank">
+          <img src="./../../images/ApacheConBudapest.png" width="125" height="125" alt="I'm Speaking at ApacheCon Europe 2014! Join me!" title="I'm Speaking at ApacheCon Europe 2014! Join me!" border="0" style="margin-bottom:-3px;"/>
+        </a>
+      </li>
+    </ul-->
+    <h5>LDAP API 1.0</h5>
+    <ul>
+        <li><a href="./../../api/">Home</a></li>
+        <li><a href="./../../api/news.html">News</a></li>
+    </ul>
+    <h5>Downloads</h5>
+    <ul>
+	    <li><a href="./../../api/downloads.html">Version 1.0.0</a>&nbsp;&nbsp;<IMG src="./../../images/new_badge.gif" alt="" style="margin-bottom:-3px;" border="0"></li>
+        <li><a href="./../../api/download-old-versions.html">Older versions</a></li>
+    </ul>
+    <h5>Getting Started</h5>
+    <ul>
+        <li><a href="./../../api/vision.html">Vision</a></li>
+        <li><a href="./../../api/java-api.html">Java API</a></li>
+    </ul>
+    <h5>Documentation</h5>
+    <ul>
+	    <li><a href="./../../api/five-minutes-tutorial.html">Five minutes tutorial</a></li>
+	    <li><a href="./../../api/user-guide.html">User Guide</a></li>
+        <li><a href="./../../api/gen-docs/latest/apidocs/">JavaDocs</a></li>
+        <li><a href="./../../api/gen-docs/latest/xref/">Cross-Reference</a></li>
+        <!--li><a href="./../../api/gen-docs/latest/">Generated Reports</a></li-->
+        <li><a href="./../../api/developer-guide.html">Developer Guide</a></li>
+    </ul>
+    
+    
+    <h5>Support</h5>
+    <ul>
+        <li><a href="./../../mailing-lists-and-irc.html">Mailing Lists &amp; IRC</a></li>
+        <li><a href="./../../sources.html">Sources</a></li>
+        <li><a href="./../../issue-tracking.html">Issue Tracking</a></li>
+        <li><a href="./../../commercial-support.html">Commercial Support</a></li>
+    </ul>
+    <h5>Community</h5>
+    <ul>
+        <li><a href="./../../contribute.html">How to Contribute</a></li>
+        <li><a href="./../../team.html">Team</a></li>
+        <li><a href="./../../original-project-proposal.html">Original Project Proposal</a></li>
+        <li><a href="./../../special-thanks.html" class="external-link" rel="nofollow">Special Thanks</a></li>
+    </ul>
+    <h5>About Apache</h5>
+    <ul>
+        <li><a href="http://www.apache.org/">Apache</a></li>
+        <li><a href="http://www.apache.org/licenses/">License</a></li>
+        <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+        <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+        <li><a href="http://www.apache.org/security/">Security</a></li>
+    </ul>
+    
+</div><!-- navigation -->
+
+                </div><!-- leftColumn -->
+                <div id="rightColumn">
+
+
+    <div class="nav">
+        <div class="nav_prev">
+        
+            <a href="6-codec.html">6 - Encoding/Decoding</a>
+		
+        </div>
+        <div class="nav_up">
+        
+            <a href="../internal-design-guide.html">Internal Design Guide</a>
+		
+        </div>
+        <div class="nav_next">
+        
+            <a href="8-dn.html">8 - DN</a>
+		
+        </div>
+        <div class="clearfix"></div>
+    </div>
+
+
+<style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
+<h1 id="7-ldap-messages">7 - LDAP Messages<a class="headerlink" href="#7-ldap-messages" title="Permanent link">&para;</a></h1>
+<p>TODO...</p>
+
+
+    <div class="nav">
+        <div class="nav_prev">
+        
+            <a href="6-codec.html">6 - Encoding/Decoding</a>
+		
+        </div>
+        <div class="nav_up">
+        
+            <a href="../internal-design-guide.html">Internal Design Guide</a>
+		
+        </div>
+        <div class="nav_next">
+        
+            <a href="8-dn.html">8 - DN</a>
+		
+        </div>
+        <div class="clearfix"></div>
+    </div>
+
+
+                </div><!-- rightColumn -->
+                <div id="endContent"></div>
+            </div><!-- content -->
+            <div id="footer">&copy; 2003-2015, <a href="http://www.apache.org">The Apache Software Foundation</a> - <a href="./../../privacy-policy.html">Privacy Policy</a><br />
+                Apache Directory, ApacheDS, Apache Directory Server, Apache Directory Studio, Apache LDAP API, Apache Triplesec, Triplesec, Apache Mavibot, Mavibot, Apache eSCIMo, eSCIMo, Fortress, Apache Fortress, EnMasse, Apache EnMasse, Apache Kerby, Kerby
+                Apache, the Apache feather logo, and the Apache Directory project logos are trademarks of The Apache Software Foundation.
+            </div>
+        </div><!-- container -->
+    </body>
+</html>
\ No newline at end of file