Refactor: Move packet_ops to a static look-up

No need to allocate space for this, as it is always the same for all
instances.
This commit is contained in:
Denis Kenzior 2010-04-05 16:14:39 -05:00
parent 48a012c810
commit 4f5de3426e
2 changed files with 16 additions and 18 deletions

View File

@ -1242,6 +1242,21 @@ void pppcp_send_protocol_reject(struct pppcp_data *data,
pppcp_packet_free(packet);
}
static guint8 (*packet_ops[11])(struct pppcp_data *data,
struct pppcp_packet *packet) = {
pppcp_process_configure_request,
pppcp_process_configure_ack,
pppcp_process_configure_nak,
pppcp_process_configure_reject,
pppcp_process_terminate_request,
pppcp_process_terminate_ack,
pppcp_process_code_reject,
pppcp_process_protocol_reject,
pppcp_process_echo_request,
pppcp_process_echo_reply,
pppcp_process_discard_request,
};
/*
* parse the packet and determine which event this packet caused
*/
@ -1260,7 +1275,7 @@ void pppcp_process_packet(gpointer priv, guint8 *new_packet)
if (!(data->valid_codes & (1 << packet->code)))
event_type = RUC;
else
event_type = data->packet_ops[packet->code-1](data, packet);
event_type = packet_ops[packet->code-1](data, packet);
if (event_type) {
data_len = ntohs(packet->length);
@ -1321,21 +1336,6 @@ struct pppcp_data *pppcp_new(GAtPPP *ppp, guint16 proto)
data->ppp = ppp;
data->proto = proto;
/* setup func ptrs for processing packet by pppcp code */
data->packet_ops[CONFIGURE_REQUEST - 1] =
pppcp_process_configure_request;
data->packet_ops[CONFIGURE_ACK - 1] = pppcp_process_configure_ack;
data->packet_ops[CONFIGURE_NAK - 1] = pppcp_process_configure_nak;
data->packet_ops[CONFIGURE_REJECT - 1] = pppcp_process_configure_reject;
data->packet_ops[TERMINATE_REQUEST - 1] =
pppcp_process_terminate_request;
data->packet_ops[TERMINATE_ACK - 1] = pppcp_process_terminate_ack;
data->packet_ops[CODE_REJECT - 1] = pppcp_process_code_reject;
data->packet_ops[PROTOCOL_REJECT - 1] = pppcp_process_protocol_reject;
data->packet_ops[ECHO_REQUEST - 1] = pppcp_process_echo_request;
data->packet_ops[ECHO_REPLY - 1] = pppcp_process_echo_reply;
data->packet_ops[DISCARD_REQUEST - 1] = pppcp_process_discard_request;
switch (proto) {
case LCP_PROTOCOL:
codes = LCP_SUPPORTED_CODES;

View File

@ -80,8 +80,6 @@ struct pppcp_data {
guint8 reject_identifier;
struct pppcp_action *action;
guint16 valid_codes;
guint8 (*packet_ops[11])(struct pppcp_data *data,
struct pppcp_packet *packet);
gpointer priv;
guint16 proto;
const char *prefix;