From a57817c7e52ede1589ffbd7e2abb444734e2df92 Mon Sep 17 00:00:00 2001 From: Tomas Hozza Date: Mon, 9 Sep 2013 18:12:00 +0200 Subject: [PATCH 1/2] Add sample application obex_push obex_push is a sample application capable of pushing and receiving files over the Bluetooth OBEX Push Channel. Signed-off-by: Tomas Hozza --- apps/CMakeLists.txt | 9 +++ apps/obex_push.c | 177 +++++++++++++++++++++++++++++++++++++++++++++++ doc/obex_push.xml | 78 +++++++++++++++++++++ doc/openobex-apps.xml | 1 + doc/referenceinfo.xml.in | 6 ++ 5 files changed, 271 insertions(+) create mode 100644 apps/obex_push.c create mode 100644 doc/obex_push.xml diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 55268ca..6aefb23 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -4,6 +4,10 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/lib ) add_subdirectory ( obex_test ) add_subdirectory ( ircp ) +set ( OPENOBEX_BLUETOOTH_APPS + obex_push +) + set ( OPENOBEX_COMMON_APPS irxfer irobex_palm3 @@ -18,6 +22,11 @@ if ( NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" ) list ( APPEND OPENOBEX_COMMON_APPS obex_tcp ) endif ( NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" ) +foreach ( prog ${OPENOBEX_BLUETOOTH_APPS} ) + list ( APPEND ${prog}_LIBS bluetooth ) + list ( APPEND OPENOBEX_COMMON_APPS ${prog} ) +endforeach ( prog ) + foreach ( prog ${OPENOBEX_COMMON_APPS} ) list ( APPEND ${prog}_LIBS openobex-apps-common ) list ( APPEND OPENOBEX_APPS ${prog} ) diff --git a/apps/obex_push.c b/apps/obex_push.c new file mode 100644 index 0000000..c5b7d2e --- /dev/null +++ b/apps/obex_push.c @@ -0,0 +1,177 @@ +/********************************************************************* + * + * Filename: obex_push.c + * Version: 0.1 + * Description: Demonstrates use of PUSH command + * Status: Experimental. + * Author: Harald Hoyer +#include + +#ifndef _WIN32 +#include +#endif + +#ifdef HAVE_CONFIG_H +#include +#endif + +#if _WIN32 +#include +#else +#include +#include +#include +#include +#endif /* _WIN32 */ + +#include + +#include +#include + +#include + +#include "obex_put_common.h" +#include "ircp/ircp_io.h" + +#define OBEX_PUSH_HANDLE 10 + +#define TRUE 1 +#define FALSE 0 + +obex_t *handle = NULL; +volatile int finished = FALSE; +extern int last_rsp; + +/* + * Function main (argc, ) + * + * Starts all the fun! + * + */ +int main(int argc, char *argv[]) +{ + obex_object_t *object; + int ret, exitval = EXIT_SUCCESS; + bdaddr_t bdaddr; + uint8_t channel; + char *filename; + if ((argc < 1) || (argc > 4)) { + printf ("Usage: %s [] [ ]\n", argv[0]); + return -1; + } + handle = OBEX_Init(OBEX_TRANS_BLUETOOTH, obex_event, 0); + + switch (argc) { +#ifdef HAVE_BLUETOOTH + case 4: + channel = atoi(argv[1]); + str2ba(argv[2], &bdaddr); + filename = argv[3]; + break; + case 3: + str2ba(argv[1], &bdaddr); + filename = argv[2]; + channel = OBEX_PUSH_HANDLE; + break; + case 2: + channel = atoi(argv[1]); + break; + case 1: + channel = OBEX_PUSH_HANDLE; + break; +#endif + default: + printf("Wrong number of arguments\n"); + exit(0); + } + + printf("Send and receive files through bluetooth OBEX PUSH channel %d\n", channel); + if (argc <= 2) { + char cmd[1024]; + int ret; + /* We are server*/ + snprintf(cmd, sizeof(cmd), "sdptool add --channel=%d OPUSH", channel); + ret = system(cmd); + if (ret != 0) { + fprintf(stderr, "Command failed: %s\n", cmd); + } + + printf("Waiting for files\n"); + BtOBEX_ServerRegister(handle, NULL, channel); + + while (!finished) + OBEX_HandleInput(handle, 1); + } + else { + char *basefilename = basename(strdup(filename)); + /* We are a client */ + if (bacmp(&bdaddr, BDADDR_ANY) == 0) { + printf("Device address error! (Bluetooth)\n"); + return -1; + } + + /* Try to connect to peer */ + ret = BtOBEX_TransportConnect(handle, BDADDR_ANY, &bdaddr, + channel); + if (ret < 0) { + printf("Sorry, unable to connect!\n"); + return EXIT_FAILURE; + } + + object = OBEX_ObjectNew(handle, OBEX_CMD_CONNECT); + ret = do_sync_request(handle, object, FALSE); + if ((last_rsp != OBEX_RSP_SUCCESS) || (ret < 0)) { + printf("Sorry, unable to connect!\n"); + return EXIT_FAILURE; + } + if ((object = build_object_from_file(handle, filename, + basefilename))) + { + ret = do_sync_request(handle, object, FALSE); + if ((last_rsp != OBEX_RSP_SUCCESS) || (ret < 0)) + exitval = EXIT_FAILURE; + } else + exitval = EXIT_FAILURE; + + object = OBEX_ObjectNew(handle, OBEX_CMD_DISCONNECT); + ret = do_sync_request(handle, object, FALSE); + if ((last_rsp != OBEX_RSP_SUCCESS) || (ret < 0)) + exitval = EXIT_FAILURE; + + if (exitval == EXIT_SUCCESS) + printf("PUT successful\n"); + else + printf("PUT failed\n"); + } +// sleep(1); + return exitval; +} diff --git a/doc/obex_push.xml b/doc/obex_push.xml new file mode 100644 index 0000000..0d3b105 --- /dev/null +++ b/doc/obex_push.xml @@ -0,0 +1,78 @@ + + + + + + openobex + + + + obex_push + 1 + User commands + + + obex_push + Push and Receive Files over the Bluetooth OBEX Push Channel + + + + obex_push + channel + bdaddr + filename + + + + Description + + obex_push can send and receive files over the Bluetooth OBEX Push Channel. + + + This program is designed to be an example application for the openobex library. + + + Link your bluetooth device with your computer. + + + You can see the SDP services with: "sdptool browse bdaddr" + + + + Options + + If no options are given, any files sent over bluetooth will be received over channel 10 and stored in /tmp. + If bdaddr and filename are given, the file will be + send to the device specified with bdaddr. + + + + + channel + + + The bluetooth channel to use. Lookup the OBEX Push channel with sdptool browse bdaddr. + + + + + bdaddr + + + The bluetooth address bdaddr of the device to send to. + + + + + filename + + + The file to send. + + + + + + + + diff --git a/doc/openobex-apps.xml b/doc/openobex-apps.xml index e874f6c..202c842 100644 --- a/doc/openobex-apps.xml +++ b/doc/openobex-apps.xml @@ -11,4 +11,5 @@ + diff --git a/doc/referenceinfo.xml.in b/doc/referenceinfo.xml.in index 77f56c3..1dde6bd 100644 --- a/doc/referenceinfo.xml.in +++ b/doc/referenceinfo.xml.in @@ -11,5 +11,11 @@ initial version of manpage post@hendrik-sattler.de + + Harald + Hoyer + Initial version of obex_push manpage + harald@redhat.com + -- 1.8.3.1