From d89ad62c058c112e584246182f11c8db4d560202 Mon Sep 17 00:00:00 2001 From: Dmitriy Paliy Date: Wed, 29 Jun 2011 00:40:40 +0300 Subject: [PATCH] obexd: Split up session_create in separate functions Connection of RFCOMM and SDP are extracted from session_create function into session_connect. Such allows making asynchronous calls before creating connections. --- obexd/client/session.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/obexd/client/session.c b/obexd/client/session.c index c8945262c..e6b95dea7 100644 --- a/obexd/client/session.c +++ b/obexd/client/session.c @@ -533,6 +533,29 @@ static struct session_data *session_find(const char *source, return NULL; } +static int session_connect(struct session_data *session, + struct callback_data *callback) +{ + int err; + + if (session->obex) { + g_idle_add(connection_complete, callback); + err = 0; + } else if (session->channel > 0) { + session->io = rfcomm_connect(&session->src, &session->dst, + session->channel, + rfcomm_callback, + callback); + err = (session->io == NULL) ? -EINVAL : 0; + } else { + callback->sdp = service_connect(&session->src, &session->dst, + service_callback, callback); + err = (callback->sdp == NULL) ? -ENOMEM : 0; + } + + return err; +} + struct session_data *session_create(const char *source, const char *destination, const char *service, @@ -543,7 +566,6 @@ struct session_data *session_create(const char *source, { struct session_data *session; struct callback_data *callback; - int err; if (destination == NULL) return NULL; @@ -612,22 +634,7 @@ proceed: callback->func = function; callback->data = user_data; - if (session->obex) { - g_idle_add(connection_complete, callback); - err = 0; - } else if (session->channel > 0) { - session->io = rfcomm_connect(&session->src, &session->dst, - session->channel, - rfcomm_callback, - callback); - err = (session->io == NULL) ? -EINVAL : 0; - } else { - callback->sdp = service_connect(&session->src, &session->dst, - service_callback, callback); - err = (callback->sdp == NULL) ? -ENOMEM : 0; - } - - if (err < 0) { + if (session_connect(session, callback) < 0) { session_unref(session); g_free(callback); return NULL; -- 2.47.3