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.cc. 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.cc, 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 - MyDatastructure. The plugin defines a struct,- MyData, as follows:- struct MyData { TSVIO output_vio; TSIOBuffer output_buffer; TSIOBufferReader output_reader; int append_needed; }; - The - MyDatastructure is used to represent data that the transformation (vconnection) needs. The transformation's data pointer is set to a- MyDatapointer using- TSContDataSetin the- handle_transformroutine.
- ``my_data_destroy`` - Destroys objects of type - MyData. To deallocate the transform's data, the- append_transformroutine (see below) calls- my_data_destroywhen the transformation is complete.
- ``handle_transform`` - This function does the actual data transformation. The transformation is created in - transform_add(see below).- handle_transformis called by- append_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_transformcalls- my_data_destroyto destroy the vconnection.
- If - append_transformreceives an error event, then it calls back the continuation to let it know it has completed the write operation.
- If it receives a - WRITE_COMPLETEevent, then it shuts down the write portion of its vconnection.
- If it receives a - WRITE_READYor any other event (such as- TS_HTTP_RESPONSE_TRANSFORM_HOOK), then it calls- handle_transformto attempt to transform more data.
 
- ``transformable`` - The plugin transforms only documents that have a content type of - text/html. This function examines the- Content-TypeMIME header field in the response header. If the value of the MIME field is- text/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_plugindoes the following:- Gets a handle to the HTTP transaction being processed 
- Calls - transformableto determine whether the response document content is of type- text/html
- If the content is transformable, then it calls - transform_addto create the transformation.
- Calls - TSHttpTxnReenableto continue the transaction
 
- ``load`` - Opens the file containing the text to be appended and loads the contents of the file into an - TSIOBuffercalled- append_buffer.
- ``TSPluginInit`` - Does the following: - Checks to make sure that the required configuration information (the append text filename) is entered in - plugin.configcorrectly.
- If there is a filename, then - TSPluginInitcalls 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.