---
 drivers/rilmodem/rilutil.c | 27 +++++++++++++++++++++++++++
 drivers/rilmodem/rilutil.h |  2 ++
 2 files changed, 29 insertions(+)

diff --git a/drivers/rilmodem/rilutil.c b/drivers/rilmodem/rilutil.c
index 44e5a9c..6cdce9a 100644
--- a/drivers/rilmodem/rilutil.c
+++ b/drivers/rilmodem/rilutil.c
@@ -28,6 +28,7 @@
 #include <gril.h>
 #include <string.h>
 #include <stdlib.h>
+#include <arpa/inet.h>
 
 #define OFONO_API_SUBJECT_TO_CHANGE
 #include <ofono/log.h>
@@ -132,3 +133,29 @@ int ril_util_registration_state_to_status(int reg_state)
 
        return reg_state;
 }
+
+int ril_util_address_to_gprs_proto(const char *addr)
+{
+       int ret = -1;
+       struct in_addr ipv4;
+       struct in6_addr ipv6;
+       char **addr_split = g_strsplit(addr, "/", 2);
+
+       if (addr_split == NULL || g_strv_length(addr_split) == 0)
+               goto done;
+
+       if (inet_pton(AF_INET, addr_split[0], &ipv4) > 0) {
+               ret = OFONO_GPRS_PROTO_IP;
+               goto done;
+       }
+
+       if (inet_pton(AF_INET6, addr_split[0], &ipv6) > 0) {
+               ret = OFONO_GPRS_PROTO_IPV6;
+               goto done;
+       }
+
+done:
+       g_strfreev(addr_split);
+
+       return ret;
+}
diff --git a/drivers/rilmodem/rilutil.h b/drivers/rilmodem/rilutil.h
index 0361801..1791cda 100644
--- a/drivers/rilmodem/rilutil.h
+++ b/drivers/rilmodem/rilutil.h
@@ -109,6 +109,8 @@ const char *ril_util_gprs_proto_to_ril_string(enum 
ofono_gprs_proto);
 
 int ril_util_registration_state_to_status(int reg_state);
 
+int ril_util_address_to_gprs_proto(const char *addr);
+
 #define DECLARE_FAILURE(e)                     \
        struct ofono_error e;                   \
        e.type = OFONO_ERROR_TYPE_FAILURE;      \
-- 
1.9.1

_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to