Re: [PATCH] Fix: simplify isimodem call-barring driver.

2010-03-24 Thread Aki Niemi
ti, 2010-03-23 kello 22:53 +0100, ext Denis Kenzior kirjoitti:
 Secondly, please keep your patches whitespace clean, there are several cases 
 of spaces being used instead of tabs for indentation.

Pekka is an emacs guy, and emacs likes syntactic indentation a lot. I'm
using this custom mode with fairly good results:

(defun linux-c-mode ()
  C mode with adjusted defaults for use with the Linux kernel.
  (interactive)
  (c-mode)
  (c-set-style KR)
  (setq c-syntactic-indentation nil)
  (setq c-basic-offset 8))

Cheers,
Aki

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 3/6] Unify some macro names of ber-tlv and comprehension tlv

2010-03-24 Thread Yang Gu
---
 src/stkutil.h |   22 +++---
 1 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/stkutil.h b/src/stkutil.h
index 4b7c382..5724d29 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -54,7 +54,7 @@ enum stk_command_type {
STK_COMMAND_TYPE_GET_INPUT =0x23,
STK_COMMAND_TYPE_SELECT_ITEM =  0x24,
STK_COMMAND_TYPE_SETUP_MENU =   0x25,
-   STK_COMMAND_TYPE_PROVIDE_LOCAL_INFORMATION =0x26,
+   STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO =   0x26,
STK_COMMAND_TYPE_TIMER_MANAGEMENT = 0x27,
STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT = 0x28,
STK_COMMAND_TYPE_PERFORM_CARD_APDU =0x30,
@@ -69,13 +69,13 @@ enum stk_command_type {
STK_COMMAND_TYPE_SEND_DATA =0x43,
STK_COMMAND_TYPE_GET_CHANNEL_STATUS =   0x44,
STK_COMMAND_TYPE_SERVICE_SEARCH =   0x45,
-   STK_COMMAND_TYPE_GET_SERVICE_INFORMATION =  0x46,
+   STK_COMMAND_TYPE_GET_SERVICE_INFO = 0x46,
STK_COMMAND_TYPE_DECLARE_SERVICE =  0x47,
STK_COMMAND_TYPE_SET_FRAMES =   0x50,
STK_COMMAND_TYPE_GET_FRAMES_STATUS =0x51,
-   STK_COMMAND_TYPE_RETRIEVE_MMS = 0x60,
-   STK_COMMAND_TYPE_SUBMIT_MMS =   0x61,
-   STK_COMMAND_TYPE_DISPLAY_MMS =  0x62,
+   STK_COMMAND_TYPE_RETRIEVE_MM =  0x60,
+   STK_COMMAND_TYPE_SUBMIT_MM =0x61,
+   STK_COMMAND_TYPE_DISPLAY_MM =   0x62,
STK_COMMAND_TYPE_ACTIVATE = 0x70,
STK_COMMAND_TYPE_END_SESSION =  0x81,
 };
@@ -131,7 +131,7 @@ enum stk_data_object_type {
STK_DATA_OBJECT_TYPE_BROWSER_ID =   0x30,
STK_DATA_OBJECT_TYPE_URL =  0x31,
STK_DATA_OBJECT_TYPE_BEARER =   0x32,
-   STK_DATA_OBJECT_TYPE_PROVISIONING_REFERENCE_FILE =  0x33,
+   STK_DATA_OBJECT_TYPE_PROVISIONING_FILE_REFERENCE =  0x33,
STK_DATA_OBJECT_TYPE_BROWSER_TERMINATION_CAUSE =0x34,
STK_DATA_OBJECT_TYPE_BEARER_DESCRIPTION =   0x35,
STK_DATA_OBJECT_TYPE_CHANNEL_DATA = 0x36,
@@ -162,12 +162,12 @@ enum stk_data_object_type {
STK_DATA_OBJECT_TYPE_FRAME_LAYOUT = 0x66,
STK_DATA_OBJECT_TYPE_FRAMES_INFO =  0x67,
STK_DATA_OBJECT_TYPE_FRAME_ID = 0x68,
-   STK_DATA_OBJECT_TYPE_MMS_REFERENCE =0x6A,
-   STK_DATA_OBJECT_TYPE_MMS_ID =   0x6B,
-   STK_DATA_OBJECT_TYPE_MMS_TRANSFER_STATUS =  0x6C,
+   STK_DATA_OBJECT_TYPE_MM_REFERENCE = 0x6A,
+   STK_DATA_OBJECT_TYPE_MM_ID =0x6B,
+   STK_DATA_OBJECT_TYPE_MM_TRANSFER_STATUS =   0x6C,
STK_DATA_OBJECT_TYPE_MEID = 0x6D,
-   STK_DATA_OBJECT_TYPE_CONTENT_ID =   0x6E,
-   STK_DATA_OBJECT_TYPE_MMS_NOTIFICATION = 0x6F,
+   STK_DATA_OBJECT_TYPE_MM_CONTENT_ID =0x6E,
+   STK_DATA_OBJECT_TYPE_MM_NOTIFICATION =  0x6F,
STK_DATA_OBJECT_TYPE_LAST_ENVELOPE =0x70,
STK_DATA_OBJECT_TYPE_REGISTRY_APPLICATION_DATA =0x71,
STK_DATA_OBJECT_TYPE_ROUTING_AREA_INFO =0x73,
-- 
1.6.3.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 4/6] Add macro name of comprehension tlv cdma sms tpdu

2010-03-24 Thread Yang Gu
---
 src/stkutil.h |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.h b/src/stkutil.h
index 5724d29..d2cbee0 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -151,6 +151,7 @@ enum stk_data_object_type {
STK_DATA_OBJECT_TYPE_SERVICE_AVAILABILITY = 0x45,
STK_DATA_OBJECT_TYPE_ESN =  0x46,
STK_DATA_OBJECT_TYPE_NETWORK_ACCESS_NAME =  0x47,
+   STK_DATA_OBJECT_TYPE_CDMA_SMS_TPDU =0x48,
STK_DATA_OBJECT_TYPE_REMOTE_ENTITY_ADDRESS =0x49,
STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE =   0x50,
STK_DATA_OBJECT_TYPE_ITEM_TEXT_ATTRIBUTE_LIST = 0x51,
-- 
1.6.3.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 6/6] Add parser for help request objects

2010-03-24 Thread Yang Gu
---
 src/stkutil.c |   27 +++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 3e423b5..215013d 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -50,6 +50,23 @@ struct gsm_sms_tpdu {
unsigned char tpdu[164];
 };
 
+/* For data object to indicate the existence */
+static gboolean parse_dataobj_common_bool(struct comprehension_tlv_iter *iter,
+   void *user, enum stk_data_object_type type)
+{
+   gboolean *ret = user;
+
+   if (comprehension_tlv_iter_get_tag(iter) != type)
+   return FALSE;
+
+   if (comprehension_tlv_iter_get_length(iter) != 0)
+   return FALSE;
+
+   *ret = TRUE;
+
+   return TRUE;
+}
+
 /* Defined in TS 102.223 Section 8.1 */
 static gboolean parse_dataobj_address(struct comprehension_tlv_iter *iter,
void *user)
@@ -571,6 +588,14 @@ static gboolean parse_dataobj_imei(struct 
comprehension_tlv_iter *iter,
return TRUE;
 }
 
+/* Defined in TS 102.223 Section 8.21 */
+static gboolean parse_dataobj_help_request(struct comprehension_tlv_iter *iter,
+   void *user)
+{
+   return parse_dataobj_common_bool(iter, user,
+   STK_DATA_OBJECT_TYPE_HELP_REQUEST);
+}
+
 /* Defined in TS 102.223 Section 8.31 */
 static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter *iter,
void *user)
@@ -694,6 +719,8 @@ static dataobj_handler handler_for_type(enum 
stk_data_object_type type)
return parse_dataobj_location_info;
case STK_DATA_OBJECT_TYPE_IMEI:
return parse_dataobj_imei;
+   case STK_DATA_OBJECT_TYPE_HELP_REQUEST:
+   return parse_dataobj_help_request;
case STK_DATA_OBJECT_TYPE_ICON_ID:
return parse_dataobj_icon_id;
case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE:
-- 
1.6.3.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 5/6] Add parser for imei objects

