You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bu...@apache.org on 2013/12/24 19:32:22 UTC

svn commit: r891679 [22/24] - in /websites/staging/trafficserver/trunk: cgi-bin/ content/ content/docs/ content/docs/trunk/ content/docs/trunk/admin/ content/docs/trunk/admin/cluster-howto/ content/docs/trunk/admin/configuration-files/ content/docs/tru...

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/Transformations_IO.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/Transformations_IO.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/Transformations_IO.html Tue Dec 24 18:32:14 2013
@@ -0,0 +1,180 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Transformations</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="NetVconnections.html">Prev</a> - Net Vconnections</div>
+<div class="navnext">VIOs - <a accesskey="n" href="VIOs_IO.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="Transformations_IO"></a>Transformations</h2></div></div></div>
+<p></p>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="VconnImplementersView"></a>The Vconnection Implementor's View</h3></div></div></div>
+<p>A VConnection implementor writes only transformations. All other
+        VConnections (net VConnections and cache VConnections) are implemented
+        in iocore. As mentioned earlier, a given vconnection can have a maximum of 
+        one read operation and one write operation being performed on it. The
+        vconnection user gets information about the operation being performed
+        by examining the VIO returned by a call to
+        <code class="function">INKVConnRead</code> or
+        <code class="function">INKVConnWrite</code>. The implementor, in turn, gets a
+        handle on the VIO operation by examining the VIO returned by
+        <code class="function">INKVConnReadVIOGet</code> or
+        <code class="function">INKVConnWriteVIOGet</code> (recall that every
+        vconnection created through the Traffic Server API has an associated
+        read VIO and write VIO, even if it only supports reading or
+        writing).</p>
+<p>For example, the null transform plugin's transformation examines
+        the input VIO by calling:</p>
+<pre class="programlisting">input_vio = INKVConnWriteVIOGet (contp);</pre>
+<p>where <code class="varname">contp</code> is the transformation.</p>
+<p>A vconnection is a continuation. This means it has a handler
+        function that is run when an event is sent to it, or more
+        accurately, when an event that was sent to it is received. It is the
+        handler function's job to examine the event, the current state of its
+        read VIO and write VIO, and any other internal state the vconnection
+        might have and potentially make some progress on the IO
+        operations.</p>
+<p>It is common for the handler function for all vconnections to
+        look similar. Their basic form looks something like the  code
+        fragment below:</p>
+<pre class="programlisting">int
+vconnection_handler (INKCont contp, INKEvent event, void *edata)
+{
+int
+vconnection_handler (INKCont contp, INKEvent event, void *edata)
+{
+if (INKVConnClosedGet (contp)) {
+        /* Destroy any vconnection specific data here. */
+        INKContDestroy (contp);
+        return 0;
+   } else {
+        /* Handle the incoming event */
+   }
+}</pre>
+<p>This code fragment basically shows that many vconnections simply
+        want to destroy themselves when they are closed. However, the
+        situation might also require the vconnection to do some cleanup
+        processing - which is why <code class="function">INKVConnClose</code> does not
+        simply just destroy the vconnection.</p>
+<p>Vconnections are state machines that are animated by the events
+        they receive. An event is sent to the vconnection whenever an
+        <code class="function">INKVConnRead</code>, <code class="function">INKVConnWrite</code>,
+        <code class="function">INKVConnClose</code>,
+        <code class="function">INKVConnShutdown</code>, or
+        <code class="function">INKVIOReenable</code> call is performed.
+        <code class="function">INKVIOReenable</code> indirectly references the
+        vconnection through a back-pointer in the VIO structure to the
+        vconnection. The vconnection itself only knows which call was performed
+        by examining its state and the state of its VIOs. For example, when
+        <code class="function">INKVConnClose</code> is called, the vconnection is 
+        sent an immediate event (<code class="code">INK_EVENT_IMMEDIATE</code>). For every
+        event the vconnection receives, it needs to check its closed flag to
+        see if it has been closed. Similarly, when
+        <code class="function">INKVIOReenable</code> is called, the vconnection is sent
+        an immediate event. For every event the vconnection receives, it
+        must check its VIOs to see if the buffers have been modified to a
+        state in which it can continue processing one of its operations.</p>
+<p>Finally, a vconnection is likely the user of other vconnections.
+        It also receives events as the user of these other vconnections. When
+        it receives such an event, like
+        <code class="code">INK_EVENT_VCONN_WRITE_READY</code>, it might just enable another
+        vconnection that's writing into the buffer used by the vconnection
+        reading from it. The above description is merely intended to give the
+        overall idea for what a vconnection needs to do.</p>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="TransformVconnection"></a>Transformation VConnection</h4></div></div></div>
+<p>A <a href="HTTPTransformationPlugins.html#Transformations" title="Transformations">transformation</a> is a specific type of vconnection. It supports a subset of the vconnection functionality that enables one
+          or more transformations to be chained together. A transformation
+          sits as a bottleneck between an input data source and an output data
+          sink, which enables it to view and modify all the data passing
+          through it. Alternatively, some transformations simply scan the data and pass it
+          on. A common transformation is one that compresses data in some
+          manner.</p>
+<p>A transformation can modify either the data stream being sent
+          <i>to</i> an HTTP client (e.g. the document) or the data stream being sent <i>from</i> an HTTP client (e.g. post data). To do this, the transformation
+          should hook on to one of the following hooks:</p>
+<div class="itemizedlist"><ul type="disc">
+<li><p><code class="function">INK_HTTP_REQUEST_TRANSFORM_HOOK</code></p></li>
+<li><p><code class="function">INK_HTTP_RESPONSE_TRANSFORM_HOOK</code></p></li>
+</ul></div>
+<p>Note that because a transformation is intimately associated
+          with a given transaction, it is only possible to add the hook to
+          the transaction hooks - not to the global or session hooks.
+          Transformations reside in a chain, so their ordering is quite easily
+          determined: transformations that add themselves to the chain are
+          simply appended to it.</p>
+<p>Data is passed in to the transformation by initiating a
+          vconnection write operation on the transformation. As a consequence
+          of this design,  a transformation must support the vconnection
+          write operation. In other words, your transformation must expect an
+          upstream vconnection to write data to it. The transformation has to
+          read the data, consume it, and tell the upstream vconnection  it
+          is finished by sending it an <code class="code">INK_EVENT_WRITE_COMPLETE</code>
+          event. Transformations cannot send
+          the <code class="code">INK_EVENT_VCONN_WRITE_COMPLETE</code> event to the upstream
+          vconnection unless they are finished consuming all incoming data. If
+          <code class="code">INK_EVENT_VCONN_WRITE_COMPLETE</code> is sent prematurely,
+          then certain internal Traffic Server data structures will not be
+          deallocated, thereby causing a memory leak<a class="indexterm" name="id388872"></a>.</p>
+<p>Here's how  to make sure that all incoming data is consumed:</p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<p>After reading or copying data, make sure that you consume
+              the data and increase the value of ndone for the input VIO, as
+              in the following example taken from
+              <code class="filename">null-transform.c</code>:</p>
+<pre class="programlisting">INKIOBufferCopy (INKVIOBufferGet (data-&gt;output_vio),
+INKVIOReaderGet (input_vio), towrite, 0);
+/* Tell the read buffer that we have read the data and are no longer interested in it. */
+INKIOBufferReaderConsume (INKVIOReaderGet (input_vio), towrite);
+/* Modify the input VIO to reflect how much has been read.*/
+INKVIONDoneSet (input_vio, INKVIONDoneGet (input_vio) + towrite);</pre>
+</li>
+<li>
+<p>Before sending
+              <code class="code">INK_EVENT_VCONN_WRITE_COMPLETE</code>, your transformation
+              should check the number of bytes remaining in the upstream
+              vconnection's write VIO (input VIO) using the function
+              <code class="function">INKVIONTodoGet</code>
+              (<code class="varname">input_vio</code>). This value should go to zero
+              when all of the upstream data is consumed
+              (<code class="function">INKVIONTodoGet</code> = nbytes - ndone). Do not
+              send <code class="code">INK_EVENT_VCONN_WRITE_COMPLETE</code> events if
+              <code class="function">INKVIONTodoGet</code> is greater than zero.</p>
+<p>The transformation passes data out of itself by using the
+              output vconnection retrieved by
+              <code class="function">INKTransformOutputVConnGet</code>. Immediately
+              before Traffic Server initiates the write operation (which inputs
+              data into the transformation), it sets the output vconnection either to the next transformation in the chain of transformations or to a
+              special terminating transformation (if it's the last
+              transformation in the chain). Since the transformation is handed
+              ownership of the output vconnection, it must close it at some
+              point in order for it to be deallocated.</p>
+<p>All of the transformations in a transformation chain share
+              the transaction's mutex. This small restriction (enforced by
+              <code class="function">INKTransformCreate</code>) removes many of the
+              locking complications of implementing general vconnections. For
+              example, a transformation does not have to grab its write VIO
+              mutex before accessing its write VIO because it knows it already
+              holds the mutex.</p>
+<p>The transformation functions are:</p>
+<div class="itemizedlist"><ul type="circle">
+<li><p><a href="TransformationFunctions.html#INKTransformCreate" title="INKTransformCreate">INKTransformCreate</a></p></li>
+<li><p><a href="INKTransformOutputVConnGet.html" title="INKTransformOutputVConnGet">INKTransformOutputVConnGet</a></p></li>
+</ul></div>
+</li>
+</ul></div>
+</div>
+</div>
+</div>
+</body>
+</html>

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

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_DebugMemLeaks.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_DebugMemLeaks.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_DebugMemLeaks.html Tue Dec 24 18:32:14 2013
@@ -0,0 +1,24 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Debugging Memory Leaks</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="Trouble_UsingDebugger.html">Prev</a> - Using a Debugger</div>
+<div class="navnext">Appendix D. Function Index - <a accesskey="n" href="FunctionIndex.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="Trouble_DebugMemLeaks"></a>Debugging Memory Leaks</h2></div></div></div>
+<p>Memory leaks in a plugin can be detected using a TS MRTG graph
+      related to memory - you can use memory dump information. Enable <code>mem dump</code> in <code>records.config</code> as follows:</p>
+<pre class="programlisting">CONFIG proxy.config.dump_mem_info_frequency INT &lt;value&gt;</pre>
+<p>This causes Traffic Server to dump memory information to <code>traffic.out</code> at
+      <code>&lt;value&gt;</code> (intervals are in seconds).  A zero value means
+      that it is disabled.</p>
+</div>
+</body>
+</html>

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

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_DebugTags.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_DebugTags.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_DebugTags.html Tue Dec 24 18:32:14 2013
@@ -0,0 +1,61 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Using Debug Tags</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="Trouble_LoadPlugins.html">Prev</a> - Unable to Load Plugins</div>
+<div class="navnext">Using a Debugger - <a accesskey="n" href="Trouble_UsingDebugger.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="Trouble_DebugTags"></a>Using Debug Tags</h2></div></div></div>
+<p>Use the API void <code class="code">INKDebug (const char *<span class="replaceable">tag</span>, const char
+      *<em class="replaceable"><code>format_str</code></em>, ...)</code> to add traces in
+      your plugin. In this API:</p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+  <p><code class="replaceable">tag </code> is the Traffic Server parameter that enables
+      Traffic Server to print out<code class="code"><em class="replaceable"><code> format_str</code></em></code></p></li>
+<li><p><code class="code">...</code> is a variable for
+          <code class="code"><em class="replaceable"><code>format_str</code></em></code></p></li>
+</ul>
+</div>
+<p>Run Traffic Server with the<code class="option">
+      -Ttag</code> option. For example, if the tag is
+      <code class="option">my-plugin</code>, then the debug output goes to
+      <code class="filename">traffic.out.</code>See below:</p>
+<pre class="programlisting">traffic_server -T"my-plugin"
+</pre>
+<p>Set the following variables
+      in <code class="filename">records.config</code> (in the Traffic Server
+      <code class="filename">config</code> directory):</p>
+<pre class="programlisting">proxy.config.diags.debug.enabled INT 1
+proxy.config.diags.debug.tags STRING <em class="replaceable"><code>debug-tag-name</code></em></pre>
+<p>In this case, debug output goes to
+      <code class="filename">traffic.out</code>.</p>
+<p>Example:</p>
+<pre class="programlisting">INKDebug ("my-plugin", "Starting my-plugin at %d\n", the_time);</pre>
+<p>The statement <code>"Starting my-plugin at &lt;time&gt;"</code> appears
+      whenever you run Traffic Server with the <code>my-plugin</code> tag:</p>
+<pre class="programlisting">traffic_server -T"my-plugin"</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="Trouble_OtherDebugTags"></a>Other Useful Internal Debug Tags</h3></div></div></div>
+<p>Traffic Server provides many debug tags for internal debugging
+        purposes. Some of the useful HTTP debug tags are:</p>
+<div class="itemizedlist"><ul type="disc">
+<li><p><code class="code">http_hdrs</code> - traces all incoming and outgoing
+            HTTP headers.</p></li>
+<li><p><code class="code">http.*</code> - traces all the STTP SM debug
+            statements.</p></li>
+<li><p><code class="code">sdk</code> - gives some warning concerning API
+            usage.</p></li>
+</ul></div>
+</div>
+</div>
+</body>
+</html>

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

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_LoadPlugins.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_LoadPlugins.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_LoadPlugins.html Tue Dec 24 18:32:14 2013
@@ -0,0 +1,31 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Unable to Load Plugins</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="App_Troubleshooting.html">Prev</a> - Appendix C. Troubleshooting Tips</div>
+<div class="navnext">Using Debug Tags - <a accesskey="n" href="Trouble_DebugTags.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="Trouble_LoadPlugins"></a>Unable to Load Plugins</h2></div></div></div>
+<p>To load plugins, follow the steps below.</p>
+<div class="orderedlist"><ol type="1">
+<li><p>Make sure that your plugin source code contains an
+      <code>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 the <code>plugin.config</code> file for your plugin.</p></li>
+<li><p>Add the path to your plugin shared library to the
+      <code>records.config</code> file.</p></li>
+<li><p>Restart Traffic Server.</p></li>
+</ol>
+</div>
+<p>For detailed information about each step above, refer to <a href="ASimplePlugin.html" title="A Simple Plugin">A Simple Plugin</a>.</p>
+</div>
+</body>
+</html>

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

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_UsingDebugger.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_UsingDebugger.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/Trouble_UsingDebugger.html Tue Dec 24 18:32:14 2013
@@ -0,0 +1,33 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Using a Debugger</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="Trouble_DebugTags.html">Prev</a> - Using Debug Tags</div>
+<div class="navnext">Debugging Memory Leaks - <a accesskey="n" href="Trouble_DebugMemLeaks.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="Trouble_UsingDebugger"></a>Using a Debugger</h2></div></div></div>
+<p>A debugger can set breakpoints in a plugin. Use a Traffic Server
+      debug build and compile the plugin with the <code class="option">-g</code> option.
+      A debugger can also be used to analyze a core dump. To generate core,
+      set the size limit of the core files in the
+      <code class="filename">records.config</code> file to -1 as follows:</p>
+<pre class="programlisting">CONFIG proxy.config.core_limit INT -1</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="Trouble_DebuggingTips"></a>Debugging Tips:</h3></div></div></div>
+<div class="itemizedlist"><ul type="disc">
+<li><p>Use a Traffic Server debug version.</p></li>
+<li><p>Use assertions in your plugin
+        (<code>INKAssert</code>/<code>INKReleaseAssert</code>).</p></li>
+</ul></div>
+</div>
+</div>
+</body>
+</html>

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

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/TypeIndex.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/TypeIndex.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/TypeIndex.html Tue Dec 24 18:32:14 2013
@@ -0,0 +1,139 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Appendix E. Type Index</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="FunctionIndex.html">Prev</a> - Appendix D. Function Index</div>
+<div class="navnext">Index - <a accesskey="n" href="ConceptIndex.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="appendix" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="TypeIndex"></a>Appendix E. Type Index</h2></div></div></div>
+<h2>
+<a name="id439721"></a>I</h2>
+<div class="informaltable"><table border="1">
+<colgroup>
+<col />
+<col />
+</colgroup>
+<tbody>
+<tr>
+<td><a href="ActionsGuide.html#Actions" title="Actions">INKAction</a></td>
+<td><a href="ManagementInterfaceFunctions.html" title="Management Interface Functions">INKMgmtCounter</a></td>
+</tr>
+<tr>
+<td><a href="CacheInterfaceFunctions.html" title="Cache Interface Functions">INKCacheKey</a></td>
+<td><a href="INKMgmtFloatGet.html" title="INKMgmtFloatGet">INKMgmtFloat</a></td>
+</tr>
+<tr>
+<td>
+<a href="GetingStarted.html#PluginConfiguration" title="Plugin Configuration">INKConfig</a>; also see 
+            <a href="PluginConfigurationFunctions.html" title="Plugin Configuration Functions">Plugin Configuration
+            Functions</a>
+</td>
+<td><a href="INKMgmtIntGet.html" title="INKMgmtIntGet">INKMgmtInt</a></td>
+</tr>
+<tr>
+<td>
+<a href="Continuations.html" title="Chapter 12. Continuations">INKCont</a>; also see <a href="ContinuationFunctions.html" title="Continuation Functions">Continuation
+            Functions</a>
+</td>
+<td><a href="INKMgmtStringGet.html" title="INKMgmtStringGet">INKMgmtString</a></td>
+</tr>
+<tr>
+<td>
+<a href="HTTPSessionFunctions.html#INKEvent_1">INKEvent</a>; also in <a href="INKMutexLockTry.html#INKEvent_2">this example</a>
+</td>
+<td><a href="MimeHeadersFunctions.html#INKMimeParserClear" title="INKMimeParserClear">INKMimeParser</a></td>
+</tr>
+<tr>
+<td>
+<a href="AccessingTransactionProc.html" title="Accessing the Transaction Being Processed">INKEventFunc</a>; see also
+            <a href="INKContCreate.html" title="INKContCreate">INKContCreate</a>
+</td>
+<td>INKMLoc see <a href="HTTPHeaders.html" title="Chapter 10. HTTP Headers">About HTTP
+            Headers</a> and <a href="URLFunctions.html#INKUrlClone" title="INKUrlClone">INKUrlClone</a>
+</td>
+</tr>
+<tr>
+<td><a href="INKfopen.html" title="INKfopen">INKFile</a></td>
+<td>
+<a href="MutexGuide.html" title="Chapter 11. Mutex Guide">INKMutex</a>; also <a href="INKContCreate.html" title="INKContCreate">INKContCreate</a>
+</td>
+</tr>
+<tr>
+<td>
+<a href="AlternateSelectionFunctions.html" title="Alternate Selection Functions">INKHttpAltInfo</a>; see
+            also <a href="HTTPAlternateSelection.html" title="HTTP Alternate Selection">HTTP Alternate Selection</a>
+</td>
+<td><a href="INKPluginRegister.html" title="INKPluginRegister">INKPluginRegistrationInfo</a></td>
+</tr>
+<tr>
+<td><a href="AddingHooks.html" title="Adding Hooks">INKHttpHookID</a></td>
+<td><a href="INKPluginRegister.html" title="INKPluginRegister">INKSDKVersion</a></td>
+</tr>
+<tr>
+<td>INKHttpParser; see <a href="HTTPHeaderFunctions.html#INKHttpParserClear" title="INKHttpParserClear">INKHttpParserClear</a> and <a href="HTTPHeaderFunctions.html#INKHttpParserCreate" title="INKHttpParserCreate">INKHttpParserCreate</a>
+</td>
+<td><a href="AddingStatistics.html" title="Chapter 17. Adding Statistics">INKStat</a></td>
+</tr>
+<tr>
+<td><a href="HTTPSessionFunctions.html" title="Session Functions">INKHttpSsn</a></td>
+<td><a href="AddingStatistics.html" title="Chapter 17. Adding Statistics">INKStatType</a></td>
+</tr>
+<tr>
+<td><a href="HTTPHeaderFunctions.html#INKHttpHdrStatusGet" title="INKHttpHdrStatusGet">INKHttpStatus</a></td>
+<td><a href="LoggingFunctions.html#INKTextLogObjectCreate" title="INKTextLogObjectCreate">INKTextLogObjectCreate</a></td>
+</tr>
+<tr>
+<td>
+<a href="AccessingTransactionProc.html" title="Accessing the Transaction Being Processed">INKHttpTxn</a>;
+            see  <a href="HTTP_Transactions.html" title="HTTP Transactions">HTTP Transactions</a>
+</td>
+<td><a href="INKTextLogObjectHeaderSet.html" title="INKTextLogObjectHeaderSet">INKTextLogObjectHeaderSet</a></td>
+</tr>
+<tr>
+<td>INKHttpType; see <a href="HTTPHeaderFunctions.html#INKHttpHdrTypeGet" title="INKHttpHdrTypeGet">INKHttpHdrTypeGet</a> and
+            <a href="HTTPHeaderFunctions.html#INKHttpHdrTypeSet" title="INKHttpHdrTypeSet">INKHttpHdrTypeSet</a>
+</td>
+<td><a href="INKTextLogObjectRollingEnabledSet.html" title="INKTextLogObjectRollingEnabledSet">INKTextLogObjectRollingEnabledSet</a></td>
+</tr>
+<tr>
+<td>INKIOBuffer; see  <a href="HTTPTransformationPlugins.html#IOBuffers" title="IO Buffers">IO Buffers</a>
+</td>
+<td><a href="INKTextLogObjectRollingIntervalSecSet.html" title="INKTextLogObjectRollingIntervalSecSet">INKTextLogObjectRollingIntervalSecSet</a></td>
+</tr>
+<tr>
+<td>INKIOBufferBlock;  see <a href="HTTPTransformationPlugins.html#IOBuffers" title="IO Buffers">IO Buffers</a></td>
+<td><a href="INKTextLogObjectRollingOffsetHrSet.html" title="INKTextLogObjectRollingOffsetHrSet">INKTextLogObjectRollingOffsetHrSet</a></td>
+</tr>
+<tr>
+<td>INKIOBufferData;  see <a href="HTTPTransformationPlugins.html#IOBuffers" title="IO Buffers">IO Buffers</a>
+</td>
+<td><a href="ThreadFunctions.html" title="Thread Functions">INKThreadFunc</a></td>
+</tr>
+<tr>
+<td>INKIOBufferReader; see <a href="HTTPTransformationPlugins.html#IOBuffers" title="IO Buffers">IO Buffers</a>
+</td>
+<td>
+<a href="HTTPTransformationPlugins.html#VIOs" title="VIOs">INKVIO</a>; also <a href="VIOs_IO.html" title="VIOs">IO Guide</a>
+</td>
+</tr>
+<tr>
+<td>
+<a href="HTTPHeaders.html" title="Chapter 10. HTTP Headers">INKMBuffer</a>; also <a href="URLFunctions.html" title="URL Functions">URL Functions</a>
+</td>
+<td class="auto-generated"> </td>
+</tr>
+</tbody>
+</table></div>
+<h2>
+<a name="id440177"></a>V</h2>
+<p><a href="HTTPTransformationPlugins.html#WritingContentTransformPlugins" title="Writing Content Transform Plugins">vconnection</a></p>
+</div>
+</body>
+</html>

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

