You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ig...@apache.org on 2010/11/06 07:30:02 UTC
svn commit: r1031963 [5/13] - in /trafficserver/site/branches/ats-cms:
content/docs/trunk/sdk/ templates/
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTPTransactionFunctions.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTPTransactionFunctions.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTPTransactionFunctions.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTPTransactionFunctions.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,855 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](HTTPSessionFunctions) - Session Functions
+Initiate Connection - [Next](InitiateConnectionFunctions)
+### HTTP Transaction Functions
+
+- **[INKHttpTxnCacheLookupStatusGet](HTTPTransactionFunctions#INKHttpTxnCacheLookupStatusGet)**
+- **[INKHttpTxnCacheLookupStatusSet](HTTPTransactionFunctions#INKHttpTxnCacheLookupStatusSet)**
+- **[INKHttpTxnCachedReqGet](HTTPTransactionFunctions#INKHttpTxnCachedReqGet)**
+- **[INKHttpTxnCachedRespGet](HTTPTransactionFunctions#INKHttpTxnCachedRespGet)**
+- **[INKHttpTxnClientIncomingPortGet](HTTPTransactionFunctions#INKHttpTxnClientIncomingPortGet)**
+- **[INKHttpTxnClientIPGet](HTTPTransactionFunctions#INKHttpTxnClientIPGet%20)**
+- **[INKHttpTxnClientRemotePortGet](HTTPTransactionFunctions#INKHttpTxnClientRemotePortGet)**
+- **[INKHttpTxnClientReqGet](HTTPTransactionFunctions#INKHttpTxnClientReqGet)**
+- **[INKHttpTxnClientRespGet](HTTPTransactionFunctions#INKHttpTxnClientRespGet)**
+- **[INKHttpTxnErrorBodySet](HTTPTransactionFunctions#INKHttpTxnErrorBodySet)**
+- **[INKHttpTxnHookAdd](HTTPTransactionFunctions#INKHttpTxnHookAdd)**
+- **[INKHttpTxnNextHopIPGet](HTTPTransactionFunctions#INKHttpTxnNextHopIPGet)**
+- **[INKHttpTxnParentProxyGet](HTTPTransactionFunctions#INKHttpTxnParentProxyGet)**
+- **[INKHttpTxnParentProxySet](HTTPTransactionFunctions#INKHttpTxnParentProxySet)**
+- [**INKHttpTxnPristineUrlGet**](HTTPTransactionFunctions#INKHttpTxnPristineUrlGet)
+- **[INKHttpTxnReenable](HTTPTransactionFunctions#INKHttpTxnReenable)[](HTTPTransactionFunctions#INKHttpTxnReenable)**
+- **[INKHttpTxnServerIPGet](HTTPTransactionFunctions#INKHttpTxnServerIPGet)**
+- **[INKHttpTxnServerReqGet](HTTPTransactionFunctions#INKHttpTxnServerReqGet)**
+- **[INKHttpTxnServerRespGet](HTTPTransactionFunctions#INKHttpTxnServerRespGet)**
+- **[INKHttpTxnSetRespCacheableSet](HTTPTransactionFunctions#INKHttpTxnSetRespCacheableSet)**
+- **[INKHttpTxnSkipRww](HTTPTransactionFunctions#INKHttpTxnSkipRww)**
+- **[INKHttpTxnSsnGet](HTTPTransactionFunctions#INKHttpTxnSsnGet)**
+- **[INKHttpTxnTransformedRespCache](HTTPTransactionFunctions#INKHttpTxnTransformedRespCache)**
+- **[INKHttpTxnTransformRespGet](HTTPTransactionFunctions#INKHttpTxnTransformRespGet)**
+- **[INKHttpTxnUntransformedRespCache](HTTPTransactionFunctions#INKHttpTxnUntransformedRespCache)**
+
+#### INKHttpTxnCacheLookupStatusGet
+
+Stores the current cache lookup status for the ongoing transaction.
+Also stores the number of cache lookup operations already
+performed.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnCacheLookupStatusGet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ int \**`lookup_status`*)
+
+**Arguments**
+ ~ `INKHttpTxn <i>txnp </i>` is the ongoing transaction.
+
+ `int <i>*lookup_status </i>` is set to the lookup status.
+
+**Description**
+ ~ Obtains the status of the current cache lookup for the ongoing
+ transaction `<em class="replaceable"><code>txnp` in the
+ `<em class="replaceable"><code>lookup_status` variable.
+
+ This function should only be called from
+ `INK_HTTP_CACHE_LOOKUP_COMPLETE_HOOK`.
+
+ Possible status values returned in
+ `<em class="replaceable"><code>lookup_status` are:
+
+ - `INK_CACHE_LOOKUP_MISS` - Document was not in the cache, so it
+ will be fetched from the origin server.
+ - `INK_CACHE_LOOKUP_HIT_STALE` - Document was present in the
+ cache but was stale. A fresher version will be fetched from the
+ origin server (IMS request).
+ - `INK_CACHE_LOOKUP_HIT_FRESH` - Document was present in the
+ cache and was fresh. Document will be served from the cache.
+ - `INK_CACHE_LOOKUP_SKIPPED` - Traffic Server didn't perform a
+ cache lookup because the request wasn't cacheable (this can happen
+ when the URL looks dynamic or the request is marked as
+ noncacheable).
+
+
+**Returns**
+ ~ `INK_SUCCESS` if the API is called successfully.
+
+ `INK_ERROR` if an error occurs while calling the API or if an
+ argument is invalid.
+
+
+#### INKHttpTxnCacheLookupStatusSet
+
+Sets the cache lookup status to the status that is passed in.
+
+**Prototype**
+ ~ `int INKHttpTxnCacheLookupStatusSet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ int *`lookup_status`*)
+
+**Arguments**
+ ~ `INKHttpTxn``<em class="replaceable"><code>txnp`** is the
+ ongoing transaction.
+
+ Â
+
+**Description**
+ ~ Sets the status of the current cache lookup for the ongoing
+ transaction `<em class="replaceable"><code>txnp` to whatever is
+ specified in the `<em class="replaceable"><code>lookup_status`
+ variable. Changing the status from `INK_CACHE_LOOKUP_MISS` is not
+ allowed.
+
+ ~ For example, consider the following use-case scenario: A 'stale
+ while revalidate' plugin has to serve stale data from the cache
+ while it makes a request for new data asynchronously. The plugin
+ forces the core to serve stale data by setting the cache lookup
+ status to `INK_CACHE_LOOKUP_HIT_FRESH`.
+
+ Possible status values for
+ `<em class="replaceable"><code>lookup_status` are:
+
+ - `INK_CACHE_LOOKUP_MISS` - Document was not in the cache, so it
+ will be fetched from the origin server.
+ - `INK_CACHE_LOOKUP_HIT_STALE` - Document was present in the
+ cache but was stale. A fresher version will be fetched from the
+ origin server (IMS request).
+ - `INK_CACHE_LOOKUP_HIT_FRESH` - Document was present in the
+ cache and was fresh. Document will be served from the cache.
+ - `INK_CACHE_LOOKUP_SKIPPED` - Traffic Server didn't perform a
+ cache lookup because the request was not cacheable (this can happen
+ when the URL looks dynamic or the request is marked as
+ noncacheable).
+
+
+**Returns**
+ ~ `1` if the API is called successfully.
+
+ `0` if an error occurs.
+
+
+#### INKHttpTxnCachedReqGet
+
+Gets the cached request header for a specified HTTP transaction.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnCachedReqGet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ INKMBuffer \**`bufp`*, INKMLoc \**`hdr_loc`*)
+
+**Arguments**
+ ~ `INKHttpTxn` `<em class="replaceable"><code>txnp` is the
+ ongoing transaction.
+
+ `int <i>*</i>`*`lookup_status`* is set to the lookup status.
+
+**Description**
+ ~ Obtains the status of the current cache lookup for the ongoing
+ transaction `<em class="replaceable"><code>txnp` in the
+ `<i>lookup_status </i>` variable.
+
+ This function should only be called from
+ `INK_HTTP_CACHE_LOOKUP_COMPLETE_HOOK`.
+
+ The possible status values returned in `<i>lookup_status </i>`
+ are:
+
+ - `INK_CACHE_LOOKUP_MISS` - Document was not in the cache; it
+ will be fetched from the origin server.
+ - `INK_CACHE_LOOKUP_HIT_STALE` - Document was present in the
+ cache but was stale. A fresher version will be fetched from the
+ origin server (IMS request).
+ - `INK_CACHE_LOOKUP_HIT_FRESH` - Document was present in the
+ cache and was fresh. Document will be served from the cache.
+ - `INK_CACHE_LOOKUP_SKIPPED` - Traffic Server didn't perform a
+ cache lookup because the request was not cacheable (this can happen
+ when the URL looks dynamic or the request is marked as
+ noncacheable).
+
+
+**Returns**
+ ~ `INK_SUCCESS` if the API is called successfully.
+
+ `INK_ERROR` if an error occurs while calling the API or if an
+ argument is invalid.
+
+
+#### INKHttpTxnCachedRespGet
+
+Gets the cached response header for a specified HTTP transaction.
+
+**Prototype**
+ ~ `int INKHttpTxnCachedRespGet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ INKMBuffer \**`bufp`*, INKMLoc \**`hdr_loc`*)
+
+**Description**
+ ~ Retrieves the cached response header from the HTTP transaction
+ `<em class="replaceable"><code>txnp` and stores the cached response
+ header in `bufp`, at location
+ `<em class="replaceable"><code>hdr_loc`.
+
+ Call after `SEND_RESPONSE_HDR_HOOK`.
+
+ ![[Caution]](images/docbook/caution.png)
+ Caution
+ Do not modify any cached response headers returned by
+ `INKHttpTxnCachedRespGet`; the underlying data structure is
+ read-only. Release the returned
+ `<em class="replaceable"><code>hdr_loc` with a call to
+ `INKHandleMLocRelease`.
+
+**Returns**
+ ~ If the cached response header does not exist, then
+ `INKHttpTxnCachedRespGet` returns `0`.
+
+ Otherwise, it returns `1`.
+
+
+#### INKHttpTxnClientIncomingPortGet
+
+Gets the port on which the incoming request is received.
+
+**Prototype**
+ ~ `int INKHttpTxnClientIncomingPortGet (INKHttpTxn <em class="replaceable"><code>txnp`)
+
+**Description**
+ ~ Returns the port on which the HTTP transaction
+ `<em class="replaceable"><code>txnp` was received. This is not the
+ destination port in the URL; it is the proxy port to which the
+ client browser is pointed.
+
+ Call after `TXN_START_HOOK`.
+
+**Returns**
+ ~ The port number in host byte order.
+
+ Returns `-1` if an error occurred.
+
+
+#### INKHttpTxnClientIPGet
+
+Gets the client IP address for a specified HTTP transaction.
+
+**Prototype**
+ ~ `unsigned int INKHttpTxnClientIPGet (INKHttpTxn <em class="replaceable"><code>txnp`)
+
+**Description**
+ ~ Returns the IP address of the client for the HTTP transaction
+ `<em class="replaceable"><code>txnp`.
+
+ `INKHttpTxnClientIPGet` returns the IP address in network byte
+ order.
+
+ Call after `TXN_START_HOOK`.
+
+**Returns**
+ ~ The client IP address.
+
+ Returns `0` if an error occurred.
+
+
+#### INKHttpTxnClientRemotePortGet
+
+Gets the remote host's port number for a specified HTTP
+transaction.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnClientRemotePortGet(INKHttpTxn <em class="replaceable"><code>txnp`,
+ int \**`port`*)
+
+**Arguments**
+ ~ `INKHttpTxn`
+ `<code class="code"><em class="replaceable"><code>txnp` is an HTTP
+ transaction.
+
+ `int *``<em class="replaceable"><code>port` is set
+ to the client's remote port value (port number used by the client
+ when creating a socket connection with the proxy for the
+ transaction `<em class="replaceable"><code>txnp`) in network byte
+ order.
+
+**Description**
+ ~ Obtains the port number of the remote host for the specified
+ HTTP transaction. The port number is returned in network byte
+ order.
+
+ ![[Note]](images/docbook/note.png)
+ Note
+ This is an exception to the rule that port numbers are retrieved in
+ host byte order.
+
+ The proxy port on which the connection was accepted can be
+ retrieved using `INKHttpTxnClientIncomingPortGet`.
+
+**Returns**
+ ~ `INK_SUCCESS` if the API is called successfully.
+
+ `INK_ERROR` if an error occurs while calling the API or if an
+ argument is invalid.
+
+
+#### INKHttpTxnClientReqGet
+
+Gets the client request header for a specified HTTP transaction.
+
+**Prototype**
+ ~ `int INKHttpTxnClientReqGet (INKHttpTxn txnp, INKMBuffer *bufp, INKMLoc *hdr_loc)`
+
+**Description**
+ ~ Retrieves the client request header from the HTTP transaction
+ `<em class="replaceable"><code>txnp`. `INKHttpTxnClientReqGet`
+ stores the client request header in
+ `<em class="replaceable"><code>bufp`, at location
+ `<em class="replaceable"><code>hdr_loc`.
+
+ Call after `READ_REQUEST_HDR_HOOK`.
+
+ Release the returned `<em class="replaceable"><code>hdr_loc` with a
+ call to `INKHandleMLocRelease`.
+
+**Returns**
+ ~ If the client request header does not exist or if there is an
+ error, then `INKHttpTxnClientReqGet` returns `0`.
+
+ Otherwise, `1` is returned.
+
+
+#### INKHttpTxnClientRespGet
+
+Gets the client response header for a specified HTTP transaction.
+
+**Prototype**
+ ~ `int INKHttpTxnClientRespGet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ INKMBuffer \**`bufp`*, INKMLoc \**`hdr_loc`*)
+
+**Description**
+ ~ Retrieves the client response header from the HTTP transaction
+ `<em class="replaceable"><code>txnp`. `INKHttpTxnClientRespGet`
+ stores the client response header in
+ `<em class="replaceable"><code>bufp`, at location
+ `<em class="replaceable"><code>hdr_loc`.
+
+ Call after `SEND_RESPONSE_HOOK`.
+
+ Release the returned `<em class="replaceable"><code>hdr_loc` with a
+ call to `INKHandleMLocRelease`.
+
+**Returns**
+ ~ If the client response header does not exist or if there is an
+ error, then `INKHttpTxnClientRespGet` returns `0`.
+
+ Otherwise, `1` is returned.
+
+
+#### INKHttpTxnErrorBodySet
+
+Sets the format and content of the error body (or response data)
+that Traffic Server sends to clients.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnErrorBodySet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ char \**`buf`*, int *`buflength`*, char \**`mimetype`*)
+
+**Arguments**
+ ~ `<em class="replaceable"><code>txnp` is the HTTP transaction to
+ act upon.
+
+ `<em class="replaceable"><code>buf` contains the error (or
+ response) body. The error body can be text, an HTML document,
+ image, or another format. Before you call `INKHttpTxnErrorBodySet,`
+ be sure to allocate `<em class="replaceable"><code>buf` using
+ `INKmalloc`.
+
+ `<em class="replaceable"><code>buflength` is the length of the
+ error body.
+
+ `<em class="replaceable"><code>mimetype` contains the format of the
+ error body. If you want to set the
+ `<em class="replaceable"><code>mimetype` to a value other than
+ `NULL`, then you must allocate
+ `<em class="replaceable"><code>mimetype` using `INKmalloc` before
+ you call `INKHttpTxnErrorBodySet`.
+
+**Description**
+ ~ Sets the format of the error body that Traffic Server sends
+ back when sending an error or response to a client. The error body
+ data is stored in the buffer `<em class="replaceable"><code>buf`.
+ If the error body is just plain text, then setting
+ `<em class="replaceable"><code>mimetype` to `NULL` is sufficient.
+ If the error body is HTML, then
+ `<em class="replaceable"><code>mimetype` should be "`text/html`".
+ If the error body is a JPEG image, then
+ `<em class="replaceable"><code>mimetype` should be "`image/jpeg`".
+
+ ![[Note]](images/docbook/note.png)
+ Note
+ Traffic Server automatically calls `INKfree` to free
+ `<em class="replaceable"><code>buf` when it is no longer needed;
+ make sure that the buffer `<em class="replaceable"><code>buf` is
+ allocated by a call to `INKmalloc`. Similarly, if you want to set
+ `<em class="replaceable"><code>mimetype` to something other than
+ `NULL`, then make sure you allocate
+ `<em class="replaceable"><code>mimetype` with a call to
+ `INKmalloc`. Traffic Server automatically calls `INKfree` to free
+ `<em class="replaceable"><code>mimetype`.
+
+ Call after `SEND_RESPONSE_HDR_HOOK`.
+
+**Returns**
+ ~ `INK_SUCCESS` if the operation completes successfully.
+
+ `INK_ERROR` if an error occurs.
+
+
+#### INKHttpTxnHookAdd
+
+Adds a continuation to the list of HTTP transaction hooks for a
+specified HTTP transaction.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnHookAdd (INKHttpTxn <em class="replaceable"><code>txnp`,
+ INKHttpHookID *`id`*, INKCont *`contp`*)
+
+**Description**
+ ~ Adds `<em class="replaceable"><code>contp` to the end of the
+ list of HTTP transaction hooks specified by
+ `<em class="replaceable"><code>id`. Since
+ `<em class="replaceable"><code>contp` is added to a transaction, it
+ is not possible to call `INKHttpTxnHookAdd` from the plugin
+ initialization routine unless the plugin has a handle to an HTTP
+ transaction.
+
+ Call after `HTTP_TXN_START_HOOK`.
+
+**Returns**
+ ~ `INK_SUCCESS` if the operation completes successfully.
+
+ `INK_ERROR` if an error occurs.
+
+
+#### INKHttpTxnNextHopIPGet
+
+Gets the IP address of the next server from which Traffic Server
+tries to retrieve requested HTTP content.
+
+**Prototype**
+ ~ `unsigned int INKHttpTxnNextHopIPGet (INKHttpTxn <em class="replaceable"><code>txnp`)
+
+**Description**
+ ~ Returns the IP address of the next server from which Traffic
+ Server attempts to retrieve the requested document, in network byte
+ order. The IP address returned could be the origin server IP
+ address or it could be the parent proxy's IP address.
+
+ Call after `SEND_REQUEST_HDR_HOOK`.
+
+**Returns**
+ ~ Returns the IP address of the next server from which Traffic
+ Server attempts to retrieve the request, in network byte order.
+
+ Returns `0` if an error occurred.
+
+
+#### INKHttpTxnParentProxyGet
+
+Gets the parent proxy name and port, if parent proxying is
+enabled.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnParentProxyGet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ char \*\**`hostname`*, int \**`port`*)
+
+**Description**
+ ~ Retrieves the value set previously by `INKHttpParentProxySet`.
+ Does not return values set in `parent.config` or `records.config`
+ for the `<i>proxy.config.http.parent_proxies </i>`parameter.
+
+ This function can be called from within any``transaction hook.
+
+ The `<i>hostname </i>` string returned must not be deallocated.
+
+ ![[Note]](images/docbook/note.png)
+ Note
+ If parent proxying is not enabled, then `INKHttpTxnParentProxyGet`
+ returns `NULL` for `<em class="replaceable"><code>hostname`*``*and
+ `-1` for `<i>port</i>`.
+
+**Returns**
+ ~ `INK_SUCCESS` if the operation completes successfully.
+
+ `INK_ERROR` if an error occurs.
+
+
+#### INKHttpTxnParentProxySet
+
+Sets the parent proxy name and port.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnParentProxySet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ char \**`hostname`*, int *`port`*)
+
+**Description**
+ ~ This can be used to overwrite the value set in the
+ `parent.config` file, or in `records.config` for the parameter
+ `<i>proxy.config.http.parent_proxies</i>`.
+
+ Call before or within `CACHE_LOOKUP_COMPLETE`.
+
+**Returns**
+ ~ `INK_SUCCESS` if the operation completes successfully.
+
+ `INK_ERROR` if an error occurs.
+
+
+#### INKHttpTxnPristineUrlGet
+
+Gets the pristine URL (the URL that came in from the client
+request, before remap) for a specified HTTP transaction.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnPristineUrlGet (INKHttpTxn <span class="replaceable">txnp</span>, INKMBuffer *<span class="replaceable">bufp</span>, INKMLoc *<span class="replaceable">url_loc</span>);`
+
+**Arguements**
+ ~ `INKHttpTxn <span class="replaceable">txnp </span>` is the
+ ongoing transaction.
+
+ `INKMBuffer *<span class="replaceable">bufp </span>` is the header
+ buffer pointer
+
+ `INKMLoc *<span class="replaceable">url_loc </span>` is the pointer
+ to the location where the pristine URL will be written.
+
+
+**Description**
+ ~ After remap, the URL returned by `INKHttpHdrUrlGet` may not be
+ the same as the original URL. This API provides a way to access the
+ URL that was part of the client request header.
+
+ Retrieves the pristine URL from the HTTP transaction txnp.
+ `INKHttpTxnPristineUrlGet` stores the pristine URL in bufp, at
+ location url\_loc. Call after `READ_REQUEST_HDR_HOOK`.
+
+ Release the returned url\_loc with a call to
+ `INKHandleMLocRelease`.
+
+
+**Returns**
+ ~ `INK_SUCCESS` if the operation completes successfully.
+
+ `INK_ERROR` if there is an error.
+
+**Example**
+ ~ if (INKHttpTxnPristineUrlGet(txnp, &bufp, &url_loc) == INK_SUCCESS)
+ {value = INKUrlHostGet(bufp, url_loc, &len); INKDebug (DEBUG_TAG, "Pristine Host: %s", value); INKHandleMLocRelease (bufp, INK_NULL_MLOC, url_loc);}
+ else {INKError ("INKHttpTxnPristineUrlGet returns 0.\n");
+
+
+#### INKHttpTxnReenable
+
+Tells a transaction if the processing of a particular hook has
+completed.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnReenable (INKHttpTxn <em class="replaceable"><code>txnp`,
+ INKEvent *`event`*)
+
+**Description**
+ ~ Notifies the HTTP transaction `<i>txnp </i>` that the plugin is
+ finished processing the current hook. If `INK_EVENT_HTTP_CONTINUE`
+ is specified for `<em class="replaceable"><code>event`, then the
+ plugin wants the transaction to continue. If `INK_EVENT_HTTP_ERROR`
+ is specified for `<em class="replaceable"><code>event`, then the
+ plugin wants the transaction to be terminated and an error is sent
+ back to the client (if no response has already been sent).
+
+ You must always reenable the HTTP transaction after each
+ transaction event is processed. However, you should never reenable
+ twice - this is a serious error.
+
+ When `<em class="replaceable"><code>event` is set to
+ `INK_EVENT_HTTP_ERROR`, Traffic Server performs different
+ processing depending on the type of hook involved.
+
+ - `INK_HTTP_TXN_START_HOOK`: the transaction is stopped right
+ away, then the client connection is closed and no response is sent
+ back to the origin server.
+ - `INK_HTTP_READ_REQUEST_HDR_HOOK`: Traffic Server does not send
+ a request to the origin server; it directly sends a 500 to the
+ client.
+ - `INK_HTTP_SEND_REQUEST_HDR_HOOK`: Traffic Server opens a
+ connection to the origin server, sends an empty request to it, and
+ sends a `500` status message back to the client. The connection to
+ the origin server is then closed.
+ - `INK_HTTP_READ_RESPONSE_HDR_HOOK`,
+ `INK_HTTP_SEND_RESPONSE_HOOK`, `INK_HTTP_OS_DNS_HOOK`,
+ `INK_HTTP_READ_CACHE_HDR_HOOK`, and
+ `INK_HTTP_CACHE_LOOKUP_COMPLETE_HOOK`: Traffic Server receives all
+ headers in the origin server's response, closes the connection to
+ the origin server, and sends a `500` status message back to the
+ client. Traffic Server does not receive the response body.
+ - `INK_HTTP_TXN_CLOSE_HOOK`: the client receives whatever answer
+ was sent by the origin server because with this hook, the response
+ has already been sent to the clie
+
+Â
+**Returns**
+ ~ `INK_SUCCESS` if the operation completes successfully.
+
+ `INK_ERROR` if an error occurs.
+
+
+#### INKHttpTxnServerIPGet
+
+Gets the origin server IP address for a specified HTTP
+transaction.
+
+**Prototype**
+ ~ `unsigned int INKHttpTxnServerIPGet (INKHttpTxn <em class="replaceable"><code>txnp`)
+
+**Description**
+ ~ Returns the IP address of the origin server specified by the
+ client request in network byte order. `INKHttpTxnServerIPGet`
+ returns `0` if it is called before `INK_HTTP_OS_DNS_HOOK` in a
+ transaction.
+
+ Call after `INK_HTTP_OS_DNS_HOOK`.
+
+**Returns**
+ ~ Returns the origin server IP address in network byte order.
+
+ Returns `0` if an error occurred.
+
+
+#### INKHttpTxnServerReqGet
+
+Gets the server request header from a specified HTTP transaction.
+
+**Prototype**
+ ~ `int INKHttpTxnServerReqGet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ INKMBuffer \**`bufp`*, INKMLoc \**`hdr_loc`*)
+
+**Description**
+ ~ Retrieves the server request header from the HTTP transaction
+ `<em class="replaceable"><code>txnp`. `INKHttpTxnServerReqGet`
+ stores the server request header in
+ `<em class="replaceable"><code>bufp`, at location
+ `<em class="replaceable"><code>hdr_loc`.
+
+ Call after `SEND_REQUEST_HDR_HOOK`.
+
+ Release the returned `<em class="replaceable"><code>hdr_loc` with a
+ call to `INKHandleMLocRelease`.
+
+**Returns**
+ ~ If the server request header does not exist or in the case of
+ an error, then `INKHttpTxnServerReqGet` returns `0`.
+
+ Otherwise, it returns `1`.
+
+
+#### INKHttpTxnServerRespGet
+
+Gets the server response header from a specified HTTP transaction.
+
+**Prototype**
+ ~ `int INKHttpTxnServerRespGet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ INKMBuffer \**`bufp`*, INKMLoc \**`hdr_loc`*)
+
+**Description**
+ ~ Retrieves the server response header from the HTTP transaction
+ `<em class="replaceable"><code>txnp`. `INKHttpTxnServerRespGet`
+ stores the server response header in
+ `<em class="replaceable"><code>bufp`, at location
+ `<em class="replaceable"><code>hdr_loc`.
+
+ Call after `READ_RESPONSE_HDR_HOOK`.
+
+ Release the returned `<em class="replaceable"><code>hdr_loc` with a
+ call to `INKHandleMLocRelease`.
+
+**Returns**
+ ~ If the server response header does not exist or if there is an
+ error, then `INKHttpTxnServerRespGet` returns `0`.
+
+ Otherwise, `1` is returned.
+
+
+#### INKHttpTxnSetRespCacheableSet
+
+Makes a request/response cacheable.
+
+**Prototype**
+ ~ `void INKHttpTxnSetRespCacheableSet (INKHttpTxn <span class="replaceable">txnp</span>)`
+
+ `void INKHttpTxnSetReqCacheableSet (INKHttpTxn <span class="replaceable">txnp</span>);`
+
+**Description**
+ ~ Sets the request/response as cacheable for a given transaction
+ `<span class="replaceable"> txnp</span>`.
+
+**Returns**
+ ~ No values are returned by this function.
+
+
+#### INKHttpTxnSkipRww
+
+Turns off read while writing for a transaction.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnSkipRww (INKHttpTxn <span class="replaceable">txnp</span>)`
+
+**Description**
+ ~ ((TBD: pending additional info from developer))
+
+ ((TBD: ts-259))
+
+ ((TBD))
+
+**Returns**
+ ~ INK\_SUCCESS if successful.
+
+ INK\_ERROR if an error occurs.
+
+
+#### INKHttpTxnSsnGet
+
+Returns the session handle associated with a specific HTTP
+transaction.
+
+**Prototype**
+ ~ `INKHttpSsn INKHttpTxnSsnGet (INKHttpTxn <em class="replaceable"><code>txnp`)
+
+**Description**
+ ~ Retrieves the `INKHttpSsn` handle associated with the HTTP
+ transaction `<em class="replaceable"><code>txnp`.
+
+ Call after `TXN_START_HOOK`.
+
+**Returns**
+ ~ The session handle associated with the specified HTTP
+ transaction.
+
+ `INK_ERROR_PTR` if an error occurs.
+
+
+#### INKHttpTxnTransformedRespCache
+
+Indicates whether Traffic Server writes transformed documents to
+the cache.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnTransformedRespCache (INKHttpTxn <em class="replaceable"><code>txnp`,
+ int *`on`*)
+
+**Description**
+ ~ Specifies whether the transformed document should be written to
+ the cache. If a transformation is occurring, then the default is
+ for the transformed copy to be written to the cache. The default
+ maintains a rule that only a single version of a document is
+ written to the cache for a single transaction. It is valid for that
+ rule to be broken if you specify that both the transformed and
+ untransformed documents be written to the cache. Calls need to be
+ made prior to the actual transformation, (i.e. at the time of
+ creating the transformation) rather than in the transformation.
+
+ ![[Note]](images/docbook/note.png)
+ Note
+ This function does not overwrite HTTP directives (like
+ `Cache-Control` or `Expires`) that determine whether a document is
+ cached. If the document can be cached, then this function
+ determines if the transformed version should be cached.
+ Untransformed and transformed documents are cached as HTTP
+ alternates.
+
+ Call from within or after the hook `TXN_START_HOOK`.
+
+ If called after hook `SEND_RESPONSE_HDR`, then this function is not
+ taken into account by Traffic Server.
+
+**Returns**
+ ~ `INK_SUCCESS` if the operation completes successfully.
+
+ `INK_ERROR` if an error occurs.
+
+
+#### INKHttpTxnTransformRespGet
+
+Gets the transform response header from a specified HTTP
+transaction.
+
+**Prototype**
+ ~ `int INKHttpTxnTransformRespGet (INKHttpTxn <em class="replaceable"><code>txnp`,
+ INKMBuffer \**`bufp`*, INKMLoc \**`offset`*)
+
+**Description**
+ ~ Retrieves the transform response header from the HTTP
+ transaction `<em class="replaceable"><code>txnp` and stores the
+ transform response header in `<em class="replaceable"><code>bufp`,
+ at location `<em class="replaceable"><code>offset`.
+
+ Call from within your transformation, before transform data is
+ written to the downstream vconnection.
+
+**Returns**
+ ~ If the transform response header does not exist, then
+ `INKHttpTxnTransformRespGet` returns `0`.
+
+ Otherwise, `1` is returned.
+
+
+#### INKHttpTxnUntransformedRespCache
+
+Indicates whether Traffic Server writes untransformed documents to
+cache.
+
+**Prototype**
+ ~ `INKReturnCode INKHttpTxnUntransformedRespCache (INKHttpTxn <em class="replaceable"><code>txnp`,
+ int *`on`*)
+
+**Description**
+ ~ Specifies whether the untransformed document should be written
+ to the cache. If there is no transformation occurring, then the
+ untransformed copy is written to the cache (by default). If a
+ transformation is occurring, then the untransformed copy is not
+ written to the cache (by default). The default rules dictate that
+ only a single version of a document is written to the cache for a
+ single transaction. It is valid for that rule to be broken by
+ specifying that both the transformed and untransformed document be
+ written to the cache. Calls need to be made prior to the actual
+ transformation (i.e. at the time of creating the transformation),
+ rather than in the transformation.
+
+ ![[Note]](images/docbook/note.png)
+ Note
+ This function does not overwrite HTTP directives (ike
+ `Cache-Control` or `Expires`) that determine if a document can be
+ cached. If the document can be cached, then this function
+ determines if the untransformed version should be cached.
+ Untransformed and transformed documents are cached as HTTP
+ alternates.
+
+ Call from within or after hook `TXN_START_HOOK`.
+
+ If called after hook `SEND_RESPONSE_HDR`, then Traffic Server does
+ not take this function into account.
+
+**Returns**
+ ~ `INK_SUCCESS` if the operation completes successfully.
+
+ `INK_ERROR` if an error occurs.
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTPTransformationPlugins.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTPTransformationPlugins.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTPTransformationPlugins.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTPTransformationPlugins.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,161 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](SetTransactionHook) - Setting a Transaction Hook
+The Sample Null Transform Plugin -
+[Next](SampleNullTransformPlugin)
+## Chapter 5. HTTP Transformation Plugins
+
+Transform plugins examine or transform HTTP message body content.
+For example, transform plugins can:
+
+- Append text to HTML documents
+
+- Compress images
+
+- Do virus checking (on client `POST` data or server response
+ data)
+
+- Do content-based filtering (filter out HTML documents that
+ contain certain terms or expressions)
+
+
+This chapter explains how to write transform plugins. The following
+examples are discussed in detail:
+
+- [Sample Null Transform Plugin](SampleNullTransformPlugin "The Sample Null Transform Plugin")
+
+- [Append-Transform Plugin](AppendTransformPlugin "The Append-Transform Plugin")
+- [Sample Buffered Null Transform Plugin](SampleBufferedNullTransformPlugin "The Sample Buffered Null Transform Plugin")
+
+
+## Writing Content Transform Plugins
+
+Content transformation plugins transform HTTP response content
+(such as images or HTML documents) and HTTP request content (such
+as client `POST` data). Because the data stream to be transformed
+is of variable length, these plugins must use a mechanism that
+passes data from buffer to buffer *and* checks to see if the end of
+the data stream is reached. This mechanism is provided by virtual
+connections (vconnections) and virtual IO descriptors (VIOs).
+
+A **vconnection** is an abstraction for a data pipe that allows its
+users to perform asynchronous reads and writes without knowing the
+underlying implementation. A transformation is a specific type of
+vconnection. A **transformation** connects an input data source and
+an output data sink; this feature enables it to view and modify all
+the data passing through it.
+
+Transformations can be chained together, one after the other, so
+that multiple transformations can be performed on the same content.
+The vconnection type, `INKVConn`, is actually a subclass of
+`INKCont`, which means that vconnections (and transformations) are
+continuations. Vconnections and transformations can thus exchange
+events, informing one another that data is available for reading or
+writing, or that the end of a data stream is reached.
+
+A **VIO** is a description of an IO operation that is in progress.
+Every vconnection has an associated *input VIO* and an associated
+*output VIO*. When vconnections are transferring data to one
+another, one vconnection's input VIO is another vconnection's
+output VIO. A vconnection's input VIO is also called its
+**write VIO** because the input VIO refers to a write operation
+performed on the vconnection itself. Similarly, the outpt VIO is
+also called the **read VIO**. For transformations, which are
+designed to pass data in one direction, you can picture the
+relationship between the transformation vconnection and its VIOs as
+follows:
+
+**Figure 5.1. A Transformation and its VIOs**
+
+![A Transformation and its VIOs](images/vconnection.jpg)
+Because the Traffic Server API places transformations directly in
+the response or request data stream, the transformation vconnection
+is responsible only for reading the data from the input buffer,
+transforming it, and then writing it to the output buffer. The
+upstream vconnection writes the incoming data to the
+transformation's input buffer. In the figure above,
+[A Transformation and its VIOs](HTTPTransformationPlugins#Fig_TransformationAndVIOs "Figure 5.1. A Transformation and its VIOs"),
+the input VIO describes the progress of the upstream vconnection's
+write operation on the transformation, while the output VIO
+describes the progress of the transformation's write operation on
+the output (downstream) vconnection. The **nbytes** value in the
+VIO is the total number of bytes to be written. The **ndone** value
+is the current progress, or the number of bytes that have been
+written at a specific point in time.
+
+When writing a transformation plugin, you must understand
+implementation as well as the use of vconnections. The
+*implementor's side*refers to how to implement a vconnection that
+others can use. At minimum, a transform plugin creates a
+transformation that sits in the data stream and must be able to
+handle the events that the upstream and downstream vconnections
+send to it. The *user's side*refers to how to use a vconnection to
+read or write data. At the very least, transformations output
+(write) data.
+
+### Transformations
+
+
+
+### VIOs
+
+A **VIO** or virtual IO is a description of an in progress IO
+operation. The VIO data structure is used by vconnection users to
+determine how much progress has been made on a particular IO
+operation, and to reenable an IO operation when it stalls due to
+buffer space. Vconnection implementors use VIOs to determine the
+buffer for an IO operation, how much work to do on the IO
+operation, and which continuation to call back when progress on the
+IO operation is made.
+
+The `INKVIO<a class="indexterm" name="id374498"></a>` data
+structure itself is opaque, but it might have been defined as
+follows:
+
+ typedef struct {
+ INKCont continuation;
+ INKVConn vconnection;
+ INKIOBufferReader reader;
+ INKMutex mutex;
+ int nbytes;
+ int ndone;
+ } *INKVIO;
+
+### IO Buffers
+
+The **IO buffer** data structure is the building block of the
+vconnection abstraction. An IO buffer is composed of a list of
+buffer blocks which, in turn, point to buffer data. Both the
+*buffer block* (`INKIOBufferBlock`) and *buffer data*
+(`INKIOBufferData`) data structures are reference counted so they
+can reside in multiple buffers at the same time. This makes it
+extremely efficient to copy data from one IO buffer to another
+using `INKIOBufferCopy`, since Traffic Server only needs to copy
+pointers and adjust reference counts appropriately (instead of
+actually copying any data).
+
+The IO buffer abstraction provides for a single writer and multiple
+readers. In order for the readers to have no knowledge of each
+other, they manipulate IO buffers through the`INKIOBufferReader`
+data structure. Since only a single writer is allowed, there is no
+corresponding `INKIOBufferWriter` data structure. The writer simply
+modifies the IO buffer directly.
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTP_Transactions.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTP_Transactions.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTP_Transactions.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HTTP_Transactions.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,211 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](HTTPSessions) - HTTP Sessions
+Intercepting HTTP Transactions - [Next](InterceptingHTTPTx)
+## HTTP Transactions
+
+The HTTP transaction functions enable you to set up plugin
+callbacks to HTTP transactions and obtain/modify information about
+particular HTTP transactions.
+
+As described in the section on HTTP sessions, an
+**HTTP transaction** is an object defined for the lifetime of a
+single request from a client and the corresponding response from
+Traffic Server. The `<b>INKHttpTxn</b>` structure is the main
+handle given to a plugin for manipulating a transaction's internal
+state. Additionally, an HTTP transaction has a reference back to
+the HTTP session that created it.
+
+The sample code below illustrates how to register locally to a
+transaction and associate data to the transaction.
+
+ /*
+ * Simple plugin that illustrates:
+ * - how to register locally to a transaction
+ * - how to deal with data that's associated with a tranaction
+ *
+ * Note: for readability, error checking is omitted
+ */
+
+ #include <ts/ts.h>
+
+ #define DBG_TAG "txn"
+
+ /* Structure to be associated to txns */
+ typedef struct {
+ int i;
+ float f;
+ char *s;
+ } TxnData;
+
+ /* Allocate memory and init a TxnData structure */
+ TxnData *
+ txn_data_alloc()
+ {
+ TxnData *data;
+ data = INKmalloc(sizeof(TxnData));
+
+ data->i = 1;
+ data->f = 0.5;
+ data->s = "Constant String";
+ return data;
+ }
+
+ /* Free up a TxnData structure */
+ void
+ txn_data_free(TxnData *data)
+ {
+ INKfree(data);
+ }
+
+ /* Handler for event READ_REQUEST and TXN_CLOSE */
+ static int
+ local_hook_handler (INKCont contp, INKEvent event, void *edata)
+ {
+ INKHttpTxn txnp = (INKHttpTxn) edata;
+ TxnData *txn_data = INKContDataGet(contp);
+ switch (event) {
+ case INK_EVENT_HTTP_READ_REQUEST_HDR:
+ /* Modify values of txn data */
+ txn_data->i = 2;
+ txn_data->f = 3.5;
+ txn_data->s = "Constant String 2";
+ break;
+
+ case INK_EVENT_HTTP_TXN_CLOSE:
+ /* Print txn data values */
+ INKDebug(DBG_TAG, "Txn data i=%d f=%f s=%s", txn_data->i, txn_data->f,
+ txn_data->s);
+
+ /* Then destroy the txn cont and its data */
+ txn_data_free(txn_data);
+ INKContDestroy(contp);
+ break;
+
+ default:
+ INKAssert(!"Unexpected event");
+ break;
+ }
+
+ INKHttpTxnReenable(txnp, INK_EVENT_HTTP_CONTINUE);
+ return 1;
+ }
+
+ /* Handler for event TXN_START */
+ static int
+ global_hook_handler (INKCont contp, INKEvent event, void *edata)
+ {
+ INKHttpTxn txnp = (INKHttpTxn) edata;
+ INKCont txn_contp;
+ TxnData *txn_data;
+
+ switch (event) {
+ case INK_EVENT_HTTP_TXN_START:
+ /* Create a new continuation for this txn and associate data to it */
+ txn_contp = INKContCreate(local_hook_handler, INKMutexCreate());
+ txn_data = txn_data_alloc();
+ INKContDataSet(txn_contp, txn_data);
+
+ /* Registers locally to hook READ_REQUEST and TXN_CLOSE */
+ INKHttpTxnHookAdd(txnp, INK_HTTP_READ_REQUEST_HDR_HOOK, txn_contp);
+ INKHttpTxnHookAdd(txnp, INK_HTTP_TXN_CLOSE_HOOK, txn_contp);
+ break;
+
+ default:
+ INKAssert(!"Unexpected event");
+ break;
+ }
+
+ INKHttpTxnReenable(txnp, INK_EVENT_HTTP_CONTINUE);
+ return 1;
+ }
+
+
+ void
+ INKPluginInit (int argc, const char *argv[])
+ {
+ INKCont contp;
+
+ /* Note that we do not need a mutex for this txn since it registers globally
+ and doesn't have any data associated with it */
+ contp = INKContCreate(global_hook_handler, NULL);
+
+ /* Register gloabally */
+ INKHttpHookAdd(INK_HTTP_TXN_START_HOOK, contp);
+ }
+
+See [Adding Hooks](AddingHooks "Adding Hooks") for background
+about HTTP transactions and HTTP hooks, as well as
+[HTTP Hooks and Transactions](HTTPHooksAndTransactions "Chapter 8. HTTP Hooks and Transactions").
+Also see the
+[HTTP Transaction State Diagram](HTTPHooksAndTransactions#Fig_HHTTPTxStateDiag "Figure 8.1. HTTP Transaction State Diagram")
+for an illustration of the steps involved in a typical HTTP
+transaction.
+
+The HTTP transaction functions are:
+
+- [INKHttpTxnCacheLookupStatusGet](HTTPTransactionFunctions#INKHttpTxnCacheLookupStatusGet "INKHttpTxnCacheLookupStatusGet")
+
+- [INKHttpTxnCachedReqGet](HTTPTransactionFunctions#INKHttpTxnCachedReqGet "INKHttpTxnCachedReqGet")
+ - Note that it is an error to modify cached headers.
+
+- [INKHttpTxnCachedRespGet](HTTPTransactionFunctions#INKHttpTxnCachedRespGet "INKHttpTxnCachedRespGet")
+ - Note that it is an error to modify cached headers.
+
+- [INKHttpTxnClientIncomingPortGet](HTTPTransactionFunctions#INKHttpTxnClientIncomingPortGet "INKHttpTxnClientIncomingPortGet")
+
+- [INKHttpTxnClientIPGet](HTTPTransactionFunctions#INKHttpTxnClientIPGet "INKHttpTxnClientIPGet")
+
+- [INKHttpTxnClientRemotePortGet](HTTPTransactionFunctions#INKHttpTxnClientRemotePortGet "INKHttpTxnClientRemotePortGet")
+
+- [INKHttpTxnClientReqGet](HTTPTransactionFunctions#INKHttpTxnClientReqGet "INKHttpTxnClientReqGet")
+ - Plugins that must read client request headers use this call to
+ retrieve the HTTP header.
+
+- [INKHttpTxnClientRespGet](HTTPTransactionFunctions#INKHttpTxnClientRespGet "INKHttpTxnClientRespGet")
+
+- [INKHttpTxnErrorBodySet](HTTPTransactionFunctions#INKHttpTxnErrorBodySet "INKHttpTxnErrorBodySet")
+
+- [INKHttpTxnHookAdd](HTTPTransactionFunctions#INKHttpTxnHookAdd "INKHttpTxnHookAdd")
+
+- [INKHttpTxnNextHopIPGet](HTTPTransactionFunctions#INKHttpTxnNextHopIPGet "INKHttpTxnNextHopIPGet")
+
+- [INKHttpTxnNextHopIPGet](HTTPTransactionFunctions#INKHttpTxnNextHopIPGet "INKHttpTxnNextHopIPGet")
+
+- [INKHttpTxnParentProxySet](HTTPTransactionFunctions#INKHttpTxnParentProxySet "INKHttpTxnParentProxySet")
+
+- [INKHttpTxnReenable](HTTPTransactionFunctions#INKHttpTxnReenable "INKHttpTxnReenable")
+
+- [INKHttpTxnServerIPGet](HTTPTransactionFunctions#INKHttpTxnServerIPGet "INKHttpTxnServerIPGet")
+
+- [INKHttpTxnServerReqGet](HTTPTransactionFunctions#INKHttpTxnServerReqGet "INKHttpTxnServerReqGet")
+
+- [INKHttpTxnServerRespGet](HTTPTransactionFunctions#INKHttpTxnServerRespGet "INKHttpTxnServerRespGet")
+
+- [INKHttpTxnSsnGet](HTTPTransactionFunctions#INKHttpTxnSsnGet "INKHttpTxnSsnGet")
+
+- [INKHttpTxnTransformedRespCache](HTTPTransactionFunctions#INKHttpTxnTransformedRespCache "INKHttpTxnTransformedRespCache")
+
+- [INKHttpTxnTransformRespGet](HTTPTransactionFunctions#INKHttpTxnTransformRespGet "INKHttpTxnTransformRespGet")
+
+- [INKHttpTxnUntransformedRespCache](HTTPTransactionFunctions#INKHttpTxnUntransformedRespCache "INKHttpTxnUntransformedRespCache")
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HeaderBasedPluginEx.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HeaderBasedPluginEx.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HeaderBasedPluginEx.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HeaderBasedPluginEx.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,86 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](ch03s02) - API Function Reference
+The Blacklist Plugin - [Next](BlacklistPlugin)
+## Chapter 4. Header-Based Plugin Examples
+
+**Table of Contents**
+
+- [The Blacklist Plugin](BlacklistPlugin)
+- - [Creating the Parent Continuation](BlacklistPlugin#CreatingParentContinuation)
+ - [Setting a Global Hook](SettingGlobalHook)
+ - [Setting Up UI Update Callbacks](SettingUpUIUpdateCallbacks)
+ - [Accessing the Transaction Being Processed](AccessingTransactionProc)
+ - [Setting Up a Transaction Hook](SettingUpTransacHook)
+ - [Working with HTTP Header Functions](WorkWHTTPHeaderFunc)
+
+
+- [The Basic Authorization Plugin](BasicAuthorizatonPlugin)
+- - [Creating the Plugin's Parent Continuation and Global Hook](BasicAuthorizatonPlugin#CreatePluginParentCont_GlHk)
+ - [Implementing the Handler and Getting a Handle to the Transaction](ImplementHandler_GetTransHandle)
+ - [Working With HTTP Headers](WorkWithHTTPHeaders)
+ - [Setting a Transaction Hook](SetTransactionHook)
+
+
+Header-based plugins read or modify the headers of HTTP messages
+that Traffic Server sends and receives. Reading this chapter will
+help you to understand the following topics:
+
+- Creating continuations for your plugins
+
+- Adding global hooks
+
+- Adding transaction hooks
+
+- Working with HTTP header functions
+
+
+The two sample plugins discussed in this chapter are
+`blacklist-1.c` and `basic-auth.c`.
+
+## Overview
+
+Header-based plugins take actions based on the contents of HTTP
+request or response headers. Examples include filtering (on the
+basis of requested URL, source IP address, or other request
+header), user authentication, or user redirection. Header-based
+plugins have the following common elements:
+
+**
+The plugin has a static parent continuation that scans all Traffic
+Server headers (either request headers, response headers, or
+both).
+
+The plugin has a global hook. This enables the plugin to check all
+transactions to determine if the plugin needs to do something.
+
+The plugin gets a handle to the transaction being processed through
+the global hook.
+
+If the plugin needs to do something to transactions in specific
+cases, then it sets up a transaction hook for a particular event.
+
+The plugin obtains client header information and does something
+based on that information.
+
+This chapter demonstrates how these components are implemented in
+SDK sample code.
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HostLookupFunctions.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HostLookupFunctions.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HostLookupFunctions.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HostLookupFunctions.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,76 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](INKActionDone) - INKActionDone
+INKHostLookupResultIPGet - [Next](INKHostLookupResultIPGet)
+## Host Lookup Functions
+
+****
+[INKHostLookup](HostLookupFunctions#INKHostLookup)
+[INKHostLookupResultIPGet](INKHostLookupResultIPGet)
+### INKHostLookup
+
+Instructs Traffic Server to do a DNS lookup on a host name.
+
+**Prototype**
+ ~ `INKAction INKHostLookupResult (INKCont <em class="replaceable"><code>contp`,
+ char \**`hostname`*, int *`namelen`*)
+
+**Arguments**
+ ~ `INKCont` `<em class="replaceable"><code>contp` is the
+ continuation Traffic Server calls back when the DNS lookup occurs.
+
+ `char *``<em class="replaceable"><code>hostname` is
+ the name to look up. Null-terminated.
+
+ `int``<em class="replaceable"><code>namelen` is the length of
+ `<em class="replaceable"><code>hostname` +1 (add one to account for
+ null termination).
+
+**Description**
+ ~ Initiates a DNS lookup of
+ `<em class="replaceable"><code>hostname`. When the lookup occurs,
+ Traffic Server sends contp `INK_EVENT_DNS_LOOKUP`. If the lookup is
+ successful (IP address resolved), then the
+ `void *``<em class="replaceable"><code>data` passed to the handler
+ of the continuation `<em class="replaceable"><code>contp` is a data
+ of type `INKHostLookupResult`. You can then use
+ `INKHostLookupResultIPGet` to convert this information to an
+ unsigned `int` representing the IP address.
+
+ If the lookup fails (IP address not resolved), then the `void *`
+ `<em class="replaceable"><code>data` passed to the handler of
+ continuation `<em class="replaceable"><code>contp` is a null
+ pointer.
+
+ You have the option to cancel the action returned by
+ `INKHostLookup` by using `INKActionCancel`.
+
+ ![[Note]](images/docbook/note.png)
+ Note
+ Reentrant calls are possible; i.e., the cache can call back the
+ user (`contp`) in the same call.
+
+**Returns**
+ ~ An `INKAction` object if successful.
+
+ `INK_ERROR_PTR` if an argument is incorrect or if the API fails.
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HostsLookupAPI.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HostsLookupAPI.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HostsLookupAPI.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/HostsLookupAPI.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,32 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](ActionsGuide) - Chapter 14. Actions Guide
+Chapter 15. IO Guide - [Next](IOGuide)
+## Hosts Lookup API
+
+The hosts lookup enables plugins to ask Traffic Server to do a host
+lookup of a host name, much like a DNS lookup.
+
+The hosts lookup functions are as follows:
+
+- [`INKHostLookup`](HostLookupFunctions#INKHostLookup "INKHostLookup")
+- `<a href="INKHostLookupResultIPGet.html" title="INKHostLookupResultIPGet">INKHostLookupResultIPGet</a>`
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKActionDone.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKActionDone.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKActionDone.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKActionDone.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,61 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](ActionFunctions) - Action Functions: INKActionCancel
+Host Lookup Functions - [Next](HostLookupFunctions)
+### INKActionDone
+
+Indicates whether an action is completed.
+
+**Prototype**
+ ~ `int INKActionDone (INKAction <em class="replaceable"><code> actionp`)
+
+**Description**
+ ~ `<em class="replaceable"><code>actionp` is a completed action.
+ If a `NULL` argument is passed to `INKActionDone`, then Traffic
+ Server crashes and does not return `INK_ERROR`.
+
+ ~ **Note:** It is the programmer's responsibility to ensure that
+ a non-null value is passed to `INKActionDone`.
+
+ ![[Important]](images/docbook/important.png)
+ Important
+ Always use `INKActionDone` immediately after the call that assigns
+ the action.
+ For example:
+
+ actionp = INKContSchedule(contp, SOME_TIMEOUT_VALUE);
+ if (INKActionDone(actionp)){
+ //event has already occurred
+ }
+
+ If you call `INKActionDone``(<em class="replaceable">actionp</em>)`
+ some time later or somewhere else, then it always returns `false`
+ and therefore does not accurately reflect whether the action has
+ completed.
+
+**Returns**
+ ~ `0` if the action has not completed.
+
+ `1` if the action has completed.
+
+ `INK_ERROR` if an error has occurred.
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKAssert.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKAssert.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKAssert.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKAssert.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,56 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](INKError) - INKError
+INKReleaseAssert - [Next](INKReleaseAssert)
+### INKAssert
+
+Enables the use of assertion in a plugin.
+
+**Prototype**
+ ~ `void INKAssert(<em class="replaceable"><code>expression`);
+
+**Arguments**
+ ~ A Boolean expression.
+
+**Description**
+ ~ In `debug` mode, causes the Traffic Server to print the file
+ name, line number, and expression before it aborts.
+
+ In `optim` mode, the expression is not removed, but the effects of
+ printing an error message and aborting are. This is an artifact of
+ the way the system assert is normally used and permits:
+
+ ink_assert(!setsockopt(...));
+
+ **Note:** when using the system "assert", you do not need to worry
+ about the condition since the code will be 'dead code eliminated'
+ by the compiler; with `INKAssert`, you do.
+
+**Example**
+ ~ switch (event) {
+ case EVENT_IMMEDIATE:
+ ....
+ default:
+ INKAssert (!setsockopt(...));
+ break;
+ }
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyDestroy.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyDestroy.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyDestroy.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyDestroy.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,45 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](INKCacheKeyHostNameSet) - INKCacheKeyHostNameSet
+INKCacheRead - [Next](INKCacheRead)
+### INKCacheKeyDestroy
+
+Destroys a cache key.
+
+**Prototype**
+ ~ `INKReturnCode INKCacheKeyDestroy(INKCacheKey <em class="replaceable"><code>key`)
+
+**Arguments**
+ ~ `INKCacheKey` `<em class="replaceable"><code>key` is the key to
+ be destroyed.
+
+**Description**
+ ~ Destroys a cache key (deallocates memory). You must destroy
+ cache keys when you are finished with them (i.e., after all reads
+ and writes are completed).
+
+**Returns**
+ ~ `INK_SUCCESS` if the cache key was successfully destroyed.
+
+ `INK_ERROR` if the cache key could not be deallocated or was not
+ valid.
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyDigestSet.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyDigestSet.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyDigestSet.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyDigestSet.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,63 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](CacheInterfaceFunctions) - Cache Interface Fxns:
+INKCacheKeyCreate, INKSetCacheUrl
+INKCacheKeyHostNameSet - [Next](INKCacheKeyHostNameSet)
+### INKCacheKeyDigestSet
+
+Generates and assigns a cache key to an object that will be
+cached.
+
+**Prototype**
+ ~ `INKReturnCode INKCacheKeyDigestSet(INKCacheKey <em class="replaceable"><code>key`,
+ const unsigned char \**`input`*, int *`length`*)
+
+**Arguments**
+ ~ `INKCacheKey` `<em class="replaceable"><code>key` is the key
+ that will be associated with the cached object. Before calling
+ `INKCacheKeyDigestSet`, you must create the key with
+ `INKCacheKeyCreate`. Note that in order to generate unique keys,
+ you must use unique input strings. This means that if the input
+ strings are identical, then `INKCacheKeyCreate` generates identical
+ keys.
+
+ `const unsigned char *``<em class="replaceable"><code>input`
+ is a character string that uniquely identifies the object. In most
+ cases, it's the URL of the object.
+
+ `int``<em class="replaceable"><code>length` is the length of the
+ input string.
+
+**Description**
+ ~ Generates and assigns a cache key to the object to be cached.
+
+**Returns**
+ ~ `INK_SUCCESS` if the cache key is successfully generated.
+
+ `INK_ERROR` if `INKCacheKeyDigestSet` cannot be set.
+
+**Example**
+ ~ const char *digest_string = "mydigest"
+ INKCacheKey mykey;
+ INKCacheKeyCreate(&mykey);
+ INKCacheKeyDigestSet(mykey,digest_string, strlen(digest_string);
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyHostNameSet.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyHostNameSet.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyHostNameSet.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyHostNameSet.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,55 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](INKCacheKeyDigestSet) - INKCacheKeyDigestSet
+INKCacheKeyDestroy - [Next](INKCacheKeyDestroy)
+### INKCacheKeyHostNameSet
+
+Associates a host name to a cache key. Use if you want to support
+cache partitioning by host name.
+
+**Prototype**
+ ~ `INKReturnCode INKCacheKeyHostNameSet(INKCacheKey <em class="replaceable"><code>key`,
+ const unsigned char *`*hostname`*, int *`host_len`*;
+
+**Arguments**
+ ~ `INKCacheKey` `<em class="replaceable"><code>key` is the key to
+ the cached object.
+
+ `const unsigned char <em class="replaceable"><code>*hostname` ** is
+ the host name you are associating with the cache key.
+
+ `int <em class="replaceable"><code>host_len` is the length of the
+ string `<em class="replaceable"><code>hostname`.
+
+**Description**
+ ~ Associates a host name to a cache key. The host name setting is
+ used in conjunction with the Traffic Server configuration files
+ `partition.config` and `hosting.config` that enable you to specify
+ under which cache partition the object should be stored.
+
+**Returns**
+ ~ `INK_SUCCESS` if the `<em class="replaceable"><code> hostname`
+ is successfully associated with the cache key.
+
+ `INK_ERROR` if `<em class="replaceable"><code>hostname` cannot be
+ set or is invalid.
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyPinnedSet.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyPinnedSet.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyPinnedSet.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheKeyPinnedSet.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,76 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](INKCacheRemove) - INKCacheRemove
+INKVConnCacheObjectSizeGet -
+[Next](INKVConnCacheObjectSizeGet)
+### INKCacheKeyPinnedSet
+
+Pins the document corresponding to the specified key in the cache
+so that the garbage collection process does not delete the document
+from the cache for the specified number of seconds.
+
+**Prototype**
+ ~ `INKReturnCode INKCacheKeyPinnedSet (INKCacheKey <em class="replaceable"><code>key`,
+ time\_t *`pin_in_cache`*)
+
+**Arguments**
+ ~ `INKCacheKey` `<em class="replaceable"><code>key` is the cache
+ key for the document to be pinned.
+
+ `time_t <em class="replaceable"><code>pin_in_cache`
+ represents the number of seconds the document is to be pinned in
+ the cache.
+
+**Description**
+ ~ Pins the document corresponding to the specified
+ `<em class="replaceable"><code>key` in the cache for the specified
+ number of seconds specified in
+ `<em class="replaceable"><code>pin_in_cache`. Once the document is
+ pinned, the garbage collection will not delete this document from
+ the specifed number of seconds and the document can even persist
+ across Traffic Server re-runs. However, after the
+ `<em class="replaceable"><code>pin_in_cache` interval has expired,
+ the cache may delete the document at any time in order to reclaim
+ space.
+
+ To delete this document before the
+ `<em class="replaceable"><code>pin_in_cache` interval expires, call
+ the `INKCacheRemove()` function with the document's cache key.
+
+ `InkCacheKeyPinnedSet()` should be used after a key is created and
+ before writing the document to cache using `I``NKCacheWrite()`.
+
+ Because a document is not pinned in the cache by default, it can be
+ garbage-collected at anytime.
+
+ ![[Note]](images/docbook/note.png)
+ Note
+ It is important that the `records.config` variable
+ `<i>proxy.config.cache.permit.pinning </i>` (in `records.config`)
+ is set to 1 to enable pinning.
+
+**Returns**
+ ~ `INK_SUCCESS` if the specified object was successfully pinned
+ in the cache.
+
+ `INK_ERROR` if the pin could not be set or is invalid.
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheRead.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheRead.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheRead.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheRead.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,96 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](INKCacheKeyDestroy) - INKCacheKeyDestroy
+INKCacheReady - [Next](INKCacheReady)
+### INKCacheRead
+
+Initiates a cache read or lookup of an object in the Traffic Server
+cache.
+
+**Prototype**
+ ~ `INKAction INKCacheRead (INKCont <em class="replaceable"><code>contp`,
+ INKCacheKey *`key`*)
+
+**Arguments**
+ ~ `INKCont` `<em class="replaceable"><code>contp` is the
+ continuation the cache calls back (telling it whether the object
+ exists and can be read).
+
+ `INKCacheKey` `<em class="replaceable"><code>key` is the cache key
+ corresponding to the object to be read.
+
+**Description**
+ ~ Asks the Traffic Server cache if the object corresponding to
+ `<em class="replaceable"><code>key` exists in the cache and can be
+ read.
+
+ You can do a cache lookup to determine whether or not an object is
+ in the cache. To do a cache lookup, call `INKCacheRead` on a
+ continuation `<em class="replaceable"><code>contp`. If the object
+ can be read, then the cache calls
+ `<em class="replaceable"><code>contp` back with the event
+ `INK_EVENT_CACHE_OPEN_READ`. In this case, the cache also passes
+ `<em class="replaceable"><code>contp` a cache vconnection;
+ `<em class="replaceable"><code>contp` can then initiate a read
+ operation on that vconnection using `INKVConnRead`.
+ `INKVConnCacheObjectSizeGet` can be used to determine the size of
+ the object in the cache.
+
+ If the object cannot be read (if, for instance, it is not in the
+ cache), then the cache calls `<em class="replaceable"><code>contp`
+ back with the event `INK_EVENT_CACHE_OPEN_READ_FAILED`. An error
+ code is passed in the `void *edata` argument of
+ `<em class="replaceable"><code>contp`. The error code can be:
+
+ - `INK_CACHE_ERROR_NOT_READY`: trying to access to the cache
+ while it's not yet initialized.
+
+ - `INK_CACHE_ERROR_NO_DOC`: document does not exist in cache.
+
+ - `INK_CACHE_ERROR_DOC_BUSY`: trying to read a document while
+ another continuation is writing on it.
+
+ - Any other value: unknown read failure
+
+
+ Finally, once you have performed a cache lookup, you can write into
+ cache with `INKCacheWrite`. The user
+ (`<em class="replaceable"><code>contp`) also has the option to
+ cancel the action returned by `INKCacheRead` by using
+ `INKActionCancel`.
+
+ ![[Note]](images/docbook/note.png)
+ Note
+ It is up to the user to read the data from the cache `vc iobuffer`
+ and consume it. The cache does not bufferize the data and will not
+ call the user back unless all the data from the `cache iobuffer` is
+ consumed.
+
+ Reentrant calls are possible; in other words, the cache can call
+ back the user (`<em class="replaceable"><code>contp`) in the same
+ call.
+
+**Returns**
+ ~ An `INKAction` object if successful.
+
+ `INK_ERROR_PTR` if an argument is incorrect or if the API failed.
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheReady.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheReady.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheReady.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheReady.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,52 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](INKCacheRead) - INKCacheRead
+INKCacheWrite - [Next](INKCacheWrite)
+### INKCacheReady
+
+Determines if the Traffic Server cache is initialized and ready to
+accept requests for the specified data type.
+
+**Prototype**
+ ~ `INKReturnCode INKCacheReady (int *<em class="replaceable"><code>is_ready`)
+
+**Arguments**
+ ~ If the cache is ready, then the
+ `int *<em class="replaceable"><code>is_ready` argument is set to a
+ non-zero value. It is set to 0 if the cache is not ready.
+
+**Description**
+ ~ Asks the Traffic Server cache if it is initialized and ready to
+ accept requests. If the cache is not initialized, then any attempts
+ to read, write, or remove documents will fail.
+
+ When a plugin starts (i.e., when its `INKPluginInit` function is
+ called), there is no guarantee that the cache is already
+ initialized. This API is useful if a plugin needs to access the
+ cache from the `INKPluginInit` function. If the cache is not ready,
+ then the plugin should retry later.
+
+**Returns**
+ ~ `INK_SUCCESS` if the API is called successfully.
+
+ `INK_ERROR` if this function cannot be set or if it is invalid.
+
+
Modified: trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheRemove.en.mdtext
URL: http://svn.apache.org/viewvc/trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheRemove.en.mdtext?rev=1031963&r1=1031962&r2=1031963&view=diff
==============================================================================
--- trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheRemove.en.mdtext (original)
+++ trafficserver/site/branches/ats-cms/content/docs/trunk/sdk/INKCacheRemove.en.mdtext Sat Nov 6 06:29:56 2010
@@ -1,2 +1,76 @@
+Title: Apache Traffic Server⢠Software Developers Kit
+Notice: Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+[Prev](INKCacheWrite) - INKCacheWrite
+INKCacheKeyPinnedSet - [Next](INKCacheKeyPinnedSet)
+### INKCacheRemove
+
+Removes an object from the Traffic Server cache.
+
+**Prototype**
+ ~ `INKAction INKCacheRemove (INKCont <em class="replaceable"><code>contp`,
+ INKCacheKey *`key`*)
+
+**Arguments**
+ ~ `INKCont` `<em class="replaceable"><code>contp` is the
+ continuation the cache calls back when reporting the success or
+ failure of the remove.
+
+ `INKCacheKey` `<em class="replaceable"><code>key` is the cache key
+ that corresponds to the object tol be removed.
+
+**Description**
+ ~ Removes the object corresponding to
+ `<em class="replaceable"><code>key` from the cache.
+
+ If the object was removed successfully, then the cache calls
+ `<em class="replaceable"><code>contp` back with the event
+ `INK_EVENT_CACHE_REMOVE`.
+
+ If the object was not found in the cache, then the cache calls
+ `<em class="replaceable"><code>contp` back with the event
+ `INK_EVENT_CACHE_REMOVE_FAILED`. An error code is passed in the
+ `void *edata` argument of `<em class="replaceable"><code>contp`.
+ The error code can be:
+
+ - `INK_CACHE_ERROR_NOT_READY`: tried to access the cache before
+ it was initialized.
+
+ - `INK_CACHE_ERROR_NO_DOC`: doc doesn't exist in cache
+
+ - any other value: unknown remove failure
+
+
+ In both of these callbacks, the user does not have to do anything.
+ The user does not get a vconnection from the cache, since no data
+ needs to be transferred. When the cache calls the user back with
+ `INK_EVENT_CACHE_REMOVE`, the remove has already been committed.
+
+ ![[Note]](images/docbook/note.png)
+ Note
+ Reentrant calls are possible, i.e. the cache can call back the user
+ (`contp`) in the same call.
+
+**Returns**
+ ~ An `INKAction` object if successful.
+
+ `INK_ERROR_PTR` if an argument is incorrect or if the API fails.
+
+