2010-03-24 Thread Yang Gu
---
 src/stkutil.c |   24 
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index a6b0284..3e423b5 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -549,6 +549,28 @@ static gboolean parse_dataobj_location_info(
return TRUE;
 }
 
+/* Defined in TS 102.223 Section 8.20 */
+static gboolean parse_dataobj_imei(struct comprehension_tlv_iter *iter,
+   void *user)
+{
+   char **imei = user;
+   const unsigned char *data;
+   unsigned int len;
+
+   if (comprehension_tlv_iter_get_tag(iter) !=
+   STK_DATA_OBJECT_TYPE_IMEI)
+   return FALSE;
+
+   len = comprehension_tlv_iter_get_length(iter);
+   if (len != 8)
+   return FALSE;
+
+   data = comprehension_tlv_iter_get_data(iter);
+   memcpy(*imei, data, len);
+
+   return TRUE;
+}
+
 /* Defined in TS 102.223 Section 8.31 */
 static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter *iter,
void *user)
@@ -670,6 +692,8 @@ static dataobj_handler handler_for_type(enum 
stk_data_object_type type)
return parse_dataobj_file_list;
case STK_DATA_OBJECT_TYPE_LOCATION_INFO:
return parse_dataobj_location_info;
+   case STK_DATA_OBJECT_TYPE_IMEI:
+   return parse_dataobj_imei;
case STK_DATA_OBJECT_TYPE_ICON_ID:
return parse_dataobj_icon_id;
case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE:
-- 
1.6.3.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/3] fix memory leaks in option handling

