summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiraj Kumar Goit <niraj.g@samsung.com>2016-06-14 18:12:33 +0530
committerNiraj Kumar Goit <niraj.g@samsung.com>2016-06-14 18:12:33 +0530
commit2ba57348d65eea4956b9cf13c2fcce0292944e80 (patch)
tree0079be649a55209025ef04895d826de81ed21cdb
parentdf976843d429e47179ecd8f8e7535a34013ea25f (diff)
downloadconnman-2ba57348d65eea4956b9cf13c2fcce0292944e80.tar.gz
connman-2ba57348d65eea4956b9cf13c2fcce0292944e80.tar.bz2
connman-2ba57348d65eea4956b9cf13c2fcce0292944e80.zip
[SPIN] network: enable DHCP failure.
When DHCP is failed, most of normal users cannot understand auto-generated IP (IPV4 link local). So set error CONNMAN_NETWORK_ERROR_DHCP_FAIL. Change-Id: Ic80eb0436e41cff3a4bfb11dfef722b3029b0399 Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
-rwxr-xr-xinclude/network.h3
-rwxr-xr-xsrc/dhcp.c18
-rwxr-xr-xsrc/network.c20
3 files changed, 39 insertions, 2 deletions
diff --git a/include/network.h b/include/network.h
index db25ae02..a095b525 100755
--- a/include/network.h
+++ b/include/network.h
@@ -55,6 +55,9 @@ enum connman_network_error {
CONNMAN_NETWORK_ERROR_CONFIGURE_FAIL = 2,
CONNMAN_NETWORK_ERROR_INVALID_KEY = 3,
CONNMAN_NETWORK_ERROR_CONNECT_FAIL = 4,
+#if defined TIZEN_EXT
+ CONNMAN_NETWORK_ERROR_DHCP_FAIL = 5,
+#endif
};
#define CONNMAN_NETWORK_PRIORITY_LOW -100
diff --git a/src/dhcp.c b/src/dhcp.c
index e4497fcc..bc7deb21 100755
--- a/src/dhcp.c
+++ b/src/dhcp.c
@@ -476,11 +476,24 @@ done:
static void ipv4ll_available_cb(GDHCPClient *ipv4ll_client, gpointer user_data)
{
struct connman_dhcp *dhcp = user_data;
- char *address, *netmask;
- unsigned char prefixlen;
+#if !defined TIZEN_EXT
+ char *address, *netmask;
+ unsigned char prefixlen;
+#endif
DBG("IPV4LL available");
+#if defined TIZEN_EXT
+ /*
+ * Description: When DHCP is failed,
+ * most of normal users cannot understand auto-generated IP
+ * (IPV4 link local) and serious troubles to make Internet connection.
+ */
+ dhcp_invalidate(dhcp, true);
+
+ connman_network_set_error(dhcp->network,
+ CONNMAN_NETWORK_ERROR_DHCP_FAIL);
+#else
address = g_dhcp_client_get_address(ipv4ll_client);
netmask = g_dhcp_client_get_netmask(ipv4ll_client);
@@ -496,6 +509,7 @@ static void ipv4ll_available_cb(GDHCPClient *ipv4ll_client, gpointer user_data)
g_free(address);
g_free(netmask);
+#endif
}
static int dhcp_initialize(struct connman_dhcp *dhcp)
diff --git a/src/network.c b/src/network.c
index 0d6b442b..cf746829 100755
--- a/src/network.c
+++ b/src/network.c
@@ -1399,6 +1399,21 @@ static void set_connect_error(struct connman_network *network)
CONNMAN_SERVICE_ERROR_CONNECT_FAILED);
}
+#if defined TIZEN_EXT
+static void set_dhcp_error(struct connman_network *network)
+{
+ struct connman_service *service;
+
+ if (network->associating != FALSE)
+ network->associating = FALSE;
+
+ service = connman_service_lookup_from_network(network);
+
+ __connman_service_indicate_error(service,
+ CONNMAN_SERVICE_ERROR_DHCP_FAILED);
+}
+#endif
+
void connman_network_set_ipv4_method(struct connman_network *network,
enum connman_ipconfig_method method)
{
@@ -1456,6 +1471,11 @@ void connman_network_set_error(struct connman_network *network,
case CONNMAN_NETWORK_ERROR_CONNECT_FAIL:
set_connect_error(network);
break;
+#if defined TIZEN_EXT
+ case CONNMAN_NETWORK_ERROR_DHCP_FAIL:
+ set_dhcp_error(network);
+ break;
+#endif
}
network_change(network);