static void network_id_handler(GMarkupParseContext *context, struct gsm_data *gsm, const gchar **attribute_names, const gchar **attribute_values, GError **error) { const char *mcc = NULL, *mnc = NULL; int i; for (i = 0; attribute_names[i]; i++) { if (g_str_equal(attribute_names[i], "mcc") == TRUE) mcc = attribute_values[i]; if (g_str_equal(attribute_names[i], "mnc") == TRUE) mnc = attribute_values[i]; } if (mcc == NULL) { mbpi_g_set_error(context, error, G_MARKUP_ERROR, G_MARKUP_ERROR_MISSING_ATTRIBUTE, "Missing attribute: mcc"); return; } if (mnc == NULL) { mbpi_g_set_error(context, error, G_MARKUP_ERROR, G_MARKUP_ERROR_MISSING_ATTRIBUTE, "Missing attribute: mnc"); return; } if (g_str_equal(mcc, gsm->match_mcc) && g_str_equal(mnc, gsm->match_mnc)) gsm->match_found = TRUE; }
static void usage_start(GMarkupParseContext *context, const gchar **attribute_names, const gchar **attribute_values, enum ofono_gprs_context_type *type, GError **error) { const char *text = NULL; int i; for (i = 0; attribute_names[i]; i++) if (g_str_equal(attribute_names[i], "type") == TRUE) text = attribute_values[i]; if (text == NULL) { mbpi_g_set_error(context, error, G_MARKUP_ERROR, G_MARKUP_ERROR_MISSING_ATTRIBUTE, "Missing attribute: type"); return; } if (strcmp(text, "internet") == 0) *type = OFONO_GPRS_CONTEXT_TYPE_INTERNET; else if (strcmp(text, "mms") == 0) *type = OFONO_GPRS_CONTEXT_TYPE_MMS; else if (strcmp(text, "wap") == 0) *type = OFONO_GPRS_CONTEXT_TYPE_WAP; else mbpi_g_set_error(context, error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, "Unknown usage attribute: %s", text); }
static void authentication_start(GMarkupParseContext *context, const gchar **attribute_names, const gchar **attribute_values, enum ofono_gprs_auth_method *auth_method, GError **error) { const char *text = NULL; int i; for (i = 0; attribute_names[i]; i++) if (g_str_equal(attribute_names[i], "method") == TRUE) text = attribute_values[i]; if (text == NULL) { mbpi_g_set_error(context, error, G_MARKUP_ERROR, G_MARKUP_ERROR_MISSING_ATTRIBUTE, "Missing attribute: method"); return; } if (strcmp(text, "chap") == 0) *auth_method = OFONO_GPRS_AUTH_METHOD_CHAP; else if (strcmp(text, "pap") == 0) *auth_method = OFONO_GPRS_AUTH_METHOD_PAP; else mbpi_g_set_error(context, error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, "Unknown authentication method: %s", text); }
static void gsm_end(GMarkupParseContext *context, const gchar *element_name, gpointer userdata, GError **error) { struct gsm_data *gsm; struct ofono_gprs_provision_data *ap; if (!g_str_equal(element_name, "apn")) return; gsm = userdata; ap = g_markup_parse_context_pop(context); if (ap == NULL) return; if (gsm->allow_duplicates == FALSE) { GSList *l; for (l = gsm->apns; l; l = l->next) { struct ofono_gprs_provision_data *pd = l->data; if (pd->type != ap->type) continue; mbpi_g_set_error(context, error, mbpi_error_quark(), MBPI_ERROR_DUPLICATE, "Duplicate context detected"); mbpi_ap_free(ap); return; } } gsm->apns = g_slist_append(gsm->apns, ap); }
static void sid_handler(GMarkupParseContext *context, struct cdma_data *cdma, const gchar **attribute_names, const gchar **attribute_values, GError **error) { const char *sid = NULL; int i; for (i = 0; attribute_names[i]; i++) { if (g_str_equal(attribute_names[i], "value") == FALSE) continue; sid = attribute_values[i]; break; } if (sid == NULL) { mbpi_g_set_error(context, error, G_MARKUP_ERROR, G_MARKUP_ERROR_MISSING_ATTRIBUTE, "Missing attribute: sid"); return; } if (g_str_equal(sid, cdma->match_sid)) cdma->match_found = TRUE; }
static void apn_handler(GMarkupParseContext *context, struct gsm_data *gsm, const gchar **attribute_names, const gchar **attribute_values, GError **error) { struct ofono_gprs_provision_data *ap; const char *apn; int i; if (gsm->match_found == FALSE) { g_markup_parse_context_push(context, &skip_parser, NULL); return; } for (i = 0, apn = NULL; attribute_names[i]; i++) { if (g_str_equal(attribute_names[i], "value") == FALSE) continue; apn = attribute_values[i]; break; } if (apn == NULL) { mbpi_g_set_error(context, error, G_MARKUP_ERROR, G_MARKUP_ERROR_MISSING_ATTRIBUTE, "APN attribute missing"); return; } ap = g_new0(struct ofono_gprs_provision_data, 1); ap->apn = g_strdup(apn); ap->type = OFONO_GPRS_CONTEXT_TYPE_INTERNET; ap->proto = OFONO_GPRS_PROTO_IP; ap->auth_method = OFONO_GPRS_AUTH_METHOD_CHAP; g_markup_parse_context_push(context, &apn_parser, ap); }