Append-Transform Plugin¶
The append-transform plugin appends text to the body of an HTTP
response. It obtains this text from a file; the name of the file
containing the append text is a parameter you specify in
plugin.config
, as follows:
append-transform.so path/to/file
The append-transform plugin is based on null-transform.c
. The only
difference is that after the plugin feeds the document through the
transformation, it adds text to the response.
Below is a list of the functions in append-transform.c
, in the order
they appear in the source code. Below each entry is a description of
what the function does:
``my_data_alloc``
Allocates and initializes a
MyData
structure. The plugin defines a struct,MyData
, as follows:typedef struct { TSVIO output_vio; TSIOBuffer output_buffer; TSIOBufferReader output_reader; int append_needed; } MyData;
The
MyData
structure is used to represent data that the transformation (vconnection) needs. The transformation’s data pointer is set to aMyData
pointer usingTSContDataSet
in thehandle_transform
routine.``my_data_destroy``
Destroys objects of type
MyData
. To deallocate the transform’s data, theappend_transform
routine (see below) callsmy_data_destroy
when the transformation is complete.``handle_transform``
This function does the actual data transformation. The transformation is created in
transform_add
(see below).handle_transform
is called byappend_transform
.``append_transform``
This is the handler function for the transformation vconnection created in
transform_add
. It is the implementation of the vconnection.- If the transformation vconnection has been closed, then
append_transform
callsmy_data_destroy
to destroy the vonnection. - If
append_transform
receives an error event, then it calls back the continuation to let it know it has completed the write operation. - If it receives a
WRITE_COMPLETE
event, then it shuts down the write portion of its vconnection. - If it receives a
WRITE_READY
or any other event (such asTS_HTTP_RESPONSE_TRANSFORM_HOOK
), then it callshandle_transform
to attempt to transform more data.
- If the transformation vconnection has been closed, then
``transformable``
The plugin transforms only documents that have a content type of
text/html
. This function examines theContent-Type
MIME header field in the response header. If the value of the MIME field istext/html
, then the function returns 1; otherwise, it returns zero.``transform_add``
Creates the transformation for the current transaction and sets up a transformation hook. The handler function for the transformation is
append_transform
.``transform_plugin``
This is the handler function for the main continuation for the plugin. Traffic Server calls this function whenever it reads an HTTP response header.
transform_plugin
does the following:- Gets a handle to the HTTP transaction being processed
- Calls
transformable
to determine whether the response document content is of typetext/html
- If the content is transformable, then it calls
transform_add
to create the transformation. - Calls
TSHttpTxnReenable
to continue the transaction
``load``
Opens the file containing the text to be appended and loads the contents of the file into an
TSIOBuffer
calledappend_buffer
.``TSPluginInit``
Does the following:
- Checks to make sure that the required configuration information
(the append text filename) is entered in
plugin.config
correctly. - If there is a filename, then
TSPluginInit
calls load to load the text. - Creates a continuation for the plugin. The handler for this
continuation is
transform_plugin
. - Adds the plugin’s continuation to
TS_HTTP_READ_RESPONSE_HDR_HOOK
. In other words, it sets up a callback of the plugin’s continuation when Traffic Server reads HTTP response headers.
- Checks to make sure that the required configuration information
(the append text filename) is entered in