static void set_gprs_context_interface(struct ofono_gprs_context *gc) { struct ofono_modem *modem; const char *interface; /* read interface name read at detection time */ modem = ofono_gprs_context_get_modem(gc); interface = ofono_modem_get_string(modem, "NetworkInterface"); ofono_gprs_context_set_interface(gc, interface); }
static void mbm_get_ip_details(struct ofono_gprs_context *gc) { struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc); struct ofono_modem *modem; const char *interface; if (gcd->have_e2ipcfg) { g_at_chat_send(gcd->chat, "AT*E2IPCFG?", e2ipcfg_prefix, mbm_e2ipcfg_cb, gc, NULL); return; } modem = ofono_gprs_context_get_modem(gc); interface = ofono_modem_get_string(modem, "NetworkInterface"); CALLBACK_WITH_SUCCESS(gcd->up_cb, interface, FALSE, NULL, NULL, NULL, NULL, gcd->cb_data); gcd->mbm_state = MBM_NONE; gcd->up_cb = NULL; gcd->cb_data = NULL; }
static void mbm_e2ipcfg_cb(gboolean ok, GAtResult *result, gpointer user_data) { struct ofono_gprs_context *gc = user_data; struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc); GAtResultIter iter; int numdns = 0; int type; const char *str; const char *ip = NULL; const char *gateway = NULL; const char *dns[MAX_DNS + 1]; struct ofono_modem *modem; const char *interface; gboolean success = FALSE; if (!ok) goto out; g_at_result_iter_init(&iter, result); if (g_at_result_iter_next(&iter, "*E2IPCFG:") == FALSE) return; while (g_at_result_iter_open_list(&iter)) { if (g_at_result_iter_next_number(&iter, &type) == FALSE) break; if (g_at_result_iter_next_string(&iter, &str) == FALSE) break; switch (type) { case 1: ip = str; break; case 2: gateway = str; break; case 3: if (numdns < MAX_DNS) dns[numdns++] = str; break; default: break; } if (g_at_result_iter_close_list(&iter) == FALSE) break; } dns[numdns] = NULL; if (ip && gateway && numdns) success = TRUE; out: modem = ofono_gprs_context_get_modem(gc); interface = ofono_modem_get_string(modem, "NetworkInterface"); CALLBACK_WITH_SUCCESS(gcd->up_cb, interface, success, ip, STATIC_IP_NETMASK, gateway, success ? dns : NULL, gcd->cb_data); gcd->mbm_state = MBM_NONE; gcd->up_cb = NULL; gcd->cb_data = NULL; }
static void owandata_cb(gboolean ok, GAtResult *result, gpointer user_data) { struct ofono_gprs_context *gc = user_data; struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc); GAtResultIter iter; int cid; const char *ip = NULL; const char *gateway = NULL; const char *dns1 = NULL; const char *dns2 = NULL; const char *dns[3]; struct ofono_modem *modem; const char *interface; if (!ok) return; g_at_result_iter_init(&iter, result); if (g_at_result_iter_next(&iter, "_OWANDATA:") == FALSE) return; g_at_result_iter_next_number(&iter, &cid); g_at_result_iter_next_unquoted_string(&iter, &ip); g_at_result_iter_next_unquoted_string(&iter, &gateway); g_at_result_iter_next_unquoted_string(&iter, &dns1); g_at_result_iter_next_unquoted_string(&iter, &dns2); if (ip && ip[0] == ' ') ip += 1; if (gateway && gateway[0] == ' ') gateway += 1; if (dns1 && dns1[0] == ' ') dns1 += 1; if (dns2 && dns2[0] == ' ') dns2 += 1; /* Don't bother reporting the same DNS twice */ if (g_str_equal(dns1, dns2)) dns2 = NULL; dns[0] = dns1; dns[1] = dns2; dns[2] = 0; modem = ofono_gprs_context_get_modem(gc); interface = ofono_modem_get_string(modem, "NetworkInterface"); ofono_info("Got the following parameters for context: %d", cid); ofono_info("IP: %s, Gateway: %s", ip, gateway); ofono_info("DNS: %s, %s", dns1, dns2); ofono_gprs_context_set_interface(gc, interface); ofono_gprs_context_set_ipv4_address(gc, ip, TRUE); ofono_gprs_context_set_ipv4_netmask(gc, STATIC_IP_NETMASK); ofono_gprs_context_set_ipv4_gateway(gc, gateway); ofono_gprs_context_set_ipv4_dns_servers(gc, dns); CALLBACK_WITH_SUCCESS(gcd->cb, gcd->cb_data); gcd->hso_state = HSO_NONE; gcd->cb = NULL; gcd->cb_data = NULL; }