pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-hlr/+/39009?usp=email )

 (

1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted 
one.
 )Change subject: gsup_client: Add new APIs to avoid users accessing struct 
fields
......................................................................

gsup_client: Add new APIs to avoid users accessing struct fields

This is a first step towards changing gsup_client implementation to use
an osmo_stream_cli instead of libosmo-abis' ipa_client_conn.
The libosmo-abis' ipa_client_conn will eventually be deprecated together
with all IPA related code in libosmo-abis.

In order to be able to make the implementation change, we first need to
make sure no users are using the struct fields of gsup_client (this
patch); 2nd step will be making the struct private by moving it to a
private header; 3rd step will be changing the implementation to use
osmo_stream.

Related: OS#5896
Change-Id: I401af83232022f1c141eef1f428cbe206a8aaaa2
---
M TODO-RELEASE
M include/osmocom/gsupclient/gsup_client.h
M src/gsupclient/gsup_client.c
M src/gsupclient/gsup_client_mux.c
M src/remote_hlr.c
5 files changed, 59 insertions(+), 8 deletions(-)

Approvals:
  laforge: Looks good to me, but someone else must approve
  osmith: Looks good to me, approved
  fixeria: Looks good to me, but someone else must approve
  Jenkins Builder: Verified




diff --git a/TODO-RELEASE b/TODO-RELEASE
index 0ed7189..f14e8b5 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -7,3 +7,6 @@
 # If any interfaces have been added since the last public release: c:r:a + 1.
 # If any interfaces have been removed or changed since the last public 
release: c:r:0.
 #library       what                    description / commit summary line
+libosmo-gsup-client new API osmo_gsup_client_{get,set}_data(),
+                            osmo_gsup_client_get_rem_addr(), 
osmo_gsup_client_get_rem_port(),
+                            osmo_gsup_client_is_connected(), 
osmo_gsup_client_get_ipaccess_unit()
\ No newline at end of file
diff --git a/include/osmocom/gsupclient/gsup_client.h 
b/include/osmocom/gsupclient/gsup_client.h
index ea66ca1..61cd45d 100644
--- a/include/osmocom/gsupclient/gsup_client.h
+++ b/include/osmocom/gsupclient/gsup_client.h
@@ -20,6 +20,9 @@
  */
 #pragma once

+#include <stdint.h>
+#include <stdbool.h>
+
 #include <osmocom/core/timer.h>
 #include <osmocom/gsm/oap_client.h>
 #include <osmocom/gsm/ipa.h>
@@ -40,6 +43,7 @@

 typedef bool (*osmo_gsup_client_up_down_cb_t)(struct osmo_gsup_client *gsupc, 
bool up);

+/* NOTE: THIS STRUCT IS CONSIDERED PRIVATE, AVOID ACCESSING ITS FIELDS! */
 struct osmo_gsup_client {
        const char *unit_name; /* same as ipa_dev->unit_name, for backwards 
compat */

@@ -99,3 +103,12 @@
                              const struct osmo_gsup_message *gsup_msg);
 struct msgb *osmo_gsup_client_msgb_alloc(void);

+void *osmo_gsup_client_get_data(const struct osmo_gsup_client *gsupc);
+void osmo_gsup_client_set_data(struct osmo_gsup_client *gsupc, void *data);
+
+const char *osmo_gsup_client_get_rem_addr(const struct osmo_gsup_client 
*gsupc);
+uint16_t osmo_gsup_client_get_rem_port(const struct osmo_gsup_client *gsupc);
+
+bool osmo_gsup_client_is_connected(const struct osmo_gsup_client *gsupc);
+const struct ipaccess_unit *osmo_gsup_client_get_ipaccess_unit(const struct 
osmo_gsup_client *gsupc);
+
diff --git a/src/gsupclient/gsup_client.c b/src/gsupclient/gsup_client.c
index e7d03f2..1168c9d 100644
--- a/src/gsupclient/gsup_client.c
+++ b/src/gsupclient/gsup_client.c
@@ -450,3 +450,36 @@
 {
        return msgb_alloc_headroom(4000, 64, __func__);
 }
