diff options
author | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2009-07-03 12:22:01 -0300 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2009-07-03 12:22:01 -0300 |
commit | ff4b4a1b9b64d156f5b42e3dbc6b67295451f1f8 (patch) | |
tree | bedee06ade6d25739074fe61739a0f79165b06d8 | |
parent | 5cef936a5b9dcfe343d2d4760a0facbc56033c86 (diff) | |
download | obexd-ff4b4a1b9b64d156f5b42e3dbc6b67295451f1f8.tar.gz |
Add Channel property.
Channel can be used to connect to specific channel without resolving target
record.
-rw-r--r-- | client/main.c | 31 | ||||
-rw-r--r-- | client/session.c | 11 | ||||
-rw-r--r-- | client/session.h | 3 | ||||
-rw-r--r-- | doc/client-api.txt | 4 |
4 files changed, 38 insertions, 11 deletions
diff --git a/client/main.c b/client/main.c index 985690d..e903a75 100644 --- a/client/main.c +++ b/client/main.c @@ -97,7 +97,8 @@ done: } static int parse_device_dict(DBusMessageIter *iter, - const char **source, const char **dest, const char **target) + const char **source, const char **dest, const char **target, + uint8_t *channel) { while (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_DICT_ENTRY) { DBusMessageIter entry, value; @@ -117,6 +118,11 @@ static int parse_device_dict(DBusMessageIter *iter, dbus_message_iter_get_basic(&value, dest); else if (g_str_equal(key, "Target") == TRUE) dbus_message_iter_get_basic(&value, target); + break; + case DBUS_TYPE_BYTE: + if (g_str_equal(key, "Channel") == TRUE) + dbus_message_iter_get_basic(&value, channel); + break; } dbus_message_iter_next(iter); @@ -132,11 +138,12 @@ static DBusMessage *send_files(DBusConnection *connection, GPtrArray *files; struct send_data *data; const char *agent, *source = NULL, *dest = NULL, *target = NULL; + uint8_t channel = 0; dbus_message_iter_init(message, &iter); dbus_message_iter_recurse(&iter, &array); - parse_device_dict(&array, &source, &dest, &target); + parse_device_dict(&array, &source, &dest, &target, &channel); if (dest == NULL) return g_dbus_create_error(message, "org.openobex.Error.InvalidArguments", NULL); @@ -180,7 +187,8 @@ static DBusMessage *send_files(DBusConnection *connection, data->agent = g_strdup(agent); data->files = files; - if (session_create(NULL, dest, "OPP", create_callback, data) == 0) + if (session_create(NULL, dest, "OPP", channel, create_callback, + data) == 0) return NULL; g_ptr_array_free(data->files, TRUE); @@ -238,11 +246,12 @@ static DBusMessage *pull_business_card(DBusConnection *connection, DBusMessageIter iter, dict; struct send_data *data; const char *source = NULL, *dest = NULL, *target = NULL; + uint8_t channel = 0; dbus_message_iter_init(message, &iter); dbus_message_iter_recurse(&iter, &dict); - parse_device_dict(&dict, &source, &dest, &target); + parse_device_dict(&dict, &source, &dest, &target, &channel); if (dest == NULL) return g_dbus_create_error(message, "org.openobex.Error.InvalidArguments", NULL); @@ -256,7 +265,7 @@ static DBusMessage *pull_business_card(DBusConnection *connection, data->message = dbus_message_ref(message); data->sender = g_strdup(dbus_message_get_sender(message)); - if (session_create(source, dest, "OPP", + if (session_create(source, dest, "OPP", channel, pull_session_callback, data) == 0) return NULL; @@ -280,11 +289,12 @@ static DBusMessage *create_session(DBusConnection *connection, DBusMessageIter iter, dict; struct send_data *data; const char *source = NULL, *dest = NULL, *target = NULL; + uint8_t channel = 0; dbus_message_iter_init(message, &iter); dbus_message_iter_recurse(&iter, &dict); - parse_device_dict(&dict, &source, &dest, &target); + parse_device_dict(&dict, &source, &dest, &target, &channel); if (dest == NULL || target == NULL) return g_dbus_create_error(message, "org.openobex.Error.InvalidArguments", NULL); @@ -298,7 +308,8 @@ static DBusMessage *create_session(DBusConnection *connection, data->message = dbus_message_ref(message); data->sender = g_strdup(dbus_message_get_sender(message)); - if (session_create(source, dest, target, create_callback, data) == 0) + if (session_create(source, dest, target, channel, create_callback, + data) == 0) return NULL; dbus_message_unref(data->message); @@ -368,11 +379,12 @@ static DBusMessage *get_capabilities(DBusConnection *connection, DBusMessageIter iter, dict; struct send_data *data; const char *source = NULL, *dest = NULL, *target = NULL; + uint8_t channel = 0; dbus_message_iter_init(message, &iter); dbus_message_iter_recurse(&iter, &dict); - parse_device_dict(&dict, &source, &dest, &target); + parse_device_dict(&dict, &source, &dest, &target, &channel); if (dest == NULL) return g_dbus_create_error(message, "org.openobex.Error.InvalidArguments", NULL); @@ -389,7 +401,8 @@ static DBusMessage *get_capabilities(DBusConnection *connection, if (!target) target = "OPP"; - if (session_create(source, dest, target, capability_session_callback, data) == 0) + if (session_create(source, dest, target, channel, capability_session_callback, + data) == 0) return NULL; dbus_message_unref(data->message); diff --git a/client/session.c b/client/session.c index 1ee4229..b87585d 100644 --- a/client/session.c +++ b/client/session.c @@ -286,6 +286,8 @@ static void search_callback(uint8_t type, uint16_t status, if (channel == 0) goto failed; + callback->session->channel = channel; + if (rfcomm_connect(&callback->session->src, &callback->session->dst, channel, rfcomm_callback, callback) == 0) { sdp_close(callback->sdp); @@ -380,7 +382,8 @@ static sdp_session_t *service_connect(const bdaddr_t *src, const bdaddr_t *dst, int session_create(const char *source, const char *destination, const char *target, - session_callback_t function, void *user_data) + uint8_t channel, session_callback_t function, + void *user_data) { struct session_data *session; struct callback_data *callback; @@ -395,6 +398,7 @@ int session_create(const char *source, session->refcount = 1; session->sock = -1; + session->channel = channel; session->conn = dbus_bus_get(DBUS_BUS_SESSION, NULL); if (session->conn == NULL) { @@ -618,6 +622,9 @@ static void append_entry(DBusMessageIter *dict, case DBUS_TYPE_STRING: signature = DBUS_TYPE_STRING_AS_STRING; break; + case DBUS_TYPE_BYTE: + signature = DBUS_TYPE_BYTE_AS_STRING; + break; case DBUS_TYPE_UINT64: signature = DBUS_TYPE_UINT64_AS_STRING; break; @@ -855,6 +862,8 @@ static DBusMessage *session_get_properties(DBusConnection *connection, ba2str(&session->dst, addr); append_entry(&dict, "Destination", DBUS_TYPE_STRING, &paddr); + append_entry(&dict, "Channel", DBUS_TYPE_BYTE, &session->channel); + if (session->agent_path) append_entry(&dict, "AgentPath", DBUS_TYPE_STRING, &session->agent_path); diff --git a/client/session.h b/client/session.h index e391c73..b9e9d3f 100644 --- a/client/session.h +++ b/client/session.h @@ -65,7 +65,8 @@ typedef void (*session_callback_t) (struct session_data *session, int session_create(const char *source, const char *destination, const char *target, - session_callback_t function, void *user_data); + uint8_t channel, session_callback_t function, + void *user_data); int session_set_agent(struct session_data *session, const char *name, const char *path); int session_send(struct session_data *session, const char *filename, diff --git a/doc/client-api.txt b/doc/client-api.txt index 9bd6c0a..3b8250a 100644 --- a/doc/client-api.txt +++ b/doc/client-api.txt @@ -43,6 +43,8 @@ Properties string Target string Destination + byte Channel + Session hierarchy ================= @@ -68,6 +70,8 @@ Properties string Source [read-only] string Destination [read-only] + byte Channel [read-only] + string AgentPath [read-only] Object Path of the assigned agent. This property will |