Re: [PATCH] Fix: simplify isimodem call-barring driver.
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
--- 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
--- 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
--- 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
--- 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
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
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
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
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
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
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
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
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
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
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()
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
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
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
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
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
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.
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