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_allocAllocates and initializes a
MyDatastructure. The plugin defines a struct,MyData, as follows:typedef struct { TSVIO output_vio; TSIOBuffer output_buffer; TSIOBufferReader output_reader; int append_needed; } MyData;
The
MyDatastructure is used to represent data that the transformation (vconnection) needs. The transformation's data pointer is set to aMyDatapointer usingTSContDataSetin thehandle_transformroutine. -
my_data_destroyDestroys objects of type
MyData. To deallocate the transform's data, theappend_transformroutine (see below) callsmy_data_destroywhen the transformation is complete. -
handle_transformThis function does the actual data transformation. The transformation is created in
transform_add(see below).handle_transformis called byappend_transform. -
append_transformThis 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_transformcallsmy_data_destroyto destroy the vonnection. -
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 asTS_HTTP_RESPONSE_TRANSFORM_HOOK), then it callshandle_transformto attempt to transform more data.
-
-
transformableThe plugin transforms only documents that have a content type of
text/html. This function examines theContent-TypeMIME 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_addCreates the transformation for the current transaction and sets up a transformation hook. The handler function for the transformation is
append_transform. -
transform_pluginThis 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 typetext/html -
If the content is transformable, then it calls
transform_addto create the transformation. -
Calls
TSHttpTxnReenableto continue the transaction
-
-
loadOpens the file containing the text to be appended and loads the contents of the file into an
TSIOBuffercalledappend_buffer. -
TSPluginInitDoes 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.
-

