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