+
+void *osmo_gsup_client_get_data(const struct osmo_gsup_client *gsupc)
+{
+       return gsupc->data;
+}
+
+void osmo_gsup_client_set_data(struct osmo_gsup_client *gsupc, void *data)
+{
+       gsupc->data = data;
+}
+
+const char *osmo_gsup_client_get_rem_addr(const struct osmo_gsup_client *gsupc)
+{
+       if (!gsupc->link)
+               return NULL;
+       return gsupc->link->addr;
+}
+uint16_t osmo_gsup_client_get_rem_port(const struct osmo_gsup_client *gsupc)
+{
+       if (!gsupc->link)
+               return 0;
+       return gsupc->link->port;
+}
+
+bool osmo_gsup_client_is_connected(const struct osmo_gsup_client *gsupc)
+{
+       return gsupc->is_connected;
+}
+
+const struct ipaccess_unit *osmo_gsup_client_get_ipaccess_unit(const struct 
osmo_gsup_client *gsupc)
+{
+       return gsupc->ipa_dev;
+}
diff --git a/src/gsupclient/gsup_client_mux.c b/src/gsupclient/gsup_client_mux.c
index 7699ca1..45ebd75 100644
--- a/src/gsupclient/gsup_client_mux.c
+++ b/src/gsupclient/gsup_client_mux.c
@@ -58,7 +58,7 @@
 /* Non-static for unit tests */
 int gsup_client_mux_rx(struct osmo_gsup_client *gsup_client, struct msgb *msg)
 {
-       struct gsup_client_mux *gcm = gsup_client->data;
+       struct gsup_client_mux *gcm = osmo_gsup_client_get_data(gsup_client);
        struct osmo_gsup_message gsup;
        enum osmo_gsup_message_class message_class;
        int rc;
@@ -115,7 +115,7 @@
                                                    &gsup_client_mux_rx, NULL);
        if (!gcm->gsup_client)
                return -ENOMEM;
-       gcm->gsup_client->data = gcm;
+       osmo_gsup_client_set_data(gcm->gsup_client, gcm);
        return 0;
 }

@@ -144,14 +144,16 @@
                                   struct osmo_gsup_message *gsup_msg)
 {
        const char *local_msc_name;
+       const struct ipaccess_unit *ipa_dev;

        if (!gcm)
                return;
        if (!gcm->gsup_client)
                return;
-       if (!gcm->gsup_client->ipa_dev)
+       ipa_dev = osmo_gsup_client_get_ipaccess_unit(gcm->gsup_client);
+       if (!ipa_dev)
                return;
-       local_msc_name = gcm->gsup_client->ipa_dev->serno;
+       local_msc_name = ipa_dev->serno;
        if (!local_msc_name)
                return;
        gsup_msg->source_name = (const uint8_t *) local_msc_name;
diff --git a/src/remote_hlr.c b/src/remote_hlr.c
index 00bfbb1..93157a3 100644
--- a/src/remote_hlr.c
+++ b/src/remote_hlr.c
@@ -66,7 +66,7 @@
  * The local MSC shall be indicated by gsup.destination_name. */
 static int remote_hlr_rx(struct osmo_gsup_client *gsupc, struct msgb *msg)
 {
-       struct remote_hlr *rh = gsupc->data;
+       struct remote_hlr *rh = osmo_gsup_client_get_data(gsupc);
        struct proxy_subscr proxy_subscr;
        struct osmo_gsup_message gsup;
        int rc;
@@ -108,7 +108,7 @@

 static bool remote_hlr_up_down(struct osmo_gsup_client *gsupc, bool up)
 {
-       struct remote_hlr *remote_hlr = gsupc->data;
+       struct remote_hlr *remote_hlr = osmo_gsup_client_get_data(gsupc);
        struct remote_hlr_pending_up *p, *n;
        if (!up) {
                LOG_REMOTE_HLR(remote_hlr, LOGL_NOTICE, "link to remote HLR is 
down, removing GSUP client\n");
@@ -127,7 +127,7 @@

 bool remote_hlr_is_up(struct remote_hlr *remote_hlr)
 {
-       return remote_hlr && remote_hlr->gsupc && 
remote_hlr->gsupc->is_connected;
+       return remote_hlr && remote_hlr->gsupc && 
osmo_gsup_client_is_connected(remote_hlr->gsupc);
 }

 struct remote_hlr *remote_hlr_get_or_connect(const struct osmo_sockaddr_str 
*addr, bool connect,
@@ -180,7 +180,7 @@
                return NULL;
        }

-       rh->gsupc->data = rh;
+       osmo_gsup_client_set_data(rh->gsupc, rh);
        llist_add(&rh->entry, &remote_hlrs);

 add_result_cb:

--
To view, visit https://gerrit.osmocom.org/c/osmo-hlr/+/39009?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-Change-Id: I401af83232022f1c141eef1f428cbe206a8aaaa2
Gerrit-Change-Number: 39009
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: osmith <osm...@sysmocom.de>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>

Reply via email to