trafficserver-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r800542 [7/23] - in /websites/staging/trafficserver/trunk/content/docs/v2: ./ admin/ admin/images/ sdk/ sdk/css/ sdk/images/ sdk/images/docbook/ sdk/js/
Date Mon, 19 Dec 2011 22:58:08 GMT
Added: websites/staging/trafficserver/trunk/content/docs/v2/admin/trouble.htm
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/admin/trouble.htm (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/admin/trouble.htm Mon Dec 19 22:58:01 2011
@@ -0,0 +1,914 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>Traffic Server FAQs and Troubleshooting Tips</title>
+
+<!--#include file="top.html" -->
+
+<h1>
+<a name="48024">Appendix G - FAQs and Troubleshooting Tips</a></H1>
+<p>
+This appendix contains the following sections:</p>
+<ul>
+<li><a href="#0_30488">Frequently Asked Questions</a></li>
+<li><a href="#0_96161">Troubleshooting Tips</a></li>
+</ul>
+
+<h2>
+<a name="0_30488"></a>Frequently Asked Questions</h2>
+<p>
+FAQs</p>
+  <ul>
+    <li><a href="#0_41244">How do you create a raw disk for the cache if all your disks have mounted file systems?</a></li>
+    <li><a href="#0_34163">How do disk I/O errors affect the cache and what does Traffic Server do when a cache disk fails?</a></li>
+   <li><a href="#0_45613">If a client disconnects during the time that Traffic Server is downloading a large object, is any of the object saved in the cache?</a></li>
+   <li><a href="#0_95054">Can Traffic Server cache Java applets, JavaScript programs, or other application files like VBScript?</a></li>
+   <li><a href="#0_37211">How do you apply changes to the <code>logs_xml.config</code> file to all nodes in a cluster?</a></li>
+   <li><a href="#0_21826">In Squid- and Netscape-format log files, what do the cache result codes mean?</a></li>
+   <li><a href="#0_11719">What is recorded by the   <code>cqtx</code> field  in a custom log file?</a></li>
+   <li><a href="#0_42816">Does Traffic Server refresh entries in its host database after a certain period of time if they haven't been used?</a></li>
+   <li><a href="#0_12274">Can you improve the look of your custom response pages by using images, animated .gifs, and Java applets?</a></li>
+   <li><a href="#0_84580">Can Traffic Server run in both forward proxy and reverse proxy mode at the same time?</a></li>
+   <li><a href="#enable_forward_proxy">How do I enable forward proxy mode?</a></li>
+   <li><a href="#interpret_via_header">How do I interpret the Via: header code?</a></li>
+   <li><a href="#expect_header">Support for HTTP Expect: Header</a></li>
+  </ul>
+<h3>
+  <a name="0_41244"></a><em>How do you create a raw disk for the cache if all your disks have mounted file systems?</em></h3>
+<h4>
+  To create a raw disk:</h4>
+
+<ol>
+  <li>
+    As <code>root</code>, enter the following command at the prompt to examine which file systems are mounted on the disk you want to use for the Traffic Server cache: <br />
+      <code>df -k</code>    <br />
+  </li>
+  <li>
+    In a text editor, open the <code>
+    /etc/fstab</code>
+  file and comment out/delete the file system entries for the disk.</li>
+  <li>
+  Save and close the <code>fstab</code> file.</li>
+  <li>
+    Enter the following command for each file system you want to unmount:<br />
+    <code>umount <i>file_system</i></code>
+  <br />
+    where <code><i> file_system</i></code> is the file system you want to unmount.  </li><li>
+    Install Traffic Server. When the installation script prompts you for a cache disk, select the raw disk you just created.</li>
+</OL>
+<em>
+<h3>
+<a name="0_34163"></a>How do disk I/O errors affect the cache and what does Traffic Server do when a cache disk fails?</h3>
+</em>
+<p>If a disk drive fails five successive I/O operations, then Traffic Server considers the drive inaccessible and removes the entire disk from the cache. Normal cache operations continue for all other Traffic Server disk drives.<em>
+</em></p>
+<em>
+</em><em><h3>
+<a name="0_45613"></a>If a client disconnects during the time that Traffic Server is downloading a large object, is any of the object saved in the cache?</h3>
+</em>
+<p>When a client disconnects during an HTTP operation, Traffic Server continues to download the object from the origin server for up to 10 seconds. If the transfer from the origin server completes successfully within 10 seconds after the client disconnect, then Traffic Server stores the object in  cache. If the origin server download does <i>not</i> complete successfully within 10 seconds, then Traffic Server disconnects from the origin server and deletes the object from  cache. Traffic Server does not store partial documents in the cache.</p>
+<em>
+<h3>
+<a name="0_95054"></a>Can Traffic Server cache Java applets, JavaScript programs, or other application files like VBScript?</h3>
+</em>
+<p>Yes, Traffic Server can store and serve Java applets, JavaScript programs, VBScripts, and other executable objects from its cache according to the freshness and cacheability rules for HTTP objects.  
+  
+Traffic Server does not execute the applets, scripts, or programs, however - these objects run only when the client system (ie, the one that sent the request) loads them.<em>
+</em><em>
+</em></p>
+<em>
+<h3>
+<a name="0_37211"></a>How do you apply changes to the <code>logs_xml.config</code> file to all nodes in a cluster?</h3>
+</em>
+<p>  After you modify the <code>
+  logs_xml.config</code>
+  file on one Traffic Server node, enter the following command from the Traffic Server <code>
+  bin</code>
+directory:<br /><code> traffic_line -x</code>
+
+<br /><br />
+Traffic Server applies the changes to all nodes in the cluster. The changes take effect immediately.<em></em></p>
+<em><h3>
+<a name="0_21826"></a>In Squid- and Netscape-format log files, what do the cache result codes mean?</h3>
+</em>
+<p>The following table describes the cache result codes in  Squid and Netscape log files.</p>
+<em>
+<table border="1">
+  <tr>
+  <th>
+  <p>
+    Cache Result Code</p>
+  </th>
+  <th>
+  <p>
+    Description</p>
+  </th>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    TCP_HIT </code></p>
+  </td>
+  <td>
+  <p>
+    A valid copy of the requested object was in the cache and  Traffic Server sent the object to the client. </p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    TCP_MISS</code></p>
+  </td>
+  <td>
+  <p>
+    The requested object was not in  cache, so   Traffic Server retrieved the object from the origin server (or a parent proxy) and sent it to the client.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    TCP_REFRESH_HIT </code></p>
+  </td>
+  <td>
+  <p>
+    The object was in the cache, but it was stale. Traffic Server made an <code>
+      if-modified-since</code>
+    request to the origin server and the origin server sent a <code>
+      304 not-modified</code>
+    response. Traffic Server sent the cached object to the client.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    TCP_REF_FAIL_HIT</code></p>
+  </td>
+  <td>
+  <p>
+    The object was in the cache but was stale. Traffic Server made an <code>
+      if-modified-since</code>
+    request to the origin server but the server did not respond<em>.</em> Traffic Server sent the cached object to the client.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    TCP_REFRESH_MISS</code></p>
+  </td>
+  <td>
+  <p>
+    The object was in the cache but was stale. Traffic Server made an <code>
+      if-modified-since</code>
+    request to the origin server and the server returned a new object<em>.</em> Traffic Server served the new object to the client.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    TCP_CLIENT_REFRESH</code></p>
+  </td>
+  <td>
+  <p>
+    The client issued a request with a <code>no-cache</code> header. Traffic Server obtained the requested object from the origin server and sent a copy to the client. Traffic Server deleted the  previous copy of the object from  cache.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    TCP_IMS_HIT </code></p>
+  </td>
+  <td>
+  <p>
+    The client issued an <code>
+      if-modified-since</code>
+    request and the object was in   cache &amp;  fresher than the IMS date, <b>or</b> an <code>
+      if-modified-since</code>
+    request to the origin server revealed the cached object was fresh. Traffic Server served the cached object to the client.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    TCP_IMS_MISS</code></p>
+  </td>
+  <td>
+  <p>
+    The client issued an <code>
+      if-modified-since</code>
+    request, and the object was either not in cache or was stale in cache. Traffic Server sent an <code>
+      if-modified-since</code>
+    request to the origin server and received the new object. Traffic Server sent the updated object to the client.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    TCP_SWAPFAIL </code></p>
+  </td>
+  <td>
+  <p>
+    The object was in the cache but could not be accessed. The client did not receive the object.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    ERR_CLIENT_ABORT </code></p>
+  </td>
+  <td>
+  <p>
+    The client disconnected before the complete object was sent.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    ERR_CONNECT_FAIL</code></p>
+  </td>
+  <td>
+  <p>
+    Traffic Server could not reach the origin server.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    ERR_DNS_FAIL</code></p>
+  </td>
+  <td>
+  <p>
+    The Domain Name Server (DNS) could not resolve the origin server name, or  no DNS could be reached.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    ERR_INVALID_REQ </code></p>
+  </td>
+  <td>
+  <p>
+    The client HTTP request was invalid. (Traffic Server forwards requests with unknown methods to the origin server.) </p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    ERR_READ_TIMEOUT</code></p>
+  </td>
+  <td>
+  <p>
+    The origin server did not respond to  Traffic Server's request within the timeout interval.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    ERR_PROXY_DENIED</code></p>
+  </td>
+  <td>
+  <p>
+    Client service was denied.</p>
+  </td>
+  </tr>
+  <tr>
+  <td>
+  <p><code>
+    ERR_UNKNOWN</code></p>
+  </td>
+  <td>
+  <p>
+    The client connected, but subsequently disconnected without sending a request.</p>
+  </td>
+  </tr>
+</table>
+<h3>
+<a name="0_11719"></a>What is recorded by the <code>cqtx</code> field in a custom log file?</h3>
+</em>
+<p>In <b>forward proxy mode</b>, the <code>
+  cqtx</code>
+  field records the complete client request in the log file (for example, <code>
+  GET http://www.company.com HTTP/1.0</code>
+  ). <br/> In <b>reverse proxy mode</b>, the <code>
+  cqtx</code>
+  field records the hostname or IP address of the origin server because Traffic Server first remaps the request  as per map rules in the <code>
+  remap.config</code>
+file.</p>
+<em>
+<h3>
+<a name="0_42816"></a>Does Traffic Server refresh entries in its host database after a certain period of time if they have not been used?</h3>
+</em>
+<p>By default, the Traffic Server host database observes the time-to-live (<code>ttl</code>) values set by name servers. You can reconfigure Traffic Server to ignore the <code>ttl</code> set by name servers and use a specific Traffic Server setting instead. Alternatively, you can configure Traffic Server to compare the <code>ttl</code> value set by the name server with the <code>ttl</code> value set by Traffic Server, and then use either the lower or the higher value. </p>
+
+<h4>To adjust the host database settings:</h4>
+
+<ol>
+  
+  <li>In a text editor, open the <code>
+    records.config</code>
+    file located in the Traffic Server <code>
+    config</code>
+  directory. </li>
+  <li>
+    Set the value of the variable <code>
+    <i>proxy.config.hostdb.ttl_mode</i></code>
+  to:</li>
+  
+  <ul>
+    <li><code>
+      <b>0</b></code>
+    to obey  <code>ttl</code> values set by the name servers.</li>
+    <li><code>
+      <b>1</b></code> to ignore  <code>ttl</code> values set by name servers and instead use the value set by the Traffic Server configuration variable <code>
+    <i>proxy.config.hostdb.timeout</i></code> (make sure you set this variable to a value appropriate for your needs).</li>
+    <li><code>
+    <b>2</b></code> to use the lower of the two values (i.e., either the value set by the name server or the one set by Traffic Server).</li>
+    <li><code>
+    <b>3</b></code> to use the higher of the two values.</li>
+  </ul>
+  
+  <li>
+    Save and close the <code>
+    records.config</code>
+    file.
+    <br />
+      From the Traffic Server <code>
+      bin</code>
+      directory, run the command <code>
+      traffic_line -x </code>
+    to apply the configuration changes.
+  </li>
+</ol>
+<em>
+<h3>
+<a name="0_12274"></a>Can you improve the look of your custom response pages by using images, animated .gifs, and Java applets?</h3>
+</em>
+<p>No, because Traffic Server can only respond to clients with a single text or HTML document. As a workaround, however, you can provide references on your custom response pages to images, animated .gifs, Java applets, or objects other than text which are located on a web server.  Add links in the <code>
+  body_factory</code>
+template files in the same way you would for any image in an HTML document (i.e., with the full URL in the <code>SRC</code> attribute).</p>
+<em>
+<h3>
+<a name="0_84580"></a>Can Traffic Server run in  forward proxy and reverse proxy modes at the same time?</h3>
+</em>
+<p>
+  Yes. When you enable reverse proxy mode, Traffic Server remaps incoming requests according to the map rules in the <code>
+  remap.config</code>
+  file. All other requests that do not match a map rule are simply served in forward proxy mode. <br />
+  If you want to run in reverse proxy 
+  only 
+  mode (wherein Traffic Server does <i>not</i> serve requests that fail to match a map rule), then you must set the configuration variable <code>
+  <i>proxy.config.url_remap.remap_required</i></code>
+  to 1 in the <code>records.config</code>
+file. </p>
+<h3><em><a name="enable_forward_proxy">How do I enable forward proxy mode</a></em></h3>
+<p>Forward proxy mode is not enabled out of the box for security reasons. When enabling any proxy on the internet, you want to make sure you observe pertinent security restrictions. Having an open proxy available to internet users is a bad thing. If you understand this and are sure you know what you are doing, in <code>records.config</code>:<br>
+<code>
+    # Set this variable to 1 if you want Traffic Server to serve <br>
+    # requests only from origin servers listed in the mapping rules<br>
+    # of the remap.config file. If a request does not match, then <br>
+    # the browser will receive an error.<br>
+    CONFIG proxy.config.url_remap.remap_required INT 0<br>
+</code>
+</p>
+<h3><em><a name="interpret_via_header">How do I interpret the Via: header code?</a></em></h3>
+<p>The Via header is an optional HTTP header added by Traffic Server and other 
+  HTTP proxies. If a request goes through multiple proxies, each one appends its 
+  Via header content to the end of the existing Via header. Via header content 
+  is for general information and diagnostic use only and should not be used as 
+  a programmatic interface to Traffic Server. 
+<p />
+The form of the Via header is 
+<p />
+Via: <em>&lt;protocol&gt; &lt;proxyname&gt;</em> (_&lt;product/version&gt; [_&lt;via-codes&gt;_])
+
+<p />
+
+<dl>
+<dt> <em>&lt;protocol&gt;</em> </dt><dd> the scheme and version of the HTTP request <br>
+</dd>
+<dt> <em>&lt;proxyname&gt;</em> </dt><dd> the configured name of the proxy server <br>
+</dd>
+
+<dt> <em>&lt;product/version&gt;</em> </dt><dd> the Inktomi Network Products product name and 
+  version <br>
+
+</dd>
+<dt> <em>&lt;via-codes&gt;</em> </dt><dd> a string of alphabetic codes presenting status information about the proxy handling of the HTTP request 
+</dd>
+</dl>
+<p />
+For example:
+
+&lt;p&gt;<pre>
+Via: HTTP/1.0 storm (Traffic-Server/4.0.0   [cMs f ]) 
+      [u lH o  f  pS eN]     cache hit
+      [u lM oS fF pS eN]     cache miss
+      [uN l oS f  pS eN]     no-cache origin server fetch
+</pre>
+The short status code shows the cache-lookup, server-info and cache-fill information 
+  as listed in the full status code description below. The long status code list 
+  provided in older, commercial versions of Traffic Server can be restored by setting the verbose_via_str config variable.
+<p />
+The character strings in the via-code show [<i>&lt;request results&gt;</i>:<i>&lt;proxy 
+  op&gt;</i>] where <i>&lt;request results&gt;</i> represents status information about 
+  the results of the client request and <i>&lt;proxy op&gt;</i> represent some information 
+  about the proxy operations performed during request processing. The full via-code 
+  status format is 
+
+<p>[u<i>&lt;client-info&gt;</i> c<i>&lt;cache-lookup&gt;</i> s<i>&lt;server-info&gt;</i>
+
+f<i>&lt;cache-fill&gt;</i> p<i>&lt;proxy-info&gt;</i> e<i>&lt;error-codes&gt;</i>
+
+: t<i>&lt;tunnel-info&gt;</i>c<i>&lt;cache-type&gt;&lt;cache-lookup-result&gt;</i>
+i<i>&lt;icp-conn-info&gt;</i> p<i>&lt;parent-proxy&gt;</i> s<i>&lt;server-conn-info&gt;</i>]
+
+<dl>
+<dt> <strong>u</strong> <em>client-info</em> </dt><dd> Request headers received from client. Value is one of:
+
+</dd>
+</dl>
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  C  </td><td>  cookie  </td></tr>
+<tr><td>  E  </td><td>  error in request  </td></tr>
+
+<tr><td>  I  </td><td>  If Modified Since (IMS)  </td></tr>
+
+<tr><td>  N  </td><td>  no-cache  </td></tr>
+<tr><td>  S  </td><td>  simple request (not conditional)  </td></tr>
+</table>
+<p />
+
+<dl>
+<dt> <strong>c</strong> <em>cache-lookup</em> </dt><dd> Result of Traffic Server cache lookup for URL. Value is one of:
+
+</dd>
+</dl>
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  A  </td><td>  in cache, not acceptable (a cache "MISS")  </td></tr>
+<tr><td>  H  </td><td>  in cache, fresh (a cache "HIT")  </td></tr>
+
+<tr><td>  M  </td><td>  miss (a cache "MISS")  </td></tr>
+
+<tr><td>  S  </td><td>  in cache, stale (a cache "MISS")  </td></tr>
+<tr><td>  blank  </td><td>  no cache lookup performed  </td></tr>
+</table>
+<p />
+
+<dl>
+<dt> <strong>s</strong> <em>server-info</em> </dt><dd> Response information received from origin server. Value is one of:
+
+</dd>
+</dl>
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  E  </td><td>  error in response  </td></tr>
+<tr><td>  N  </td><td>  not-modified  </td></tr>
+
+<tr><td>  S  </td><td>  served  </td></tr>
+
+<tr><td>  blank  </td><td>  no server connection needed  </td></tr>
+</table>
+<p />
+<dl>
+<dt> <strong>f</strong> <em>cache-fill</em> </dt><dd> Result of document write to cache. Value is one of:
+
+</dd>
+</dl>
+
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  D  </td><td>  cached copy deleted  </td></tr>
+<tr><td>  U  </td><td>  updated old cache copy  </td></tr>
+<tr><td>  W  </td><td>  written into cache (new copy)  </td></tr>
+
+<tr><td>  blank  </td><td>  no cache write performed  </td></tr>
+</table>
+<p />
+<dl>
+<dt> <strong>p</strong> <em>proxy-info</em> </dt><dd> Proxy operation result. Value is one of:
+</dd>
+</dl>
+
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  N  </td><td>  not-modified  </td></tr>
+<tr><td>  R  </td><td>  origin server revalidated  </td></tr>
+<tr><td>  S  </td><td>  served  </td></tr>
+
+</table>
+
+<p />
+<dl>
+<dt> <strong>e</strong> <em>error-codes</em> </dt><dd> Value is one of:
+</dd>
+</dl>
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  A  </td><td>  authorization failure  </td></tr>
+
+<tr><td>  C  </td><td>  connection to server failed  </td></tr>
+<tr><td>  D  </td><td>  dns failure  </td></tr>
+<tr><td>  F  </td><td>  request forbidden  </td></tr>
+<tr><td>  H  </td><td>  header syntax unacceptable  </td></tr>
+
+<tr><td>  N  </td><td>  no error  </td></tr>
+<tr><td>  S  </td><td>  server related error  </td></tr>
+<tr><td>  T  </td><td>  connection timed out  </td></tr>
+</table>
+
+<p />
+
+<b>:</b> = Separates proxy request result information from operation detail
+codes
+<p />
+<dl>
+<dt> <strong>t</strong> <em>tunnel-info</em> </dt><dd> Proxy-only service operation. Value is one of:
+</dd>
+</dl>
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  F  </td><td>  tunneling due to a header field (such as presence of If-Range header)  </td></tr>
+
+<tr><td>  M  </td><td>  tunneling due to a method (e.g. CONNECT)  </td></tr>
+<tr><td>  O  </td><td>  tunneling because cache is turned off  </td></tr>
+<tr><td>  U  </td><td>  tunneling because of url (url suggests dynamic content)  </td></tr>
+<tr><td>  blank  </td><td>  no tunneling  </td></tr>
+
+</table>
+<p />
+<dl>
+<dt> <strong>c</strong> <em>cache-type</em> and <em>cache-lookup</em> </dt><dd> cache result values (2 characters)
+</dd>
+</dl>
+<br>&nbsp; cache-type character value is one of
+
+
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  C  </td><td>  cache  </td></tr>
+<tr><td>  I  </td><td>  icp  </td></tr>
+<tr><td>  blank  </td><td>  cache miss or no cache lookup  </td></tr>
+</table>
+
+<p />
+ cache-lookup-result character value is one of:
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  C  </td><td>  cache hit, but config forces revalidate  </td></tr>
+<tr><td>  D  </td><td>  cache hit, but method forces revalidated (e.g. ftp, not anonymous)  </td></tr>
+<tr><td>  H  </td><td>  cache hit  </td></tr>
+
+<tr><td>  I  </td><td>  conditional miss (client sent conditional, fresh in cache, returned 412)  </td></tr>
+<tr><td>  M  </td><td>  cache miss (url not in cache)  </td></tr>
+<tr><td>  N  </td><td>  conditional hit (client sent conditional, doc fresh in cache, returned 304)  </td></tr>
+<tr><td>  S  </td><td>  cache hit, but expired  </td></tr>
+
+<tr><td>  U  </td><td>  cache hit, but client forces revalidate (e.g. Pragma: no-cache)  </td></tr>
+<tr><td>  blank  </td><td>  no cache lookup  </td></tr>
+</table>
+<p />
+<dl>
+<dt> <strong>i</strong> <em>icp-conn-info</em> </dt><dd> ICP status
+
+
+</dd>
+</dl>
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  F  </td><td>  connection open failed  </td></tr>
+<tr><td>  S  </td><td>  connection opened successfully  </td></tr>
+<tr><td>  blank  </td><td>  no icp  </td></tr>
+
+</table>
+<p />
+<dl>
+<dt> <strong>p</strong> <em>parent-proxy</em> </dt><dd> parent proxy connection status
+</dd>
+</dl>
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  F  </td><td>  connection open failed  </td></tr>
+
+<tr><td>  S  </td><td>  connection opened successfully  </td></tr>
+<tr><td>  blank  </td><td>  no parent proxy  </td></tr>
+</table>
+<p />
+<dl>
+<dt> <strong>s</strong> <em>server-conn-info</em> </dt><dd> origin server connection status
+
+
+</dd>
+</dl>
+<table border="1" cellspacing="0" cellpadding="1"> <tr><td>  F  </td><td>  connection open failed  </td></tr>
+<tr><td>  S  </td><td>  connection opened successfully  </td></tr>
+<tr><td>  blank  </td><td>  no server connection  </td></tr>
+
+</table>
+
+<h3><a name="Support_for_HTTP_Expect_Header"></a> Support for HTTP Expect: Header </h3>
+
+Traffic Server currently does not handle request Expect: headers according to the HTTP/1.1 spec.  
+<p />
+Note that clients such as cURL automatically send Expect: for POST requests with large POST bodies, with a 1 second timeout if a 100 Continue response is not received.  To avoid the timeout when using cURL as a client to Traffic Server, you can turn off the Expect: header as follows:
+
+<p />
+command line:
+<pre class="example">
+curl -H"Expect:" http://www.example.com/
+</pre>
+<p />
+C (libcurl):
+<pre class="example">
+struct curl_slist *header_list=NULL;
+header_list = curl_slist_append(header_list, "Expect:"); 
+curl_easy_setopt(my_curlp, CURLOPT_HTTPHEADER, header_list); 
+</pre>
+<p />
+php:
+<pre class="example">
+curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); 
+</pre>
+
+   
+   
+</p>
+<h2><a name="0_96161"></a>Troubleshooting Tips</h2>
+<p> Troubleshooting Tip</p>
+      <ul>
+        <li><a href="#0_22364">The throughput statistic is inaccurate   </a></li>
+        <li><a href="#0_48340">You are unable to execute Traffic Line commands</a></li>
+         <li><a href="#0_42829">You observe inconsistent behavior when one node obtains an object from another node in the cluster</a></li>
+         <li><a href="#0_29076">Web browsers  display an error document with a &quot;data missing&quot; message</a></li>
+         <li><a href="#0_45366">Traffic Server does not resolve any websites</a></li>
+         <li><a href="#0_13841">&quot;Maximum document size exceeded&quot; message in the system log file</a></li>
+         <li><a href="#0_76993">&quot;DrainIncomingChannel&quot; message in the system log file</a></li>
+         <li><a href="#0_73746">&quot;No cop file&quot; message in the system log file</a></li>
+         <li><a href="#0_67754">Warning in system log file when manually editing <code>vaddrs.config</code></a></li>
+         <li><a href="#0_57248">Nontransparent requests fail after enabling <code>always_query_destination</code></a></li>
+         <li><a href="#0_47006">Traffic Server is running but no log files are created</a></li>
+         <li><a href="#0_82182">Traffic Server shows an error indicating too many network connections</a></li>
+         <li><a href="#0_93012">Low memory symptoms</a></li>
+         <li><a href="#0_56862">Connection timeouts with the origin server</a></li>
+         <li><a href="#0_13091">IBM Web servers do not work with Traffic Server</a></li>
+    </ul>
+<em>
+<h3>
+<a name="0_22364"></a>The throughput statistic is inaccurate</h3>
+</em>
+<p>Traffic Server updates the throughput statistic after it has transferred an entire object. For larger files, the byte count increases sharply at the end of a transfer. The complete number of bytes transferred is attributed to the last 10-second interval, although it can take several minutes to transfer the object.  This inaccuracy is more noticeable with a light load. A heavier load yields a more accurate statistic.</p>
+<em>
+<h3>
+<a name="0_48340"></a>You are unable to execute Traffic Line commands</h3>
+</em>
+<p>
+Traffic Line commands do not execute under the following conditions:</p>
+<ul>
+  
+  <li><b>When  the <code>traffic_manager</code> process is not running</b><br />
+      Check to see if the <code><b>traffic_manager</b></code>    process is running by entering the following command: <br />
+    <code>    ps aux | grep traffic_manager  </code><br />
+    <br />
+  
+    If the <code>traffic_manager</code>
+    process is not running, then enter the following command from the Traffic Server <code>bin</code>
+    directory to start it:<br />
+    <code>./traffic_manager</code> <br /> 
+    <br />
+    You should always start and stop Traffic Server with the <code>start_traffic_server </code>and <code>stop_traffic_server</code>
+    commands to ensure that all the processes start and stop correctly. For more information, refer to <a href="getstart.htm">Getting Started</a>.
+  </li><br />
+  <li><b>When you are not executing the command from <code>$TSHome/bin</code></b> <br />
+    If the Traffic Server <code>bin</code> directory is not in your path, then prepend the Traffic Line commands with <code>./</code> (for example, <code>./traffic_line -h</code>).
+  </li>
+  <br />
+  <li><b>
+    When multiple Traffic Server installations are present and you are not executing the Traffic Line command from the active Traffic Server path specified in <code>/etc/traffic_server</code></b><code></code><br />
+    Always switch to the correct directory by issuing the command:<br />
+    <code>cd `cat /etc/traffic_server`/bin</code> <br />
+  </li>
+</ul>
+<em>
+<h3>
+<a name="0_42829"></a>You observe inconsistent behavior when one node obtains an object from another node in the cluster</h3>
+</em>
+<p>As part of the initial system preparation, you must synchronize the clocks on all  nodes in your cluster. Minor time differences do not cause  problems, but differences of more than a few minutes can affect Traffic Server operation.  </p>
+<p>
+  You should run a clock synchronization daemon such as <code>
+  xntpd</code>. To obtain the latest version of <code>
+  xntpd</code>, go to 
+<code>http://www.eecis.udel.edu/&#126;ntp/</code><br />
+</p><em>
+<h3>
+<a name="0_29076"></a>Web browsers  display an error document with a 'data missing' message</h3>
+</em>
+A message similar to the following might display in web browsers:
+<blockquote><code>
+  Data Missing</code>  <br />
+    <code>
+This document resulted from a POST operation and has expired from the cache. You can repost the form data to recreate the document by pressing the Reload button.</code></blockquote>
+<p>
+  This is a Web browser issue and not a problem specific to (or caused by) Traffic Server. Because Web browsers maintain a separate local cache in memory and/or disk on the client system, messages about documents that have expired from cache refer to the browser's local cache and
+<i>not </i> to the Traffic Server cache. There is no Traffic Server message or condition that can cause such messages to appear in a web browser. </p>
+<em>
+<h3>
+<a name="0_45366"></a>Traffic Server does not resolve any websites </h3>
+</em>
+<p>The browser indicates that it is contacting the host and then times out with the following message:  </p>
+<blockquote>
+  <p>
+    <code>
+    The document contains no data; Try again later, or contact the server's Administrator...</code>
+  </p>
+</blockquote>
+<p>
+Make sure  the system is configured correctly and that Traffic Server can read the name resolution file: </p>
+<ul>
+  <li>Check if the server can resolve DNS lookups by issuing the <code>
+    nslookup</code> command (for example,  <code>nslookup  www.myhost.com</code>).</li>
+  <li>
+  Check if the <code>/etc/resolv.conf</code> file contains  valid IP addresses for your DNS servers.</li>
+  <li>
+  On some systems, if the <code>/etc/resolv.conf</code> file is unreadable or has no name server entry, then the operating system  uses <code>localhost</code> as a name server.  Traffic Server, however, does not use this convention. If you want to use <code>localhost</code> as a name server, then you must add a name server entry for <code>127.0.0.1</code> or <code>0.0.0.0</code> in the <code>/etc/resolv.conf</code> file. </li>
+  <li>
+    Check that the Traffic Server user account has permission to read the <code>
+  /etc/resolv.conf</code> file. If it does not, then change the file permissions to <code>rw-r--r--</code> (<code>644</code>)</li>
+</ul>
+<em>
+<h3>
+<a name="0_13841"></a>'Maximum document size exceeded' message in the system log file</h3>
+</em>
+<p>The following message appears in the system log file:  </p>
+<blockquote>
+  <p>
+    <code>
+    WARNING: Maximum document size exceeded</code>
+  </p>
+</blockquote>
+<p>
+A requested object was larger than the maximum size allowed in the Traffic Server cache, so Traffic Server provided proxy service for the oversized object but did not cache it. To set the object size limit for the cache, modify the <code>
+  <i>proxy.config.cache.limits.http.max_doc_size</i></code>
+  variable in the <code>
+  records.config</code>
+file. If you do not want to limit the size of objects in the cache, then set the document size to<code> <b>0</b></code>(zero).</p>
+<em>
+<h3>
+<a name="0_76993"></a>'DrainIncomingChannel' message in the system log file </h3>
+</em>
+<p>The following messages may appear in the system log file:  </p>
+<blockquote>
+  <p>
+    <code>Feb 20 23:53:40 louis traffic_manager[4414]: ERROR ==&gt;</code>
+  </p>
+  <p>
+    <code>[drainIncomingChannel] Unknown message: 'GET http://www.telechamada.pt/</code>
+  </p>
+  <p>
+    <code>HTTP/1.0'</code></p>
+  <p>
+    <code>Feb 20 23:53:46 louis last message repeated 1 time</code></p>
+  <p>
+    <code>Feb 20 23:53:58 louis traffic_manager[4414]: ERROR ==&gt;</code>
+  </p>
+  <p>
+    <code>[drainIncomingChannel] Unknown message: 'GET http://www.ip.pt/ HTTP/1.0'</code>
+  </p>
+</blockquote>
+<p>
+These error messages indicate that a browser is sending HTTP requests to one of the Traffic Server cluster ports - either <code>rsport</code> (default port 8088) or <code>mcport</code> (default port 8089). Traffic Server discards the request; this error does not cause any Traffic Server problems. The misconfigured browser must be reconfigured to use the correct proxy port. Traffic Server clusters work best when configured to use a separate network interface and cluster on a private subnet, so that client machines have no access to the cluster ports. </p>
+<em>
+<h3>
+<a name="0_73746"></a>'No cop file' message in the system log file</h3>
+</em>
+<p>The following message appears repeatedly in the system log file:  </p>
+<blockquote>
+  <p>
+    <code>traffic_cop[16056]: encountered &quot;config/internal/no_cop&quot; file...exiting</code>
+  </p>
+</blockquote>
+<p>
+  The file <code>config/internal/no_cop</code> acts as an administrative control that instructs the <code>traffic_cop</code> process to exit immediately without starting <code>traffic_manager</code> or performing any health checks. The <code>no_cop</code> file prevents Traffic Server from starting automatically when it has been stopped with the <code>stop_traffic_server</code> command. Without this static control, Traffic Server would restart automatically upon system reboot. The <code>no_cop</code> control keeps Traffic Server off until it is explicitly restarted with the <code>
+start_traffic_server </code>command.</p>
+<p>
+  The Traffic Server installation script also creates a <code>
+  no_cop</code>
+  file so that Traffic Server does not start automatically. After you have completed installation/configuration and have rebooted the operating system, use the <code>
+  start_traffic_server</code>
+command to start Traffic Server.</p>
+<em>
+<h3>
+<a name="0_67754"></a>Warning in the system log file when manually editing <code>vaddrs.config </code></h3>
+</em>
+<p>  If you manually edit the <code>
+  vaddrs.config</code>
+file as a non-root user, then Traffic Server issues a warning message in the system log file similar to the following:</p>
+<blockquote>
+  <p>
+    <code>
+    WARNING: interface is ignored: Operation not permitted</code>
+  </p>
+</blockquote>
+<p>
+You can safely ignore this message; Traffic Server <u>does</u> apply your configuration edits. </p>
+<em>
+<h3>
+<a name="0_57248"></a>Nontransparent requests fail after enabling <code>always_query_destination</code></h3>
+</em>
+<p>  The variable <code>
+  <i>proxy.config.arm.always_query_dest </i></code>
+  in the <code>
+  records.config</code>
+file configures Traffic Server in transparent mode to ignore host headers and always ask for the IP address of the origin server. When you enable this variable, Traffic Server obtains the origin server IP address from the existing NAT map list rather than trying to resolve the destination hostname with a DNS lookup. As a result, logged URLs contain only IP addresses and no hostnames. However, explicit requests (nontransparent requests, including requests on port 80) fail, as there is no matching map in the NAT list. The <code>always_query_destination</code> option works only on the primary proxy port.</p>
+<em>
+<h3>
+<a name="0_47006"></a>Traffic Server is running but no log files are created</h3>
+</em>
+<p>Traffic Server only writes event log files when there is information to record. If Traffic Server is idle, then it's possible/probable that no log files exist. In addition:
+</p>
+<li>Make sure  you're looking in the correct directory. By default, Traffic Server creates log files in the <code>
+  logs</code>
+  directory.</li> 
+<li>Check the location of  log files by checking the value of the variable <code>
+  <i>proxy.config.log.logfile_dir </i></code>  in the <code>
+  records.config</code>
+file. </li><li>Check that the log directory has read/write permissions for the Traffic Server user account. If the log directory does not have the correct permissions, then the <code>
+  traffic_server</code>
+process is unable to open or create log files.</li>
+<li>Check that logging is enabled by checking the value of the  <code>
+  <i>proxy.config.log.logging_enabled </i></code>variable  in the <code>
+  records.config</code>
+file. </li>
+<li>Check that a log format is enabled. In the <code>
+  records.config</code>
+  file,  select the standard  or  custom format by editing variables in the <code>
+  Logging Config</code>
+  section.</li>
+<em>
+<h3>
+<a name="0_82182"></a>Traffic Server shows an error indicating too many network connections</h3>
+</em>
+<p>
+By default, Traffic Server supports 8000 network connections: half of this number is allocated for client connections and the remaining half is for origin server connections. A <b>connection throttle event</b> occurs when client or origin server connections reach 90% of half the configured limit (3600 by default). When a connection throttle event occurs, Traffic Server continues processing all existing connections but will not accept new client connection requests until the connection count falls below the limit. </p>
+<p>
+Connection throttle events can occur under the following conditions:</p>
+<ul>
+  <li>
+  If there is a <b>connection spike</b> (e.g., if thousands of client requests all reach  Traffic Server at the same time). Such events are typically transient and require no corrective action.</li>
+  <li>
+  If there is a <b>service overload</b> (e.g., if client requests continuously arrive faster than Traffic Server can service them). Service overloads often indicate network problems between Traffic Server and origin servers. Conversely, it may  indicate that Traffic Server needs more memory, CPU, cache disks, or other resources to handle the client load.</li>
+</ul>
+<p>
+  If necessary, you can reset the maximum number of connections supported by Traffic Server by editing the value of the  <code><i>proxy.config.net.connections_throttle </i></code> configuration variable in the <code>
+records.config</code> file. Do not increase the connection throttle limit unless the system has adequate memory to handle the client connections required. A system with limited RAM might need a throttle limit lower than the default value. Do not set this variable below the minimum value of 100.</p>
+<em>
+<h3>
+<a name="0_93012"></a>Low memory symptoms</h3>
+</em>
+<p>Under heavy load, the Linux kernel can run out of RAM. This low memory condition can cause slow performance and a variety of other system problems. In fact, RAM exhaustion can occur even if the system has plenty of free swap space.  </p>
+<p>
+  Symptoms of extreme memory exhaustion include the following messages in the system log files (<code>/var/log/messages</code>):</p>
+<blockquote>
+  <p>
+    <code>WARNING: errno 105 is ENOBUFS (low on kernel memory), consider a memory upgrade</code>
+  </p>
+  <p>
+    <code>kernel: eth0: can't fill rx buffer (force 0)!</code>
+  </p>
+  <p>
+    <code>kernel: recvmsg bug: copied E01BA916 seq E01BAB22</code>
+  </p>
+</blockquote>
+<p>
+To avoid memory exhaustion, add more RAM to the system or reduce the load on Traffic Server.</p>
+<em>
+<h3>
+<a name="0_56862"></a>Connection timeouts with the origin server</h3>
+</em>
+<p>Certain origin servers take longer than 30 seconds to post HTTP requests, which results in connection timeouts with Traffic Server. To prevent such connection timeouts, you must change the value of the configuration variable <code>
+  <i>proxy.config.http.connect_attempts_timeout </i></code>
+  in the<code>
+  records.config</code>
+file to 60 seconds or more.</p>
+<em>
+<h3>
+<a name="0_13091"></a>IBM Web servers do not work with Traffic Server</h3>
+</em>
+<p>
+IBM web servers do not support the TLS (Transport Layer Security) protocol. For IBM web servers to work with Traffic Server, you must edit a configuration variable. </p>
+
+<h4>To configure Traffic Server to work with IBM web servers:</h4>
+<ol>
+  <li>
+  In a text editor, open the <code>records.config</code> file located in the Traffic Server <code>config</code> directory.</li>
+  <li> Edit the following configuration variable: <br />
+    <table border="1">
+      <tr>
+        <th>
+          <p>
+          Variable</p>
+        </th>
+        <th>
+          <p>
+          Description</p>
+        </th>
+      </tr>
+      <tr>
+        <td>
+          <p><i>
+          <code>proxy.config.ssl.TLSv1</code></i></p>
+        </td>
+        <td>
+          <p> Set this variable to <code><b>0</b></code> (zero).</p>
+        </td>
+      </tr>
+    </table>
+  </li><li> Save and close the <code>
+    records.config</code>
+    file.</li>
+  <li>
+    Navigate to the Traffic Server <code>bin</code> directory.  </li>
+  <li>
+    Run the command <code>
+    traffic_line -x </code>
+  to apply the configuration changes.<em>  </em>  </li>
+</ol>
+
+<!--#include file="bottom.html" -->
\ No newline at end of file

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/admin/trouble.htm
------------------------------------------------------------------------------
    svn:executable = *

