modem-helpers: new CPMS format result parser
This commit is contained in:
@@ -294,6 +294,98 @@ mm_3gpp_parse_scan_response (const gchar *reply,
|
|||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
|
static MMSmsStorage
|
||||||
|
storage_from_str (const gchar *str)
|
||||||
|
{
|
||||||
|
if (g_str_equal (str, "SM"))
|
||||||
|
return MM_SMS_STORAGE_SM;
|
||||||
|
if (g_str_equal (str, "ME"))
|
||||||
|
return MM_SMS_STORAGE_ME;
|
||||||
|
if (g_str_equal (str, "MT"))
|
||||||
|
return MM_SMS_STORAGE_MT;
|
||||||
|
if (g_str_equal (str, "SR"))
|
||||||
|
return MM_SMS_STORAGE_SR;
|
||||||
|
if (g_str_equal (str, "BM"))
|
||||||
|
return MM_SMS_STORAGE_BM;
|
||||||
|
if (g_str_equal (str, "TA"))
|
||||||
|
return MM_SMS_STORAGE_TA;
|
||||||
|
return MM_SMS_STORAGE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
mm_3gpp_parse_cpms_format_response (const gchar *reply,
|
||||||
|
GArray **mem1,
|
||||||
|
GArray **mem2,
|
||||||
|
GArray **mem3)
|
||||||
|
{
|
||||||
|
GRegex *r;
|
||||||
|
gchar **split;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
g_assert (mem1 != NULL);
|
||||||
|
g_assert (mem2 != NULL);
|
||||||
|
g_assert (mem3 != NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* +CPMS: ("SM","ME"),("SM","ME"),("SM","ME")
|
||||||
|
*/
|
||||||
|
split = g_strsplit_set (mm_strip_tag (reply, "+CPMS:"), "()", -1);
|
||||||
|
if (!split)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
r = g_regex_new ("\\s*\"([^,\\)]+)\"\\s*", 0, 0, NULL);
|
||||||
|
g_assert (r);
|
||||||
|
|
||||||
|
for (i = 0; split[i]; i++) {
|
||||||
|
GMatchInfo *match_info;
|
||||||
|
|
||||||
|
/* Got a range group to match */
|
||||||
|
if (g_regex_match_full (r, split[i], strlen (split[i]), 0, 0, &match_info, NULL)) {
|
||||||
|
GArray *array = NULL;
|
||||||
|
|
||||||
|
while (g_match_info_matches (match_info)) {
|
||||||
|
gchar *str;
|
||||||
|
|
||||||
|
str = g_match_info_fetch (match_info, 1);
|
||||||
|
if (str) {
|
||||||
|
MMSmsStorage storage;
|
||||||
|
|
||||||
|
if (!array)
|
||||||
|
array = g_array_new (FALSE, FALSE, sizeof (MMSmsStorage));
|
||||||
|
|
||||||
|
storage = storage_from_str (str);
|
||||||
|
g_array_append_val (array, storage);
|
||||||
|
g_free (str);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_match_info_next (match_info, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!*mem1)
|
||||||
|
*mem1 = array;
|
||||||
|
else if (!*mem2)
|
||||||
|
*mem2 = array;
|
||||||
|
else if (!*mem3)
|
||||||
|
*mem3 = array;
|
||||||
|
}
|
||||||
|
g_match_info_free (match_info);
|
||||||
|
|
||||||
|
if (*mem3 != NULL)
|
||||||
|
break; /* once we got the last group, exit... */
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev (split);
|
||||||
|
g_regex_unref (r);
|
||||||
|
|
||||||
|
g_warn_if_fail (*mem1 != NULL);
|
||||||
|
g_warn_if_fail (*mem2 != NULL);
|
||||||
|
g_warn_if_fail (*mem3 != NULL);
|
||||||
|
|
||||||
|
return (*mem1 && *mem2 && *mem3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
#define CMGF_TAG "+CMGF:"
|
#define CMGF_TAG "+CMGF:"
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
@@ -69,6 +69,11 @@ gboolean mm_3gpp_parse_cmgf_format_response (const gchar *reply,
|
|||||||
gboolean *sms_text_supported,
|
gboolean *sms_text_supported,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
gboolean mm_3gpp_parse_cpms_format_response (const gchar *reply,
|
||||||
|
GArray **mem1,
|
||||||
|
GArray **mem2,
|
||||||
|
GArray **mem3);
|
||||||
|
|
||||||
GRegex *mm_3gpp_ciev_regex_get (void);
|
GRegex *mm_3gpp_ciev_regex_get (void);
|
||||||
|
|
||||||
GRegex *mm_3gpp_cusd_regex_get (void);
|
GRegex *mm_3gpp_cusd_regex_get (void);
|
||||||
|
Reference in New Issue
Block a user