2010-03-24 Thread Kristen Carlson Accardi
free the data as well as the link when deleting options lists.
---
 gatchat/ppp_cp.c |   15 ++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/gatchat/ppp_cp.c b/gatchat/ppp_cp.c
index e8d6e30..0f04fa1 100644
--- a/gatchat/ppp_cp.c
+++ b/gatchat/ppp_cp.c
@@ -201,6 +201,16 @@ static void pppcp_clear_options(struct pppcp_data *data)
data-rejected_options = NULL;
 }
 
+static void pppcp_free_options(struct pppcp_data *data)
+{
+   /* remove all config options */
+   pppcp_clear_options(data);
+
+   /* remove default option list */
+   g_list_foreach(data-config_options, pppcp_free_option, NULL);
+   g_list_free(data-config_options);
+}
+
 /*
  * set the restart counter to either max-terminate
  * or max-configure.  The counter is decremented for
@@ -1103,6 +1113,7 @@ static void remove_config_option(gpointer elem, gpointer 
user_data)
if (!list)
return;
 
+   g_free(list-data);
data-config_options = g_list_delete_link(data-config_options, list);
 }
 
@@ -1226,6 +1237,8 @@ static guint8 pppcp_process_configure_ack(struct 
pppcp_data *data,
if (action-option_process)
action-option_process(acked_option,
data-priv);
+
+   g_free(list-data);
data-config_options =
g_list_delete_link(data-config_options, list);
} else
@@ -1440,7 +1453,7 @@ void pppcp_free(struct pppcp_data *data)
g_queue_free(data-event_queue);
 
/* remove all config options */
-   pppcp_clear_options(data);
+   pppcp_free_options(data);
 
/* free self */
g_free(data);
-- 
1.6.6.1

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 0/3] fix memory leaks in PPP

2010-03-24 Thread Kristen Carlson Accardi
Fix a few memory leaks in PPP

Kristen Carlson Accardi (3):
  fix memory leaks in option handling
  fix memory leaks after ppp_transmit
  fix memory leak in ppp_auth

 gatchat/ppp_auth.c |1 +
 gatchat/ppp_cp.c   |   51 +--
 2 files changed, 42 insertions(+), 10 deletions(-)

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


Re: [PATCH 2/6] Add macro for ber-tlv more time

2010-03-24 Thread Denis Kenzior
Hi Yang,

 ---
  src/stkutil.h |5 +++--
  1 files changed, 3 insertions(+), 2 deletions(-)
 

This patch has been applied, thanks.

Regards,
-Denis
___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


Re: [PATCH 4/6] Add macro name of comprehension tlv cdma sms tpdu

2010-03-24 Thread Denis Kenzior
Hi Yang,

 ---
  src/stkutil.h |1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 

This patch has been applied, thanks.

Regards,
-Denis
___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


Re: [PATCH 5/6] Add parser for imei objects

