+#include "modem.h"
+
+struct hso_data {
+ int index;
+ GIOChannel *channel;
+ struct modem_data *modem;
+};
+
+static void owandata_callback(const char *buf, void *user_data)
+{
+ //struct hso_data *data = user_data;
+ char *str, ip[16], nm[16], ns1[16], ns2[16], ns3[16], ns4[16], val[20];
+ int err, num;
+
+ str = g_strrstr(buf, "_OWANDATA");
+ if (str == NULL || strstr(buf, "ERROR") != NULL)
+ return;
+
+ err = sscanf(str, "_OWANDATA: %d, %[^,], %[^,], "
+ "%[^,], %[^,], %[^,], %[^,], %s",
+ &num, ip, nm, ns1, ns2, ns3, ns4, val);
+
+ if (err != 8) {
+ DBG("parsed %d arguments", err);
+ return;
+ }
+
+ DBG("ip %s dns %s %s val %s", ip, ns1, ns2, val);
+
+ //connman_resolver_append(data->iface, NULL, ns1);
+ //connman_resolver_append(data->iface, NULL, ns2);
+}
+
+static void owancall_callback(const char *buf, void *user_data)
+{
+ struct hso_data *data = user_data;
+
+ DBG("");
+
+ if (g_strrstr(buf, "_OWANCALL: 1, 3") != NULL) {
+ DBG("%s", buf);
+ //modem_command(modem, owancall_callback, data,
+ // "_OWANCALL", "%d,%d,%d", 1, 1, 1);
+ }
+
+ if (g_strrstr(buf, "_OWANCALL: 1, 1") != NULL) {
+ DBG("%s", buf);
+ modem_command(data->modem, owandata_callback, data,
+ "_OWANDATA", "%d", 1);
+ }
+
+ if (g_strrstr(buf, "\r\nOK\r\n") != NULL) {
+ modem_command(data->modem, owandata_callback, data,
+ "_OWANDATA", "%d", 1);
+ }
+}
+
+static int network_probe(struct connman_network *network)
+{
+ DBG("network %p", network);
+
+ return 0;
+}
+
+static void network_remove(struct connman_network *network)
+{
+ DBG("network %p", network);
+}
+
+static int network_connect(struct connman_network *network)
+{
+ DBG("network %p", network);
+
+ return 0;
+}
+
+static int network_disconnect(struct connman_network *network)
+{
+ DBG("network %p", network);
+
+ return 0;
+}
+
+static struct connman_network_driver network_driver = {
+ .name = "hso-network",
+ .type = CONNMAN_NETWORK_TYPE_HSO,
+ .probe = network_probe,
+ .remove = network_remove,
+ .connect = network_connect,
+ .disconnect = network_disconnect,
+};
+