Added: websites/staging/trafficserver/trunk/content/docs/v2/sdk/URLFunctions.html
==============================================================================
--- websites/staging/trafficserver/trunk/content/docs/v2/sdk/URLFunctions.html (added)
+++ websites/staging/trafficserver/trunk/content/docs/v2/sdk/URLFunctions.html Tue Dec 24 18:32:14 2013
@@ -0,0 +1,1046 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>URL Functions</title>
+<!--#include file="top.html" -->
+<div class="navheader">
+<div class="navprev">
+<a accesskey="p" href="HTTPHeaderFunctions.html">Prev</a> - HTTP Header Functions</div>
+<div class="navnext">MIIME Headers - <a accesskey="n" href="MimeHeadersFunctions.html">Next</a>
+</div>
+</div>
+<div id="toc"></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="URLFunctions"></a>URL Functions</h3></div></div></div>
+
+<ul><b>
+<li><a href="URLFunctions.html#INKUrlClone">INKUrlClone</a></li>
+<li><a href="URLFunctions.html#INKUrlCopy">INKUrlCopy</a></li>
+<li><a href="URLFunctions.html#INKUrlCreate">INKUrlCreate</a></li>
+<li><a href="URLFunctions.html#INKUrlDestroy">INKUrlDestroy</a></li>
+<li><a href="URLFunctions.html#INKUrlPrint">INKUrlPrint</a></li>
+<li><a href="URLFunctions.html#INKUrlFtpTypeGet">INKUrlFtpTypeGet</a></li>
+<li><a href="URLFunctions.html#INKUrlFtpTypeSet">INKUrlFtpTypeSet</a></li>
+<li><a href="URLFunctions.html#INKUrlHostGet">INKUrlHostGet</a></li>
+<li><a href="URLFunctions.html#INKUrlHostSet">INKUrlHostSet</a></li>
+<li><a href="URLFunctions.html#INKUrlHttpFragmentGet">INKUrlHttpFragmentGet</a></li>
+<li><a href="URLFunctions.html#INKUrlHttpFragmentSet">INKUrlHttpFragmentSet</a></li>
+<li><a href="URLFunctions.html#INKUrlHttpParamsGet">INKUrlHttpParamsGet</a></li>
+<li><a href="URLFunctions.html#INKUrlHttpParamsSet">INKUrlHttpParamsSet</a></li>
+<li><a href="URLFunctions.html#INKUrlHttpQueryGet">INKUrlHttpQueryGet</a></li>
+<li><a href="URLFunctions.html#INKUrlHttpQuerySet">INKUrlHttpQuerySet</a></li>
+<li><a href="URLFunctions.html#INKUrlLengthGet">INKUrlLengthGet</a></li>
+<li><a href="URLFunctions.html#INKUrlParse">INKUrlParse</a></li>
+<li><a href="URLFunctions.html#INKUrlPasswordGet">INKUrlPasswordGet</a></li>
+<li><a href="URLFunctions.html#INKUrlPasswordSet">INKUrlPasswordSet</a></li>
+<li><a href="URLFunctions.html#INKUrlPathGet">INKUrlPathGet</a></li>
+<li><a href="URLFunctions.html#INKUrlPathSet">INKUrlPathSet</a></li>
+<li><a href="URLFunctions.html#INKUrlPortGet">INKUrlPortGet</a></li>
+<li><a href="URLFunctions.html#INKUrlPortSet">INKUrlPortSet</a></li>
+<li><a href="URLFunctions.html#INKUrlSchemeGet">INKUrlSchemeGet</a></li>
+<li><a href="URLFunctions.html#INKUrlSchemeSet">INKUrlSchemeSet</a></li>
+<li><a href="URLFunctions.html#INKUrlStringGet">INKUrlStringGet</a></li>
+<li><a href="URLFunctions.html#INKUrlUserGet">INKUrlUserGet</a></li>
+<li><a href="URLFunctions.html#INKUrlUserSet">INKUrlUserSet</a></li>
+
+</b>
+</ul>
+
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlClone"></a>INKUrlClone</h4></div></div></div>
+<p>Copies a URL from a specified location in a source marshal
+          buffer to a target marshal buffer.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKMLoc INKUrlClone (INKMBuffer
+                <em class="replaceable"><code>dest_bufp</code></em>, INKMBuffer
+                <em class="replaceable"><code>src_bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>src_url_loc</code></em>)</code></p></dd>
+<dt><span class="term"><b>Arguments</b></span></dt>
+<dd>
+<p><code class="code"><em class="replaceable"><code>src_bufp </code></em></code> and
+                <code class="code"><em class="replaceable"><code>dest_bufp </code></em></code> are the
+                source and destination marshal buffers.</p>
+<p><code class="code"><em class="replaceable"><code>src_url_loc </code></em></code> is
+                the source URL location within the source marshal
+                buffer.</p>
+</dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Copies the contents of the URL at location
+                <code class="code"><em class="replaceable"><code>src_url_loc </code></em></code> within the
+                marshal buffer
+                <code class="code"><em class="replaceable"><code>src_bufp </code></em></code> to a location
+                within the marshal buffer
+                <code class="code"><em class="replaceable"><code>dest_bufp</code></em></code>.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+<p>Release the returned handle with a call to
+                <code class="function">INKHandleMLocRelease</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>The <code class="function">INKMLoc</code> location of the
+                copied URL.</p>
+<p><code class="code">INK_ERROR_PTR</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="INKUrlCopy"></a>INKUrlCopy</h4></div></div></div>
+<p>Copies a URL from a specified location in a source marshal
+          buffer to a specified location in a target marshal buffer.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlCopy (INKMBuffer
+                <em class="replaceable"><code>dest_bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>dest_url_loc</code></em>, INKMBuffer
+                <em class="replaceable"><code>src_bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>src_url_loc</code></em>)</code></p></dd>
+<dt><span class="term"><b>Arguments</b></span></dt>
+<dd>
+<p><code class="code"><em class="replaceable"><code>src_bufp </code></em></code> and
+                <code class="code"><em class="replaceable"><code>dest_bufp </code></em></code> are the
+                source and destination marshal buffers.</p>
+<p><code class="code"><em class="replaceable"><code>src_url_loc </code></em></code> and
+                <code class="code"><em class="replaceable"><code>dest_url_loc </code></em></code> are the
+                source and destination URL locations within the source and
+                destination marshal buffers. The type
+                <code class="function">INKMLoc</code> is used for marshal buffer
+                locations.</p>
+</dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Copies the contents of the URL at location
+                <code class="code"><em class="replaceable"><code> src_url_loc </code></em></code> within the
+                marshal buffer
+                <code class="code"><em class="replaceable"><code>src_bufp </code></em></code> to the
+                location <code class="code"><em class="replaceable"><code>dest_url_loc </code></em></code>
+                within the marshal buffer
+                <code class="code"><em class="replaceable"><code>dest_bufp</code></em></code>.                </p>
+</dd>
+<dd>
+  <p><code class="function">INKUrlCopy</code> works correctly even if
+    <code class="code"><em class="replaceable"><code> src_bufp </code></em></code> and
+    <code class="code"><em class="replaceable"><code> dest_bufp </code></em></code> point to
+    different marshal buffers. It is important to create the destination
+    URL (its marshal buffer and <code class="function">INKMLoc</code>) before you copy into it.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlCreate"></a>INKUrlCreate</h4></div></div></div>
+<p>Creates a new URL in a marshal buffer.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKMLoc INKUrlCreate (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Creates a new URL within the marshal buffer
+                <code class="code"><em class="replaceable"><code>bufp</code></em></code>. Release the
+                resulting handle with a call to
+                <code class="function">INKHandleMLocRelease</code> and destroy the URL
+                with a call to <code class="function">INKUrlDestroy</code>.  Note that
+                if you destroy the URL, then you must also release the
+                handle.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A location handle for the URL within the marshal
+                buffer.</p>
+<p><code class="code">INK_ERROR_PTR</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="INKUrlDestroy"></a>INKUrlDestroy</h4></div></div></div>
+<p>Destroys a specific URL within a marshal buffer.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlDestroy (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Destroys the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer
+                <code class="code"><em class="replaceable"><code>bufp</code></em></code>.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</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>Don't forget to release the handle 
+                  <code class="code"><em class="replaceable"><code> url_loc </code></em></code> with a call
+                  to <code class="function">INKHandleMLocRelease</code>.</p></td></tr>
+</table></div>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlPrint"></a>INKUrlPrint</h4></div></div></div>
+<p>Formats a URL stored in a marshal buffer to an
+          <code>INKIOBuffer</code>.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlPrint (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, INKIOBuffer
+                <em class="replaceable"><code>iobufp</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Formats a URL stored in an
+                <code class="function">INKMBuffer</code> to an
+                <code class="function">INKIOBuffer</code>.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlFtpTypeGet"></a>INKUrlFtpTypeGet</h4></div></div></div>
+<p>Gets the FTP type of a specific URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">int INKUrlFtpTypeGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the FTP type portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer
+                <code class="code"><em class="replaceable"><code>bufp</code></em></code>.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>Returns <code>65</code> if the FTP type is ASCII.</p>
+<p>Returns <code>73</code> if the FTP type is binary.</p>
+<p><code class="code">INK_ERROR_PTR</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="INKUrlFtpTypeSet"></a>INKUrlFtpTypeSet</h4></div></div></div>
+<p>Sets the FTP type of a specific URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlFtpTypeSet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                <em class="replaceable"><code>type</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the FTP type portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+                the value <code class="code"><em class="replaceable"><code>type</code></em></code>. Valid values for the
+                <code class="code"><em class="replaceable"><code>type </code></em></code> argument are:<code> 0</code>,<code> 65('A')</code>,<code> 97('a')</code>,<code> 69('E')</code>,<code> 101('e')</code>,<code> 73
+                ('I')</code>, and <code class="code">105('i')</code>.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlHostGet"></a>INKUrlHostGet</h4></div></div></div>
+<p>Gets the host portion of a specific URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">const char* INKUrlHostGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                *<em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the host portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.
+                The length of the returned string is placed in the
+                <code class="code"><em class="replaceable"><code>length </code></em></code>
+                argument.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A pointer to the host portion of the specified URL.
+</p>
+<p><code class="code">INK_ERROR_PTR</code> if an error occurs.</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/docbook/note.png" /></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>The returned string is not guaranteed to be
+                  null-terminated.</p></td></tr>
+</table></div>
+</dd>
+<dt>&nbsp;</dt>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlHostSet"></a>INKUrlHostSet</h4></div></div></div>
+<p>Sets the host portion of a URL to a specific value.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlHostSet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, const char
+                *<em class="replaceable"><code>value</code></em>, int
+                <em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the host portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+                the string <code class="code"><em class="replaceable"><code>value</code></em></code>. </p>
+</dd>
+<dd>
+  <p>If <code class="code"><em class="replaceable"><code>length</code></em></code><em><code> </code></em> is  <code>-1</code>, then <code class="function">INKUrlHostSet</code> assumes that value is
+    null-terminated. Otherwise, the length of the string
+    <code class="code"><em class="replaceable"><code>value </code></em></code> is taken to be
+    <code class="code"><em class="replaceable"><code>length</code></em></code>. </p>
+</dd>
+<dd>
+  <p>The string is
+    copied to within <code class="code"><em class="replaceable"><code>bufp</code></em></code>,
+    so it's okay to modify or delete
+    <code class="code"><em class="replaceable"><code>value </code></em></code> after calling
+    <code class="function">INKUrlHostSet</code>.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlHttpFragmentGet"></a>INKUrlHttpFragmentGet</h4></div></div></div>
+<p>Gets a specified HTTP fragment of a URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">const char* INKUrlHttpFragmentGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                *<em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the HTTP fragment portion of the URL located
+                at <code class="code"><em class="replaceable"><code> url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.
+                <code class="function">INKUrlHttpFragmentGet</code> places the length
+                of the returned string in the
+                <code class="code"><em class="replaceable"><code>length </code></em></code>
+                argument.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A pointer to the HTTP fragment portion of the specified
+                URL.</p>
+<p><code class="code">INK_ERROR_PTR</code> if an error occurs.</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/docbook/note.png" /></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>The returned string is not guaranteed to be
+                  null-terminated.</p></td></tr>
+</table></div>
+</dd>
+<dt>&nbsp;</dt>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlHttpFragmentSet"></a>INKUrlHttpFragmentSet</h4></div></div></div>
+<p>Sets a specified HTTP fragment within a URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlHttpFragmentSet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, const char
+                *<em class="replaceable"><code>value</code></em>, int
+                <em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the HTTP fragment portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+                the string <code class="code"><em class="replaceable"><code>value</code></em></code>. </p>
+</dd>
+<dd>
+  <p>If <code class="code"><em class="replaceable"><code>length </code></em></code> is  <code>-1</code>, then <code class="function">INKUrlHttpFragmentSet</code> assumes that value
+    is null-terminated. Otherwise, the length of the string
+    <code class="code"><em class="replaceable"><code>value </code></em></code> is taken to be
+    <code class="code"><em class="replaceable"><code>length</code></em></code>. </p>
+</dd>
+<dd>
+  <p>The string is
+    copied to within <code class="code"><em class="replaceable"><code>bufp</code></em></code>,
+    so it's okay to modify or delete
+    <code class="code"><em class="replaceable"><code>value </code></em></code> after calling
+    <code class="function">INKUrlHttpFragmentSet</code>.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlHttpParamsGet"></a>INKUrlHttpParamsGet</h4></div></div></div>
+<p>Gets the HTTP params portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">const char* INKUrlHttpParamsGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                *<em class="replaceable"><code>length</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the HTTP params portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.
+                <code class="function">INKUrlHttpParamsGet</code> places the length of
+                the returned string in the
+                <code class="code"><em class="replaceable"><code>length </code></em></code>
+                argument.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A pointer to the HTTP params portion of the specified
+                URL.</p>
+<p><code class="code">INK_ERROR_PTR</code> if an error occurs.</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/docbook/note.png" /></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>The returned string is not guaranteed to be
+                  null-terminated.</p></td></tr>
+</table></div>
+</dd>
+<dt>&nbsp;</dt>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlHttpParamsSet"></a>INKUrlHttpParamsSet</h4></div></div></div>
+<p>Sets the HTTP params portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlHttpParamsSet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, const char
+                *<em class="replaceable"><code>value</code></em>, int
+                <em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the HTTP params portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+                the string <code class="code"><em class="replaceable"><code>value</code></em></code>. </p>
+</dd>
+<dd>
+  <p>If <code class="code"><em class="replaceable"><code>length </code></em></code> is  <code>-1</code>, then <code class="function">INKUrlHttpParamsSet</code> assumes that value is
+    null-terminated. Otherwise, the length of the string
+    <code class="code"><em class="replaceable"><code>value </code></em></code> is taken to be
+    <code class="code"><em class="replaceable"><code>length</code></em></code>.    </p>
+</dd>
+<dd>
+  <p><code class="function">INKUrlHttpParamsSet</code> copies the string to
+    within <code class="code"><em class="replaceable"><code>bufp</code></em></code>, so it's
+    okay to modify or delete
+    <code class="code"><em class="replaceable"><code>value </code></em></code> after calling
+    <code>INKUrlHttpParamsSet</code>.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlHttpQueryGet"></a>INKUrlHttpQueryGet</h4></div></div></div>
+<p>Gets the HTTP query portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">const char* INKUrlHttpQueryGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                *<em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the HTTP query portion of the URL located at <code class="code"><em class="replaceable"><code>url_loc </code></em></code>within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.
+                <code class="function">INKUrlHttpQueryGet</code> places the length of
+                the returned string in the
+                <code class="code"><em class="replaceable"><code>length </code></em></code>
+                argument.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A pointer to the HTTP query portion of the specified
+                URL.</p>
+<p><code class="code">INK_ERROR_PTR</code> if an error occurs.</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/docbook/note.png" /></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>The returned string is not guaranteed to be
+                  null-terminated.</p></td></tr>
+</table></div>
+</dd>
+<dt>&nbsp;</dt>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlHttpQuerySet"></a>INKUrlHttpQuerySet</h4></div></div></div>
+<p>Sets the HTTP query portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlHttpQuerySet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, const char
+                *<em class="replaceable"><code>value</code></em>, int
+                <em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the HTTP query portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+                the string <code class="code"><em class="replaceable"><code>value</code></em></code>. </p>
+</dd>
+<dd>
+  <p>If <code class="code"><em class="replaceable"><code>length </code></em></code> is <code>-1</code>, then <code class="function">INKUrlHttpQuerySet</code> assumes that value is
+    null-terminated. Otherwise, the length of the string
+    <code class="code"><em class="replaceable"><code>value </code></em></code> is taken to be
+    <code class="code"><em class="replaceable"><code>length</code></em></code>.    </p>
+</dd>
+<dd>
+  <p><code class="function">INKUrlHttpQuerySet</code> copies the string to
+    within <code class="code"><em class="replaceable"><code>bufp</code></em></code>, so it's
+    okay to modify or delete
+    <code class="code"><em class="replaceable"><code>value </code></em></code> after calling
+    <code class="function">INKUrlHttpQuerySet</code>.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlLengthGet"></a>INKUrlLengthGet</h4></div></div></div>
+<p>Calculates the length of a URL's string representation.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">int INKUrlLengthGet (INKMBuffer <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Calculates the length of URL located at  <code class="code"><em class="replaceable"><code> url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code>,</em></code> if
+                it was returned as a string. This length is the same as
+                the length returned by
+                <code class="function">INKUrlStringGet</code>.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>Returns the calculated length.</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="INKUrlParse"></a>INKUrlParse</h4></div></div></div>
+<p>Parses the specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">int INKUrlParse (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, const char
+                **<em class="replaceable"><code>start</code></em>, const char
+                *<em class="replaceable"><code>end</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Parses a URL. The
+                <code class="code"><em class="replaceable"><code>start </code></em></code> pointer is both
+                an input and an output parameter, and marks the start of the
+                URL to be parsed. After a successful parse, the
+                <code class="code"><em class="replaceable"><code>start </code></em></code> pointer equals
+                the <code class="code"><em class="replaceable"><code> end </code></em></code> pointer. </p>
+</dd>
+<dd>
+  <p>The <code class="code"><em class="replaceable"><code>end </code></em></code> pointer must be
+    one byte after the last character you want to parse.The URL
+    parsing routine assumes that everything between
+    <code class="code"><em class="replaceable"><code>start </code></em></code> and
+    <code class="code"><em class="replaceable"><code>end </code></em></code> is part of the
+    URL. It is up to higher-level parsing routines, such as
+    <code class="function">INKHttpHdrParseReq</code>, to determine the
+    actual end of the URL.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+  <p><code class="code">INK_PARSE_DONE</code> if
+    successful.</p></dd>
+<dd>
+  <p><code class="code">INK_PARSE_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="INKUrlPasswordGet"></a>INKUrlPasswordGet</h4></div></div></div>
+<p>Gets the password portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><b><span class="term">Prototype</span></b></dt>
+<dd><p><code class="code">const char* INKUrlPasswordGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                *<em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the password portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.
+                <code class="function">INKUrlPasswordGet</code> places the length of
+                the returned string in the
+                <code class="code"><em class="replaceable"><code>length </code></em></code>
+                argument.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A pointer to the password portion of the specified URL.
+</p>
+<p><code class="code">INK_ERROR_PTR</code> if an error occurs.</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/docbook/note.png" /></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>The returned string is not guaranteed to be
+                  null-terminated.</p></td></tr>
+</table></div>
+</dd>
+<dt>&nbsp;</dt>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlPasswordSet"></a>INKUrlPasswordSet</h4></div></div></div>
+<p>Sets the password portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlPasswordSet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, const char
+                *<em class="replaceable"><code>value</code></em>, int
+                <em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the password portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+                the string <code class="code"><em class="replaceable"><code>value</code></em></code>. </p>
+</dd>
+<dd>
+  <p>If <code class="code"><em class="replaceable"><code>length </code></em></code> is <code>-1</code>, then <code class="function">INKUrlPasswordSet</code> assumes that value is
+    null-terminated. Otherwise, the length of the string
+    <code class="code"><em class="replaceable"><code>value </code></em></code> is taken to be
+    <code class="code"><em class="replaceable"><code>length</code></em></code>.    </p>
+</dd>
+<dd>
+  <p><code class="function">INKUrlPasswordSet</code> copies the string to
+    within <code class="code"><em class="replaceable"><code>bufp</code></em></code>, so it is
+    okay to modify or delete
+    <code class="code"><em class="replaceable"><code>value </code></em></code> after calling
+    <code class="function">INKUrlPasswordSet</code>.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlPathGet"></a>INKUrlPathGet</h4></div></div></div>
+<p>Gets the path portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">const char* INKUrlPathGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                *<em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the path portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.
+                <code class="function">INKUrlPathGet</code> places the length of the
+                returned string in the
+                <code class="code"><em class="replaceable"><code>length </code></em></code>
+                argument.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A pointer to the path portion of the specified URL.
+</p>
+<p><code class="code">INK_ERROR_PTR</code> if an error occurs.</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/docbook/note.png" /></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>The returned string is not guaranteed to be
+                  null-terminated. If the URL contains a query portion, then it is not included in the response (see <a href="#INKUrlHttpQueryGet"><code>INKUrlHttpQueryGet</code>)</a>.</p></td></tr>
+</table></div>
+</dd>
+<dt>&nbsp;</dt>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlPathSet"></a>INKUrlPathSet</h4></div></div></div>
+<p>Sets the path portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlPathSet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, const char
+                *<em class="replaceable"><code>value</code></em>, int
+                <em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the path portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+                the string <code class="code"><em class="replaceable"><code>value</code></em></code>. </p>
+</dd>
+<dd>
+  <p>If <code class="code"><em class="replaceable"><code>length </code></em></code> is <code>-1</code>, then <code class="function">INKUrlPathSet</code> assumes that value is
+    null-terminated. Otherwise, the length of the string
+    <code class="code"><em class="replaceable"><code>value </code></em></code> is taken to be
+    <code class="code"><em class="replaceable"><code>length</code></em></code>.    </p>
+</dd>
+<dd>
+  <p><code class="function">INKUrlPathSet</code> copies the string to within
+    <code class="code"><em class="replaceable"><code>bufp</code></em></code>, so it is okay to
+    modify or delete <code class="code"><em class="replaceable"><code>value </code></em></code>
+    after calling <code class="function">INKUrlPathSet</code>.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlPortGet"></a>INKUrlPortGet</h4></div></div></div>
+<p>Gets the port number portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">int INKUrlPortGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the port number portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer
+                <code class="code"><em class="replaceable"><code>bufp</code></em></code>.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>The port number portion of the specified URL.</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="INKUrlPortSet"></a>INKUrlPortSet</h4></div></div></div>
+<p>Sets the port number portion of a URL to a specified
+          value.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlPortSet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                <em class="replaceable"><code>port</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the port number portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+                the value <code class="code"><em class="replaceable"><code> port</code></em></code>.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlSchemeGet"></a>INKUrlSchemeGet</h4></div></div></div>
+<p>Gets the scheme portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">const char* INKUrlSchemeGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                *<em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the scheme portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.
+                <code class="function">INKUrlSchemeGet</code> places the length of the
+                returned string in the
+                <code class="code"><em class="replaceable"><code>length </code></em></code>
+                argument.</p>
+<p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A pointer to the scheme portion of the specified URL.
+</p>
+<p><code class="code">INK_ERROR_PTR</code> if an error occurs.</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/docbook/note.png" /></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>The returned string is not guaranteed to be
+                  null-terminated.</p></td></tr>
+</table></div>
+</dd>
+<dt>&nbsp;</dt>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlSchemeSet"></a>INKUrlSchemeSet</h4></div></div></div>
+<p>Sets the scheme portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlSchemeSet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, const char
+                *<em class="replaceable"><code>value</code></em>, int
+                <em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Sets the scheme portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+                the string <code class="code"><em class="replaceable"><code>value</code></em></code>. </p>
+</dd>
+<dd>
+  <p>If <code class="code"><em class="replaceable"><code>length </code></em></code> is <code>-1</code>, then <code class="function">INKUrlSchemeSet</code> assumes that value is
+    null-terminated. Otherwise, the length of the string
+    <code class="code"><em class="replaceable"><code>value </code></em></code> is taken to be
+    <code class="code"><em class="replaceable"><code>length</code></em></code>.
+    <code class="function">INKUrlSchemeSet</code> copies the string to
+    within <code class="code"><em class="replaceable"><code>bufp</code></em></code>, so it's
+    okay to modify or delete
+    <code class="code"><em class="replaceable"><code>value </code></em></code> after calling
+    <code class="function">INKUrlSchemeSet</code>.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p><code class="code">INK_SUCCESS</code> if successful.</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="INKUrlStringGet"></a>INKUrlStringGet</h4></div></div></div>
+<p>Constructs a string representation of the URL located at
+          <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the marshal
+          buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">char* INKUrlStringGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                *<em class="replaceable"><code>length</code></em>)</code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Constructs a string representation of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.                </p>
+</dd>
+<dd>
+  <p><code class="function">INKUrlStringGet</code> stores the length of the
+    allocated string in the parameter
+    <code class="code"><em class="replaceable"><code>length </code></em></code> (this is the
+    same <code class="code"><em class="replaceable"><code>length</code></em> </code>that <code class="function">INKUrlLengthGet</code> returns).    </p>
+</dd>
+<dd>
+  <p>The returned string is allocated by a call to <code class="function">INKmalloc</code>; it should be freed by a call
+    to <code class="function">INKfree</code>. If
+    <code class="code"><em class="replaceable"><code>length </code></em></code> is
+    <code class="code">NULL</code>, then no attempt is made to dereference
+    it.</p>
+  <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A null-terminated string.</p>
+<p><code class="code">INK_ERROR_PTR</code> if there is an error.</p>
+</dd>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlUserGet"></a>INKUrlUserGet</h4></div></div></div>
+<p>Gets the user portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">const char* INKUrlUserGet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, int
+                *<em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+<p>Retrieves the user portion of the URL located at
+                <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+                marshal buffer <code class="code"><em class="replaceable"><code>bufp</code></em></code>.
+                <code class="function">INKUrlUserGet</code> places the length of the
+                returned string in the
+                <code class="code"><em class="replaceable"><code>length </code></em></code>
+                argument.</p>
+<p>If  in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+</dd>
+<dt><span class="term"><b>Returns</b></span></dt>
+<dd>
+<p>A pointer to the user portion of the specified URL.
+</p>
+<p><code class="code">INK_ERROR_PTR</code> if an error occurs.</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/docbook/note.png" /></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>The returned string is not guaranteed to be
+                  null-terminated.</p></td></tr>
+</table></div>
+</dd>
+<dt>&nbsp;</dt>
+</dl></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="INKUrlUserSet"></a>INKUrlUserSet</h4></div></div></div>
+<p>Sets the user portion of a specified URL.</p>
+<div class="variablelist"><dl>
+<dt><span class="term"><b>Prototype</b></span></dt>
+<dd><p><code class="code">INKReturnCode INKUrlUserSet (INKMBuffer
+                <em class="replaceable"><code>bufp</code></em>, INKMLoc
+                <em class="replaceable"><code>url_loc</code></em>, const char
+                *<em class="replaceable"><code>value</code></em>, int
+                <em class="replaceable"><code>length</code></em>) </code></p></dd>
+<dt><span class="term"><b>Description</b></span></dt>
+<dd>
+  <p>Sets the user portion of the URL located at
+    <code class="code"><em class="replaceable"><code>url_loc </code></em></code> within the
+    marshal buffer <code class="code"><em class="replaceable"><code>bufp </code></em></code> to
+    the string <code class="code"><em class="replaceable"><code>value</code></em></code>. </p>
+</dd>
+</dl>
+  <dl>
+    <dd>
+    <p>If <code class="code"><em class="replaceable"><code>length </code></em></code> is <code>-1</code>, then <code class="function">INKUrlUserSet</code> assumes that value is
+      null-terminated. Otherwise, the length of the string
+      <code class="code"><em class="replaceable"><code>value </code></em></code> is taken to be
+      <code class="code"><em class="replaceable"><code>length</code></em></code>. </p>
+    </dd>
+    <dd>
+      <p><code class="function">INKUrlUserSet</code> copies the string
+        to within <code class="code"><em class="replaceable"><code>bufp</code></em></code>, so it
+        is okay to modify or delete
+        <code class="code"><em class="replaceable"><code>value </code></em></code> after calling
+        <code class="function">INKUrlUserSet</code>.</p>
+      <p>If it is in a transaction header, then call after <code class="code">READ_REQUEST_HDR_HOOK</code>.</p>
+    </dd>
+  <dt><span class="term"><b>Returns</b></span></dt>
+  <dd>
+    <p><code class="code">INK_SUCCESS</code> if successful.</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/URLFunctions.html
------------------------------------------------------------------------------
    svn:executable = *