Added: websites/staging/trafficserver/trunk/content/docs/v2/admin/ts_admin_chinese.pdf
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/admin/ts_admin_chinese.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/ASimplePlugin.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/ASimplePlugin.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/ASimplePlugin.html Mon Dec 19 22:58:01 2011
@@ -0,0 +1,74 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>A Simple Plugin</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="GetingStarted.html">Prev</a> - Chapter 1. Getting Started</div>
+<div class="navnext">Update the <code class="filename">plugin.config</code> File - <a accesskey="n" href="Updatingplugin.configFile.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="ASimplePlugin"></a>A Simple Plugin</h2></div></div></div>
+<p>This section describes how to write, compile, configure, and run a
+      simple Traffic Server plugin. You'll follow the steps below:<a class="indexterm" name="id306889"></a></p>
+<div class="orderedlist"><ol type="1">
+<li><p>Make sure that your plugin source code contains an
+          <code class="function">INKPluginInit</code> initialization function.</p></li>
+<li><p>Compile your plugin source code, creating a shared
+          library.</p></li>
+<li>
+  <p>Add an entry to your plugin's  <code class="filename">plugin.config</code> file.</p></li>
+<li>
+  <p>Add the path to your plugin shared library into the
+          <code class="filename">records.config</code> file.</p></li>
+<li><p>Restart Traffic Server.</p></li>
+</ol></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="CompilingYourPlugin"></a>Compile Your Plugin<a class="indexterm" name="id307031"></a></h3></div></div></div>
+<p>The process for compiling a shared library  varies with the
+        platform used, so the Traffic Server API provides <code>makefile</code> templates you can use to create shared libraries on all the supported
+        Traffic Server platforms.</p>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="Compiling_Unix"></a>Unix Example<a class="indexterm" name="id307049"></a></h4></div></div></div>
+<p>Assuming the sample program is stored in the file
+          <code class="filename">hello-world.c</code>, you could use the following
+          commands to building a shared library on Solaris using the GNU C
+          compiler.</p>
+<pre class="programlisting">gcc -g -Wall -fPIC -o hello-world.o -c hello-world.c
+gcc -g -Wall -shared -o hello-world.so hello-world.o</pre>
+<p>The first command compiles <code class="filename">hello-world.c</code>
+          as Position Independent Code (PIC); the second command links the
+          single <code class="filename">hello-world.o</code> object file into the
+          <code class="filename">hello-world.so</code> shared library.</p>
+<div class="caution" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Caution">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="images/docbook/caution.png" /></td>
+<th align="left">Caution</th>
+</tr>
+<tr><td align="left" valign="top"><p>Make sure that your plugin is not statically linked with
+            system libraries.</p></td></tr>
+</table></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="Compiling_HPUX"></a>HPUX Example<a class="indexterm" name="id307107"></a></h4></div></div></div>
+<p>Assuming the sample program is stored in the file
+          <code class="filename">hello_world.c</code>, you could use the following
+          commands to build a shared library on HPUX:</p>
+<pre class="programlisting">cc +z -o hello_world.o -c hello_world.c
+ld -b -o hello_world.so hello_world.o</pre>
+</div>
+<div class="section" lang="en">
+
+<div class="orderedlist"></div>
+</div>
+</div>
+</div>
+</body>
+</html>

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/sdk/ASimplePlugin.html
------------------------------------------------------------------------------
    svn:executable = *

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AccessPluginFiles.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/AccessPluginFiles.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/AccessPluginFiles.html Mon Dec 19 22:58:01 2011
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Accessing Installed Plugin Files</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="ReadTESettingStats.html">Prev</a> - Reading Traffic Server Settings and Statistics</div>
+<div class="navnext">Licensing Your Plugin - <a accesskey="n" href="LicensingPlugin.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="AccessPluginFiles"></a>Accessing Installed Plugin Files</h2></div></div></div>
+<p>Your plugin might rely on files in addition to its source code,
+      such as configuration files. When you upgrade Traffic Server, you might
+      need to make sure your plugin is always able to find its associated
+      files. The mechanism for preserving relative file locations with
+      upgrades is as follows:</p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+  <p>Make sure that all plugins are contained in their own directories
+      within the <code>plugin</code> directory.</p></li>
+<li>
+  <p>The plugin directory path is specified in the Traffic Server
+          <code class="filename">records.config</code> file variable 
+          <code class="varname"><i>proxy.config.plugin.plugin_dir</i></code>. This path is
+          relative to the Traffic Server install directory. The default value
+      is <code class="filename">config/plugin</code>.</p></li>
+<li>
+  <p>Make sure that all plugins are listed in the
+          <code class="filename">plugin.db</code> file. For each plugin, this file
+          contains the plugin name, object file, license key, file name(s),
+      and directory relative to the <code>plugin</code> directory.</p></li>
+<li><p>When Traffic Server is upgraded, the Traffic Server
+          installation program looks at the <code class="filename">plugin.db</code>
+          file to see which plugins to copy over to the new Traffic Server
+          installation, and what the appropriate object files, license keys,
+          additional files, and directories should be.</p></li>
+</ul></div>
+<p>The format of the <code class="filename">plugin.db</code> file is as
+      follows:</p>
+<pre class="programlisting">[name of your plugin]
+Object=[name of plugin's shared object file
+License=[license key]
+Dir=[name of any directories to be copied over] </pre>
+<div class="itemizedlist"><ul type="disc">
+<li><p>Entries in <code>plugin.db</code> are case-sensitive.</p></li>
+<li>
+<p>Do not include white spaces in your entries. For example, the
+          following line is incorrect:</p>
+<pre class="programlisting">Object = plugin.so</pre>
+<p>The correct entry would be:</p>
+<pre class="programlisting">Object=plugin.so</pre>
+</li>
+</ul></div>
+<p>For example, suppose  you have a blacklist plugin in the
+      <code>plugin</code> directory. Its object file is <code class="filename">Blacklist.so</code>
+      and it has some user interface files (images and HTML files) in the
+      <code class="filename">Blacklist/ui</code> directory. To make sure that the
+      blacklist plugin is upgraded properly, <code class="filename">plugin.db</code>
+      needs the following entry:</p>
+<pre class="programlisting">[Blacklist plugin]
+Object=Blacklist.so
+License=ABCD0123456789
+Dir=Blacklist/ui</pre>
+<p>In this example, if all of the necessary files and directories are
+      in the Blacklist directory, then you could simply specify
+      <code class="code">Dir=Blacklist</code>.</p>
+<p>This means that the Blacklist image and HTML files are always
+      located in:</p>
+<p><code class="varname">&lt;Traffic Server install
+      directory&gt;</code><code class="varname">/&lt;plugin
+      directory&gt;</code><code class="filename">/Blacklist/ui</code></p>
+<p>Your plugin might need to specify the absolute location of its
+      associated files. The following functions provide the Traffic Server
+      install directory path and plugin directory path:</p>
+<div class="itemizedlist"><ul type="disc">
+<li><p><a href="CustInstallLicenseFunctions.html#INKInstallDirGet" title="INKInstallDirGet">INKInstallDirGet</a></p></li>
+<li><p><a href="INKPluginDirGet.html" title="INKPluginDirGet">INKPluginDirGet</a></p></li>
+</ul></div>
+</div>
+</body>
+</html>

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AccessPluginFiles.html
------------------------------------------------------------------------------
    svn:executable = *

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AccessingTransactionProc.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/AccessingTransactionProc.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/AccessingTransactionProc.html Mon Dec 19 22:58:01 2011
@@ -0,0 +1,53 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Accessing the Transaction Being Processed</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="SettingUpUIUpdateCallbacks.html">Prev</a> - Setting Up UI Update Callbacks</div>
+<div class="navnext">Setting Up a Transaction Hook - <a accesskey="n" href="SettingUpTransacHook.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="AccessingTransactionProc"></a>Accessing the Transaction Being Processed<a class="indexterm" name="id373366"></a></h3></div></div></div>
+<p>A continuation's handler function is of type
+        <code class="function">INKEventFunc</code><a class="indexterm" name="id373381"></a>; the prototype is as follows:<a class="indexterm" name="id373390"></a></p>
+<pre class="programlisting">static int function_name (INKCont contp, INKEvent event, void *edata)</pre>
+<p>In general, the return value of the handler function is not
+        used. The continuation argument is the continuation being called back,
+        the event is the event being sent to the continuation, and the data
+        pointed to by <code>void *edata</code> depends on the type of event. The data types
+        for each event type are listed in <a href="WritingHandlerFunctions.html" title="Writing Handler Functions">Writing Handler Functions</a>.</p>
+<p>The key here is that if the event is an HTTP transaction event,
+        then the data passed to the continuation's handler is of type
+        <code class="code">INKHttpTxn<a class="indexterm" name="id373419"></a></code> (a data type that represents HTTP transactions).
+        Your plugin can then do things with the transaction. Here's how it
+        looks in the code for the Blacklist plugin's handler:</p>
+<pre class="programlisting">static int
+blacklist_plugin (INKCont contp, INKEvent event, void *edata)
+{
+     INKHttpTxn txnp = (INKHttpTxn) edata; 
+     switch (event) {
+          case INK_EVENT_HTTP_OS_DNS:
+               handle_dns (txnp, contp);
+               return 0;
+          case INK_EVENT_HTTP_SEND_RESPONSE_HDR:
+               handle_response (txnp);
+               return 0;
+          case INK_EVENT_MGMT_UPDATE:
+               read_blacklist ();
+               return 0;
+          default:
+               break;
+     }
+     return 0;
+}</pre>
+<p>For example: when the origin server DNS lookup event is sent,
+        <code>blacklist_plugin</code> can call <code>handle_dns </code>and pass <code>txnp</code> as an
+        argument.</p>
+</div>
+</body>
+</html>

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AccessingTransactionProc.html
------------------------------------------------------------------------------
    svn:executable = *

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActionFunctions.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActionFunctions.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActionFunctions.html Mon Dec 19 22:58:01 2011
@@ -0,0 +1,52 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Action Functions</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="INKConfigSet.html">Prev</a> - INKConfigSet</div>
+<div class="navnext">INKActionDone - <a accesskey="n" href="INKActionDone.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="ActionFunctions"></a>Action Functions</h2></div></div></div>
+
+
+<ul><b>
+<li><a href="ActionFunctions.html#INKActionCancel">INKActionCancel</a></li>
+<li><a href="INKActionDone.html">INKActionDone</a></li>
+</b>
+</ul>
+
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="INKActionCancel"></a>INKActionCancel</h3></div></div></div>
+<p>Cancels an action.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKActionCancel (INKAction
+              <em class="replaceable"><code>actionp</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+  <p>Cancels an <code>INKAction</code>. If a <code class="code">NULL</code> argument is
+              passed to <code class="function">INKActionCancel</code>, then Traffic Server
+        crashes and does not return <code class="code">INK_ERROR</code>.</p></dd>
+<dd>
+  <p> <b>Note</b>:
+    it is the programmer's responsibility to ensure that a non-null
+    value is passed to <code class="function">INKActionCancel</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if the action is successfully
+              cancelled.</p>
+<p><code class="code">INK_ERROR</code> if an error occurs.</p>
+</dd>
+</dl></div>
+</div>
+</div>
+</body>
+</html>

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActionFunctions.html
------------------------------------------------------------------------------
    svn:executable = *

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActionsGuide.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActionsGuide.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActionsGuide.html Mon Dec 19 22:58:01 2011
@@ -0,0 +1,166 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Chapter 14. Actions Guide</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="PluginConfigurations.html">Prev</a> - Chapter 13. Plugin Configurations</div>
+<div class="navnext">Hosts Lookup API - <a accesskey="n" href="HostsLookupAPI.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="chapter" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="ActionsGuide"></a>Chapter 14. Actions Guide</h2></div></div></div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<ul>
+<li><a href="ActionsGuide.html#Actions">Actions</a></li>
+<li><a href="HostsLookupAPI.html">Hosts Lookup API</a></li>
+</ul>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="Actions"></a>Actions</h2></div></div></div>
+<p>An <b>action</b> is a handle to an operation initiated by a plugin that
+      has not yet completed. For example: when a plugin connects to a remote
+      server, it uses the call <code class="function">INKNetConnect</code> - which takes      <code class="function">INKCont</code> as an argument to call back when the
+      connection is established. <code class="function">INKNetConnect</code> might not
+      call the continuation back immediately and  will return an
+      <code class="function">INKAction</code> structure that the caller can use to
+      cancel the operation. Cancelling the operation does not necessarily mean
+      that the operation will not occur; it simply means that the continuation passed into the operation will not be called back. In such an example, the
+      connection might still occur if the action is cancelled; however, the
+      continuation that initiated the connection would not be called back.</p>
+<p>In the preceding example, it is also possible that the connection will
+      complete and call back the continuation before
+      <code class="function">INKNetConnect</code> returns. If that occurs, then 
+      <code class="function">INKNetConnect</code>  returns a special action that
+       causes <code class="function">INKActionDone</code> to return <code>1</code>. This specifies that the operation has already completed, so it's pointless to try to cancel the operation. Also note that an action will never
+      change from non-completed to completed. When the operation actually
+      succeeds and the continuation is called back,  the
+      continuation must zero out its action pointer to indicate to itself that
+      the operation succeeded.</p>
+<p>The asynchronous nature of all operations in Traffic Server
+      necessitates actions. You should notice from the above discussion that
+      once a call to a function like <code class="function">INKNetConnect</code> is
+      made by a continuation and that function returns a valid action
+      (<code class="function">INKActionDone</code> returns <code>0</code>),  it is not safe for
+      the continuation to do anything else except return from its handler
+      function. It is not safe to modify or examine the continuation's data
+      because the continuation may have already been destroyed.</p>
+<p>Below is an example of typical usage for an action:</p>
+<pre class="programlisting">#include &lt;ts/ts.h&gt;
+static int
+handler (INKCont contp, INKEvent event, void *edata)
+{
+   if (event == INK_EVENT_IMMEDIATE) {
+      INKAction actionp = INKNetConnect (contp, 127.0.0.1, 9999);
+      if (!INKActionDone (actionp)) {
+   INKContDataSet (contp, actionp);
+   } else {
+          /* We've already been called back... */
+   return 0;
+   }
+   } else if (event == INK_EVENT_NET_CONNECT) {
+      /* Net connection succeeded */
+      INKContDataSet (contp, NULL);
+      return 0;
+   } else if (event == INK_EVENT_NET_CONNECT_FAILED) {
+   /* Net connection failed */
+   INKContDataSet (contp, NULL);
+   return 0;
+   } 
+   return 0;
+}
+
+void
+INKPluginInit (int argc, const char *argv[])
+{
+    INKCont contp;
+
+    contp = INKContCreate (handler, INKMutexCreate ());
+
+    /* We don't want to call things out of INKPluginInit
+       directly since it's called before the rest of the
+       system is initialized. We'll simply schedule an event
+       on the continuation to occur as soon as the rest of
+       the system is started up. */
+    INKContSchedule (contp, 0);
+}</pre>
+<p>The  example above shows a simple plugin that creates a
+      continuation and then schedules it to be called immediately. When the
+      plugin's handler function is called the first time, the event is
+      <code class="code">INK_EVENT_IMMEDIATE</code>. The plugin then tries to open a net
+      connection to port 9999 on <code>localhost</code> (127.0.0.1). The IP
+      description was left in cider notation to further clarify what is going on; also note that the above won't actually compile until the IP address is
+      modified. The action returned from <code class="function">INKNetConnect</code> is
+      examined by the plugin. If the operation has not completed, then the plugin
+      stores the action in its continuation. Otherwise, the plugin knows it has
+      already been called back and there is no reason to store the action
+      pointer.</p>
+<p>A final question might be, &quot;why would a plugin want to cancel an
+      action?&quot; In the above example, a valid reason could be to place a 
+      limit on the length of time  it takes to open a connection. The plugin could
+      schedule itself to get called back in 30 seconds and then initiate the
+      net connection. If the timeout expires first, then the plugin would
+      cancel the action. The following sample code implements this:</p>
+<pre class="programlisting">#include &lt;ts/ts.h&gt;
+static int
+handler (INKCont contp, INKEvent event, void *edata)
+{
+   switch (event) {
+	case (INK_EVENT_IMMEDIATE):
+      INKContSchedule (contp, 30000);
+      INKAction actionp = INKNetConnect(contp, 127.0.0.1, 9999);
+      if (!INKActionDone (actionp)) {
+         INKContDataSet (contp, actionp);
+      } else {
+         /* We've already been called back ... */
+      }
+      break;
+
+   case (INK_EVENT_TIMEOUT):
+      INKAction actionp = INKContDataGet (contp);
+      if (!INKActionDone(actionp)) {
+         INKActionCancel (actionp);
+      }
+      break;
+
+   case (INK_EVENT_NET_CONNECT):
+   /* Net connection succeeded */
+      INKContDataSet (contp, NULL);
+      break;
+
+   case (INK_EVENT_NET_CONNECT_FAILED):
+   /* Net connection failed */
+      INKContDataSet (contp, NULL);
+      break;
+
+   } 
+   return 0;
+}
+
+void
+INKPluginInit (int argc, const char *argv[])
+{
+    INKCont contp;
+
+    contp = INKContCreate (handler, INKMutexCreate ());
+    /* We don't want to call things out of INKPluginInit
+       directly since it's called before the rest of the
+       system is initialized. We'll simply schedule an event
+       on the continuation to occur as soon as the rest of
+       the system is started up. */
+    INKContSchedule (contp, 0);
+}</pre>
+<p>The action functions are:</p>
+<div class="itemizedlist"><ul type="disc">
+<li><code><a href="ActionFunctions.html#INKActionCancel" title="INKActionCancel">INKActionCancel</a></code></li>
+<li><code><a href="INKActionDone.html" title="INKActionDone">INKActionDone</a></code><a href="INKActionDone.html" title="INKActionDone"></a></li>
+</ul></div>
+</div>
+</div>
+</body>
+</html>

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActionsGuide.html
------------------------------------------------------------------------------
    svn:executable = *

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActivateContinuations.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActivateContinuations.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActivateContinuations.html Mon Dec 19 22:58:01 2011
@@ -0,0 +1,32 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>How to Activate Continuations</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="Continuations.html">Prev</a> - Chapter 12. Continuations</div>
+<div class="navnext">Writing Handler Functions - <a accesskey="n" href="WritingHandlerFunctions.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="ActivateContinuations"></a>How to Activate Continuations</h2></div></div></div>
+<p>Continuations are activated   when they receive an event or by
+      <code class="function">INKContSchedule</code> (which schedules a continuation to
+      receive an event). Continuations might receive an event because:</p>
+<div class="itemizedlist"><ul type="disc">
+<li><p>Your plugin calls <code class="function">INKContCall</code></p></li>
+<li><p>The Traffic Server HTTP state machine sends an event
+          corresponding to a particular HTTP hook</p></li>
+<li>
+  <p>A Traffic Server IO processor (such as a cache processor or net
+          processor) is letting a continuation know  there is data (cache or
+          network)  available to read or write. These callbacks are a
+          result of using functions such
+      <code class="function">INKVConnRead</code>/<code class="function">Write</code> or <code class="function">INKCacheRead</code>/<code class="function">Write</code></p></li>
+</ul></div>
+</div>
+</body>
+</html>

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/sdk/ActivateContinuations.html
------------------------------------------------------------------------------
    svn:executable = *

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AddingHooks.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/AddingHooks.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/AddingHooks.html Mon Dec 19 22:58:01 2011
@@ -0,0 +1,196 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Adding Hooks</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="HTTPHooksAndTransactions.html">Prev</a> - Chapter 8. HTTP Hooks and Transactions</div>
+<div class="navnext">HTTP Sessions - <a accesskey="n" href="HTTPSessions.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="AddingHooks"></a>Adding Hooks</h2></div></div></div>
+<p>There are several ways to add hooks to your plugin.</p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<p><b>Global HTTP hooks</b><a class="indexterm" name="id378262"></a></p>
+<p>HTTP transaction hooks are set on a global basis using the
+          function <code class="code">INKHttpHookAdd</code>. This means that the
+          continuation specified as the parameter to
+          <code class="code">INKHttpHookAdd</code> is called for every transaction.
+          <code class="code">INKHttpHookAdd</code> must be used in
+          <code class="code">INKPluginInit</code>.</p>
+</li>
+<li>
+<p><b>Transaction hooks</b></p>
+<p>Transaction hooks can be used to call plugins back for a
+          specific HTTP transaction. You cannot add transaction hooks in
+          <code class="code">INKPluginInit</code>; you first need a handle to a
+          transaction. See <a href="AccessingTransactionProc.html" title="Accessing the Transaction Being Processed">Accessing the Transaction Being Processed</a>.</p>
+</li>
+<li>
+<p><b>Transformation hooks</b></p>
+<p>Transformation hooks are a special case of transaction hooks.
+          See <a href="INKVConnCacheObjectSizeGet.html" title="INKVConnCacheObjectSizeGet">INKVConnCacheObjectSizeGet</a> for more
+          information about transformation hooks. You add a transformation
+          hook using <code class="code">INKHttpTxnHookAdd</code>, as described in <a href="HTTP_Transactions.html" title="HTTP Transactions">HTTP Transactions</a>.</p>
+</li>
+<li>
+<p><b>Session hooks</b></p>
+<p>An HTTP session starts when a client opens a connection to
+          Traffic Server and ends when the connection closes. A session can
+          consist of several transactions. Session hooks enable you to hook
+          your plugin to a particular point in every transaction within a
+          specified session (see <a href="HTTPSessions.html" title="HTTP Sessions">HTTP Sessions</a>). Session
+          hooks are added in a manner similar to transaction hooks (ie, you first
+          need a handle to an HTTP session).</p>
+</li>
+<li>
+<p><b>HTTP select alternate hook</b></p>
+<p>Alternate selection hooks enable you to hook on to the
+          alternate selection state. These hooks must be added globally, since
+          Traffic Server does not have a handle to a transaction or session
+          when alternate selection is taking place. See <a href="HTTPAlternateSelection.html" title="HTTP Alternate Selection">HTTP Alternate Selection</a> for information on the alternate
+          selection mechanism.</p>
+</li>
+</ul></div>
+<p>All of the hook addition functions (<a href="HTTPFunctions.html#INKHttpHookAdd" title="INKHttpHookAdd"><code class="code">INKHttpHookAdd</code></a>, <a href="HTTPSessionFunctions.html#INKHttpSsnHookAdd" title="INKHttpSsnHookAdd"><code class="code">INKHttpSsnHookAdd</code></a>, <a href="HTTPSessionFunctions.html#INKHttpSsnReenable" title="INKHttpSsnReenable"><code class="code">INKHttpSsnReenable</code></a>) take
+       <code class="code">INKHttpHookID</code> (identifies the hook to add on to) and 
+      <code class="code">INKCont</code> (the basic callback mechanism in Traffic
+      Server). A single <code>INKCont</code> can be added to any number of hooks at a 
+      time.</p>
+<p>An HTTP hook is identified by the enumerated type
+      <code class="code">INKHttpHookID</code>. The values for <code class="code">INKHttpHookID</code>
+      are:</p>
+<table frame="box" id="Tbl_INKHttpHookIDValues" rules="all">
+<caption>Table 8.1. <code>INKHttpHookID</code> Values
+<br>
+</caption>
+<thead><tr align="center">
+            <th width="287" colspan="1" rowspan="1"><span class="bold"><strong>Values for INKHttpHookID</strong></span></th>
+
+            <th width="659" colspan="1" rowspan="1"><span class="bold"><strong>Description</strong></span></th>
+</tr></thead>
+<tbody>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_CACHE_LOOKUP_COMPLETE_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called after the HTTP state machine has completed the cache
+            lookup for the document requested in the ongoing transaction.
+            Register this hook via  
+            <code class="code">INKHttpTxnHookAdd</code> or <code class="code">INKHttpHookAdd</code>.
+            Corresponds to the event
+            <code class="code">INK_EVENT_HTTP_CACHE_LOOKUP_COMPLETE</code>.</td>
+</tr>   
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_OS_DNS_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called immediately after the HTTP state machine has completed
+            a DNS lookup of the origin server. The HTTP state machine will
+            know the origin server's IP address at this point, which is useful
+            for performing both authentication and blacklisting. Corresponds
+            to the event <code class="code">INK_EVENT_HTTP_OS_DNS</code>.</td>
+</tr>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_READ_CACHE_HDR_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called immediately after the request and response header of a
+            previously-cached object is read from cache. This hook
+            is only called if the document is being served from cache.
+            Corresponds to the event
+            <code class="code">INK_EVENT_HTTP_READ_CACHE_HDR</code>.</td>
+</tr>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_READ_RESPONSE_HDR_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called immediately after the response header is read from the
+            origin server or parent proxy. Corresponds to the event
+            <code class="code">INK_EVENT_HTTP_READ_RESPONSE_HDR</code>.</td>
+</tr>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_RESPONSE_TRANSFORM_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">See "<a href="HTTPTransformationPlugins.html#Transformations" title="Transformations">"Transformations"</a> for information about 
+            transformation hooks.</td>
+</tr>
+
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_READ_REQUEST_HDR_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called immediately after the request header is read from the
+            client. Corresponds to the event
+            <code class="code">INK_EVENT_HTTP_READ_REQUEST_HDR</code>.</td>
+</tr>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_READ_REQUEST_PRE_REMAP_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called after the request header is read from the client, before any remapping of the headers occurs.  Corresponds to the event <code class="code">INK_EVENT_HTTP_READ_REQUEST_PRE_REMAP</code>.</td>
+</tr>
+
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_REQUEST_TRANSFORM_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">See<a href="HTTPTransformationPlugins.html#Transformations" title="Transformations">"Transformations"</a> for information about 
+            transformation hooks.</td>
+</tr>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_SELECT_ALT_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">See <a href="HTTPAlternateSelection.html" title="HTTP Alternate Selection">"HTTP Alternate Selection"</a> for information
+            about the alternate selection mechanism.</td>
+</tr>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_SEND_RESPONSE_HDR_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called immediately before the proxy's response header is
+            written to the client; this hook is usually used for modifying the
+            response header. Corresponds to the event
+            <code class="code">INK_EVENT_HTTP_SEND_RESPONSE_HDR</code>.</td>
+</tr>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_SEND_REQUEST_HDR_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called immediately before the proxy's request header is sent
+            to the origin server or the parent proxy. This hook
+            is not  called if the document is being served from cache.
+            This hook is usually used for modifying the proxy's request header
+            before it is sent to the origin server or parent proxy.</td>
+</tr>
+
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_SSN_CLOSE_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called when an HTTP session ends. A session ends when the
+            client connection is closed. You can only add this hook as a
+            global hook</td>
+</tr>
+
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_SSN_START_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called when an HTTP session is started. A session starts when
+            a client connects to Traffic Server. You can only add this hook as
+            a global hook.</td>
+</tr>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_TXN_CLOSE_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called when an HTTP transaction ends.</td>
+</tr>
+<tr>
+            <td rowspan="1" colspan="1"><code>INK_HTTP_TXN_START_HOOK</code></td>
+
+            <td rowspan="1" colspan="1">Called when an HTTP transaction is started. A transaction
+            starts when either a client connects to Traffic Server and data is
+            available on the connection, or a previous client connection that was left
+            open for keep alive has new data available.</td>
+</tr>
+</tbody>
+</table>
+<p>The function you use to add a global HTTP hook is <a href="HTTPFunctions.html#INKHttpHookAdd" title="INKHttpHookAdd"><code class="code">INKHttpHookAdd</code></a>.</p>
+</div>
+</body>
+</html>

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AddingHooks.html
------------------------------------------------------------------------------
    svn:executable = *

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AddingStatistics.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/AddingStatistics.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/AddingStatistics.html Mon Dec 19 22:58:01 2011
@@ -0,0 +1,61 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Chapter 17. Adding Statistics</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="LoggingAPI.html">Prev</a> - Guide to the Logging API</div>
+<div class="navnext">Coupled Statistics - <a accesskey="n" href="CoupledStatistics.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="chapter" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="AddingStatistics"></a>Chapter 17. Adding Statistics</h2></div></div></div>
+<p>This chapter describes how to add statistics to your plugins.
+    Statistics can be coupled or uncoupled; <b>coupled</b> statistics are quantities
+    that are related and must therefore be updated together. The Traffic Server API
+    statistics functions add your plugin's statistics to the Traffic Server
+    statistics system. You can view your plugin statistics as you would any
+    other Traffic Server statistic, using Traffic Line (Traffic Server's command
+    line interface). This chapter contains the following topics:</p>
+<div class="itemizedlist"><ul type="disc">
+<li><p><a href="AddingStatistics.html#UncoupledStatistics" title="Uncoupled Statistics">Uncoupled Statistics</a></p></li>
+<li><p><a href="CoupledStatistics.html" title="Coupled Statistics">Coupled Statistics</a></p></li>
+<li><p><a href="ViewStatsUsingTrafLine.html" title="Viewing Statistics Using Traffic Line">Viewing Statistics Using Traffic Line</a></p></li>
+</ul></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="UncoupledStatistics"></a>Uncoupled Statistics</h2></div></div></div>
+<p>A statistic is an object of type <code class="code">INKStat</code>. The value
+      of the statistic is of type <code class="code">INKStatType</code>. The possible
+      <code class="code">INKStatTypes</code> are:</p>
+<div class="itemizedlist"><ul type="disc">
+<li><p><code class="code">INKSTAT_TYPE_INT64</code></p></li>
+<li><p><code class="code">INKSTAT_TYPE_FLOAT</code></p></li>
+</ul></div>
+<p>There is <span class="emphasis"><em>no</em></span>
+      <code class="code">INKSTAT_TYPE_INT32</code>.</p>
+<p>To add uncoupled statistics, follow the steps below:</p>
+<div class="orderedlist"><ol type="1">
+<li>
+<p>Declare your statistic as a global variable in your plugin.
+          For example:</p>
+<pre class="programlisting">static INKStat my_statistic;</pre>
+</li>
+<li>
+<p>In <code class="function">INKPluginInit</code>, create new statistics
+          using <code class="function">INKStatCreate</code>.</p>
+<p>When you create a new statistic, you need to give it an
+          "external" name that the Traffic Server command line interface
+          (Traffic Line) uses to access the statistic. For example:</p>
+<pre class="programlisting">my_statistic = INKStatCreate ("my.statistic", INKSTAT_TYPE_INT64);</pre>
+</li>
+<li><p>Modify (increment, decrement, or other modification) your
+          statistic in plugin functions.</p></li>
+</ol></div>
+</div>
+</div>
+</body>
+</html>

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AddingStatistics.html
------------------------------------------------------------------------------
    svn:executable = *

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AlternateSelectionFunctions.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/AlternateSelectionFunctions.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/AlternateSelectionFunctions.html Mon Dec 19 22:58:01 2011
@@ -0,0 +1,134 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Alternate Selection Functions</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="INKHttpTxnServerIntercept.html">Prev</a> - INKHttpTxnServerIntercept</div>
+<div class="navnext">Handle Release Functions - <a accesskey="n" href="ch18s09s04.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="AlternateSelectionFunctions"></a>Alternate Selection Functions</h3></div></div></div>
+
+
+<ul><b>
+<li><a href="AlternateSelectionFunctions.html#INKHttpAltInfoCachedReqGet">INKHttpAltInfoCachedReqGet</a></li>
+<li><a href="AlternateSelectionFunctions.html#INKHttpAltInfoCachedRespGet">INKHttpAltInfoCachedRespGet</a></li>
+<li><a href="AlternateSelectionFunctions.html#INKHttpAltInfoClientReqGet">INKHttpAltInfoClientReqGet</a></li>
+<li><a href="AlternateSelectionFunctions.html#INKHttpAltInfoQualitySet">INKHttpAltInfoQualitySet</a></li>
+</b>
+</ul>
+
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKHttpAltInfoCachedReqGet"></a>INKHttpAltInfoCachedReqGet</h4></div></div></div>
+<p>Gets the cached request header from the specified alternate
+          information.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKHttpAltInfoCachedReqGet
+                (INKHttpAltInfo <em class="replaceable"><code>infop</code></em>, INKMBuffer
+                *<em class="replaceable"><code>bufp</code></em>, INKMLoc
+                *<em class="replaceable"><code>offset</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the cached client request header from the
+                alternate information
+                <code class="code"><em class="replaceable"><code>infop</code></em></code>.</p>
+<p>Call from within
+                <code class="code">HTTP_SELECT_ALT_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if the operation completes
+                successfully.</p>
+<p><code class="code">INK_ERROR</code> if an error occurs.</p>
+</dd>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKHttpAltInfoCachedRespGet"></a>INKHttpAltInfoCachedRespGet</h4></div></div></div>
+<p>Gets the cached response header from the specified alternate
+          information.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKHttpAltInfoCachedRespGet
+                (INKHttpAltInfo <em class="replaceable"><code>infop</code></em>, INKMBuffer
+                *<em class="replaceable"><code>bufp</code></em>, INKMLoc
+                *<em class="replaceable"><code>offset</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the cached client response header from the
+                alternate information
+                <code class="code"><em class="replaceable"><code>infop</code></em></code>.</p>
+<p>Call from within
+                <code class="code">HTTP_SELECT_ALT_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if the operation completes
+                successfully.</p>
+<p><code class="code">INK_ERROR</code> if an error occurs.</p>
+</dd>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKHttpAltInfoClientReqGet"></a>INKHttpAltInfoClientReqGet</h4></div></div></div>
+<p>Gets the client request header from the specified alternate
+          information.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKHttpAltInfoClientReqGet
+                (INKHttpAltInfo <em class="replaceable"><code>infop</code></em>, INKMBuffer
+                *<em class="replaceable"><code>bufp</code></em>, INKMLoc
+                *<em class="replaceable"><code>offset</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the client request header from the alternate
+                information
+                <code class="code"><em class="replaceable"><code>infop</code></em></code>.</p>
+<p>Call from within
+                <code class="code">HTTP_SELECT_ALT_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if the operation completes
+                successfully.</p>
+<p><code class="code">INK_ERROR</code> if an error occurrs.</p>
+</dd>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKHttpAltInfoQualitySet"></a>INKHttpAltInfoQualitySet</h4></div></div></div>
+<p>Sets the quality value for the specified alternate
+          information.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKHttpAltInfoQualitySet
+                (INKHttpAltInfo <em class="replaceable"><code>infop</code></em>, float
+                <em class="replaceable"><code>quality</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the quality value for this alternate information
+                <code class="code"><em class="replaceable"><code>infop</code></em></code>.</p>
+<p>Call from within
+                <code class="code">HTTP_SELECT_ALT_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if the operation completes
+                successfully.</p>
+<p><code class="code">INK_ERROR</code> if an error occurs.</p>
+</dd>
+</dl></div>
+</div>
+</div>
+</body>
+</html>

Propchange: websites/staging/trafficserver/trunk/content/docs/v2/sdk/AlternateSelectionFunctions.html
------------------------------------------------------------------------------
    svn:executable = *



Mime
View raw message