2010-03-24 Thread Denis Kenzior
Hi Yang,

 ---
  src/stkutil.c |   24 
  1 files changed, 24 insertions(+), 0 deletions(-)
 
 diff --git a/src/stkutil.c b/src/stkutil.c
 index a6b0284..3e423b5 100644
 --- a/src/stkutil.c
 +++ b/src/stkutil.c
 @@ -549,6 +549,28 @@ static gboolean parse_dataobj_location_info(
   return TRUE;
  }
 
 +/* Defined in TS 102.223 Section 8.20 */
 +static gboolean parse_dataobj_imei(struct comprehension_tlv_iter *iter,
 + void *user)
 +{
 + char **imei = user;

So this one implies character data (e.g. string), but...

 + const unsigned char *data;
 + unsigned int len;
 +
 + if (comprehension_tlv_iter_get_tag(iter) !=
 + STK_DATA_OBJECT_TYPE_IMEI)
 + return FALSE;
 +
 + len = comprehension_tlv_iter_get_length(iter);
 + if (len != 8)
 + return FALSE;
 +
 + data = comprehension_tlv_iter_get_data(iter);
 + memcpy(*imei, data, len);

Here you copy binary data into a string array.  Since IMEI is essentially bcd 
encoded I suggest you parse it into string form here.

 +
 + return TRUE;
 +}
 +

Regards,
-Denis
___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


Re: [PATCH 6/6] Add parser for help request objects

2010-03-24 Thread Denis Kenzior
Hi Yang,

 ---
  src/stkutil.c |   27 +++
  1 files changed, 27 insertions(+), 0 deletions(-)
 
 diff --git a/src/stkutil.c b/src/stkutil.c
 index 3e423b5..215013d 100644
 --- a/src/stkutil.c
 +++ b/src/stkutil.c
 @@ -50,6 +50,23 @@ struct gsm_sms_tpdu {
   unsigned char tpdu[164];
  };
 
 +/* For data object to indicate the existence */
 +static gboolean parse_dataobj_common_bool(struct comprehension_tlv_iter
  *iter, + void *user, enum stk_data_object_type type)
 +{
 + gboolean *ret = user;
 +
 + if (comprehension_tlv_iter_get_tag(iter) != type)
 + return FALSE;
 +
 + if (comprehension_tlv_iter_get_length(iter) != 0)
 + return FALSE;
 +
 + *ret = TRUE;
 +
 + return TRUE;
 +}
 +
  /* Defined in TS 102.223 Section 8.1 */
  static gboolean parse_dataobj_address(struct comprehension_tlv_iter *iter,
   void *user)
 @@ -571,6 +588,14 @@ static gboolean parse_dataobj_imei(struct
  comprehension_tlv_iter *iter, return TRUE;
  }
 
 +/* Defined in TS 102.223 Section 8.21 */
 +static gboolean parse_dataobj_help_request(struct comprehension_tlv_iter
  *iter, + void *user)
 +{
 + return parse_dataobj_common_bool(iter, user,
 + STK_DATA_OBJECT_TYPE_HELP_REQUEST);
 +}
 +

Your patch looks fine, but after looking at the spec I couldn't find any other 
data object that had this structure.  What else is this going to be used for?

  /* Defined in TS 102.223 Section 8.31 */
  static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter *iter,
   void *user)
 @@ -694,6 +719,8 @@ static dataobj_handler handler_for_type(enum
  stk_data_object_type type) return parse_dataobj_location_info;
   case STK_DATA_OBJECT_TYPE_IMEI:
   return parse_dataobj_imei;
 + case STK_DATA_OBJECT_TYPE_HELP_REQUEST:
 + return parse_dataobj_help_request;
   case STK_DATA_OBJECT_TYPE_ICON_ID:
   return parse_dataobj_icon_id;
   case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE:
 

Regards,
-Denis
___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


Re: [PATCH 0/3] fix memory leaks in PPP

2010-03-24 Thread Marcel Holtmann
Hi Kristen,

 Fix a few memory leaks in PPP
 
 Kristen Carlson Accardi (3):
   fix memory leaks in option handling
   fix memory leaks after ppp_transmit
   fix memory leak in ppp_auth
 
  gatchat/ppp_auth.c |1 +
  gatchat/ppp_cp.c   |   51 +--
  2 files changed, 42 insertions(+), 10 deletions(-)

all three patches have been applied. Thanks.

Regards

Marcel


___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


Issue with PPP auth and empty username/password

2010-03-24 Thread Marcel Holtmann
Hi Kristen,

I started tested the PPP code and run into a simple crash when not
providing username and password. This should be possible.

