Github user bgaff commented on a diff in the pull request:
https://github.com/apache/trafficserver/pull/106#discussion_r17011520
--- Diff: proxy/http/HttpSM.cc ---
@@ -371,6 +392,107 @@ HttpSM::destroy()
httpSMAllocator.free(this);
}
+#ifdef TS_HAS_UUID
+void
+HttpSM::init_uuid_config()
+{
+ // Lazy init: Trying to register and read the config on the constructor
won't work,
+ // so we've postponed it until now, when the instance is to be used for
the first time.
+ // As use_uuid is static, this will happen only once (this variable has
been set on the
+ // preamble of this file.) Also, if we're using OSSP and a generator
could not be
+ // initialized on the constructor, then this block won't be used.
+ RecRegisterConfigInt(RECT_CONFIG, "proxy.config.http.use_uuid",
0, RECU_DYNAMIC, RECC_NULL, NULL);
+ RecRegisterConfigInt(RECT_CONFIG,
"proxy.config.http.add_uuid_to_request", 0, RECU_DYNAMIC,
RECC_NULL, NULL);
+ RecRegisterConfigInt(RECT_CONFIG,
"proxy.config.http.add_uuid_to_response", 0, RECU_DYNAMIC,
RECC_NULL, NULL);
+ RecRegisterConfigString(RECT_CONFIG,
"proxy.config.http.uuid_header_name", "x-ats-uuid", RECU_DYNAMIC,
RECC_NULL, NULL);
+
+ if ( RecGetRecordInt("proxy.config.http.use_uuid", &use_uuid, false) !=
REC_ERR_OKAY ) {
+ DebugSM("http", "Could not read config [proxy.config.http.use_uuid].");
+ } else {
+ DebugSM("http", "Read [proxy.config.http.use_uuid] == [%d].", (int)
use_uuid);
+
+ RecGetRecordInt("proxy.config.http.add_uuid_to_request",
&add_to_request, false);
+ DebugSM("http", "Read [proxy.config.http.add_uuid_to_request] ==
[%d].", (int) add_to_request);
+
+ RecGetRecordInt("proxy.config.http.add_uuid_to_response",
&add_to_response, false);
+ DebugSM("http", "Read [proxy.config.http.add_uuid_to_response] ==
[%d].", (int) add_to_response);
+
+ char tmp_header_name[128];
+
+ RecGetRecordString("proxy.config.http.uuid_header_name",
tmp_header_name, sizeof(tmp_header_name), false);
+ DebugSM("http", "Read [proxy.config.http.uuid_header_name] == [%s].",
tmp_header_name);
+
+ header_name = std::string(tmp_header_name);
+ }
+}
+
+void
+HttpSM::generate_uuid()
+{
+#ifdef HAS_BOOST_UUID
+ uuid uuid = gen();
+ unsigned char *puuid = (unsigned char *) &uuid;
+ char *ptr;
+ int i;
+ char str_uuid[37];
+
+ for (ptr=str_uuid, i=0; i < 16; ++i) {
+ sprintf(ptr, "%02x", *(puuid + i));
+ ptr += 2;
+
+ if ( i == 3 || i == 5 || i == 7 || i == 9 )
+ *ptr++ = '-';
+
+ if ( i == 15 )
+ *ptr = '\0';
+ }
+
+ id((char *) str_uuid);
+
+#else // HAS_OSSP_UUID
+ char *vp = NULL;
+ size_t n;
+
+ if ( _uuid != NULL ) {
+ if ( uuid_make(_uuid, UUID_MAKE_V4) == UUID_RC_OK ) {
+ uuid_export(_uuid, UUID_FMT_STR, &vp, &n);
+ id = std::string(vp);
+ free(vp);
+ } else {
+ DebugSM("http", "Could not generate UUID.");
+ }
+ }
+#endif
+
+ if ( id.size() > 0 )
+ DebugSM("http", UUID_FMT "UUID generated.", UUID_VAL);
+}
+
+bool
+HttpSM::should_add_uuid_to_request(void) const
+{
+ return ( HttpSM::add_to_request == 1 );
+}
+
+bool
+HttpSM::should_add_uuid_to_response(void) const
+{
+ return ( HttpSM::add_to_response == 1 );
+}
+
+void
+HttpSM::add_uuid_header(HTTPHdr *hdr) const
+{
+ const char *hdr_name = header_name.c_str();
--- End diff --
Are std::strings really necessary here?
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---