diff options
author | Denis Kenzior <denkenz@gmail.com> | 2010-04-08 10:39:00 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-04-08 10:40:12 -0500 |
commit | c5590d114e62209fb847f10135807990b7187d99 (patch) | |
tree | a3545cd3431d97ef2e6fbf798cfaa420f6b25add | |
parent | 4e01f9921e527a4e360a43eff6f9b8bcda70a5c5 (diff) | |
download | ofono-c5590d114e62209fb847f10135807990b7187d99.tar.bz2 |
ppp: Move some one-time setters to the proto
-rw-r--r-- | gatchat/ppp_cp.c | 84 | ||||
-rw-r--r-- | gatchat/ppp_cp.h | 13 | ||||
-rw-r--r-- | gatchat/ppp_ipcp.c | 30 | ||||
-rw-r--r-- | gatchat/ppp_lcp.c | 12 |
4 files changed, 52 insertions, 87 deletions
diff --git a/gatchat/ppp_cp.c b/gatchat/ppp_cp.c index fbfe5159..485fcfe0 100644 --- a/gatchat/ppp_cp.c +++ b/gatchat/ppp_cp.c @@ -36,7 +36,7 @@ #define pppcp_trace(p) do { \ char *str = g_strdup_printf("%s: %s: current state %d:%s", \ - p->prefix, __FUNCTION__, \ + p->driver->name, __FUNCTION__, \ p->state, pppcp_state_strings[p->state]); \ ppp_debug(p->ppp, str); \ g_free(str); \ @@ -178,12 +178,8 @@ struct pppcp_data { guint8 config_identifier; guint8 terminate_identifier; guint8 reject_identifier; - const struct pppcp_action *action; - guint16 valid_codes; + const struct pppcp_proto *driver; gpointer priv; - guint16 proto; - const char *prefix; - const char **option_strings; }; static void pppcp_generate_event(struct pppcp_data *data, @@ -207,7 +203,7 @@ static struct pppcp_packet *pppcp_packet_new(struct pppcp_data *data, return NULL; /* add our protocol information */ - ppp_packet->proto = htons(data->proto); + ppp_packet->proto = htons(data->driver->proto); /* advance past protocol to add CP header information */ packet = (struct pppcp_packet *) (ppp_packet->info); @@ -311,35 +307,27 @@ static void pppcp_illegal_event(guint8 state, guint8 type) static void pppcp_this_layer_up(struct pppcp_data *data) { - const struct pppcp_action *action = data->action; - - if (action->this_layer_up) - action->this_layer_up(data); + if (data->driver->this_layer_up) + data->driver->this_layer_up(data); } static void pppcp_this_layer_down(struct pppcp_data *data) { - const struct pppcp_action *action = data->action; - - if (action->this_layer_down) - action->this_layer_down(data); + if (data->driver->this_layer_down) + data->driver->this_layer_down(data); } static void pppcp_this_layer_started(struct pppcp_data *data) { - const struct pppcp_action *action = data->action; - - if (action->this_layer_started) - action->this_layer_started(data); + if (data->driver->this_layer_started) + data->driver->this_layer_started(data); } static void pppcp_this_layer_finished(struct pppcp_data *data) { - const struct pppcp_action *action = data->action; - pppcp_trace(data); - if (action->this_layer_finished) - action->this_layer_finished(data); + if (data->driver->this_layer_finished) + data->driver->this_layer_finished(data); } static void pppcp_clear_options(struct pppcp_data *data) @@ -425,8 +413,10 @@ static void print_option(gpointer data, gpointer user_data) struct ppp_option *option = data; struct pppcp_data *pppcp = user_data; - g_print("%s: option %d len %d (%s)", pppcp->prefix, option->type, - option->length, pppcp->option_strings[option->type]); + g_print("%s: option %d len %d (%s)", pppcp->driver->name, option->type, + option->length, + pppcp->driver->option_strings[option->type]); + if (option->length > 2) { int i; for (i = 0; i < option->length - 2; i++) @@ -925,7 +915,6 @@ static guint8 pppcp_process_configure_request(struct pppcp_data *data, int i = 0; struct ppp_option *option; enum option_rval rval; - const struct pppcp_action *action = data->action; pppcp_trace(data); @@ -942,8 +931,8 @@ static guint8 pppcp_process_configure_request(struct pppcp_data *data, /* skip ahead to the next option */ i += option->length; - if (action->option_scan) - rval = action->option_scan(data, option); + if (data->driver->option_scan) + rval = data->driver->option_scan(data, option); else rval = OPTION_REJECT; @@ -979,11 +968,11 @@ static guint8 pppcp_process_configure_request(struct pppcp_data *data, * protocol will have to re-add them if they want them renegotiated * when the ppp goes down. */ - if (action->option_process) { + if (data->driver->option_process) { GList *l; for (l = data->acceptable_options; l; l = l->next) - action->option_process(data, l->data); + data->driver->option_process(data, l->data); g_list_foreach(data->acceptable_options, remove_config_option, data); @@ -998,7 +987,6 @@ static guint8 pppcp_process_configure_ack(struct pppcp_data *data, guint len; GList *list; guint i; - const struct pppcp_action *action = data->action; pppcp_trace(data); @@ -1033,8 +1021,8 @@ static guint8 pppcp_process_configure_ack(struct pppcp_data *data, } /* Otherwise, apply local options */ - if (action->rca) - action->rca(data, packet); + if (data->driver->rca) + data->driver->rca(data, packet); g_list_foreach(data->config_options, (GFunc)g_free, NULL); g_list_free(data->config_options); @@ -1052,7 +1040,6 @@ static guint8 pppcp_process_configure_nak(struct pppcp_data *data, struct ppp_option *config_option; guint i = 0; enum option_rval rval; - const struct pppcp_action *action = data->action; pppcp_trace(data); @@ -1076,8 +1063,8 @@ static guint8 pppcp_process_configure_nak(struct pppcp_data *data, /* skip ahead to the next option */ i += naked_option->length; - if (action->option_scan) - rval = action->option_scan(data, naked_option); + if (data->driver->option_scan) + rval = data->driver->option_scan(data, naked_option); else rval = OPTION_REJECT; @@ -1310,7 +1297,7 @@ void pppcp_process_packet(gpointer priv, guint8 *new_packet) return; /* check flags to see if we support this code */ - if (!(data->valid_codes & (1 << packet->code))) + if (!(data->driver->supported_codes & (1 << packet->code))) event_type = RUC; else event_type = packet_ops[packet->code-1](data, packet); @@ -1322,14 +1309,6 @@ void pppcp_process_packet(gpointer priv, guint8 *new_packet) } } -void pppcp_set_valid_codes(struct pppcp_data *data, guint16 codes) -{ - if (data == NULL) - return; - - data->valid_codes = codes; -} - void pppcp_free(struct pppcp_data *data) { if (data == NULL) @@ -1357,18 +1336,7 @@ GAtPPP *pppcp_get_ppp(struct pppcp_data *pppcp) return pppcp->ppp; } -void pppcp_set_option_strings(struct pppcp_data *pppcp, const char **opts) -{ - pppcp->option_strings = opts; -} - -void pppcp_set_prefix(struct pppcp_data *pppcp, const char *prefix) -{ - pppcp->prefix = prefix; -} - -struct pppcp_data *pppcp_new(GAtPPP *ppp, guint16 proto, - const struct pppcp_action *action) +struct pppcp_data *pppcp_new(GAtPPP *ppp, const struct pppcp_proto *proto) { struct pppcp_data *data; @@ -1387,8 +1355,6 @@ struct pppcp_data *pppcp_new(GAtPPP *ppp, guint16 proto, data->identifier = 0; data->ppp = ppp; - data->proto = proto; - data->action = action; return data; } diff --git a/gatchat/ppp_cp.h b/gatchat/ppp_cp.h index 71ad1de5..487b46d8 100644 --- a/gatchat/ppp_cp.h +++ b/gatchat/ppp_cp.h @@ -65,7 +65,11 @@ struct ppp_option_iter { const guint8 *option_data; }; -struct pppcp_action { +struct pppcp_proto { + guint16 proto; + const char *name; + guint16 supported_codes; + const char **option_strings; void (*this_layer_up)(struct pppcp_data *data); void (*this_layer_down)(struct pppcp_data *data); void (*this_layer_started)(struct pppcp_data *data); @@ -85,8 +89,7 @@ guint8 ppp_option_iter_get_type(struct ppp_option_iter *iter); guint8 ppp_option_iter_get_length(struct ppp_option_iter *iter); const guint8 *ppp_option_iter_get_data(struct ppp_option_iter *iter); -struct pppcp_data *pppcp_new(GAtPPP *ppp, guint16 proto, - const struct pppcp_action *action); +struct pppcp_data *pppcp_new(GAtPPP *ppp, const struct pppcp_proto *proto); void pppcp_free(struct pppcp_data *data); void pppcp_set_data(struct pppcp_data *pppcp, gpointer data); @@ -94,12 +97,8 @@ gpointer pppcp_get_data(struct pppcp_data *pppcp); GAtPPP *pppcp_get_ppp(struct pppcp_data *pppcp); -void pppcp_set_option_strings(struct pppcp_data *pppcp, const char **opts); -void pppcp_set_prefix(struct pppcp_data *pppcp, const char *prefix); - void pppcp_add_config_option(struct pppcp_data *data, struct ppp_option *option); -void pppcp_set_valid_codes(struct pppcp_data *data, guint16 codes); void pppcp_process_packet(gpointer priv, guint8 *new_packet); void pppcp_send_protocol_reject(struct pppcp_data *data, guint8 *rejected_packet, gsize len); diff --git a/gatchat/ppp_ipcp.c b/gatchat/ppp_ipcp.c index b8610666..8ac341f7 100644 --- a/gatchat/ppp_ipcp.c +++ b/gatchat/ppp_ipcp.c @@ -174,16 +174,6 @@ static void ipcp_option_process(struct pppcp_data *pppcp, } } -struct pppcp_action ipcp_action = { - .this_layer_up = ipcp_up, - .this_layer_down = ipcp_down, - .this_layer_started = ipcp_started, - .this_layer_finished = ipcp_finished, - .rca = ipcp_rca, - .option_scan = ipcp_option_scan, - .option_process = ipcp_option_process, -}; - static const char *ipcp_option_strings[256] = { [IP_ADDRESSES] = "IP-Addresses (deprecated)", [IP_COMPRESSION_PROTO] = "IP-Compression-Protocol", @@ -195,6 +185,20 @@ static const char *ipcp_option_strings[256] = { [SECONDARY_NBNS_SERVER] = "Secondary NBNS Server Address", }; +struct pppcp_proto ipcp_proto = { + .proto = IPCP_PROTO, + .name = "ipcp", + .supported_codes = IPCP_SUPPORTED_CODES, + .option_strings = ipcp_option_strings, + .this_layer_up = ipcp_up, + .this_layer_down = ipcp_down, + .this_layer_started = ipcp_started, + .this_layer_finished = ipcp_finished, + .rca = ipcp_rca, + .option_scan = ipcp_option_scan, + .option_process = ipcp_option_process, +}; + struct pppcp_data *ipcp_new(GAtPPP *ppp) { struct ipcp_data *ipcp; @@ -205,17 +209,13 @@ struct pppcp_data *ipcp_new(GAtPPP *ppp) if (!ipcp) return NULL; - pppcp = pppcp_new(ppp, IPCP_PROTO, &ipcp_action); + pppcp = pppcp_new(ppp, &ipcp_proto); if (!pppcp) { g_printerr("Failed to allocate PPPCP struct\n"); g_free(ipcp); return NULL; } - pppcp_set_option_strings(pppcp, ipcp_option_strings); - pppcp_set_prefix(pppcp, "ipcp"); - - pppcp_set_valid_codes(pppcp, IPCP_SUPPORTED_CODES); pppcp_set_data(pppcp, ipcp); /* add the default config options */ diff --git a/gatchat/ppp_lcp.c b/gatchat/ppp_lcp.c index 4aec88dc..5f080bfa 100644 --- a/gatchat/ppp_lcp.c +++ b/gatchat/ppp_lcp.c @@ -201,7 +201,11 @@ static const char *lcp_option_strings[256] = { [13] = "Callback", }; -struct pppcp_action lcp_action = { +struct pppcp_proto lcp_proto = { + .proto = LCP_PROTOCOL, + .name = "lcp", + .option_strings = lcp_option_strings, + .supported_codes = LCP_SUPPORTED_CODES, .this_layer_up = lcp_up, .this_layer_down = lcp_down, .this_layer_started = lcp_started, @@ -256,16 +260,12 @@ struct pppcp_data *lcp_new(GAtPPP *ppp) if (!lcp) return NULL; - pppcp = pppcp_new(ppp, LCP_PROTOCOL, &lcp_action); + pppcp = pppcp_new(ppp, &lcp_proto); if (!pppcp) { g_free(lcp); return NULL; } - pppcp_set_option_strings(pppcp, lcp_option_strings); - pppcp_set_prefix(pppcp, "lcp"); - - pppcp_set_valid_codes(pppcp, LCP_SUPPORTED_CODES); pppcp_set_data(pppcp, lcp); /* add the default config options */ |