Program terminated with signal 11, Segmentation fault.
#0  0x003457e7f2f2 in __strlen_sse2 () from /lib64/libc.so.6
(gdb) bt
#0  0x003457e7f2f2 in __strlen_sse2 () from /lib64/libc.so.6
#1  0x0040ca9b in chap_process_challenge (priv=0x15a6bf0, 
new_packet=0x15a5164 \001\001)
at gatchat/ppp_auth.c:86
#2  chap_process_packet (priv=0x15a6bf0, new_packet=0x15a5164 \001\001) at 
gatchat/ppp_auth.c:143
#3  0x0040a66f in ppp_recv (channel=value optimized out, cond=value 
optimized out, data=0x15a6d50)
at gatchat/ppp.c:205
#4  ppp_feed (channel=value optimized out, cond=value optimized out, 
data=0x15a6d50) at gatchat/ppp.c:286
#5  ppp_cb (channel=value optimized out, cond=value optimized out, 
data=0x15a6d50) at gatchat/ppp.c:340
#6  0x003598a3923e in g_main_context_dispatch () from 
/lib64/libglib-2.0.so.0
#7  0x003598a3cc28 in ?? () from /lib64/libglib-2.0.so.0
#8  0x003598a3d075 in g_main_loop_run () from /lib64/libglib-2.0.so.0
#9  0x00403918 in main (argc=1, argv=0x7fff7b97eb28) at 
gatchat/gsmdial.c:624

Regards

Marcel


___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


Quick report from PPP testing

2010-03-24 Thread Marcel Holtmann
Hi Kristen,

so I just downloaded the Linux kernel via the PPP connection with my
Rogers' Novatel UMTS stick.

:  \r\n+CGREG: 2,1,FE38,EBA6\r\n\r\nOK\r\n
Registered to GPRS network, roaming=False
:  ATD*99***1#\r
:  \r\nCONNECT HSDPA 7.2\r\n
oops -- found acked option 2 we didn't request
Unknown ipcp option type 130
oops, option wasn't acceptable
Unknown ipcp option type 132
oops, option wasn't acceptable
Unknown ipcp option type 130
oops, option wasn't acceptable
Unknown ipcp option type 132
oops, option wasn't acceptable
Unknown ipcp option type 130
oops, option wasn't acceptable
Unknown ipcp option type 132
oops, option wasn't acceptable
IP Address: 172.28.89.39
Primary DNS Server: 64.71.255.198
Secondary DNS Server: 64.71.255.253

The IPCP negotiation looks a bit funky. Can we get some more debug code
in there. I like to know which side tried this requests. Also speeding
this up would be helpful.

Denis, I had to add custom terminators for this card since it reports
the network speed after CONNECT string. Don't we wanna just accept every
CONNECT * strings here?

Regards

Marcel


___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 0/2] fix PPP timer issues

2010-03-24 Thread Kristen Carlson Accardi
These patches fix a few problems with the way timeouts are handled in
PPP.

Kristen Carlson Accardi (2):
  switch to g_timeout_add_seconds()
  use separate timers for PPP config and terminate

 gatchat/ppp_cp.c |  103 -
 gatchat/ppp_cp.h |   15 +---
 2 files changed, 64 insertions(+), 54 deletions(-)

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/2] switch to g_timeout_add_seconds()

2010-03-24 Thread Kristen Carlson Accardi
we don't care that much about the exactness of our timer, so use
the more power efficient call.
---
 gatchat/ppp_cp.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gatchat/ppp_cp.c b/gatchat/ppp_cp.c
index 3132af5..de72066 100644
--- a/gatchat/ppp_cp.c
+++ b/gatchat/ppp_cp.c
@@ -56,7 +56,7 @@ struct pppcp_event {
guint8 data[0];
 };
 
-#define INITIAL_RESTART_TIMEOUT3000
+#define INITIAL_RESTART_TIMEOUT3   /* restart interval in seconds 
*/
 #define MAX_TERMINATE  2
 #define MAX_CONFIGURE  10
 #define MAX_FAILURE5
@@ -107,7 +107,7 @@ static gboolean pppcp_timeout(gpointer user_data)
 
 static void pppcp_start_timer(struct pppcp_data *data)
 {
-   data-restart_timer = g_timeout_add(data-restart_interval,
+   data-restart_timer = g_timeout_add_seconds(data-restart_interval,
pppcp_timeout, data);
 }
 
-- 
1.6.6.1

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 2/2] use separate timers for PPP config and terminate

2010-03-24 Thread Kristen Carlson Accardi
Prevent conflicts between config timer information and terminate timer
information by providing a new data structure which keeps timer information
for config and terminate requests separate.
---
 gatchat/ppp_cp.c |  101 -
 gatchat/ppp_cp.h |   15 +---
 2 files changed, 63 insertions(+), 53 deletions(-)

