Open Source Telephony
 help / color / mirror / Atom feed
From: Gustavo F. Padovan <padovan@profusion.mobi>
To: ofono@ofono.org
Subject: Re: [PATCH -v2 6/7] emulator: Implement dialing up for DUN
Date: Tue, 08 Feb 2011 16:46:58 -0200	[thread overview]
Message-ID: <20110208184658.GC2160@joana> (raw)
In-Reply-To: <4D514AE3.3090903@linux.intel.com>

[-- Attachment #1: Type: text/plain, Size: 4629 bytes --]

HI Guillaume,

* Guillaume Zajac <guillaume.zajac@linux.intel.com> [2011-02-08 14:53:39 +0100]:

> Hi Gustavo,
> 
> On 04/02/2011 22:46, Gustavo F. Padovan wrote:
> > It handles client ATD*99# request and then initiate the PPP negotiation.
> > IP forward through the new ppp interface is not done yet.
> >
> > Initially based on patches from Zhenhua Zhang<zhenhua.zhang@intel.com>
> > ---
> >   src/emulator.c |  123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >   1 files changed, 123 insertions(+), 0 deletions(-)
> >
> > diff --git a/src/emulator.c b/src/emulator.c
> > index 49b129b..f1a079d 100644
> > --- a/src/emulator.c
> > +++ b/src/emulator.c
> > @@ -32,11 +32,18 @@
> >   #include "ofono.h"
> >   #include "common.h"
> >   #include "gatserver.h"
> > +#include "gatppp.h"
> > +
> > +#define DUN_SERVER_ADDRESS	"192.168.1.1"
> > +#define DUN_PEER_ADDRESS	"192.168.1.2"
> > +#define DUN_DNS_SERVER_1	"10.10.10.10"
> > +#define DUN_DNS_SERVER_2	"10.10.10.11"
> >
> >   struct ofono_emulator {
> >   	struct ofono_modem *modem;
> >   	struct ofono_atom *atom;
> >   	GAtServer *server;
> > +	GAtPPP *ppp;
> >   	struct ofono_emulator_driver *driver;
> >   };
> >
> > @@ -55,10 +62,124 @@ void ofono_emulator_remove(struct ofono_emulator *emulator)
> >   	__ofono_atom_free(emulator->atom);
> >   }
> >
> > +static void ppp_connect(const char *iface, const char *local,
> > +			const char *remote,
> > +			const char *dns1, const char *dns2,
> > +			gpointer user_data)
> > +{
> > +	DBG("Network Device: %s\n", iface);
> > +	DBG("IP Address: %s\n", local);
> > +	DBG("Remote IP Address: %s\n", remote);
> > +	DBG("Primary DNS Server: %s\n", dns1);
> > +	DBG("Secondary DNS Server: %s\n", dns2);
> > +}
> > +
> > +static void ppp_disconnect(GAtPPPDisconnectReason reason, gpointer user_data)
> > +{
> > +	struct ofono_emulator *e = user_data;
> > +
> > +	DBG("");
> > +
> > +	g_at_ppp_unref(e->ppp);
> > +	e->ppp = NULL;
> > +
> > +	if (e->server == NULL)
> > +		return;
> > +
> > +	g_at_server_resume(e->server);
> > +
> > +	g_at_server_send_final(e->server, G_AT_SERVER_RESULT_NO_CARRIER);
> > +}
> > +
> > +static gboolean setup_ppp(gpointer user_data)
> > +{
> > +	struct ofono_emulator *e = user_data;
> > +	GAtServer *server = e->server;
> > +	GAtIO *io;
> > +
> > +	DBG("");
> > +
> > +	io = g_at_server_get_io(server);
> > +
> > +	g_at_server_suspend(server);
> > +
> > +	e->ppp = g_at_ppp_server_new_from_io(io, DUN_SERVER_ADDRESS);
> > +	if (e->ppp == NULL) {
> > +		g_at_server_resume(server);
> > +		return FALSE;
> > +	}
> > +
> > +	g_at_ppp_set_server_info(e->ppp, DUN_PEER_ADDRESS,
> > +					DUN_DNS_SERVER_1, DUN_DNS_SERVER_2);
> > +
> > +	g_at_ppp_set_credentials(e->ppp, "", "");
> > +	g_at_ppp_set_debug(e->ppp, ofono_emulator_debug, "PPP");
> > +
> > +	g_at_ppp_set_connect_function(e->ppp, ppp_connect, e);
> > +	g_at_ppp_set_disconnect_function(e->ppp, ppp_disconnect, e);
> > +
> > +	return FALSE;
> > +}
> > +
> > +static gboolean dial_call(struct ofono_emulator *e, const char *dial_str)
> > +{
> > +	char c = *dial_str;
> > +
> > +	DBG("dial call %s", dial_str);
> > +
> > +	if (c == '*' || c == '#' || c == 'T' || c == 't') {
> > +
> > +		g_at_server_send_intermediate(e->server, "CONNECT");
> > +		g_idle_add(setup_ppp, e);
> > +	}
> > +
> > +	return TRUE;
> > +}
> > +
> > +static void dial_cb(GAtServerRequestType type, GAtResult *result,
> > +					gpointer user_data)
> > +{
> > +	struct ofono_emulator *e = user_data;
> > +	GAtServer *server = e->server;
> > +	GAtResultIter iter;
> > +	const char *dial_str;
> > +
> > +	DBG("");
> > +
> > +	if (type != G_AT_SERVER_REQUEST_TYPE_SET)
> > +		goto error;
> > +
> > +	g_at_result_iter_init(&iter, result);
> > +
> > +	if (!g_at_result_iter_next(&iter, "D"))
> > +		goto error;
> > +
> > +	dial_str = g_at_result_iter_raw_line(&iter);
> > +	if (!dial_str)
> > +		goto error;
> > +
> > +	if (e->ppp)
> > +		goto error;
> > +
> > +	if (!dial_call(e, dial_str))
> > +		goto error;
> > +
> > +	return;
> > +
> > +error:
> > +	g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
> > +}
> > +
> 
> Shouldn't we register a generic dial_cb() and separate it in 2 cases:
>      OFONO_ATOM_TYPE_DUN_EMULATOR, we do a dun_dial() that would look 
> like the dial_cb() you have implemented.
>      OFONO_ATOM_TYPE_HFP_AG, we do a hfp_dial() e.g. dial a number for a 
> voice call.

