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 { INKVIO output_vio; INKIOBuffer output_buffer; INKIOBufferReader 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 a MyData
pointer using
INKContDataSet
in the handle_transform
routine.
my_data_destroy
Destroys objects of type MyData
. To deallocate the transform's data, the
append_transform
routine (see below) calls my_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 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_transform
calls my_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 as
INK_HTTP_RESPONSE_TRANSFORM_HOOK
), then it calls handle_transform
to attempt to transform more data.
transformable
The plugin transforms only documents that have a content type
of text/html
. This function examines the
Content-Type
MIME 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_plugin
does the
following:
Gets a handle to the HTTP transaction being processed
Calls transformable
to determine
whether the response document content is of type
text/html
If the content is transformable, then it calls
transform_add
to create the
transformation.
Calls INKHttpTxnReenable
to continue
the transaction
load
Opens the file containing the text to be appended and loads
the contents of the file into an INKIOBuffer
called append_buffer
.
INKPluginInit
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 INKPluginInit
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
INK_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.