Re: [PATCH ipv6 v1 11/14] service: Check service state properly if user changes method.

2011-02-04 Thread Samuel Ortiz
Hi Jukka,

On Mon, Jan 24, 2011 at 02:12:12PM +0200, Jukka Rissanen wrote:
 ---
  src/service.c |   30 --
  1 files changed, 28 insertions(+), 2 deletions(-)
 
 diff --git a/src/service.c b/src/service.c
 index b775d44..38f8f2f 100644
 --- a/src/service.c
 +++ b/src/service.c
 @@ -2203,6 +2203,9 @@ static DBusMessage *set_property(DBusConnection *conn,
   g_str_equal(name, IPv6.Configuration)) {
  
   struct connman_ipconfig *ipv4 = NULL, *ipv6 = NULL;
 + enum connman_ipconfig_method old_method;
 + enum connman_ipconfig_method method =
 + CONNMAN_IPCONFIG_METHOD_UNKNOWN;
   enum connman_service_state state =
   CONNMAN_SERVICE_STATE_UNKNOWN;
   int err = 0;
 @@ -2214,26 +2217,49 @@ static DBusMessage *set_property(DBusConnection *conn,
   return __connman_error_invalid_property(msg);
  
   if (g_str_equal(name, IPv4.Configuration) == TRUE) {
 + ipv4 = service-ipconfig_ipv4;
 + old_method = __connman_ipconfig_get_method(ipv4);
   state = service-state_ipv4;
 +
   if (is_connecting(service, state) ||
   is_connected(service, state))
   __connman_network_clear_ipconfig(
   service-network,
   service-ipconfig_ipv4);
  
 - ipv4 = service-ipconfig_ipv4;
   err = __connman_ipconfig_set_config(ipv4, value);
 + method = __connman_ipconfig_get_method(ipv4);
 + if (err == 0 
 + old_method == CONNMAN_IPCONFIG_METHOD_OFF 
 + method == CONNMAN_IPCONFIG_METHOD_DHCP) {
 + state = service-state_ipv4 =
 + CONNMAN_SERVICE_STATE_CONFIGURATION;
 + __connman_ipconfig_enable(ipv4);
 + }
 +
 + DBG(err %d ipv4 %p method %d state %s, err, ipv4,
 + method, state2string(state));
I'll have to test all this, but could you please come up with a separate
routine for that ? The code starts to look unreadable to me.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/
___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


[PATCH ipv6 v1 11/14] service: Check service state properly if user changes method.

2011-01-24 Thread Jukka Rissanen
---
 src/service.c |   30 --
 1 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/src/service.c b/src/service.c
index b775d44..38f8f2f 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2203,6 +2203,9 @@ static DBusMessage *set_property(DBusConnection *conn,
g_str_equal(name, IPv6.Configuration)) {
 
struct connman_ipconfig *ipv4 = NULL, *ipv6 = NULL;
+   enum connman_ipconfig_method old_method;
+   enum connman_ipconfig_method method =
+   CONNMAN_IPCONFIG_METHOD_UNKNOWN;
enum connman_service_state state =
CONNMAN_SERVICE_STATE_UNKNOWN;
int err = 0;
@@ -2214,26 +2217,49 @@ static DBusMessage *set_property(DBusConnection *conn,
return __connman_error_invalid_property(msg);
 
if (g_str_equal(name, IPv4.Configuration) == TRUE) {
+   ipv4 = service-ipconfig_ipv4;
+   old_method = __connman_ipconfig_get_method(ipv4);
state = service-state_ipv4;
+
if (is_connecting(service, state) ||
is_connected(service, state))
__connman_network_clear_ipconfig(
service-network,
service-ipconfig_ipv4);
 
-   ipv4 = service-ipconfig_ipv4;
err = __connman_ipconfig_set_config(ipv4, value);
+   method = __connman_ipconfig_get_method(ipv4);
+   if (err == 0 
+   old_method == CONNMAN_IPCONFIG_METHOD_OFF 
+   method == CONNMAN_IPCONFIG_METHOD_DHCP) {
+   state = service-state_ipv4 =
+   CONNMAN_SERVICE_STATE_CONFIGURATION;
+   __connman_ipconfig_enable(ipv4);
+   }
+
+   DBG(err %d ipv4 %p method %d state %s, err, ipv4,
+   method, state2string(state));
 
} else if (g_str_equal(name, IPv6.Configuration) == TRUE) {
+   ipv6 = service-ipconfig_ipv6;
+   old_method = __connman_ipconfig_get_method(ipv6);
state = service-state_ipv6;
+
if (is_connecting(service, state) ||
is_connected(service, state))
__connman_network_clear_ipconfig(
service-network,
service-ipconfig_ipv6);
 
-   ipv6 = service-ipconfig_ipv6;
err = __connman_ipconfig_set_config(ipv6, value);
+   method = __connman_ipconfig_get_method(ipv6);
+   if (err == 0  old_method ==
+   CONNMAN_IPCONFIG_METHOD_OFF 
+   method == CONNMAN_IPCONFIG_METHOD_AUTO)
+   __connman_ipconfig_enable(ipv6);
+
+   DBG(err %d ipv6 %p method %d state %s, err, ipv6,
+   method, state2string(state));
}
 
if (err  0) {
-- 
1.7.0.4

___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman