This is an automated email from the ASF dual-hosted git repository.

gmurthy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git


The following commit(s) were added to refs/heads/main by this push:
     new 31a1820  DISPATCH-2212: Set the subject field in the AMQP message with 
 method (on request) and status (on response). This closes #1318.
31a1820 is described below

commit 31a1820407fb46839fe30d51a6446b8b68fe9ea8
Author: Ganesh Murthy <gmur...@apache.org>
AuthorDate: Fri Jul 23 14:00:04 2021 -0400

    DISPATCH-2212: Set the subject field in the AMQP message with  method (on 
request) and status (on response). This closes #1318.
---
 src/adaptors/http2/http2_adaptor.c | 45 ++++++++++++++++++++++----------------
 src/adaptors/http2/http2_adaptor.h |  4 ++--
 2 files changed, 28 insertions(+), 21 deletions(-)

diff --git a/src/adaptors/http2/http2_adaptor.c 
b/src/adaptors/http2/http2_adaptor.c
index b28d477..c0edbe2 100644
--- a/src/adaptors/http2/http2_adaptor.c
+++ b/src/adaptors/http2/http2_adaptor.c
@@ -349,8 +349,9 @@ static void free_http2_stream_data(qdr_http2_stream_data_t 
*stream_data, bool on
         DEQ_REMOVE(session_data->streams, stream_data);
         nghttp2_session_set_stream_user_data(session_data->session, 
stream_data->stream_id, NULL);
     }
-    if (stream_data->method)      free(stream_data->method);
-    if (stream_data->remote_site) free(stream_data->remote_site);
+    free(stream_data->method);
+    free(stream_data->remote_site);
+    free(stream_data->request_status);
 
     qd_log(http2_adaptor->log_source, QD_LOG_TRACE, "[C%"PRIu64"][S%"PRId32"] 
Freeing stream_data in free_http2_stream_data (%lx)", conn->conn_id,  
stream_data->stream_id, (long) stream_data);
 
@@ -752,7 +753,7 @@ static int on_header_callback(nghttp2_session *session,
                     stream_data->method = qd_strdup((const char *)value);
                 }
                 if (strcmp(STATUS, (const char *)name) == 0) {
-                    stream_data->request_status = atoi((const char *)value);
+                    stream_data->request_status = qd_strdup((const char 
*)value);
                 }
                 qd_compose_insert_string_n(stream_data->app_properties, (const 
char *)name, namelen);
                 qd_compose_insert_string_n(stream_data->app_properties, (const 
char *)value, valuelen);
@@ -773,23 +774,23 @@ static bool compose_and_deliver(qdr_http2_connection_t 
*conn, qdr_http2_stream_d
         qd_composed_field_t  *header_and_props = 0;
         if (conn->ingress) {
             header_and_props = qd_message_compose_amqp(stream_data->message,
-                                                  conn->config->address,  // 
const char *to
-                                                  0,                      // 
const char *subject
-                                                  stream_data->reply_to,  // 
const char *reply_to
-                                                  0,                      // 
const char *content_type
-                                                  0,                      // 
const char *content_encoding
-                                                  0,                      // 
int32_t  correlation_id
-                                                  conn->config->site);
+                                                       conn->config->address,  
// const char *to
+                                                       stream_data->method,    
// const char *subject
+                                                       stream_data->reply_to,  
// const char *reply_to
+                                                       0,                      
// const char *content_type
+                                                       0,                      
// const char *content_encoding
+                                                       0,                      
// int32_t  correlation_id
+                                                       conn->config->site);
         }
         else {
             header_and_props = qd_message_compose_amqp(stream_data->message,
-                                                  stream_data->reply_to,  // 
const char *to
-                                                  0,                      // 
const char *subject
-                                                  0,                      // 
const char *reply_to
-                                                  0,                      // 
const char *content_type
-                                                  0,                      // 
const char *content_encoding
-                                                  0,                      // 
int32_t  correlation_id
-                                                  conn->config->site);
+                                                       stream_data->reply_to,  
      // const char *to
+                                                       
stream_data->request_status,  // const char *subject
+                                                       0,                      
      // const char *reply_to
+                                                       0,                      
      // const char *content_type
+                                                       0,                      
      // const char *content_encoding
+                                                       0,                      
      // int32_t  correlation_id
+                                                       conn->config->site);
         }
 
         if (receive_complete) {
@@ -930,7 +931,7 @@ static void _http_record_request(qdr_http2_connection_t 
*conn, qdr_http2_stream_
     }
     qd_http_record_request(http2_adaptor->core,
                            stream_data->method,
-                           stream_data->request_status,
+                           
stream_data->request_status?atoi(stream_data->request_status):0,
                            conn->config?conn->config->address:0,
                            remote_addr, conn->config?conn->config->site:0,
                            stream_data->remote_site,
@@ -1693,6 +1694,12 @@ uint64_t handle_outgoing_http(qdr_http2_stream_data_t 
*stream_data)
             stream_data->remote_site = (char*) qd_iterator_copy(group_id_itr);
             qd_iterator_free(group_id_itr);
 
+#ifndef NDEBUG
+            qd_iterator_t *subject_itr = qd_message_field_iterator(message, 
QD_FIELD_SUBJECT);
+            // Make sure there is a non-zero subject field iterator
+            assert(subject_itr != 0);
+            qd_iterator_free(subject_itr);
+#endif
             qd_iterator_t *app_properties_iter = 
qd_message_field_iterator(message, QD_FIELD_APPLICATION_PROPERTIES);
             qd_parsed_field_t *app_properties_fld = 
qd_parse(app_properties_iter);
 
@@ -1716,7 +1723,7 @@ uint64_t handle_outgoing_http(qdr_http2_stream_data_t 
*stream_data)
                     stream_data->method = qd_strdup((const char 
*)hdrs[idx].value);
                 }
                 if (strcmp(STATUS, (const char *)hdrs[idx].name) == 0) {
-                    stream_data->request_status = atoi((const char 
*)hdrs[idx].value);
+                    stream_data->request_status = qd_strdup((const char 
*)hdrs[idx].value);
                 }
             }
 
diff --git a/src/adaptors/http2/http2_adaptor.h 
b/src/adaptors/http2/http2_adaptor.h
index bbef44b..7aafc2f 100644
--- a/src/adaptors/http2/http2_adaptor.h
+++ b/src/adaptors/http2/http2_adaptor.h
@@ -71,7 +71,8 @@ struct qdr_http2_stream_data_t {
     void                     *context;
     char                     *reply_to;
     char                     *remote_site; //for stats:
-    char                     *method; //for stats:
+    char                     *method; //for stats, also used in the subject 
field of AMQP request message.
+    char                     *request_status; //for stats, also used in the 
subject field of AMQP response message.
     qdr_delivery_t           *in_dlv;
     qdr_delivery_t           *out_dlv;
     uint64_t                  incoming_id;
@@ -114,7 +115,6 @@ struct qdr_http2_stream_data_t {
     bool                     in_dlv_decrefed;
     bool                     out_dlv_decrefed;
     bool                     body_data_added;
-    int                      request_status;
     int                      bytes_in;
     int                      bytes_out;
     qd_timestamp_t           start;

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to