Please remove the documentation for the 'cps' log field. Please document the 'piid' log field. I don't see how this is wired up to SPDY, could you spell that out for me?
On May 23, 2014, at 9:30 AM, a...@apache.org wrote: > Repository: trafficserver > Updated Branches: > refs/heads/master b6383928a -> aadb75226 > > > TS-2838 Add log fields for plugins on HttpSM and use for SPDY. > > > Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo > Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/aadb7522 > Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/aadb7522 > Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/aadb7522 > > Branch: refs/heads/master > Commit: aadb752267ba194a3a6f584c0874cda36e6ab859 > Parents: b638392 > Author: Alan M. Carroll <a...@network-geographics.com> > Authored: Fri May 23 09:30:03 2014 -0700 > Committer: Alan M. Carroll <a...@network-geographics.com> > Committed: Fri May 23 09:30:03 2014 -0700 > > ---------------------------------------------------------------------- > CHANGES | 2 ++ > proxy/FetchSM.cc | 17 ++++++------- > proxy/FetchSM.h | 4 ++- > proxy/InkAPI.cc | 9 ++++++- > proxy/Plugin.h | 29 ++++++++++++++++++++++ > proxy/PluginVC.cc | 12 ++++++++- > proxy/PluginVC.h | 23 ++++++++++++++++- > proxy/api/ts/ts.h | 14 +++++++---- > proxy/http/HttpClientSession.cc | 8 ++++++ > proxy/http/HttpProxyServerMain.cc | 9 +++---- > proxy/http/HttpSM.cc | 1 + > proxy/http/HttpSM.h | 5 ++++ > proxy/logging/Log.cc | 30 +++++++++-------------- > proxy/logging/LogAccess.cc | 45 ++++++---------------------------- > proxy/logging/LogAccess.h | 3 ++- > proxy/logging/LogAccessHttp.cc | 23 ++++++++++++----- > proxy/logging/LogAccessHttp.h | 3 ++- > proxy/spdy/SpdyClientSession.cc | 36 ++++++++++++++++++++++++--- > proxy/spdy/SpdyClientSession.h | 12 ++++++--- > proxy/spdy/SpdySessionAccept.cc | 15 +++--------- > proxy/spdy/SpdySessionAccept.h | 11 +++------ > 21 files changed, 198 insertions(+), 113 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/CHANGES > ---------------------------------------------------------------------- > diff --git a/CHANGES b/CHANGES > index 4f8d8af..fa34b15 100644 > --- a/CHANGES > +++ b/CHANGES > @@ -1,6 +1,8 @@ > -*- coding: utf-8 -*- > Changes with Apache Traffic Server 5.0.0 > > + *) [TS-2838] Add logging fields for plugins to TS connect API. Use for > SPDY. > + > *) [TS-2833] Remove REC_BUILD_STAND_ALONE, REC_BUILD_MGMT and > REC_BUILD_STUB. Dead code. > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/FetchSM.cc > ---------------------------------------------------------------------- > diff --git a/proxy/FetchSM.cc b/proxy/FetchSM.cc > index c119aca..a0a4033 100644 > --- a/proxy/FetchSM.cc > +++ b/proxy/FetchSM.cc > @@ -61,23 +61,22 @@ FetchSM::cleanUp() > client_response_hdr.destroy(); > ats_free(client_response); > cont_mutex.clear(); > - > - PluginVC *vc = (PluginVC *) http_vc; > - > - vc->do_io_close(); > + http_vc->do_io_close(); > FetchSMAllocator.free(this); > } > > void > FetchSM::httpConnect() > { > - Debug(DEBUG_TAG, "[%s] calling httpconnect write", __FUNCTION__); > - http_vc = TSHttpConnect(&_addr.sa); > + PluginIdentity* pi = dynamic_cast<PluginIdentity*>(contp); > + char const* tag = pi ? pi->getPluginTag() : "fetchSM"; > + int64_t id = pi ? pi->getPluginId() : 0; > > - PluginVC *vc = (PluginVC *) http_vc; > + Debug(DEBUG_TAG, "[%s] calling httpconnect write", __FUNCTION__); > + http_vc = reinterpret_cast<PluginVC*>(TSHttpConnectWithPluginId(&_addr.sa, > tag, id)); > > - read_vio = vc->do_io_read(this, INT64_MAX, resp_buffer); > - write_vio = vc->do_io_write(this, getReqLen() + req_content_length, > req_reader); > + read_vio = http_vc->do_io_read(this, INT64_MAX, resp_buffer); > + write_vio = http_vc->do_io_write(this, getReqLen() + req_content_length, > req_reader); > } > > char* FetchSM::resp_get(int *length) { > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/FetchSM.h > ---------------------------------------------------------------------- > diff --git a/proxy/FetchSM.h b/proxy/FetchSM.h > index 0de5d96..c1b94bf 100644 > --- a/proxy/FetchSM.h > +++ b/proxy/FetchSM.h > @@ -35,6 +35,8 @@ > #include "HttpSM.h" > #include "HttpTunnel.h" > > +class PluginVC; > + > class FetchSM: public Continuation > { > public: > @@ -139,7 +141,7 @@ private: > int dechunk_body(); > > int recursion; > - TSVConn http_vc; > + PluginVC* http_vc; > VIO *read_vio; > VIO *write_vio; > MIOBuffer *req_buffer; > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/InkAPI.cc > ---------------------------------------------------------------------- > diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc > index 0182ebe..dceea6e 100644 > --- a/proxy/InkAPI.cc > +++ b/proxy/InkAPI.cc > @@ -6047,7 +6047,7 @@ extern HttpSessionAccept *plugin_http_accept; > extern HttpSessionAccept *plugin_http_transparent_accept; > > TSVConn > -TSHttpConnect(sockaddr const* addr) > +TSHttpConnectWithPluginId(sockaddr const* addr, char const* tag, int64_t id) > { > sdk_assert(addr); > > @@ -6058,6 +6058,8 @@ TSHttpConnect(sockaddr const* addr) > PluginVCCore *new_pvc = PluginVCCore::alloc(); > > new_pvc->set_active_addr(addr); > + new_pvc->set_plugin_id(id); > + new_pvc->set_plugin_tag(tag); > new_pvc->set_accept_cont(plugin_http_accept); > > PluginVC *return_vc = new_pvc->connect(); > @@ -6076,6 +6078,11 @@ TSHttpConnect(sockaddr const* addr) > return NULL; > } > > +TSVConn > +TSHttpConnect(sockaddr const* addr) > +{ > + return TSHttpConnectWithPluginId(addr, "plugin", 0); > +} > > TSVConn > TSHttpConnectTransparent(sockaddr const* client_addr, sockaddr const* > server_addr) > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/Plugin.h > ---------------------------------------------------------------------- > diff --git a/proxy/Plugin.h b/proxy/Plugin.h > index 4c1ad09..8f70f1a 100644 > --- a/proxy/Plugin.h > +++ b/proxy/Plugin.h > @@ -58,4 +58,33 @@ extern PluginRegInfo *plugin_reg_current; > > void plugin_init(void); > > +/** Abstract interface class for plugin based continuations. > + > + The primary intended use of this is for logging so that continuations > + that generate logging messages can generate plugin local data in a > + generic way. > + > + The core will at appropriate times dynamically cast the continuation > + to this class and if successful access the plugin data via these > + methods. > + > + Plugins should mix this in to continuations for which it is useful. > + The default implementations return empty / invalid responses and should > + be overridden by the plugin. > + */ > +class PluginIdentity > +{ > + public: > + /** Get the plugin tag. > + The returned string must have a lifetime at least as long as the > plugin. > + @return A string identifying the plugin or @c NULL. > + */ > + virtual char const* getPluginTag() const { return NULL; } > + /** Get the plugin instance ID. > + A plugin can create multiple subsidiary instances. This is used as the > + identifier for those to distinguish the instances. > + */ > + virtual int64_t getPluginId() const { return 0; } > +}; > + > #endif /* __PLUGIN_H__ */ > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/PluginVC.cc > ---------------------------------------------------------------------- > diff --git a/proxy/PluginVC.cc b/proxy/PluginVC.cc > index 2e4cfa1..16eb5a2 100644 > --- a/proxy/PluginVC.cc > +++ b/proxy/PluginVC.cc > @@ -1051,7 +1051,6 @@ void > PluginVCCore::set_accept_cont(Continuation * c) > { > connect_to = c; > - > // FIX ME - must return action > } > > @@ -1202,6 +1201,17 @@ PluginVCCore::set_transparent(bool passive_side, bool > active_side) > active_vc.set_is_transparent(active_side); > } > > +void > +PluginVCCore::set_plugin_id(int64_t id) > +{ > + passive_vc.plugin_id = active_vc.plugin_id = id; > +} > + > +void > +PluginVCCore::set_plugin_tag(char const* tag) > +{ > + passive_vc.plugin_tag = active_vc.plugin_tag = tag; > +} > > /************************************************************* > * > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/PluginVC.h > ---------------------------------------------------------------------- > diff --git a/proxy/PluginVC.h b/proxy/PluginVC.h > index d770de5..6ee3a93 100644 > --- a/proxy/PluginVC.h > +++ b/proxy/PluginVC.h > @@ -36,6 +36,7 @@ > #ifndef _PLUGIN_VC_H_ > #define _PLUGIN_VC_H_ > > +#include "Plugin.h" > #include "P_Net.h" > #include "ink_atomic.h" > > @@ -75,7 +76,7 @@ enum > PLUGIN_VC_MAGIC_DEAD = 0xaabbdead > }; > > -class PluginVC:public NetVConnection > +class PluginVC:public NetVConnection, public PluginIdentity > { > friend class PluginVCCore; > public: > @@ -114,6 +115,18 @@ public: > > virtual PluginVC* get_other_side() { return other_side; } > > + //@{ @name Plugin identity. > + /// Override for @c PluginIdentity. > + virtual char const* getPluginTag() const { return plugin_tag; } > + /// Override for @c PluginIdentity. > + virtual int64_t getPluginId() const { return plugin_id; } > + > + /// Setter for plugin tag. > + virtual void setPluginTag(char const* tag) { plugin_tag = tag; } > + /// Setter for plugin id. > + virtual void setPluginId(int64_t id) { plugin_id = id; } > + //@} > + > int main_handler(int event, void *data); > > private: > @@ -152,6 +165,9 @@ private: > ink_hrtime inactive_timeout; > ink_hrtime inactive_timeout_at; > Event *inactive_event; > + > + char const* plugin_tag; > + int64_t plugin_id; > }; > > class PluginVCCore:public Continuation > @@ -198,6 +214,11 @@ public: > > void set_transparent(bool passive_side, bool active_side); > > + /// Set the plugin ID for the internal VCs. > + void set_plugin_id(int64_t id); > + /// Set the plugin tag for the internal VCs. > + void set_plugin_tag(char const* tag); > + > // The active vc is handed to the initiator of > // connection. The passive vc is handled to > // receiver of the connection > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/api/ts/ts.h > ---------------------------------------------------------------------- > diff --git a/proxy/api/ts/ts.h b/proxy/api/ts/ts.h > index 27d0546..917d6b2 100644 > --- a/proxy/api/ts/ts.h > +++ b/proxy/api/ts/ts.h > @@ -1588,12 +1588,16 @@ extern "C" > than TSNetConnect() to localhost since it avoids the overhead of > passing the data through the operating system. > > - @param log_ip ip address (in network byte order) that connection > - will be logged as coming from. > - @param log_port port (in network byte order) that connection will > - be logged as coming from. > - @param vc will be set to point to the new TSVConn on success. > + This returns a VConn that connected to the transaction. > + > + @param addr Target address of the origin server. > + @param tag A logging tag that can be accessed via the pitag field. May > be @c NULL. > + @param id A logging id that can be access via the piid field. > + */ > + tsapi TSVConn TSHttpConnectWithPluginId(struct sockaddr const* addr, char > const* tag, int64_t id); > > + /** Backwards compatible version. > + This provides a @a tag of "plugin" and an @a id of 0. > */ > tsapi TSVConn TSHttpConnect(struct sockaddr const* addr); > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/http/HttpClientSession.cc > ---------------------------------------------------------------------- > diff --git a/proxy/http/HttpClientSession.cc b/proxy/http/HttpClientSession.cc > index d2246c8..0620b3b 100644 > --- a/proxy/http/HttpClientSession.cc > +++ b/proxy/http/HttpClientSession.cc > @@ -36,6 +36,7 @@ > #include "HttpSM.h" > #include "HttpDebugNames.h" > #include "HttpServerSession.h" > +#include "Plugin.h" > > #define DebugSsn(tag, ...) DebugSpecific(debug_on, tag, __VA_ARGS__) > #define STATE_ENTER(state_name, event, vio) { \ > @@ -137,6 +138,7 @@ void > HttpClientSession::new_transaction() > { > ink_assert(current_reader == NULL); > + PluginIdentity* pi = dynamic_cast<PluginIdentity*>(client_vc); > > read_state = HCS_ACTIVE_READER; > current_reader = HttpSM::allocate(); > @@ -145,6 +147,12 @@ HttpClientSession::new_transaction() > DebugSsn("http_cs", "[%" PRId64 "] Starting transaction %d using sm [%" > PRId64 "]", con_id, transact_count, current_reader->sm_id); > > current_reader->attach_client_session(this, sm_reader); > + if (pi) { > + // it's a plugin VC of some sort with identify information. > + // copy it to the SM. > + current_reader->plugin_tag = pi->getPluginTag(); > + current_reader->plugin_id = pi->getPluginId(); > + } > } > > inline void > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/http/HttpProxyServerMain.cc > ---------------------------------------------------------------------- > diff --git a/proxy/http/HttpProxyServerMain.cc > b/proxy/http/HttpProxyServerMain.cc > index 2bf7d64..9eb9291 100644 > --- a/proxy/http/HttpProxyServerMain.cc > +++ b/proxy/http/HttpProxyServerMain.cc > @@ -180,8 +180,7 @@ MakeHttpProxyAcceptor(HttpProxyAcceptor& acceptor, > HttpProxyPort& port, unsigned > > #if TS_HAS_SPDY > if (port.m_session_protocol_preference.intersects(SPDY_PROTOCOL_SET)) { > - probe->registerEndpoint(ProtocolProbeSessionAccept::PROTO_SPDY, > - new > SpdySessionAccept(SpdySessionAccept::SPDY_VERSION_3_1)); > + probe->registerEndpoint(ProtocolProbeSessionAccept::PROTO_SPDY, new > SpdySessionAccept(spdy::SESSION_VERSION_3_1)); > } > #endif > > @@ -207,11 +206,11 @@ MakeHttpProxyAcceptor(HttpProxyAcceptor& acceptor, > HttpProxyPort& port, unsigned > // SPDY > #if TS_HAS_SPDY > if > (port.m_session_protocol_preference.contains(TS_NPN_PROTOCOL_INDEX_SPDY_3)) { > - ssl->registerEndpoint(TS_NPN_PROTOCOL_SPDY_3, new > SpdySessionAccept(SpdySessionAccept::SPDY_VERSION_3)); > + ssl->registerEndpoint(TS_NPN_PROTOCOL_SPDY_3, new > SpdySessionAccept(spdy::SESSION_VERSION_3)); > } > > if > (port.m_session_protocol_preference.contains(TS_NPN_PROTOCOL_INDEX_SPDY_3_1)) > { > - ssl->registerEndpoint(TS_NPN_PROTOCOL_SPDY_3_1, new > SpdySessionAccept(SpdySessionAccept::SPDY_VERSION_3_1)); > + ssl->registerEndpoint(TS_NPN_PROTOCOL_SPDY_3_1, new > SpdySessionAccept(spdy::SESSION_VERSION_3_1)); > } > #endif > > @@ -316,7 +315,7 @@ start_HttpProxyServerBackDoor(int port, int > accept_threads) > opt.localhost_only = true; > ha_opt.backdoor = true; > opt.backdoor = true; > - > + > // The backdoor only binds the loopback interface > netProcessor.main_accept(new HttpSessionAccept(ha_opt), NO_FD, opt); > } > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/http/HttpSM.cc > ---------------------------------------------------------------------- > diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc > index 2eabc1d..02afe4a 100644 > --- a/proxy/http/HttpSM.cc > +++ b/proxy/http/HttpSM.cc > @@ -325,6 +325,7 @@ HttpSM::HttpSM() > client_response_hdr_bytes(0), client_response_body_bytes(0), > cache_response_hdr_bytes(0), cache_response_body_bytes(0), > pushed_response_hdr_bytes(0), pushed_response_body_bytes(0), > + plugin_tag(0), plugin_id(0), > hooks_set(0), cur_hook_id(TS_HTTP_LAST_HOOK), cur_hook(NULL), > cur_hooks(0), callout_state(HTTP_API_NO_CALLOUT), terminate_sm(false), > kill_this_async_done(false) > { > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/http/HttpSM.h > ---------------------------------------------------------------------- > diff --git a/proxy/http/HttpSM.h b/proxy/http/HttpSM.h > index 2b5a6fd..13121ec 100644 > --- a/proxy/http/HttpSM.h > +++ b/proxy/http/HttpSM.h > @@ -488,6 +488,11 @@ public: > int pushed_response_hdr_bytes; > int64_t pushed_response_body_bytes; > TransactionMilestones milestones; > + // The next two enable plugins to tag the state machine for > + // the purposes of logging so the instances can be correlated > + // with the source plugin. > + char const* plugin_tag; > + int64_t plugin_id; > > // hooks_set records whether there are any hooks relevant > // to this transaction. Used to avoid costly calls > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/logging/Log.cc > ---------------------------------------------------------------------- > diff --git a/proxy/logging/Log.cc b/proxy/logging/Log.cc > index 16138b4..9ee618e 100644 > --- a/proxy/logging/Log.cc > +++ b/proxy/logging/Log.cc > @@ -365,27 +365,19 @@ Log::init_fields() > global_field_list.add (field, false); > ink_hash_table_insert (field_symbol_hash, "caun", field); > > -# if 0 > - Ptr<LogFieldAliasTable> proto_type_map = make_ptr(new LogFieldAliasTable); > - proto_type_map->init(7, > - // Transport protocols > - TS_PROTO_UDP, "UDP", > - TS_PROTO_TCP, "TCP", > - TS_PROTO_TLS, "TLS", > - // Application protocols > - TS_PROTO_HTTP, "HTTP", > - TS_PROTO_SPDY, "SPDY", > - TS_PROTO_RTMP, "RTMP", > - TS_PROTO_WS, "WS"); > - > - field = new LogField("client_protocol_stack", "cps", > + field = new LogField("plugin_identity_id", "piid", > LogField::sINT, > - &LogAccess::marshal_client_protocol_stack, > - &LogAccess::unmarshal_client_protocol_stack, > - (Ptr<LogFieldAliasMap>) proto_type_map); > + &LogAccess::marshal_plugin_identity_id, > + > reinterpret_cast<LogField::UnmarshalFunc>(&LogAccess::unmarshal_int_to_str)); > global_field_list.add(field, false); > - ink_hash_table_insert(field_symbol_hash, "cps", field); > -# endif > + ink_hash_table_insert(field_symbol_hash, "piid", field); > + > + field = new LogField("plugin_identity_tag", "pitag", > + LogField::STRING, > + &LogAccess::marshal_plugin_identity_tag, > + > reinterpret_cast<LogField::UnmarshalFunc>(&LogAccess::unmarshal_str)); > + global_field_list.add(field, false); > + ink_hash_table_insert(field_symbol_hash, "pitag", field); > > field = new LogField("client_req_timestamp_sec", "cqts", > LogField::sINT, > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/logging/LogAccess.cc > ---------------------------------------------------------------------- > diff --git a/proxy/logging/LogAccess.cc b/proxy/logging/LogAccess.cc > index 968762e..5009113 100644 > --- a/proxy/logging/LogAccess.cc > +++ b/proxy/logging/LogAccess.cc > @@ -75,12 +75,18 @@ LogAccess::init() > -------------------------------------------------------------------------*/ > > int > -LogAccess::marshal_client_protocol_stack(char *buf) > +LogAccess::marshal_plugin_identity_id(char *buf) > { > DEFAULT_INT_FIELD; > } > > int > +LogAccess::marshal_plugin_identity_tag(char *buf) > +{ > + DEFAULT_STR_FIELD; > +} > + > +int > LogAccess::marshal_client_host_ip(char *buf) > { > DEFAULT_IP_FIELD; > @@ -1311,43 +1317,6 @@ LogAccess::unmarshal_cache_write_code(char **buf, char > *dest, int len, Ptr<LogFi > return (LogAccess::unmarshal_with_map(unmarshal_int(buf), dest, len, map, > "UNKNOWN_CACHE_WRITE_CODE")); > } > > -# if 0 > -int > -LogAccess::unmarshal_client_protocol_stack(char **buf, char *dest, int len, > Ptr<LogFieldAliasMap> map) > -{ > - ink_assert(buf != NULL); > - ink_assert(*buf != NULL); > - ink_assert(dest != NULL); > - > - char *p; > - size_t nr_chars = 0; > - int i, ret, nr_bits, left_len; > - TSClientProtoStack proto_stack = (TSClientProtoStack)unmarshal_int(buf); > - > - p = dest; > - left_len = len; > - nr_bits = 8 * sizeof(TSClientProtoStack); > - > - for (i = 0; i < nr_bits && left_len; i++) { > - if ((proto_stack >> i) & 0x1) { > - if (p != dest) { > - *p++ = '+'; > - left_len--; > - } > - ret = map->asString(i, p, left_len, &nr_chars); > - if (ret == LogFieldAliasMap::ALL_OK) { > - p += nr_chars; > - left_len -= nr_chars; > - } else if (ret == LogFieldAliasMap::BUFFER_TOO_SMALL) { > - break; > - } > - } > - } > - > - return (len - left_len); > -} > -# endif > - > int > LogAccess::unmarshal_record(char **buf, char *dest, int len) > { > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/logging/LogAccess.h > ---------------------------------------------------------------------- > diff --git a/proxy/logging/LogAccess.h b/proxy/logging/LogAccess.h > index 940145d..8fb35b5 100644 > --- a/proxy/logging/LogAccess.h > +++ b/proxy/logging/LogAccess.h > @@ -172,7 +172,6 @@ public: > inkcoreapi virtual int marshal_client_auth_user_name(char *); // STR > int marshal_client_req_timestamp_sec(char *); // INT > > - inkcoreapi virtual int marshal_client_protocol_stack(char *); // INT > inkcoreapi virtual int marshal_client_req_text(char *); // STR > inkcoreapi virtual int marshal_client_req_http_method(char *); // STR > inkcoreapi virtual int marshal_client_req_url(char *); // STR > @@ -251,6 +250,8 @@ public: > inkcoreapi virtual int marshal_transfer_time_ms(char *); // INT > inkcoreapi virtual int marshal_transfer_time_s(char *); // INT > inkcoreapi virtual int marshal_file_size(char *); // INT > + inkcoreapi virtual int marshal_plugin_identity_id(char *); // INT > + inkcoreapi virtual int marshal_plugin_identity_tag(char *); // STR > int marshal_entry_type(char *); // INT > > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/logging/LogAccessHttp.cc > ---------------------------------------------------------------------- > diff --git a/proxy/logging/LogAccessHttp.cc b/proxy/logging/LogAccessHttp.cc > index a8dad70..b44e684 100644 > --- a/proxy/logging/LogAccessHttp.cc > +++ b/proxy/logging/LogAccessHttp.cc > @@ -206,16 +206,27 @@ LogAccessHttp::set_client_req_url_path(char *buf, int > len) > > /*------------------------------------------------------------------------- > -------------------------------------------------------------------------*/ > -# if 0 > int > -LogAccessHttp::marshal_client_protocol_stack(char *buf) > +LogAccessHttp::marshal_plugin_identity_id(char *buf) > { > - if (buf) { > - marshal_int(buf, m_http_sm->proto_stack); > - } > + if (buf) marshal_int(buf, m_http_sm->plugin_id); > return INK_MIN_ALIGN; > } > -# endif > + > +int > +LogAccessHttp::marshal_plugin_identity_tag(char *buf) > +{ > + int len = INK_MIN_ALIGN; > + char const* tag = m_http_sm->plugin_tag; > + > + if (!tag) tag = "*"; > + else len = LogAccess::strlen(tag); > + > + if (buf) marshal_str(buf, tag, len); > + > + return len; > +} > + > int > LogAccessHttp::marshal_client_host_ip(char *buf) > { > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/logging/LogAccessHttp.h > ---------------------------------------------------------------------- > diff --git a/proxy/logging/LogAccessHttp.h b/proxy/logging/LogAccessHttp.h > index 53a0ff5..51ee9e3 100644 > --- a/proxy/logging/LogAccessHttp.h > +++ b/proxy/logging/LogAccessHttp.h > @@ -58,7 +58,6 @@ public: > virtual int marshal_client_host_ip(char *); // STR > virtual int marshal_client_host_port(char *); // INT > virtual int marshal_client_auth_user_name(char *); // STR > - // virtual int marshal_client_protocol_stack(char *); // INT > virtual int marshal_client_req_text(char *); // STR > virtual int marshal_client_req_http_method(char *); // INT > virtual int marshal_client_req_url(char *); // STR > @@ -128,6 +127,8 @@ public: > virtual int marshal_transfer_time_ms(char *); // INT > virtual int marshal_transfer_time_s(char *); // INT > virtual int marshal_file_size(char *); // INT > + virtual int marshal_plugin_identity_id(char *); // INT > + virtual int marshal_plugin_identity_tag(char *); // STR > > // > // named fields from within a http header > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/spdy/SpdyClientSession.cc > ---------------------------------------------------------------------- > diff --git a/proxy/spdy/SpdyClientSession.cc b/proxy/spdy/SpdyClientSession.cc > index 2c77ff6..fcb79fb 100644 > --- a/proxy/spdy/SpdyClientSession.cc > +++ b/proxy/spdy/SpdyClientSession.cc > @@ -27,6 +27,22 @@ > static ClassAllocator<SpdyClientSession> > spdyClientSessionAllocator("spdyClientSessionAllocator"); > ClassAllocator<SpdyRequest> spdyRequestAllocator("spdyRequestAllocator"); > > +#if TS_HAS_SPDY > +#include "SpdyClientSession.h" > + > +static const spdylay_proto_version versmap[] = { > + SPDYLAY_PROTO_SPDY2, // SPDY_VERSION_2 > + SPDYLAY_PROTO_SPDY3, // SPDY_VERSION_3 > + SPDYLAY_PROTO_SPDY3_1, // SPDY_VERSION_3_1 > +}; > + > +static char const* const npnmap[] = { > + TS_NPN_PROTOCOL_SPDY_2, > + TS_NPN_PROTOCOL_SPDY_3, > + TS_NPN_PROTOCOL_SPDY_3_1 > +}; > + > +#endif > static int spdy_process_read(TSEvent event, SpdyClientSession *sm); > static int spdy_process_write(TSEvent event, SpdyClientSession *sm); > static int spdy_process_fetch(TSEvent event, SpdyClientSession *sm, void > *edata); > @@ -69,15 +85,16 @@ SpdyRequest::clear() > } > > void > -SpdyClientSession::init(NetVConnection * netvc, spdylay_proto_version vers) > +SpdyClientSession::init(NetVConnection * netvc, spdy::SessionVersion vers) > { > int r; > > this->mutex = new_ProxyMutex(); > this->vc = netvc; > this->req_map.clear(); > + this->version = vers; > > - r = spdylay_session_server_new(&session, vers, &SPDY_CFG.spdy.callbacks, > this); > + r = spdylay_session_server_new(&session, versmap[vers], > &SPDY_CFG.spdy.callbacks, this); > > // A bit ugly but we need a thread and I don't want to wait until the > // session start event in case of a time out generating a decrement > @@ -157,7 +174,7 @@ SpdyClientSession::clear() > } > > void > -spdy_sm_create(NetVConnection * netvc, spdylay_proto_version vers, MIOBuffer > * iobuf, IOBufferReader * reader) > +spdy_sm_create(NetVConnection * netvc, spdy::SessionVersion vers, MIOBuffer > * iobuf, IOBufferReader * reader) > { > SpdyClientSession *sm; > > @@ -242,6 +259,19 @@ out: > return EVENT_CONT; > } > > +int64_t > +SpdyClientSession::getPluginId() const > +{ > + return sm_id; > +} > + > +char const* > +SpdyClientSession::getPluginTag() const > +{ > + return npnmap[this->version]; > +} > + > + > static int > spdy_process_read(TSEvent /* event ATS_UNUSED */, SpdyClientSession *sm) > { > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/spdy/SpdyClientSession.h > ---------------------------------------------------------------------- > diff --git a/proxy/spdy/SpdyClientSession.h b/proxy/spdy/SpdyClientSession.h > index 2f37d35..738ff55 100644 > --- a/proxy/spdy/SpdyClientSession.h > +++ b/proxy/spdy/SpdyClientSession.h > @@ -24,9 +24,11 @@ > #ifndef __P_SPDY_SM_H__ > #define __P_SPDY_SM_H__ > > +#include "SpdyDefs.h" > #include "SpdyCommon.h" > #include "SpdyCallbacks.h" > #include <openssl/md5.h> > +#include "Plugin.h" > > class SpdyClientSession; > typedef int (*SpdyClientSessionHandler) (TSCont contp, TSEvent event, void > *data); > @@ -89,7 +91,7 @@ public: > MD5_CTX recv_md5; > }; > > -class SpdyClientSession : public Continuation > +class SpdyClientSession : public Continuation, public PluginIdentity > { > > public: > @@ -101,10 +103,11 @@ public: > clear(); > } > > - void init(NetVConnection * netvc, spdylay_proto_version vers); > + void init(NetVConnection * netvc, spdy::SessionVersion vers); > void clear(); > > int64_t sm_id; > + spdy::SessionVersion version; > uint64_t total_size; > TSHRTime start_time; > > @@ -124,12 +127,15 @@ public: > > map<int32_t, SpdyRequest*> req_map; > > + virtual char const* getPluginTag() const; > + virtual int64_t getPluginId() const; > + > private: > int state_session_start(int event, void * edata); > int state_session_readwrite(int event, void * edata); > }; > > -void spdy_sm_create(NetVConnection * netvc, spdylay_proto_version vers, > MIOBuffer * iobuf, IOBufferReader * reader); > +void spdy_sm_create(NetVConnection * netvc, spdy::SessionVersion vers, > MIOBuffer * iobuf, IOBufferReader * reader); > > extern ClassAllocator<SpdyRequest> spdyRequestAllocator; > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/spdy/SpdySessionAccept.cc > ---------------------------------------------------------------------- > diff --git a/proxy/spdy/SpdySessionAccept.cc b/proxy/spdy/SpdySessionAccept.cc > index e679adc..d7dfa11 100644 > --- a/proxy/spdy/SpdySessionAccept.cc > +++ b/proxy/spdy/SpdySessionAccept.cc > @@ -26,20 +26,13 @@ > > #if TS_HAS_SPDY > #include "SpdyClientSession.h" > - > -static const spdylay_proto_version versmap[] = { > - SPDYLAY_PROTO_SPDY2, // SPDY_VERSION_2 > - SPDYLAY_PROTO_SPDY3, // SPDY_VERSION_3 > - SPDYLAY_PROTO_SPDY3_1, // SPDY_VERSION_3_1 > -}; > - > #endif > > -SpdySessionAccept::SpdySessionAccept(unsigned vers) > +SpdySessionAccept::SpdySessionAccept(spdy::SessionVersion vers) > : SessionAccept(new_ProxyMutex()), version(vers) > { > #if TS_HAS_SPDY > - ink_release_assert(vers < countof(versmap)); > + ink_release_assert(spdy::SESSION_VERSION_2 <= vers && vers <= > spdy::SESSION_VERSION_3_1); > #endif > SET_HANDLER(&SpdySessionAccept::mainEvent); > } > @@ -51,7 +44,7 @@ SpdySessionAccept::mainEvent(int event, void * edata) > NetVConnection * netvc =static_cast<NetVConnection *>(edata); > > #if TS_HAS_SPDY > - spdy_sm_create(netvc, versmap[this->version], NULL, NULL); > + spdy_sm_create(netvc, this->version, NULL, NULL); > #else > Error("accepted a SPDY session, but SPDY support is not available"); > netvc->do_io_close(); > @@ -68,7 +61,7 @@ void > SpdySessionAccept::accept(NetVConnection * netvc, MIOBuffer * iobuf, > IOBufferReader * reader) > { > #if TS_HAS_SPDY > - spdy_sm_create(netvc, versmap[this->version], iobuf, reader); > + spdy_sm_create(netvc, this->version, iobuf, reader); > #else > (void)netvc; > (void)iobuf; > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aadb7522/proxy/spdy/SpdySessionAccept.h > ---------------------------------------------------------------------- > diff --git a/proxy/spdy/SpdySessionAccept.h b/proxy/spdy/SpdySessionAccept.h > index 9d740e2..af3d81d 100644 > --- a/proxy/spdy/SpdySessionAccept.h > +++ b/proxy/spdy/SpdySessionAccept.h > @@ -28,18 +28,13 @@ > #include "P_EventSystem.h" > #include "P_UnixNet.h" > #include "I_IOBuffer.h" > +#include "SpdyDefs.h" > > class SpdySessionAccept: public SessionAccept > { > public: > > - enum { > - SPDY_VERSION_2 = 0, > - SPDY_VERSION_3, > - SPDY_VERSION_3_1, > - }; > - > - explicit SpdySessionAccept(unsigned vers); > + explicit SpdySessionAccept(spdy::SessionVersion vers); > ~SpdySessionAccept() {} > > void accept(NetVConnection *, MIOBuffer *, IOBufferReader *); > @@ -49,7 +44,7 @@ private: > SpdySessionAccept(const SpdySessionAccept &); // disabled > SpdySessionAccept& operator =(const SpdySessionAccept&); // disabled > > - unsigned version; > + spdy::SessionVersion version; > }; > > #endif /* SpdySessionAccept_H_ */ >