r3781 - in trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src/phone-kit

chris at sita.openmoko.org chris at sita.openmoko.org
Mon Jan 7 16:15:23 CET 2008


Author: chris
Date: 2008-01-07 16:15:22 +0100 (Mon, 07 Jan 2008)
New Revision: 3781

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
Log:
        * src/phone-kit/moko-network.c: (retry_oper_get),
        (retry_opers_get), (retry_get_imsi), (on_network_registered),
        (moko_network_dispose), (net_msghandler), (phone_msghandler):
        Retry retrieval of network details on connecting if they fail (ten
        second time-out) - should help reliability of SMS sending


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2008-01-07 11:35:11 UTC (rev 3780)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2008-01-07 15:15:22 UTC (rev 3781)
@@ -1,5 +1,13 @@
 2008-01-07  Chris Lord  <chris at openedhand.com>
 
+	* src/phone-kit/moko-network.c: (retry_oper_get),
+	(retry_opers_get), (retry_get_imsi), (on_network_registered),
+	(moko_network_dispose), (net_msghandler), (phone_msghandler):
+	Retry retrieval of network details on connecting if they fail (ten
+	second time-out) - should help reliability of SMS sending
+
+2008-01-07  Chris Lord  <chris at openedhand.com>
+
 	* src/phone-kit/moko-sms.c: (on_incoming_ds):
 	Correct a misinterpretation of how delivery status reports are stored
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c	2008-01-07 11:35:11 UTC (rev 3780)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c	2008-01-07 15:15:22 UTC (rev 3781)
@@ -68,6 +68,10 @@
   gchar                     *network_name;
   gchar                     *network_number;
   gchar                     *imsi;
+  
+  guint                     retry_oper;
+  guint                     retry_opers;
+  guint                     retry_imsi;
 
   /* gsmd connection variables */
   struct lgsm_handle        *handle;
@@ -99,6 +103,31 @@
   }
 }
 
+/* Callbacks to retry retrieving of operator/sim details after registration */
+static gboolean
+retry_oper_get (MokoNetwork *network)
+{
+  g_debug ("Retrying operator retrieval");
+  lgsm_oper_get (network->priv->handle);
+  return TRUE;
+}
+
+static gboolean
+retry_opers_get (MokoNetwork *network)
+{
+  g_debug ("Retrying operators list retrieval");
+  lgsm_opers_get (network->priv->handle);
+  return TRUE;
+}
+
+static gboolean
+retry_get_imsi (MokoNetwork *network)
+{
+  g_debug ("Retrying imsi retrieval");
+  lgsm_get_imsi (network->priv->handle);
+  return TRUE;
+}
+
 /* Callbacks for gsmd events */
 static void
 on_network_registered (MokoListener *listener,
@@ -116,8 +145,25 @@
   {
     case GSMD_NETREG_UNREG:
     case GSMD_NETREG_UNREG_BUSY:
-      /* Do nothing */
       g_debug ("Searching for network");
+      
+      /* Clear operator location */
+      priv->lac = 0;
+      
+      /* Stop trying to get details */
+      if (priv->retry_oper) {
+        g_source_remove (priv->retry_oper);
+        priv->retry_oper = 0;
+      }
+      if (priv->retry_opers) {
+        g_source_remove (priv->retry_opers);
+        priv->retry_opers = 0;
+      }
+      if (priv->retry_imsi) {
+        g_source_remove (priv->retry_imsi);
+        priv->retry_imsi = 0;
+      }
+      
       break;
     case GSMD_NETREG_DENIED:
       /* This may be a pin issue*/
@@ -138,6 +184,18 @@
         
         /* Retrieve IMSI to get home country code */
         lgsm_get_imsi (handle);
+        
+        /* Add a time-out in case retrieval fails - retry every 10 seconds */
+        while (g_source_remove_by_user_data (listener));
+        priv->retry_oper = g_timeout_add_seconds (10,
+                                                  (GSourceFunc)retry_oper_get,
+                                                  listener);
+        priv->retry_opers = g_timeout_add_seconds (10,
+                                                   (GSourceFunc)retry_opers_get,
+                                                   listener);
+        priv->retry_imsi = g_timeout_add_seconds (10,
+                                                  (GSourceFunc)retry_get_imsi,
+                                                  listener);
       }
       
       break;
@@ -248,6 +306,19 @@
   network = MOKO_NETWORK (object);
   priv = network->priv;
 
+  if (priv->retry_oper) {
+    g_source_remove (priv->retry_oper);
+    priv->retry_oper = 0;
+  }
+  if (priv->retry_opers) {
+    g_source_remove (priv->retry_opers);
+    priv->retry_opers = 0;
+  }
+  if (priv->retry_imsi) {
+    g_source_remove (priv->retry_imsi);
+    priv->retry_imsi = 0;
+  }
+
   if (priv->handle) {
     lgsm_exit (priv->handle);
     priv->handle = NULL;
@@ -472,12 +543,20 @@
       }
       break;
     case GSMD_NETWORK_OPER_GET :
+      if (priv->retry_oper) {
+        g_source_remove (priv->retry_oper);
+        priv->retry_oper = 0;
+      }
       for (l = priv->listeners; l; l = l->next) {
         moko_listener_on_network_name (MOKO_LISTENER (l->data),
                                        priv->handle, oper);
       }
       break;
     case GSMD_NETWORK_OPER_LIST :
+      if (priv->retry_opers) {
+        g_source_remove (priv->retry_opers);
+        priv->retry_opers = 0;
+      }
       for (l = priv->listeners; l; l = l->next) {
         moko_listener_on_network_list (MOKO_LISTENER (l->data),
                                        priv->handle, opers);
@@ -501,8 +580,11 @@
   switch (gmh->msg_subtype)
   {
     case GSMD_PHONE_GET_IMSI:
-      for (l = priv->listeners; l; l = l->next)
-      {
+      if (priv->retry_imsi) {
+        g_source_remove (priv->retry_imsi);
+        priv->retry_imsi = 0;
+      }
+      for (l = priv->listeners; l; l = l->next) {
         moko_listener_on_imsi (MOKO_LISTENER (l->data), priv->handle,
                                (const gchar *)gmh + sizeof (*gmh));
       }





More information about the commitlog mailing list