From: Marcel Holtmann <marcel@holtmann.org>
To: ofono@ofono.org
Subject: Re: [RFC PATCH 1/4] Added GPRS context provisioning driver API sources
Date: Tue, 11 Jan 2011 22:43:58 -0800 [thread overview]
Message-ID: <1294814638.3873.69.camel@aeonflux> (raw)
In-Reply-To: <1294665072-13630-2-git-send-email-jukka.saunamaki@nokia.com>
[-- Attachment #1: Type: text/plain, Size: 4976 bytes --]
Hi Jukka,
> +#ifndef __OFONO_GPRS_PROVISION_H
> +#define __OFONO_GPRS_PROVISION_H
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +#include "gprs-context.h"
> +
> +struct ofono_gprs_provisioning_data {
> + enum ofono_gprs_context_type type;
> + enum ofono_gprs_proto proto;
> + gchar *name;
> + gchar *apn;
> + gchar *username;
> + gchar *password;
> + gchar *message_proxy;
> + gchar *message_center;
> +};
don't bother with gchar *. Just use char * here. The gchar is
essentially bad idea. We only use it a few rare occasions or when it got
missed in a review.
> +
> +/*
> + * Callback from provisioning plugin.
> + * settings: list of struct ofono_gprs_provisioning_data
> + *
> + * It is responsibility of callback function to free settings-list
> + * settings-list elements must be freed with ofono_gprs_provisioning_data_free()
> + */
> +typedef void (*ofono_gprs_provision_cb_t)(GSList *settings, void *userdata);
> +
> +struct ofono_gprs_provision_driver {
> + const char *name;
> + int priority;
> + void (*get_settings) (struct ofono_modem *modem,
> + ofono_gprs_provision_cb_t cb,
> + void *userdata);
> +};
So here is something we need to talk about. The nettime plugin
infrastructure using a "pseudo" atom. So do we wanna do the same here or
do we wanna change the nettime atom to something simple like this.
I like to have consistency here. Aki, Denis, thoughts?
> +struct gprs_provisioning_request {
> + GSList *current_driver;
> + struct ofono_modem *modem;
> + ofono_gprs_provision_cb_t cb;
> + void *userdata;
The sort of general style is to call this user_data.
> +};
> +
> +static GSList *gprs_provision_drivers = NULL;
> +
> +
We also normally don't do double empty lines.
> +void ofono_gprs_provisioning_data_free(struct ofono_gprs_provisioning_data *data)
> +{
> + if (data == NULL)
> + return;
> +
> + g_free(data->name);
> + g_free(data->apn);
> + g_free(data->username);
> + g_free(data->password);
> + g_free(data->message_proxy);
> + g_free(data->message_center);
> + g_free(data);
> +}
> +
> +
> +static void settings_cb(GSList *settings, void *userdata)
> +{
Same here, please use user_data.
> + GSList *d;
> + struct gprs_provisioning_request *req = userdata;
And as another general rule, the variable that have an assignment like
the user_data come first.
> +
> + if (settings != NULL)
> + DBG("Provisioning plugin returned settings for %d contexts",
> + g_slist_length(settings));
> + else
> + DBG("Provisioning plugin returned no settings");
> +
> + d = req->current_driver->next;
> + if (settings == NULL && d != NULL) {
> + /* No success from this driver, try next */
> + const struct ofono_gprs_provision_driver *driver = d->data;
> + req->current_driver = d;
> + DBG("Calling provisioning plugin '%s'", driver->name);
> + driver->get_settings(req->modem, settings_cb, req);
> + return;
> + }
> +
> + req->cb(settings, req->userdata);
> + g_free(req);
> +}
> +
> +
Same here for the double empty lines. Please fix them all.
> +void ofono_gprs_provision_get_settings(struct ofono_modem *modem,
> + ofono_gprs_provision_cb_t cb,
> + void *userdata)
> +{
> + struct gprs_provisioning_request *req;
> + const struct ofono_gprs_provision_driver *driver;
> +
> + if (gprs_provision_drivers == 0)
This needs to be a == NULL.
> + goto error;
> +
> + req = g_try_new0(struct gprs_provisioning_request, 1);
> + if (req == NULL)
> + goto error;
> +
> + req->modem = modem;
> + req->cb = cb;
> + req->userdata = userdata;
> + req->current_driver = gprs_provision_drivers;
> +
> + driver = gprs_provision_drivers->data;
> + DBG("Calling provisioning plugin '%s'", driver->name);
Normally we put empty lines on top and below the DBG statement. Just to
make the stand out a bit.
Also in this case we might can remove some of the debug statements once
the code has been tested.
> + driver->get_settings(modem, settings_cb, req);
> + return;
> +
> +error:
> + cb(NULL, userdata);
> +}
> +
> +static gint compare_priority(gconstpointer a, gconstpointer b)
> +{
> + const struct ofono_gprs_provision_driver *plugin1 = a;
> + const struct ofono_gprs_provision_driver *plugin2 = b;
> +
> + return plugin2->priority - plugin1->priority;
> +}
> +
> +int ofono_gprs_provision_driver_register(const struct ofono_gprs_provision_driver *driver)
> +{
> + DBG("driver: %p name: %s", driver, driver->name);
> +
> + gprs_provision_drivers = g_slist_insert_sorted(gprs_provision_drivers,
> + (void *) driver,
> + compare_priority);
> + return 0;
> +}
> +
> +void ofono_gprs_provision_driver_unregister(const struct ofono_gprs_provision_driver *driver)
> +{
> + DBG("driver: %p name: %s", driver, driver->name);
> +
> + gprs_provision_drivers = g_slist_remove(gprs_provision_drivers, driver);
> +}
Regards
Marcel
next prev parent reply other threads:[~2011-01-12 6:43 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-10 13:11 [RFC PATCHv3 0/4] Plugin API for provisioning of GPRS context settings Jukka Saunamaki
2011-01-10 13:11 ` [RFC PATCH 1/4] Added GPRS context provisioning driver API sources Jukka Saunamaki
2011-01-12 6:43 ` Marcel Holtmann [this message]
2011-01-12 16:43 ` Denis Kenzior
2011-01-10 13:11 ` [RFC PATCH 2/4] gprs: add automatic context settings provisioning Jukka Saunamaki
2011-01-12 6:51 ` Marcel Holtmann
2011-01-12 7:26 ` Jukka Saunamaki
2011-01-12 16:37 ` Marcel Holtmann
2011-01-10 13:11 ` [RFC PATCH 3/4] sim: add ofono_sim_get_mnc_length Jukka Saunamaki
2011-01-11 0:40 ` Marcel Holtmann
2011-01-11 15:03 ` Denis Kenzior
2011-01-10 13:11 ` [RFC PATCH 4/4] Dummy example GPRS context provisioning driver Jukka Saunamaki
2011-01-12 6:48 ` Marcel Holtmann
2011-01-12 7:41 ` Jukka Saunamaki
2011-01-12 16:46 ` Denis Kenzior
2011-01-13 6:36 ` Jukka Saunamaki
2011-01-13 15:57 ` Denis Kenzior
2011-01-14 6:53 ` Jukka Saunamaki
2011-01-14 7:47 ` =?unknown-8bit?q?R=C3=A9mi?= Denis-Courmont
2011-01-14 10:37 ` Marcel Holtmann
2011-01-14 10:46 ` Jukka Saunamaki
2011-01-14 13:44 ` Marcel Holtmann
2011-01-14 13:58 ` Jukka Saunamaki
2011-01-14 14:10 ` Marcel Holtmann
2011-01-14 14:42 ` =?unknown-8bit?q?R=C3=A9mi?= Denis-Courmont
2011-01-15 1:30 ` Marcel Holtmann
2011-01-17 6:20 ` Jukka Saunamaki
2011-01-14 15:07 ` Denis Kenzior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1294814638.3873.69.camel@aeonflux \
--to=marcel@holtmann.org \
--cc=ofono@ofono.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.