diff --git a/gatchat/ppp_cp.c b/gatchat/ppp_cp.c
index de72066..4cc6c13 100644
--- a/gatchat/ppp_cp.c
+++ b/gatchat/ppp_cp.c
@@ -91,40 +91,41 @@ static struct pppcp_packet *pppcp_packet_new(struct 
pppcp_data *data,
 
 static gboolean pppcp_timeout(gpointer user_data)
 {
-   struct pppcp_data *data = user_data;
+   struct pppcp_timer_data *timer_data = user_data;
 
-   pppcp_trace(data);
+   pppcp_trace(timer_data-data);
 
-   data-restart_timer = 0;
+   timer_data-restart_timer = 0;
 
-   if (data-restart_counter)
-   pppcp_generate_event(data, TO_PLUS, NULL, 0);
+   if (timer_data-restart_counter)
+   pppcp_generate_event(timer_data-data, TO_PLUS, NULL, 0);
else
-   pppcp_generate_event(data, TO_MINUS, NULL, 0);
+   pppcp_generate_event(timer_data-data, TO_MINUS, NULL, 0);
 
return FALSE;
 }
 
-static void pppcp_start_timer(struct pppcp_data *data)
+static void pppcp_start_timer(struct pppcp_timer_data *timer_data)
 {
-   data-restart_timer = g_timeout_add_seconds(data-restart_interval,
-   pppcp_timeout, data);
+   if (timer_data-restart_timer)
+   return;
+
+   timer_data-restart_timer =
+   g_timeout_add_seconds(timer_data-restart_interval,
+   pppcp_timeout, timer_data);
 }
 
-static void pppcp_stop_timer(struct pppcp_data *data)
+static void pppcp_stop_timer(struct pppcp_timer_data *timer_data)
 {
-   if (data-restart_timer) {
-   g_source_remove(data-restart_timer);
-   data-restart_timer = 0;
+   if (timer_data-restart_timer) {
+   g_source_remove(timer_data-restart_timer);
+   timer_data-restart_timer = 0;
}
 }
 
-static gboolean pppcp_timer_is_running(struct pppcp_data *data)
+static gboolean is_first_request(struct pppcp_timer_data *timer_data)
 {
-   /* determine if the restart timer is running */
-   if (data-restart_timer)
-   return TRUE;
-   return FALSE;
+   return (timer_data-restart_counter == timer_data-max_counter);
 }
 
 static struct pppcp_event *pppcp_event_new(enum pppcp_event_type type,
@@ -215,19 +216,21 @@ static void pppcp_free_options(struct pppcp_data *data)
  * or max-configure.  The counter is decremented for
  * each transmission, including the first.
  */
-static void pppcp_initialize_restart_count(struct pppcp_data *data, guint 
value)
+static void pppcp_initialize_restart_count(struct pppcp_timer_data *timer_data)
 {
+   struct pppcp_data *data = timer_data-data;
+
pppcp_trace(data);
pppcp_clear_options(data);
-   data-restart_counter = value;
+   timer_data-restart_counter = timer_data-max_counter;
 }
 
 /*
  * set restart counter to zero
  */
-static void pppcp_zero_restart_count(struct pppcp_data *data)
+static void pppcp_zero_restart_count(struct pppcp_timer_data *timer_data)
 {
-   data-restart_counter = 0;
+   timer_data-restart_counter = 0;
 }
 
 /*
@@ -269,6 +272,7 @@ static void pppcp_send_configure_request(struct pppcp_data 
*data)
struct pppcp_packet *packet;
guint8 olength = 0;
guint8 *odata;
+   struct pppcp_timer_data *timer_data = data-config_timer_data;
 
pppcp_trace(data);
 
@@ -285,7 +289,7 @@ static void pppcp_send_configure_request(struct pppcp_data 
*data)
 * if this is the first request, we need a new identifier.
 * if this is a retransmission, leave the identifier alone.
 */
-   if (data-restart_counter == data-max_configure)
+   if (is_first_request(timer_data))
data-config_identifier =
new_identity(data, data-config_identifier);
packet-identifier = data-config_identifier;
@@ -295,11 +299,9 @@ static void pppcp_send_configure_request(struct pppcp_data 
*data)
 
pppcp_packet_free(packet);
 
-   /* XXX don't retransmit right now */
-#if 0
-   data-restart_counter--;
-   pppcp_start_timer(data);
-#endif
+   /* start timer for retransmission */
+   timer_data-restart_counter--;
+   pppcp_start_timer(timer_data);
 }
 
 /*
@@ -395,6 +397,7 @@ static void pppcp_send_configure_nak(struct pppcp_data 
*data,
 static void pppcp_send_terminate_request(struct pppcp_data *data)
 {
struct pppcp_packet *packet;
+   struct pppcp_timer_data *timer_data = data-terminate_timer_data;
 
/*
 * the data field can be used by the sender (us).
@@ -406,7 +409,7 @@ static void pppcp_send_terminate_request(struct pppcp_data 
*data)
  

[PATCH 1/4] remove unneeded debug statement

2010-03-24 Thread Kristen Carlson Accardi
cleanup old debug print statement
---
 gatchat/ppp.c |4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/gatchat/ppp.c b/gatchat/ppp.c
index 4612976..f3bfba7 100644
--- a/gatchat/ppp.c
+++ b/gatchat/ppp.c
@@ -328,10 +328,8 @@ gboolean ppp_cb(GIOChannel *channel, GIOCondition cond, 
gpointer data)
gsize bytes_read;
GError *error = NULL;
 
-   if (cond  (G_IO_NVAL | G_IO_ERR | G_IO_HUP)) {
-   g_print(G_IO_NVAL | G_IO_ERR);
+   if (cond  (G_IO_NVAL | G_IO_ERR | G_IO_HUP))
return FALSE;
-   }
 
if (cond  G_IO_IN) {
status = g_io_channel_read_chars(channel, buf, 256,
-- 
1.6.6.1

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 0/4] add PPP_DEAD and PPP_TERMINATE support

2010-03-24 Thread Kristen Carlson Accardi
These patches complete implementation of the PPP_DEAD and PPP_TERMINATE 
phases, as well as allow this to be tested via gsmdial.

Kristen Carlson Accardi (4):
  remove unneeded debug statement
  add tracing for PPP terminate path
  separate memory cleanup from PPP shutdown
  gsmdial: shutdown ppp link if we have one.

 gatchat/gatppp.c  |   25 +++--
 gatchat/gsmdial.c |4 +++-
 gatchat/ppp.c |   27 +++
 gatchat/ppp_cp.c  |   10 ++
 4 files changed, 43 insertions(+), 23 deletions(-)

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 2/4] add tracing for PPP terminate path

2010-03-24 Thread Kristen Carlson Accardi
Insert some calls to pppcp_trace() for future debugging needs.
---
 gatchat/ppp_cp.c |   10 ++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/gatchat/ppp_cp.c b/gatchat/ppp_cp.c
index 4cc6c13..df14a33 100644
--- a/gatchat/ppp_cp.c
+++ b/gatchat/ppp_cp.c
@@ -399,6 +399,8 @@ static void pppcp_send_terminate_request(struct pppcp_data 
*data)
struct pppcp_packet *packet;
struct pppcp_timer_data *timer_data = data-terminate_timer_data;
 
+   pppcp_trace(data);
+
/*
 * the data field can be used by the sender (us).
 * leave this empty for now.
@@ -430,6 +432,8 @@ static void pppcp_send_terminate_ack(struct pppcp_data 
*data,
struct pppcp_packet *packet;
struct pppcp_packet *pppcp_header = (struct pppcp_packet *) request;
 
+   pppcp_trace(data);
+
packet = pppcp_packet_new(data, TERMINATE_ACK, 0);
 
/* match identifier of the request */
@@ -621,6 +625,8 @@ static void pppcp_open_event(struct pppcp_data *data, 
guint8 *packet, guint len)
 
 static void pppcp_close_event(struct pppcp_data *data, guint8* packet, guint 
len)
 {
+   pppcp_trace(data);
+
switch (data-state) {
case INITIAL:
pppcp_transition_state(INITIAL, data);
@@ -1366,6 +1372,8 @@ static guint8 pppcp_process_configure_reject(struct 
pppcp_data *data,
 static guint8 pppcp_process_terminate_request(struct pppcp_data *data,
struct pppcp_packet *packet)
 {
+   pppcp_trace(data);
+
return RTR;
 }
 
@@ -1378,6 +1386,8 @@ static guint8 pppcp_process_terminate_ack(struct 
pppcp_data *data,
 * even if the identifiers don't match, we still handle
 * a terminate ack, as it is allowed to be unelicited
 */
+   pppcp_trace(data);
+
return RTA;
 }
 
-- 
1.6.6.1

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 3/4] separate memory cleanup from PPP shutdown

2010-03-24 Thread Kristen Carlson Accardi
don't free memory at PPP shutdown, because we need to be able to
send terminate traffic.  Free memory when we have reached the
PPP_DEAD phase instead.
---
 gatchat/gatppp.c |   25 +++--
 gatchat/ppp.c|   23 ++-
 2 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/gatchat/gatppp.c b/gatchat/gatppp.c
index 68c4dd1..8f19636 100644
--- a/gatchat/gatppp.c
+++ b/gatchat/gatppp.c
@@ -66,22 +66,8 @@ void g_at_ppp_set_disconnect_function(GAtPPP *ppp,
 
 void g_at_ppp_shutdown(GAtPPP *ppp)
 {
-   /* close the ppp */
+   /* close the ppp link */
ppp_close(ppp);
-
-   /* clean up all the queues */
-   g_queue_free(ppp-event_queue);
-   g_queue_free(ppp-recv_queue);
-
-   /* cleanup modem channel */
-   g_source_remove(ppp-modem_watch);
-   g_io_channel_unref(ppp-modem);
-
-   /* remove lcp */
-   lcp_free(ppp-lcp);
-
-   /* remove auth */
-   auth_free(ppp-auth);
 }
 
 void g_at_ppp_ref(GAtPPP *ppp)
@@ -91,10 +77,13 @@ void g_at_ppp_ref(GAtPPP *ppp)
 
 void g_at_ppp_unref(GAtPPP *ppp)
 {
-   if (g_atomic_int_dec_and_test(ppp-ref_count)) {
+   if (g_atomic_int_dec_and_test(ppp-ref_count))
g_at_ppp_shutdown(ppp);
-   g_free(ppp);
-   }
+
+   /*
+* we can't free the link yet, because we need to terminate
+* the link first.
+*/
 }
 
 GAtPPP *g_at_ppp_new(GIOChannel *modem)
diff --git a/gatchat/ppp.c b/gatchat/ppp.c
index f3bfba7..d771c3f 100644
--- a/gatchat/ppp.c
+++ b/gatchat/ppp.c
@@ -372,7 +372,28 @@ static void ppp_authenticate(GAtPPP *ppp)
 
 static void ppp_dead(GAtPPP *ppp)
 {
-   /* re-initialize everything */
+   /* notify interested parties */
+   if (ppp-disconnect_cb)
+   ppp-disconnect_cb(ppp, ppp-disconnect_data);
+
+   if (g_atomic_int_get(ppp-ref_count))
+   return;
+
+   /* clean up all the queues */
+   g_queue_free(ppp-event_queue);
+   g_queue_free(ppp-recv_queue);
+
+   /* cleanup modem channel */
+   g_source_remove(ppp-modem_watch);
+   g_io_channel_unref(ppp-modem);
+
+   /* remove lcp */
+   lcp_free(ppp-lcp);
+
+   /* remove auth */
+   auth_free(ppp-auth);
+
+   g_free(ppp);
 }
 
 static void ppp_network(GAtPPP *ppp)
-- 
1.6.6.1

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 4/4] gsmdial: shutdown ppp link if we have one.

2010-03-24 Thread Kristen Carlson Accardi
If we have created a ppp link, shut it down when the signal handler
is called.
---
 gatchat/gsmdial.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/gatchat/gsmdial.c b/gatchat/gsmdial.c
index aee9eea..a18f486 100644
--- a/gatchat/gsmdial.c
+++ b/gatchat/gsmdial.c
@@ -101,6 +101,8 @@ static gboolean signal_cb(GIOChannel *channel, GIOCondition 
cond, gpointer data)
case SIGTERM:
if (terminated == 0) {
char buf[64];
+   if (ppp)
+   g_at_ppp_shutdown(ppp);
 
g_timeout_add_seconds(10, quit_eventloop, NULL);
sprintf(buf, AT+CFUN=%u, option_offmode);
@@ -285,7 +287,7 @@ static void connect_cb(gboolean ok, GAtResult *result, 
gpointer user_data)
ppp = g_at_ppp_new(channel);
if (!ppp) {
g_print(Unable to create PPP object\n);
-   return;
+   exit(1);
}
g_at_ppp_set_credentials(ppp, option_username,
option_password);
-- 
1.6.6.1

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono