Change in osmo-mgw[master]: mgcp_protocol: refactor request handler array

dexter gerrit-no-reply at lists.osmocom.org
Wed Jul 14 15:49:26 UTC 2021


dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-mgw/+/24940 )


Change subject: mgcp_protocol: refactor request handler array
......................................................................

mgcp_protocol: refactor request handler array

the various types of MGCP requests are implemented in request handlers
functions. The function pointers to those functions are held in an array
that is used to find the right handler and call it then. The struct used
to model the array is defined somewhat away from the array definition
and there is also a macro in between that does not help to make the code
more understandable. Lets refactor this a bit to have it more distinct.

Change-Id: I2ef167b2ac179d2b0683a27a095f9662fda460bf
Related: SYS#5535
---
M src/libosmo-mgcp/mgcp_protocol.c
1 file changed, 34 insertions(+), 23 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/40/24940/1

diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index 895dd9e..dbbf308 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -46,22 +46,47 @@
 #include <osmocom/mgcp/mgcp_codec.h>
 #include <osmocom/mgcp/mgcp_conn.h>
 
+/* Request handler specification, here we specify an array with function
+ * pointers to the various MGCP requests implemented below */
 struct mgcp_request {
+	/* request name (e.g. "MDCX") */
 	char *name;
+
+	/* function pointer to the request handler */
 	struct msgb *(*handle_request) (struct mgcp_parse_data * data);
+
+	/* a humen readable name that describes the request */
 	char *debug_name;
 };
 
-#define MGCP_REQUEST(NAME, REQ, DEBUG_NAME) \
-	{ .name = NAME, .handle_request = REQ, .debug_name = DEBUG_NAME },
+static struct msgb *handle_audit_endpoint(struct mgcp_request_data *data);
+static struct msgb *handle_create_con(struct mgcp_request_data *data);
+static struct msgb *handle_delete_con(struct mgcp_request_data *data);
+static struct msgb *handle_modify_con(struct mgcp_request_data *data);
+static struct msgb *handle_rsip(struct mgcp_request_data *data);
+static struct msgb *handle_noti_req(struct mgcp_request_data *data);
+static const struct mgcp_request mgcp_requests[] = {
+	{ .name = "AUEP",
+	  .handle_request = handle_audit_endpoint,
+	  .debug_name = "AuditEndpoint" },
+	{ .name = "CRCX",
+	  .handle_request = handle_create_con,
+	  .debug_name = "CreateConnection" },
+	{ .name = "DLCX",
+	  .handle_request = handle_delete_con,
+	  .debug_name = "DeleteConnection" },
+	{ .name = "MDCX",
+	  .handle_request = handle_modify_con,
+	  .debug_name = "ModifiyConnection" },
+	{ .name = "RQNT",
+	  .handle_request = handle_noti_req,
+	  .debug_name = "NotificationRequest" },
 
-
-static struct msgb *handle_audit_endpoint(struct mgcp_parse_data *data);
-static struct msgb *handle_create_con(struct mgcp_parse_data *data);
-static struct msgb *handle_delete_con(struct mgcp_parse_data *data);
-static struct msgb *handle_modify_con(struct mgcp_parse_data *data);
-static struct msgb *handle_rsip(struct mgcp_parse_data *data);
-static struct msgb *handle_noti_req(struct mgcp_parse_data *data);
+	/* SPEC extension */
+	{ .name = "RSIP",
+	  .handle_request = handle_rsip,
+	  .debug_name = "ReSetInProgress" },
+};
 
 /* Initalize transcoder */
 static int setup_rtp_processing(struct mgcp_endpoint *endp,
@@ -95,20 +120,6 @@
 	return cfg->setup_rtp_processing_cb(endp, conn_dst, conn_src);
 }
 
-/* array of function pointers for handling various
- * messages. In the future this might be binary sorted
- * for performance reasons. */
-static const struct mgcp_request mgcp_requests[] = {
-	MGCP_REQUEST("AUEP", handle_audit_endpoint, "AuditEndpoint")
-	MGCP_REQUEST("CRCX", handle_create_con, "CreateConnection")
-	MGCP_REQUEST("DLCX", handle_delete_con, "DeleteConnection")
-	MGCP_REQUEST("MDCX", handle_modify_con, "ModifiyConnection")
-	MGCP_REQUEST("RQNT", handle_noti_req, "NotificationRequest")
-
-	/* SPEC extension */
-	MGCP_REQUEST("RSIP", handle_rsip, "ReSetInProgress")
-};
-
 /* Helper function to allocate some memory for responses and retransmissions */
 static struct msgb *mgcp_msgb_alloc(void)
 {

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-mgw/+/24940
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Change-Id: I2ef167b2ac179d2b0683a27a095f9662fda460bf
Gerrit-Change-Number: 24940
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210714/cf7408b2/attachment-0001.htm>


More information about the gerrit-log mailing list