Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion example/plugins/c-api/request_buffer/request_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ request_buffer_plugin(TSCont contp, TSEvent event, void *edata)
{
TSDebug(PLUGIN_NAME, "request_buffer_plugin starting, event[%d]", event);
TSHttpTxn txnp = (TSHttpTxn)(edata);
if (event == TS_EVENT_HTTP_REQUEST_BUFFER_COMPLETE) {
if (event == TS_EVENT_HTTP_REQUEST_BUFFER_READ_COMPLETE) {
int len = 0;
char *body = request_body_get(txnp, &len);
TSDebug(PLUGIN_NAME, "request_buffer_plugin gets the request body with length[%d]", len);
Expand Down
289 changes: 156 additions & 133 deletions include/ts/apidefs.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,122 @@ typedef enum {
TS_HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511
} TSHttpStatus;

/**
TSEvents are sent to continuations when they are called back.
The TSEvent provides the continuation's handler function with
information about the callback. Based on the event it receives,
the handler function can decide what to do.

*/
typedef enum {
TS_EVENT_NONE = 0,
TS_EVENT_IMMEDIATE = 1,
TS_EVENT_TIMEOUT = 2,
TS_EVENT_ERROR = 3,
TS_EVENT_CONTINUE = 4,

TS_EVENT_VCONN_READ_READY = 100,
TS_EVENT_VCONN_WRITE_READY = 101,
TS_EVENT_VCONN_READ_COMPLETE = 102,
TS_EVENT_VCONN_WRITE_COMPLETE = 103,
TS_EVENT_VCONN_EOS = 104,
TS_EVENT_VCONN_INACTIVITY_TIMEOUT = 105,
TS_EVENT_VCONN_ACTIVE_TIMEOUT = 106,
TS_EVENT_VCONN_START = 107,
TS_EVENT_VCONN_CLOSE = 108,
TS_EVENT_VCONN_OUTBOUND_START = 109,
TS_EVENT_VCONN_OUTBOUND_CLOSE = 110,
TS_EVENT_VCONN_PRE_ACCEPT = TS_EVENT_VCONN_START, // Deprecated but still compatible

TS_EVENT_NET_CONNECT = 200,
TS_EVENT_NET_CONNECT_FAILED = 201,
TS_EVENT_NET_ACCEPT = 202,
TS_EVENT_NET_ACCEPT_FAILED = 204,

TS_EVENT_INTERNAL_206 = 206,
TS_EVENT_INTERNAL_207 = 207,
TS_EVENT_INTERNAL_208 = 208,
TS_EVENT_INTERNAL_209 = 209,
TS_EVENT_INTERNAL_210 = 210,
TS_EVENT_INTERNAL_211 = 211,
TS_EVENT_INTERNAL_212 = 212,

TS_EVENT_HOST_LOOKUP = 500,

TS_EVENT_CACHE_OPEN_READ = 1102,
TS_EVENT_CACHE_OPEN_READ_FAILED = 1103,
TS_EVENT_CACHE_OPEN_WRITE = 1108,
TS_EVENT_CACHE_OPEN_WRITE_FAILED = 1109,
TS_EVENT_CACHE_REMOVE = 1112,
TS_EVENT_CACHE_REMOVE_FAILED = 1113,
TS_EVENT_CACHE_SCAN = 1120,
TS_EVENT_CACHE_SCAN_FAILED = 1121,
TS_EVENT_CACHE_SCAN_OBJECT = 1122,
TS_EVENT_CACHE_SCAN_OPERATION_BLOCKED = 1123,
TS_EVENT_CACHE_SCAN_OPERATION_FAILED = 1124,
TS_EVENT_CACHE_SCAN_DONE = 1125,
TS_EVENT_CACHE_LOOKUP = 1126,
TS_EVENT_CACHE_READ = 1127,
TS_EVENT_CACHE_DELETE = 1128,
TS_EVENT_CACHE_WRITE = 1129,
TS_EVENT_CACHE_WRITE_HEADER = 1130,
TS_EVENT_CACHE_CLOSE = 1131,
TS_EVENT_CACHE_LOOKUP_READY = 1132,
TS_EVENT_CACHE_LOOKUP_COMPLETE = 1133,
TS_EVENT_CACHE_READ_READY = 1134,
TS_EVENT_CACHE_READ_COMPLETE = 1135,

TS_EVENT_INTERNAL_1200 = 1200,

TS_EVENT_SSL_SESSION_GET = 2000,
TS_EVENT_SSL_SESSION_NEW = 2001,
TS_EVENT_SSL_SESSION_REMOVE = 2002,

TS_EVENT_AIO_DONE = 3900,

TS_EVENT_HTTP_CONTINUE = 60000,
TS_EVENT_HTTP_ERROR = 60001,
TS_EVENT_HTTP_READ_REQUEST_HDR = 60002,
TS_EVENT_HTTP_OS_DNS = 60003,
TS_EVENT_HTTP_SEND_REQUEST_HDR = 60004,
TS_EVENT_HTTP_READ_CACHE_HDR = 60005,
TS_EVENT_HTTP_READ_RESPONSE_HDR = 60006,
TS_EVENT_HTTP_SEND_RESPONSE_HDR = 60007,
TS_EVENT_HTTP_REQUEST_TRANSFORM = 60008,
TS_EVENT_HTTP_RESPONSE_TRANSFORM = 60009,
TS_EVENT_HTTP_SELECT_ALT = 60010,
TS_EVENT_HTTP_TXN_START = 60011,
TS_EVENT_HTTP_TXN_CLOSE = 60012,
TS_EVENT_HTTP_SSN_START = 60013,
TS_EVENT_HTTP_SSN_CLOSE = 60014,
TS_EVENT_HTTP_CACHE_LOOKUP_COMPLETE = 60015,
TS_EVENT_HTTP_PRE_REMAP = 60016,
TS_EVENT_HTTP_POST_REMAP = 60017,
TS_EVENT_HTTP_REQUEST_BUFFER_READ_COMPLETE = 60018,
TS_EVENT_HTTP_RESPONSE_CLIENT = 60019,

TS_EVENT_LIFECYCLE_PORTS_INITIALIZED = 60100,
TS_EVENT_LIFECYCLE_PORTS_READY = 60101,
TS_EVENT_LIFECYCLE_CACHE_READY = 60102,
TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED = 60103,
TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED = 60104,
TS_EVENT_LIFECYCLE_MSG = 60105,
TS_EVENT_LIFECYCLE_TASK_THREADS_READY = 60106,
TS_EVENT_LIFECYCLE_SHUTDOWN = 60107,

TS_EVENT_INTERNAL_60200 = 60200,
TS_EVENT_INTERNAL_60201 = 60201,
TS_EVENT_INTERNAL_60202 = 60202,
TS_EVENT_SSL_CERT = 60203,
TS_EVENT_SSL_SERVERNAME = 60204,
TS_EVENT_SSL_VERIFY_SERVER = 60205,
TS_EVENT_SSL_VERIFY_CLIENT = 60206,
TS_EVENT_SSL_CLIENT_HELLO = 60207,

TS_EVENT_MGMT_UPDATE = 60300
} TSEvent;
#define TS_EVENT_HTTP_READ_REQUEST_PRE_REMAP TS_EVENT_HTTP_PRE_REMAP /* backwards compat */

/**
This set of enums represents the possible hooks where you can
set up continuation callbacks. The functions used to register a
Expand Down Expand Up @@ -262,25 +378,48 @@ typedef enum {
TS_HTTP_LAST_HOOK _must_ be the last element. Only right place
to insert a new element is just before TS_HTTP_LAST_HOOK.

@note The TS_HTTP hooks below have to be in the same order as their
corresponding TS_EVENT counterparts. We use this in calculating the
corresponding event from a hook ID by summing
TS_EVENT_HTTP_READ_REQUEST_HDR with the hook ID (see the invoke call in
HttpSM::state_api_callout). For example, the following expression must
be true:

TS_EVENT_HTTP_TXN_CLOSE == TS_EVENT_HTTP_READ_REQUEST_HDR + TS_HTTP_TXN_CLOSE_HOOK

*/
typedef enum {
TS_HTTP_READ_REQUEST_HDR_HOOK,
TS_HTTP_OS_DNS_HOOK,
TS_HTTP_SEND_REQUEST_HDR_HOOK,
TS_HTTP_READ_CACHE_HDR_HOOK,
TS_HTTP_READ_RESPONSE_HDR_HOOK,
TS_HTTP_SEND_RESPONSE_HDR_HOOK,
TS_HTTP_REQUEST_TRANSFORM_HOOK,
TS_HTTP_RESPONSE_TRANSFORM_HOOK,
TS_HTTP_SELECT_ALT_HOOK,
TS_HTTP_TXN_START_HOOK,
TS_HTTP_TXN_CLOSE_HOOK,
TS_HTTP_SSN_START_HOOK,
TS_HTTP_SSN_CLOSE_HOOK,
TS_HTTP_CACHE_LOOKUP_COMPLETE_HOOK,
TS_HTTP_PRE_REMAP_HOOK,
TS_HTTP_POST_REMAP_HOOK,
TS_HTTP_RESPONSE_CLIENT_HOOK,
/*
The following macro helps maintain the relationship between the TS_HTTP
hooks and their TS_EVENT_HTTP counterparts as described in the above
doxygen comment.
*/
#define REBASE(COMMON) TS_HTTP_##COMMON##_HOOK = TS_EVENT_HTTP_##COMMON - TS_EVENT_HTTP_READ_REQUEST_HDR
REBASE(READ_REQUEST_HDR), // TS_HTTP_READ_REQUEST_HDR_HOOK
REBASE(OS_DNS), // TS_HTTP_OS_DNS_HOOK
REBASE(SEND_REQUEST_HDR), // TS_HTTP_SEND_REQUEST_HDR_HOOK
REBASE(READ_CACHE_HDR), // TS_HTTP_READ_CACHE_HDR_HOOK
REBASE(READ_RESPONSE_HDR), // TS_HTTP_READ_RESPONSE_HDR_HOOK
REBASE(SEND_RESPONSE_HDR), // TS_HTTP_SEND_RESPONSE_HDR_HOOK
REBASE(REQUEST_TRANSFORM), // TS_HTTP_REQUEST_TRANSFORM_HOOK
REBASE(RESPONSE_TRANSFORM), // TS_HTTP_RESPONSE_TRANSFORM_HOOK
REBASE(SELECT_ALT), // TS_HTTP_SELECT_ALT_HOOK
REBASE(TXN_START), // TS_HTTP_TXN_START_HOOK
REBASE(TXN_CLOSE), // TS_HTTP_TXN_CLOSE_HOOK
REBASE(SSN_START), // TS_HTTP_SSN_START_HOOK
REBASE(SSN_CLOSE), // TS_HTTP_SSN_CLOSE_HOOK
REBASE(CACHE_LOOKUP_COMPLETE), // TS_HTTP_CACHE_LOOKUP_COMPLETE_HOOK
REBASE(PRE_REMAP), // TS_HTTP_PRE_REMAP_HOOK
REBASE(POST_REMAP), // TS_HTTP_POST_REMAP_HOOK
REBASE(REQUEST_BUFFER_READ_COMPLETE), // TS_HTTP_REQUEST_BUFFER_READ_COMPLETE_HOOK
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't familiar with this hook, so I looked it up in the docs, and it isn't there. Would be a great thing to add to the docs. Perhaps in a separate PR.

REBASE(RESPONSE_CLIENT), // TS_HTTP_RESPONSE_CLIENT_HOOK
#undef REBASE

// NOTE:
// If adding any TS_HTTP hooks, be sure to understand the note above in the
// doxygen comment about the ordering of these enum values with respect to
// their corresponding TS_EVENT values.

// Putting the SSL hooks in the same enum space
// So both sets of hooks can be set by the same Hook function
TS_SSL_FIRST_HOOK,
Expand All @@ -298,7 +437,6 @@ typedef enum {
TS_VCONN_OUTBOUND_START_HOOK,
TS_VCONN_OUTBOUND_CLOSE_HOOK,
TS_SSL_LAST_HOOK = TS_VCONN_OUTBOUND_CLOSE_HOOK,
TS_HTTP_REQUEST_BUFFER_READ_COMPLETE_HOOK,
TS_HTTP_LAST_HOOK
} TSHttpHookID;

Expand Down Expand Up @@ -387,121 +525,6 @@ typedef enum {
TS_LIFECYCLE_LAST_HOOK
} TSLifecycleHookID;

/**
TSEvents are sent to continuations when they are called back.
The TSEvent provides the continuation's handler function with
information about the callback. Based on the event it receives,
the handler function can decide what to do.

*/
typedef enum {
TS_EVENT_NONE = 0,
TS_EVENT_IMMEDIATE = 1,
TS_EVENT_TIMEOUT = 2,
TS_EVENT_ERROR = 3,
TS_EVENT_CONTINUE = 4,

TS_EVENT_VCONN_READ_READY = 100,
TS_EVENT_VCONN_WRITE_READY = 101,
TS_EVENT_VCONN_READ_COMPLETE = 102,
TS_EVENT_VCONN_WRITE_COMPLETE = 103,
TS_EVENT_VCONN_EOS = 104,
TS_EVENT_VCONN_INACTIVITY_TIMEOUT = 105,
TS_EVENT_VCONN_ACTIVE_TIMEOUT = 106,
TS_EVENT_VCONN_START = 107,
TS_EVENT_VCONN_CLOSE = 108,
TS_EVENT_VCONN_OUTBOUND_START = 109,
TS_EVENT_VCONN_OUTBOUND_CLOSE = 110,
TS_EVENT_VCONN_PRE_ACCEPT = TS_EVENT_VCONN_START, // Deprecated but still compatible

TS_EVENT_NET_CONNECT = 200,
TS_EVENT_NET_CONNECT_FAILED = 201,
TS_EVENT_NET_ACCEPT = 202,
TS_EVENT_NET_ACCEPT_FAILED = 204,

TS_EVENT_INTERNAL_206 = 206,
TS_EVENT_INTERNAL_207 = 207,
TS_EVENT_INTERNAL_208 = 208,
TS_EVENT_INTERNAL_209 = 209,
TS_EVENT_INTERNAL_210 = 210,
TS_EVENT_INTERNAL_211 = 211,
TS_EVENT_INTERNAL_212 = 212,

TS_EVENT_HOST_LOOKUP = 500,

TS_EVENT_CACHE_OPEN_READ = 1102,
TS_EVENT_CACHE_OPEN_READ_FAILED = 1103,
TS_EVENT_CACHE_OPEN_WRITE = 1108,
TS_EVENT_CACHE_OPEN_WRITE_FAILED = 1109,
TS_EVENT_CACHE_REMOVE = 1112,
TS_EVENT_CACHE_REMOVE_FAILED = 1113,
TS_EVENT_CACHE_SCAN = 1120,
TS_EVENT_CACHE_SCAN_FAILED = 1121,
TS_EVENT_CACHE_SCAN_OBJECT = 1122,
TS_EVENT_CACHE_SCAN_OPERATION_BLOCKED = 1123,
TS_EVENT_CACHE_SCAN_OPERATION_FAILED = 1124,
TS_EVENT_CACHE_SCAN_DONE = 1125,
TS_EVENT_CACHE_LOOKUP = 1126,
TS_EVENT_CACHE_READ = 1127,
TS_EVENT_CACHE_DELETE = 1128,
TS_EVENT_CACHE_WRITE = 1129,
TS_EVENT_CACHE_WRITE_HEADER = 1130,
TS_EVENT_CACHE_CLOSE = 1131,
TS_EVENT_CACHE_LOOKUP_READY = 1132,
TS_EVENT_CACHE_LOOKUP_COMPLETE = 1133,
TS_EVENT_CACHE_READ_READY = 1134,
TS_EVENT_CACHE_READ_COMPLETE = 1135,

TS_EVENT_INTERNAL_1200 = 1200,

TS_EVENT_SSL_SESSION_GET = 2000,
TS_EVENT_SSL_SESSION_NEW = 2001,
TS_EVENT_SSL_SESSION_REMOVE = 2002,

TS_EVENT_AIO_DONE = 3900,

TS_EVENT_HTTP_CONTINUE = 60000,
TS_EVENT_HTTP_ERROR = 60001,
TS_EVENT_HTTP_READ_REQUEST_HDR = 60002,
TS_EVENT_HTTP_OS_DNS = 60003,
TS_EVENT_HTTP_SEND_REQUEST_HDR = 60004,
TS_EVENT_HTTP_READ_CACHE_HDR = 60005,
TS_EVENT_HTTP_READ_RESPONSE_HDR = 60006,
TS_EVENT_HTTP_SEND_RESPONSE_HDR = 60007,
TS_EVENT_HTTP_REQUEST_TRANSFORM = 60008,
TS_EVENT_HTTP_RESPONSE_TRANSFORM = 60009,
TS_EVENT_HTTP_SELECT_ALT = 60010,
TS_EVENT_HTTP_TXN_START = 60011,
TS_EVENT_HTTP_TXN_CLOSE = 60012,
TS_EVENT_HTTP_SSN_START = 60013,
TS_EVENT_HTTP_SSN_CLOSE = 60014,
TS_EVENT_HTTP_CACHE_LOOKUP_COMPLETE = 60015,
TS_EVENT_HTTP_PRE_REMAP = 60016,
TS_EVENT_HTTP_POST_REMAP = 60017,
TS_EVENT_HTTP_REQUEST_BUFFER_COMPLETE = 60018,

TS_EVENT_LIFECYCLE_PORTS_INITIALIZED = 60100,
TS_EVENT_LIFECYCLE_PORTS_READY = 60101,
TS_EVENT_LIFECYCLE_CACHE_READY = 60102,
TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED = 60103,
TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED = 60104,
TS_EVENT_LIFECYCLE_MSG = 60105,
TS_EVENT_LIFECYCLE_TASK_THREADS_READY = 60106,
TS_EVENT_LIFECYCLE_SHUTDOWN = 60107,

TS_EVENT_INTERNAL_60200 = 60200,
TS_EVENT_INTERNAL_60201 = 60201,
TS_EVENT_INTERNAL_60202 = 60202,
TS_EVENT_SSL_CERT = 60203,
TS_EVENT_SSL_SERVERNAME = 60204,
TS_EVENT_SSL_VERIFY_SERVER = 60205,
TS_EVENT_SSL_VERIFY_CLIENT = 60206,
TS_EVENT_SSL_CLIENT_HELLO = 60207,

TS_EVENT_MGMT_UPDATE = 60300
} TSEvent;
#define TS_EVENT_HTTP_READ_REQUEST_PRE_REMAP TS_EVENT_HTTP_PRE_REMAP /* backwards compat */

typedef enum {
TS_SRVSTATE_STATE_UNDEFINED = 0,
TS_SRVSTATE_ACTIVE_TIMEOUT,
Expand Down
1 change: 1 addition & 0 deletions include/tscore/ink_inet.h
Original file line number Diff line number Diff line change
Expand Up @@ -1179,6 +1179,7 @@ struct IpAddr {

/// Construct from @c sockaddr.
explicit IpAddr(sockaddr const *addr) { this->assign(addr); }
explicit IpAddr(sockaddr const &addr) { this->assign(&addr); }
/// Construct from @c sockaddr_in6.
explicit IpAddr(sockaddr_in6 const &addr) { this->assign(ats_ip_sa_cast(&addr)); }
/// Construct from @c sockaddr_in6.
Expand Down
41 changes: 16 additions & 25 deletions plugins/experimental/traffic_dump/json_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -132,31 +132,6 @@ esc_json_out(const char *buf, int64_t len, std::ostream &jsonfile)

return len;
}
/** Escape characters in a string as needed and return the resultant escaped string.
*
* @param[in] s The characters that need to be escaped.
*/
std::string
escape_json(std::string_view s)
{
std::ostringstream o;
esc_json_out(s.data(), s.length(), o);
return o.str();
}

/** An escape_json overload for a char buffer.
*
* @param[in] buf The char buffer pointer with characters that need to be escaped.
*
* @param[in] size The size of the buf char array.
*/
std::string
escape_json(char const *buf, int64_t size)
{
std::ostringstream o;
esc_json_out(buf, size, o);
return o.str();
}

} // anonymous namespace

Expand All @@ -180,4 +155,20 @@ json_entry_array(std::string_view name, std::string_view value)
return "[\"" + escape_json(name) + "\",\"" + escape_json(value) + "\"]";
}

std::string
escape_json(std::string_view s)
{
std::ostringstream o;
esc_json_out(s.data(), s.length(), o);
return o.str();
}

std::string
escape_json(char const *buf, int64_t size)
{
std::ostringstream o;
esc_json_out(buf, size, o);
return o.str();
}

} // namespace traffic_dump
Loading