Yes, once we have HFP AG support we can do that.

-- 
Gustavo F. Padovan
http://profusion.mobi

  reply	other threads:[~2011-02-08 18:46 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-04 21:46 [PATCH -v2 1/7] bluetooth: Add bluetooth server support Gustavo F. Padovan
2011-02-04 21:46 ` [PATCH -v2 2/7] bluetooth: Add Bluetooth service authorization support Gustavo F. Padovan
2011-02-04 21:46   ` [PATCH -v2 3/7] include: add public headed to emulator atom Gustavo F. Padovan
2011-02-04 21:46     ` [PATCH -v2 4/7] emulator: Add emulator atom in oFono Gustavo F. Padovan
2011-02-04 21:46       ` [PATCH -v2 5/7] dun_gw: Add DUN server plugin for oFono Gustavo F. Padovan
2011-02-04 21:46         ` [PATCH -v2 6/7] emulator: Implement dialing up for DUN Gustavo F. Padovan
2011-02-04 21:46           ` [PATCH -v2 7/7] gsmdial: add option for Bluetooth DUN dialing Gustavo F. Padovan
2011-02-08 13:53           ` [PATCH -v2 6/7] emulator: Implement dialing up for DUN Guillaume Zajac
2011-02-08 18:46             ` Gustavo F. Padovan [this message]
2011-02-07  9:21         ` [PATCH -v2 5/7] dun_gw: Add DUN server plugin for oFono Guillaume Zajac
2011-02-07 18:19           ` Gustavo F. Padovan
2011-02-08  9:16             ` Guillaume Zajac

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=20110208184658.GC2160@joana \
    --to=padovan@profusion.mobi \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox