CINXE.COM

Plugin Development — Apache Traffic Server 9.2.8 documentation

<!DOCTYPE html> <html class="writer-html5" lang="en"> <head> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Plugin Development &mdash; Apache Traffic Server 9.2.8 documentation</title> <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="../../_static/css/theme.css" /> <link rel="stylesheet" type="text/css" href="../../_static/graphviz.css" /> <link rel="stylesheet" type="text/css" href="../../_static/override.css" /> <link rel="shortcut icon" href="../../_static/favicon.ico"/> <script src="../../_static/jquery.js"></script> <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> <script src="../../_static/doctools.js"></script> <script src="../../_static/sphinx_highlight.js"></script> <script src="../../_static/js/theme.js"></script> <link rel="index" title="Index" href="../../genindex.html" /> <link rel="search" title="Search" href="../../search.html" /> <link rel="next" title="Plugin Development Introduction" href="introduction.en.html" /> <link rel="prev" title="TS.Scalar" href="../internal-libraries/scalar.en.html" /> </head> <body class="wy-body-for-nav"> <div class="wy-grid-for-nav"> <nav data-toggle="wy-nav-shift" class="wy-nav-side"> <div class="wy-side-scroll"> <div class="wy-side-nav-search" > <a href="../../index.html" class="icon icon-home"> Apache Traffic Server <img src="../../_static/trans_logo_tm_380x69.png" class="logo" alt="Logo"/> </a> <div role="search"> <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> <ul class="current"> <li class="toctree-l1"><a class="reference internal" href="../../preface/index.en.html">Preface</a></li> <li class="toctree-l1"><a class="reference internal" href="../../getting-started/index.en.html">Getting Started</a></li> <li class="toctree-l1"><a class="reference internal" href="../../release-notes/index.en.html">Release Notes</a></li> <li class="toctree-l1"><a class="reference internal" href="../../admin-guide/index.en.html">Administrator’s Guide</a></li> <li class="toctree-l1 current"><a class="reference internal" href="../index.en.html">Developer’s Guide</a><ul class="current"> <li class="toctree-l2"><a class="reference internal" href="../introduction/index.en.html">Introduction</a></li> <li class="toctree-l2"><a class="reference internal" href="../release-process/index.en.html">Release Process</a></li> <li class="toctree-l2"><a class="reference internal" href="../contributing/index.en.html">Contributing to Traffic Server</a></li> <li class="toctree-l2"><a class="reference internal" href="../testing-with-vagrant/index.en.html">Using Vagrant to Test Traffic Server</a></li> <li class="toctree-l2"><a class="reference internal" href="../debugging/index.en.html">Debugging and Analysis</a></li> <li class="toctree-l2"><a class="reference internal" href="../threads-and-events.en.html">Threads and Event Processing</a></li> <li class="toctree-l2"><a class="reference internal" href="../cache-architecture/index.en.html">Cache Architecture</a></li> <li class="toctree-l2"><a class="reference internal" href="../logging-architecture/index.en.html">Logging Architecture</a></li> <li class="toctree-l2"><a class="reference internal" href="../internal-libraries/index.en.html">Internal libraries</a></li> <li class="toctree-l2 current"><a class="current reference internal" href="#">Plugin Development</a><ul> <li class="toctree-l3"><a class="reference internal" href="introduction.en.html">Plugin Development Introduction</a></li> <li class="toctree-l3"><a class="reference internal" href="getting-started/index.en.html">Getting Started</a></li> <li class="toctree-l3"><a class="reference internal" href="building-plugins.en.html">Building Plugins</a></li> <li class="toctree-l3"><a class="reference internal" href="configuration.en.html">Plugin Configuration</a></li> <li class="toctree-l3"><a class="reference internal" href="plugin-management/index.en.html">Plugin Management</a></li> <li class="toctree-l3"><a class="reference internal" href="actions/index.en.html">Actions</a></li> <li class="toctree-l3"><a class="reference internal" href="hooks-and-transactions/index.en.html">Hooks and Transactions</a></li> <li class="toctree-l3"><a class="reference internal" href="continuations/index.en.html">Continuations</a></li> <li class="toctree-l3"><a class="reference internal" href="mutexes.en.html">Mutexes</a></li> <li class="toctree-l3"><a class="reference internal" href="io/index.en.html">IO</a></li> <li class="toctree-l3"><a class="reference internal" href="http-headers/index.en.html">HTTP Headers</a></li> <li class="toctree-l3"><a class="reference internal" href="http-transformations/index.en.html">HTTP Transformations</a></li> <li class="toctree-l3"><a class="reference internal" href="remap-plugins.en.html">Remap Plugins</a></li> <li class="toctree-l3"><a class="reference internal" href="new-protocol-plugins.en.html">New Protocol Plugins</a></li> <li class="toctree-l3"><a class="reference internal" href="plugin-interfaces.en.html">Plugin Interfaces</a></li> <li class="toctree-l3"><a class="reference internal" href="adding-statistics.en.html">Adding Statistics</a></li> <li class="toctree-l3"><a class="reference internal" href="example-plugins/index.en.html">Example Plugins</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="../config-vars.en.html">Configuration Variable Implementation</a></li> <li class="toctree-l2"><a class="reference internal" href="../api/index.en.html">API Reference</a></li> <li class="toctree-l2"><a class="reference internal" href="../continuous-integration/index.en.html">Continuous Integration</a></li> <li class="toctree-l2"><a class="reference internal" href="../documentation/index.en.html">Documentation</a></li> <li class="toctree-l2"><a class="reference internal" href="../host-resolution-proposal.en.html">Host Resolution Proposal</a></li> <li class="toctree-l2"><a class="reference internal" href="../client-session-architecture.en.html">An Overview Client Sessions and Transactions</a></li> <li class="toctree-l2"><a class="reference internal" href="../core-architecture/index.en.html">Core Architecture</a></li> <li class="toctree-l2"><a class="reference internal" href="../design-documents/index.en.html">Design Documents</a></li> <li class="toctree-l2"><a class="reference internal" href="../layout/index.en.html">Layout</a></li> <li class="toctree-l2"><a class="reference internal" href="../testing/index.en.html">Testing Traffic Server</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="../../appendices/index.en.html">Appendices</a></li> </ul> </div> </div> </nav> <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > <i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href="../../index.html">Apache Traffic Server</a> </nav> <div class="wy-nav-content"> <div class="rst-content"> <div role="navigation" aria-label="Page navigation"> <ul class="wy-breadcrumbs"> <li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li> <li class="breadcrumb-item"><a href="../index.en.html">Developer’s Guide</a></li> <li class="breadcrumb-item active">Plugin Development</li> <li class="wy-breadcrumbs-aside"> <a href="../../_sources/developer-guide/plugins/index.en.rst.txt" rel="nofollow"> View page source</a> </li> </ul> <hr/> </div> <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <section id="plugin-development"> <span id="developer-plugins"></span><h1>Plugin Development<a class="headerlink" href="#plugin-development" title="Permalink to this heading"></a></h1> <div class="toctree-wrapper compound"> <ul> <li class="toctree-l1"><a class="reference internal" href="introduction.en.html">Plugin Development Introduction</a><ul> <li class="toctree-l2"><a class="reference internal" href="introduction.en.html#roadmap">Roadmap</a></li> <li class="toctree-l2"><a class="reference internal" href="introduction.en.html#asynchronous-event-model">Asynchronous Event Model</a></li> <li class="toctree-l2"><a class="reference internal" href="introduction.en.html#naming-conventions">Naming Conventions</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="getting-started/index.en.html">Getting Started</a><ul> <li class="toctree-l2"><a class="reference internal" href="getting-started/a-simple-plugin.en.html">A Simple Plugin</a></li> <li class="toctree-l2"><a class="reference internal" href="getting-started/plugin-registration-and-version-checking.en.html">Plugin Registration and Version Checking</a></li> <li class="toctree-l2"><a class="reference internal" href="getting-started/naming-conventions.en.html">Naming Conventions</a></li> <li class="toctree-l2"><a class="reference internal" href="getting-started/index.en.html#understanding-traffic-server-plugins">Understanding Traffic Server Plugins</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="building-plugins.en.html">Building Plugins</a></li> <li class="toctree-l1"><a class="reference internal" href="configuration.en.html">Plugin Configuration</a></li> <li class="toctree-l1"><a class="reference internal" href="plugin-management/index.en.html">Plugin Management</a><ul> <li class="toctree-l2"><a class="reference internal" href="plugin-management/settings-and-statistics.en.html">Settings and Statistics</a></li> <li class="toctree-l2"><a class="reference internal" href="plugin-management/logging-api.en.html">Logging API</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="actions/index.en.html">Actions</a><ul> <li class="toctree-l2"><a class="reference internal" href="actions/hosts-lookup-api.en.html">Hosts Lookup API</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="hooks-and-transactions/index.en.html">Hooks and Transactions</a><ul> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/adding-hooks.en.html">Adding Hooks</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/http-sessions.en.html">HTTP Sessions</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/http-transactions.en.html">HTTP Transactions</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/intercepting-http-transactions.en.html">Intercepting HTTP Transactions</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/initiate-http-connection.en.html">Initiate HTTP Connection</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/http-alternate-selection.en.html">HTTP Alternate Selection</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/ssl-hooks.en.html">TLS User Agent Hooks</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/ssl-session-api.en.html">TLS Session Plugin API</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/ssl-session-api.en.html#utility-functions">Utility Functions</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/ssl-session-api.en.html#example-use-case">Example Use Case</a></li> <li class="toctree-l2"><a class="reference internal" href="hooks-and-transactions/index.en.html#hooks">Hooks</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="continuations/index.en.html">Continuations</a><ul> <li class="toctree-l2"><a class="reference internal" href="continuations/activating-continuations.en.html">Activating Continuations</a></li> <li class="toctree-l2"><a class="reference internal" href="continuations/writing-handler-functions.en.html">Writing Handler Functions</a></li> <li class="toctree-l2"><a class="reference internal" href="continuations/index.en.html#mutexes-and-data">Mutexes and Data</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="mutexes.en.html">Mutexes</a><ul> <li class="toctree-l2"><a class="reference internal" href="mutexes.en.html#locking-global-data">Locking Global Data</a></li> <li class="toctree-l2"><a class="reference internal" href="mutexes.en.html#protecting-a-continuation-s-data">Protecting a Continuation’s Data</a></li> <li class="toctree-l2"><a class="reference internal" href="mutexes.en.html#how-to-associate-a-continuation-with-every-http-transaction">How to Associate a Continuation With Every HTTP Transaction</a></li> <li class="toctree-l2"><a class="reference internal" href="mutexes.en.html#how-to-add-the-new-continuation">How to Add the New Continuation</a></li> <li class="toctree-l2"><a class="reference internal" href="mutexes.en.html#how-to-store-data-specific-to-each-http-transaction">How to Store Data Specific to Each HTTP Transaction</a></li> <li class="toctree-l2"><a class="reference internal" href="mutexes.en.html#using-locks">Using Locks</a></li> <li class="toctree-l2"><a class="reference internal" href="mutexes.en.html#special-case-continuations-created-for-http-transactions">Special Case: Continuations Created for HTTP Transactions</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="io/index.en.html">IO</a><ul> <li class="toctree-l2"><a class="reference internal" href="io/net-vconnections.en.html">Net Vconnections</a></li> <li class="toctree-l2"><a class="reference internal" href="io/transformations.en.html">Transformations</a></li> <li class="toctree-l2"><a class="reference internal" href="io/vios.en.html">VIOs</a></li> <li class="toctree-l2"><a class="reference internal" href="io/io-buffers.en.html">IO Buffers</a></li> <li class="toctree-l2"><a class="reference internal" href="io/cache-api.en.html">Cache API</a></li> <li class="toctree-l2"><a class="reference internal" href="io/index.en.html#vconnections">Vconnections</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="http-headers/index.en.html">HTTP Headers</a><ul> <li class="toctree-l2"><a class="reference internal" href="http-headers/trafficserver-http-header-system.en.html">Traffic Server HTTP Header System</a></li> <li class="toctree-l2"><a class="reference internal" href="http-headers/header-functions.en.html">Header Functions</a></li> <li class="toctree-l2"><a class="reference internal" href="http-headers/mime-headers.en.html">MIME Headers</a></li> <li class="toctree-l2"><a class="reference internal" href="http-headers/marshal-buffers.en.html">Marshal Buffers</a></li> <li class="toctree-l2"><a class="reference internal" href="http-headers/urls.en.html">URLs</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="http-transformations/index.en.html">HTTP Transformations</a><ul> <li class="toctree-l2"><a class="reference internal" href="http-transformations/sample-null-transformation-plugin.en.html">Sample Null Transform Plugin</a></li> <li class="toctree-l2"><a class="reference internal" href="http-transformations/append-transform-plugin.en.html">Append Transform Plugin</a></li> <li class="toctree-l2"><a class="reference internal" href="http-transformations/sample-buffered-null-transformation-plugin.en.html">Sample Buffered Null Transform Plugin</a></li> <li class="toctree-l2"><a class="reference internal" href="http-transformations/index.en.html#writing-content-transform-plugins">Writing Content Transform Plugins</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="remap-plugins.en.html">Remap Plugins</a><ul> <li class="toctree-l2"><a class="reference internal" href="remap-plugins.en.html#initialization">Initialization</a></li> <li class="toctree-l2"><a class="reference internal" href="remap-plugins.en.html#configuration">Configuration</a></li> <li class="toctree-l2"><a class="reference internal" href="remap-plugins.en.html#runtime">Runtime</a></li> <li class="toctree-l2"><a class="reference internal" href="remap-plugins.en.html#cleanup">Cleanup</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="new-protocol-plugins.en.html">New Protocol Plugins</a><ul> <li class="toctree-l2"><a class="reference internal" href="new-protocol-plugins.en.html#about-the-sample-protocol">About the Sample Protocol</a></li> <li class="toctree-l2"><a class="reference internal" href="new-protocol-plugins.en.html#protocol-plugin-structure">Protocol Plugin Structure</a></li> <li class="toctree-l2"><a class="reference internal" href="new-protocol-plugins.en.html#continuations-in-the-protocol-plugin">Continuations in the Protocol Plugin</a></li> <li class="toctree-l2"><a class="reference internal" href="new-protocol-plugins.en.html#event-flow">Event Flow</a></li> <li class="toctree-l2"><a class="reference internal" href="new-protocol-plugins.en.html#one-way-to-implement-a-transaction-state-machine">One Way to Implement a Transaction State Machine</a></li> <li class="toctree-l2"><a class="reference internal" href="new-protocol-plugins.en.html#processing-a-typical-transaction">Processing a Typical Transaction</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="plugin-interfaces.en.html">Plugin Interfaces</a><ul> <li class="toctree-l2"><a class="reference internal" href="plugin-interfaces.en.html#tsfopen-family">TSfopen Family</a></li> <li class="toctree-l2"><a class="reference internal" href="plugin-interfaces.en.html#memory-allocation">Memory Allocation</a></li> <li class="toctree-l2"><a class="reference internal" href="plugin-interfaces.en.html#thread-functions">Thread Functions</a></li> <li class="toctree-l2"><a class="reference internal" href="plugin-interfaces.en.html#debugging-functions">Debugging Functions</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="adding-statistics.en.html">Adding Statistics</a></li> <li class="toctree-l1"><a class="reference internal" href="example-plugins/index.en.html">Example Plugins</a><ul> <li class="toctree-l2"><a class="reference internal" href="example-plugins/basic-authorization/index.en.html">Basic Authorization Plugin</a></li> <li class="toctree-l2"><a class="reference internal" href="example-plugins/denylist/index.en.html">Denylist Plugin</a></li> <li class="toctree-l2"><a class="reference internal" href="example-plugins/query_remap/index.en.html">Query Remap Plugin</a></li> <li class="toctree-l2"><a class="reference internal" href="example-plugins/tls_bridge.en.html">TLS Bridge</a></li> <li class="toctree-l2"><a class="reference internal" href="example-plugins/index.en.html#header-based-plugin-examples">Header-Based Plugin Examples</a></li> </ul> </li> </ul> </div> </section> </div> </div> <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> <a href="../internal-libraries/scalar.en.html" class="btn btn-neutral float-left" title="TS.Scalar" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="introduction.en.html" class="btn btn-neutral float-right" title="Plugin Development Introduction" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> </div> <hr/> <div role="contentinfo"> <p>&#169; Copyright 2025, dev@trafficserver.apache.org.</p> </div> Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. </footer> </div> </div> </section> </div> <script> jQuery(function () { SphinxRtdTheme.Navigation.enable(true); }); </script> <div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions"> <span class="rst-current-version" data-toggle="rst-current-version"> <span class="fa fa-book"> Apache Traffic Server</span> v: 9.2 <span class="fa fa-caret-down"></span> </span> <div class="rst-other-versions"> <dl id="lang-list"> <dt>Languages</dt> </dl> <dl id="version-list"> <dt>Versions</dt> </dl> </div> </div> <script> $(function() { function update_langlist (json) { for (var lang in json) { $('#lang-list').append('<dd><a href="/' + lang + '/latest/">' + json[lang]['name'] + '</a></dd>'); } for (var i in json[curlang]['versions']) { var ver = json[curlang]['versions'][i]; $('#version-list').append('<dd><a href="/' + curlang + '/' + ver + '/">' + ver + '</a></dd>'); } } var curlang = "en" == "None" ? "en" : "en"; $.ajax({ 'url': "/en/latest/_static/languages.json", 'dataType': "json", 'success': function (json) { update_langlist(json) }, 'error': function (xhr,errstr,e) { $.ajax({ 'url': "/_static/languages.json", 'dataType': "json", 'success': function (json) { update_langlist(json) } }) } }); }); </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10