This list is closed, nobody may subscribe to it.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
(2) |
Sep
(7) |
Oct
(13) |
Nov
(11) |
Dec
(15) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(23) |
Feb
(19) |
Mar
(5) |
Apr
(2) |
May
(1) |
Jun
(14) |
Jul
(3) |
Aug
(4) |
Sep
(20) |
Oct
(18) |
Nov
(10) |
Dec
(5) |
2004 |
Jan
(8) |
Feb
(1) |
Mar
(6) |
Apr
(4) |
May
|
Jun
(25) |
Jul
(7) |
Aug
(1) |
Sep
(1) |
Oct
(19) |
Nov
(2) |
Dec
(1) |
2005 |
Jan
(17) |
Feb
(16) |
Mar
(11) |
Apr
(7) |
May
(4) |
Jun
(1) |
Jul
(21) |
Aug
(43) |
Sep
(64) |
Oct
(30) |
Nov
(25) |
Dec
(73) |
2006 |
Jan
(85) |
Feb
(39) |
Mar
(16) |
Apr
(33) |
May
(26) |
Jun
(6) |
Jul
(17) |
Aug
(60) |
Sep
(103) |
Oct
(196) |
Nov
(65) |
Dec
(17) |
2007 |
Jan
(49) |
Feb
(9) |
Mar
(17) |
Apr
(24) |
May
(77) |
Jun
(51) |
Jul
(40) |
Aug
(18) |
Sep
(25) |
Oct
(28) |
Nov
(29) |
Dec
(23) |
2008 |
Jan
(18) |
Feb
(30) |
Mar
(30) |
Apr
(5) |
May
(25) |
Jun
(14) |
Jul
(1) |
Aug
(12) |
Sep
(23) |
Oct
(34) |
Nov
(72) |
Dec
(47) |
2009 |
Jan
(45) |
Feb
(42) |
Mar
(17) |
Apr
(2) |
May
(52) |
Jun
(15) |
Jul
(18) |
Aug
(15) |
Sep
(2) |
Oct
(10) |
Nov
(1) |
Dec
|
2010 |
Jan
(1) |
Feb
(9) |
Mar
(22) |
Apr
(1) |
May
|
Jun
(8) |
Jul
(16) |
Aug
(13) |
Sep
(10) |
Oct
(25) |
Nov
(47) |
Dec
(17) |
2011 |
Jan
(26) |
Feb
(10) |
Mar
(5) |
Apr
(31) |
May
(6) |
Jun
(159) |
Jul
(118) |
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
(5) |
2012 |
Jan
|
Feb
|
Mar
(11) |
Apr
|
May
|
Jun
|
Jul
(5) |
Aug
(1) |
Sep
(1) |
Oct
|
Nov
|
Dec
(1) |
2013 |
Jan
(1) |
Feb
(1) |
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(4) |
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
2015 |
Jan
(2) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
2022 |
Jan
(2) |
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Fabrice D. <fde...@ma...> - 2011-12-20 08:12:54
|
> $ bluetooth-agent > Bluetooth agent ver 4.96 > Usage: > agent [--adapter adapter-path] [--path agent-path] <passkey> [<device>] Thank you very much! -- F. Delente |
From: Hendrik S. <po...@he...> - 2011-12-20 05:25:58
|
Am Montag, 19. Dezember 2011, 20:45:15 schrieb Fabrice DELENTE: > > Yes, you need to set the Bluetooth Pairing PIN for that device. This > > can easily be achieved using the bluetooth support for e.g. Gnome or > > KDE or with Bluez command line tools. You have to enter it two > > times, once on each side of the connection. > > Thanks for the tip; I looked into that, but it seems that I must use > passkey-agent to set the pairing PIN; however my bluez (4.91) doesn't > have passkey-agent, and bluez-utils seem deprecated for bluez-4.* ? $ bluetooth-agent Bluetooth agent ver 4.96 Usage: agent [--adapter adapter-path] [--path agent-path] <passkey> [<device>] HS |
From: Hendrik S. <po...@he...> - 2011-12-19 19:47:43
|
Am Montag, 19. Dezember 2011, 16:37:27 schrieb Fabrice DELENTE: > Hello. > > I'd like to send files from/to my laptop to a Nokia C3 cellphone. > > I have setup the bluetooth stack with hciconfig, and I can l2ping the > phone. > > When I try to initiate a connection with "obexftp -b <MAC of > cellphone> -l", the cellphone asks me if I want to authorize the > connexion, and then asks me for a code (it seems it must be digits > only). > > I tried 0000, 1234, 12345 and 9999, since I saw on the web that it can > be the default code, but none works. I can't find anywhere an option > on the cellphone to set this code. > > Any hint? Yes, you need to set the Bluetooth Pairing PIN for that device. This can easily be achieved using the bluetooth support for e.g. Gnome or KDE or with Bluez command line tools. You have to enter it two times, once on each side of the connection. You can possible avoid that PIN by using ObexPush protocol instead of FBS protocol, e.g. using -U none. Regards, HS |
From: Fabrice D. <fde...@ma...> - 2011-12-19 19:44:40
|
> Yes, you need to set the Bluetooth Pairing PIN for that device. This > can easily be achieved using the bluetooth support for e.g. Gnome or > KDE or with Bluez command line tools. You have to enter it two > times, once on each side of the connection. Thanks for the tip; I looked into that, but it seems that I must use passkey-agent to set the pairing PIN; however my bluez (4.91) doesn't have passkey-agent, and bluez-utils seem deprecated for bluez-4.* ? By the way I'm using a 3.1.5 kernel, if it's any use to know that. > You can possible avoid that PIN by using ObexPush protocol instead > of FBS protocol, e.g. using -U none. I'll look into that too. Thanks again! :^) -- F. Delente |
From: Fabrice D. <fde...@ma...> - 2011-12-19 15:36:55
|
Hello. I'd like to send files from/to my laptop to a Nokia C3 cellphone. I have setup the bluetooth stack with hciconfig, and I can l2ping the phone. When I try to initiate a connection with "obexftp -b <MAC of cellphone> -l", the cellphone asks me if I want to authorize the connexion, and then asks me for a code (it seems it must be digits only). I tried 0000, 1234, 12345 and 9999, since I saw on the web that it can be the default code, but none works. I can't find anywhere an option on the cellphone to set this code. Any hint? Thanks! -- F. Delente |
From: Hendrik S. <po...@he...> - 2011-07-31 20:29:56
|
--- apps/obex_test/obex_test.c | 26 ++++++++++++++++----- apps/obex_test/obex_test.h | 1 + apps/obex_test/obex_test_client.c | 44 +++++++++++++----------------------- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/apps/obex_test/obex_test.c b/apps/obex_test/obex_test.c index 4200f9b..9336e2a 100644 --- a/apps/obex_test/obex_test.c +++ b/apps/obex_test/obex_test.c @@ -49,6 +49,7 @@ bdaddr_t bluez_compat_bdaddr_any = { BTH_ADDR_NULL }; #include <unistd.h> #include <stdlib.h> #include <string.h> +#include <stdarg.h> #ifndef in_addr_t #define in_addr_t unsigned long @@ -107,6 +108,21 @@ static void obex_event(obex_t *handle, obex_object_t *object, int mode, } } +int read_input(char *answer, size_t size, const char *question, ...) +{ + va_list ap; + va_start(ap, question); + vfprintf(stdout, question, ap); + va_end(ap); + + fflush(stdout); + if (fgets(answer, size, stdin) == NULL) + return -1; + + answer[strlen(answer)-1] = '\0'; /* remove trailing newline */ + return strlen(answer); +} + #if 0 /* * Function get_peer_addr (name, peer) @@ -153,8 +169,8 @@ static int inet_connect(obex_t *handle) // int main (int argc, char *argv[]) { - char cmd[10]; - int num, end = 0; + char cmd[3]; + int end = 0; int cobex = FALSE, tcpobex = FALSE, btobex = FALSE, r320 = FALSE, usbobex = FALSE; obex_t *handle; #ifdef HAVE_BLUETOOTH @@ -349,11 +365,9 @@ int main (int argc, char *argv[]) printf( "OBEX Interactive test client/server.\n"); while (!end) { - printf("> "); - num = scanf("%s", cmd); - if (num == EOF) + if (read_input(cmd, sizeof(cmd), "> ") < 0) break; - switch (cmd[0] | 0x20) { + switch(cmd[0]) { case 'h': printf("Commands:\n" " c - connect\n" diff --git a/apps/obex_test/obex_test.h b/apps/obex_test/obex_test.h index a340f75..14d347e 100644 --- a/apps/obex_test/obex_test.h +++ b/apps/obex_test/obex_test.h @@ -19,5 +19,6 @@ struct context int clientdone; char *get_name; /* Name of last get-request */ }; +int read_input(char *answer, size_t size, const char *question, ...); #endif diff --git a/apps/obex_test/obex_test_client.c b/apps/obex_test/obex_test_client.c index 8f0efc7..da92df7 100644 --- a/apps/obex_test/obex_test_client.c +++ b/apps/obex_test/obex_test_client.c @@ -227,18 +227,14 @@ void push_client(obex_t *handle) unsigned int uname_size; char *bfname; uint8_t *uname; - int num; obex_headerdata_t hd; uint8_t *buf; int file_size; - printf("PUSH filename> "); - memset(fname, 0, sizeof(fname)); - num = scanf("%199c", fname); - if (num != 1) { - perror("scanf"); + if (read_input(fname, sizeof(fname), "PUSH file> ") <= 0) { + perror("Error reading file name"); return; } @@ -294,16 +290,12 @@ void put_client(obex_t *handle) char rname[200]; unsigned int rname_size; obex_headerdata_t hd; - int num; uint8_t *buf; int file_size; - printf("PUT file (local)> "); - memset(lname, 0, sizeof(lname)); - num = scanf("%199c", lname); - if (num != 1) { - perror("scanf:"); + if (read_input(lname, sizeof(lname), "PUT file (local)> ") <= 0) { + perror("Error reading file name"); return; } @@ -314,10 +306,12 @@ void put_client(obex_t *handle) return; } - printf("PUT remote filename (default: %s)> ", lname); - memset(rname, 0, sizeof(rname)); - num = scanf("%199c", rname); - if (num == 0) + if (read_input(rname, sizeof(rname), + "PUT remote filename (default: %s)> ", lname) < 0) { + perror("Error reading file name"); + return; + } + if (strlen(rname) == 0) strcpy(rname, lname); printf("Going to send %d bytes\n", file_size); @@ -362,14 +356,11 @@ void get_client(obex_t *handle, struct context *gt) obex_object_t *object; uint8_t rname[200]; char req_name[200]; - int num, rname_size; + int rname_size; obex_headerdata_t hd; - printf("GET File> "); - memset(req_name, 0, sizeof(req_name)); - num = scanf("%199c", req_name); - if (num != 1) { - perror("scanf:"); + if (read_input(req_name, sizeof(req_name), "GET file> ") <= 0) { + perror("Error reading file name"); return; } @@ -438,14 +429,11 @@ void setpath_client(obex_t *handle) uint8_t setpath_data[2] = { 0, 0 }; obex_object_t *object; char path[200]; - int num, path_size; + int path_size; obex_headerdata_t hd; - printf("SETPATH> "); - memset(path, 0, sizeof(path)); - num = scanf("%199c", path); - if (num != 1) { - perror("scanf:"); + if (read_input(path, sizeof(path), "SETPATH> ") <= 0) { + perror("Error reading path"); return; } -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-31 20:29:50
|
V2: - add function read_input() and uses it to print the prompt and read the user input |
From: Johan H. <joh...@gm...> - 2011-07-29 08:08:43
|
Hi, On Wed, Jul 27, 2011, Hendrik Sattler wrote: > This is needed for obex_test to actually work. > --- > lib/obex_client.c | 16 ++++++++-------- > 1 files changed, 8 insertions(+), 8 deletions(-) This patch has been applied. Johan |
From: Johan H. <joh...@gm...> - 2011-07-29 08:07:40
|
Hi Hendrik, On Wed, Jul 27, 2011, Hendrik Sattler wrote: > --- > apps/obex_test/obex_test.c | 12 ++++--- > apps/obex_test/obex_test_client.c | 61 ++++++++++++++++++++++-------------- > 2 files changed, 44 insertions(+), 29 deletions(-) Patches 1-9 have been applied, but this one has issues (though in general these two c-files are a total mess as far as coding style and whitespace is concerned). > diff --git a/apps/obex_test/obex_test.c b/apps/obex_test/obex_test.c > index 4200f9b..350d808 100644 > --- a/apps/obex_test/obex_test.c > +++ b/apps/obex_test/obex_test.c > @@ -153,8 +153,8 @@ static int inet_connect(obex_t *handle) > // > int main (int argc, char *argv[]) > { > - char cmd[10]; > - int num, end = 0; > + char cmd[3]; > + int end = 0; > int cobex = FALSE, tcpobex = FALSE, btobex = FALSE, r320 = FALSE, usbobex = FALSE; > obex_t *handle; > #ifdef HAVE_BLUETOOTH > @@ -350,10 +350,12 @@ int main (int argc, char *argv[]) > > while (!end) { > printf("> "); > - num = scanf("%s", cmd); > - if (num == EOF) > + fflush(stdout); > + (void)fgets(cmd, sizeof(cmd), stdin); Could you just do if (fgets(...) == NULL) break; to avoid the typecast (and even if there was a typecast there's always a space before the function/variable name. > + if (cmd[0] == 0) /* EOF */ > break; > - switch (cmd[0] | 0x20) { > + cmd[strlen(cmd)-1] = 0; /* remove trailing newline */ That should be cmd[strlen(cmd) - 1] = '\0'; (0 is for integers, '\0' for characters. Also not the whitespace change. > + fprintf(stdout, "PUSH file> "); > + fflush(stdout); > + (void)fgets(fname, sizeof(fname), stdin); The same thing as above. > + if (fname[0] == 0) /* EOF */ == '\0' > + fname[strlen(fname)-1] = 0; /* remove trailing newline */ Same thing as earlier. > + if (strlen(fname) == 0) { > perror("scanf"); You're not using scanf anymore so this error log isn't correct. Also, since you're truncating the string this strlen check doesn't guarantee that errno will be set. > + (void)fgets(lname, sizeof(lname), stdin); > + if (lname[0] == 0) /* EOF */ > + return; > + lname[strlen(lname)-1] = 0; /* remove trailing newline */ > + if (strlen(lname) == 0) { > perror("scanf:"); > return; > } Same issues here as I've already pointed out. > + fprintf(stdout, "PUT remote filename (default: %s)> ", lname); > + fflush(stdout); > + (void)fgets(rname, sizeof(rname), stdin); > + if (rname[0] == 0) /* EOF */ > + return; > + rname[strlen(rname)-1] = 0; /* remove trailing newline */ > + if (strlen(rname) == 0) And here. > + fprintf(stdout, "GET file> "); > + fflush(stdout); > + (void)fgets(req_name, sizeof(req_name), stdin); > + if (req_name[0] == 0) /* EOF */ > + return; > + req_name[strlen(req_name)-1] = 0; /* remove trailing newline */ > + if (strlen(req_name) == 0) { > perror("scanf:"); > return; > } And here. > + fprintf(stdout, "SETPATH> "); > + fflush(stdout); > + (void)fgets(path, sizeof(path), stdin); > + if (path[0] == 0) /* EOF */ > + return; > + path[strlen(path)-1] = 0; /* remove trailing newline */ > + if (strlen(path) == 0) { > perror("scanf:"); > return; > } And here. Btw, since the code patterns in all of these places are almost the same it'd probably make sense to make a helper function for this. Johan |
From: Hendrik S. <po...@he...> - 2011-07-28 06:18:23
|
Am Mittwoch, 27. Juli 2011, 22:16:37 schrieb Johan Hedberg: > Hi Hendrik, > > On Wed, Jul 27, 2011, Hendrik Sattler wrote: > > @Johan: > > You can find all of these patches in my gitorious repository in the > > "testing" branch and I really recommend pull from there! (git am has its > > issues when files with DOS-style line-endings are involved). I will not > > be available almost all of August, so can be get this in before then? > > You're asking me to review 52 patches by the end of this week? > Unfortunately I don't think that's doable even if I allocated all of my > time for this. I will at least try to get the ones in which you said are > strictly needed. No, I don't ask that ;-) You are right, it would be quite a lot :-/ Have fun... HS |
From: Johan H. <joh...@gm...> - 2011-07-27 20:16:47
|
Hi Hendrik, On Wed, Jul 27, 2011, Hendrik Sattler wrote: > @Johan: > You can find all of these patches in my gitorious repository in the "testing" > branch and I really recommend pull from there! (git am has its issues when > files with DOS-style line-endings are involved). I will not be available almost > all of August, so can be get this in before then? You're asking me to review 52 patches by the end of this week? Unfortunately I don't think that's doable even if I allocated all of my time for this. I will at least try to get the ones in which you said are strictly needed. Johan |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:45
|
--- lib/obex.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/lib/obex.c b/lib/obex.c index a2409a2..bf2b71b 100644 --- a/lib/obex.c +++ b/lib/obex.c @@ -81,7 +81,7 @@ - #OBEX_FL_KEEPSERVER : Keep the server alive after incomming request - #OBEX_FL_FILTERHINT : Filter target devices based on Obex hint bit - #OBEX_FL_FILTERIAS : Filter target devices based on IAS entry - - #OBEX_FL_CLOSEXEC : Open all sockets with SO_CLOEXEC set + - #OBEX_FL_CLOEXEC : Open all sockets with SO_CLOEXEC set \return an OBEX handle or NULL on error. */ LIB_SYMBOL -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:44
|
--- include/openobex/obex_const.h | 40 +++++++++++++++++++++++++++------------- 1 files changed, 27 insertions(+), 13 deletions(-) diff --git a/include/openobex/obex_const.h b/include/openobex/obex_const.h index ff147df..18d698a 100644 --- a/include/openobex/obex_const.h +++ b/include/openobex/obex_const.h @@ -151,19 +151,33 @@ enum obex_mode { OBEX_MODE_SERVER = 1, /**< server mode */ }; -/* Possible events */ -#define OBEX_EV_PROGRESS 0 /* Progress has been made */ -#define OBEX_EV_REQHINT 1 /* An incoming request is about to come */ -#define OBEX_EV_REQ 2 /* An incoming request has arrived */ -#define OBEX_EV_REQDONE 3 /* Request has finished */ -#define OBEX_EV_LINKERR 4 /* Link has been disconnected */ -#define OBEX_EV_PARSEERR 5 /* Malformed data encountered */ -#define OBEX_EV_ACCEPTHINT 6 /* Connection accepted */ -#define OBEX_EV_ABORT 7 /* Request was aborted */ -#define OBEX_EV_STREAMEMPTY 8 /* Need to feed more data when sending a stream */ -#define OBEX_EV_STREAMAVAIL 9 /* Time to pick up data when receiving a stream */ -#define OBEX_EV_UNEXPECTED 10 /* Unexpected data, not fatal */ -#define OBEX_EV_REQCHECK 11 /* First packet of an incoming request has been parsed */ +/** Possible events */ +enum obex_event { + /** Progress has been made */ + OBEX_EV_PROGRESS = 0, + /** An incoming request is about to come */ + OBEX_EV_REQHINT = 1, + /** An incoming request has arrived */ + OBEX_EV_REQ = 2, + /** Request has finished */ + OBEX_EV_REQDONE = 3, + /** Link has been disconnected */ + OBEX_EV_LINKERR = 4, + /** Malformed data encountered */ + OBEX_EV_PARSEERR = 5, + /** Connection accepted */ + OBEX_EV_ACCEPTHINT = 6, + /** Request was aborted */ + OBEX_EV_ABORT = 7, + /** Need to feed more data when sending a stream */ + OBEX_EV_STREAMEMPTY = 8, + /** Time to pick up data when receiving a stream */ + OBEX_EV_STREAMAVAIL = 9, + /** Unexpected data, not fatal */ + OBEX_EV_UNEXPECTED = 10, + /** First packet of an incoming request has been parsed */ + OBEX_EV_REQCHECK = 11, +}; /* For OBEX_Init() */ #define OBEX_FL_KEEPSERVER (1 << 1) /* Keep the server alive */ -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:38
|
--- include/openobex/obex.h | 1 + include/openobex/obex_const.h | 7 +++++++ lib/obex.c | 16 ++++++++++++++++ lib/obex.sym | 1 + lib/obex_main.c | 16 +++++++++++++--- lib/obex_main.h | 1 + 6 files changed, 39 insertions(+), 3 deletions(-) diff --git a/include/openobex/obex.h b/include/openobex/obex.h index e773c12..4d15671 100644 --- a/include/openobex/obex.h +++ b/include/openobex/obex.h @@ -111,6 +111,7 @@ OPENOBEX_SYMBOL(void *) OBEX_GetUserData(obex_t *self); OPENOBEX_SYMBOL(void) OBEX_SetEventCb(obex_t *self, obex_event_cb_t eventcb, void * data); OPENOBEX_SYMBOL(int) OBEX_SetTransportMTU(obex_t *self, uint16_t mtu_rx, uint16_t mtu_tx_max); OPENOBEX_SYMBOL(int) OBEX_GetFD(obex_t *self); +OPENOBEX_SYMBOL(enum obex_data_direction) OBEX_GetDataDirection(obex_t *self); OPENOBEX_SYMBOL(int) OBEX_RegisterCTransport(obex_t *self, obex_ctrans_t *ctrans); OPENOBEX_SYMBOL(int) OBEX_SetCustomData(obex_t *self, void * data); diff --git a/include/openobex/obex_const.h b/include/openobex/obex_const.h index f0cbbf0..eaf9a64 100644 --- a/include/openobex/obex_const.h +++ b/include/openobex/obex_const.h @@ -204,6 +204,13 @@ enum obex_transport_type { OBEX_TRANS_BT_L2CAP = 7, /**< Bluetooth L2CAP */ }; +/** Possible directions for data */ +enum obex_data_direction { + OBEX_DATA_DIR_NONE = 0, /**< No data */ + OBEX_DATA_DIR_RX = 1, /**< Incoming data */ + OBEX_DATA_DIR_TX = 2, /**< Outgoing data */ +}; + /* Standard headers */ #define OBEX_HDR_TYPE_UNICODE (0 << 6) /* zero terminated unicode string (network byte order) */ #define OBEX_HDR_TYPE_BYTES (1 << 6) /* byte array */ diff --git a/lib/obex.c b/lib/obex.c index 04016e1..ab22037 100644 --- a/lib/obex.c +++ b/lib/obex.c @@ -412,6 +412,22 @@ int CALLAPI OBEX_Work(obex_t *self, long timeout) } /** + Find out the current data transfer direction + \param self OBEX handle + \return see #obex_data_direction + + If you want to check externally if a socket is readable/writable, this + function together with OBEX_GetFD() gives you full control when to + call OBEX_Work(). + */ +LIB_SYMBOL +enum obex_data_direction CALLAPI OBEX_GetDataDirection(obex_t *self) +{ + DEBUG(4, "\n"); + return obex_get_data_direction(self); +} + +/** Feed OBEX with data when using a custom transport. \param self OBEX handle \param inputbuf Pointer to custom data diff --git a/lib/obex.sym b/lib/obex.sym index 3de52c7..4c07c29 100644 --- a/lib/obex.sym +++ b/lib/obex.sym @@ -7,6 +7,7 @@ OBEX_SetUserCallBack OBEX_SetEventCb OBEX_SetTransportMTU OBEX_GetFD +OBEX_GetDataDirection OBEX_RegisterCTransport OBEX_SetCustomData OBEX_GetCustomData diff --git a/lib/obex_main.c b/lib/obex_main.c index 714571a..5a7864c 100644 --- a/lib/obex_main.c +++ b/lib/obex_main.c @@ -380,6 +380,18 @@ static int obex_mode(obex_t *self) } } +enum obex_data_direction obex_get_data_direction (obex_t *self) +{ + if (self == NULL) + return OBEX_DATA_DIR_NONE; + + if (self->state == STATE_IDLE || + self->substate == SUBSTATE_RECEIVE_RX) + return OBEX_DATA_DIR_RX; + else + return OBEX_DATA_DIR_TX; +} + /* * Function obex_work (self, timeout) * @@ -390,9 +402,7 @@ int obex_work(obex_t *self, long timeout) { int ret; - if (self->state == STATE_IDLE || - self->substate == SUBSTATE_RECEIVE_RX) - { + if (obex_get_data_direction(self) == OBEX_DATA_DIR_RX) { ret = obex_transport_handle_input(self, timeout); if (ret <= 0) return ret; diff --git a/lib/obex_main.h b/lib/obex_main.h index be154d1..4f1465c 100644 --- a/lib/obex_main.h +++ b/lib/obex_main.h @@ -76,6 +76,7 @@ int obex_get_buffer_status(buf_t *msg); int obex_data_indication(struct obex *self); buf_t* obex_data_receive(obex_t *self); void obex_data_receive_finished(obex_t *self); +enum obex_data_direction obex_get_data_direction (obex_t *self); void obex_response_request(struct obex *self, uint8_t opcode); void obex_data_request_prepare(struct obex *self, struct databuffer *msg, -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:37
|
--- apps/obex_test/obex_test.c | 19 +++++++++++++++---- 1 files changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/obex_test/obex_test.c b/apps/obex_test/obex_test.c index 7527a51..4b9b0b2 100644 --- a/apps/obex_test/obex_test.c +++ b/apps/obex_test/obex_test.c @@ -167,9 +167,9 @@ int main (int argc, char *argv[]) struct context global_context = {0}; #ifdef HAVE_BLUETOOTH - int btobex = FALSE; + int btobex = 0; bdaddr_t bdaddr; - uint8_t channel = 0; + uint16_t channel = 0; #endif #ifdef HAVE_USB int usbobex = FALSE; @@ -192,6 +192,7 @@ int main (int argc, char *argv[]) #endif #ifdef HAVE_BLUETOOTH " -b [addr] [chan] Use bluetooth RFCOMM transport\n" + " -B [addr] [psm] Use bluetooth L2CAP transport\n" #endif #ifdef HAVE_USB " -u [interface] Use USB transport\n" @@ -214,7 +215,9 @@ int main (int argc, char *argv[]) #endif #ifdef HAVE_BLUETOOTH if (argc >= 2 && strcmp(argv[1], "-b") == 0) - btobex = TRUE; + btobex = 1; + if (argc >= 2 && strcmp(argv[1], "-B") == 0) + btobex = 2; #endif #ifdef HAVE_USB if (argc >= 2 && strcmp(argv[1], "-u") == 0) @@ -281,7 +284,7 @@ int main (int argc, char *argv[]) } switch (btobex) { - case TRUE: + case 1: printf("Using Bluetooth RFCOMM transport\n"); handle = OBEX_Init(OBEX_TRANS_BLUETOOTH, obex_event, 0); if (channel_arg) @@ -289,6 +292,14 @@ int main (int argc, char *argv[]) else channel = BT_CHANNEL; break; + + case 2: + printf("Using Bluetooth L2CAP transport\n"); + handle = OBEX_Init(OBEX_TRANS_BT_L2CAP, obex_event, 0); + if (channel_arg) + channel = atoi(channel_arg); + channel = (channel | 0x1001) & 0xFFFF; + break; } if (!handle) { -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:31
|
One step is triggered the transport handle_input function: this one fills the rx_msg buffer. It also used to read from that rx_msg buffer right again and trigger the state machine. This patch decouples the second part and is needed for further splitting into substates. --- lib/obex.c | 2 +- lib/obex_client.c | 13 +++++++-- lib/obex_client.h | 2 +- lib/obex_main.c | 73 ++++++++++++++++++++++++++++++++----------------- lib/obex_main.h | 2 + lib/obex_server.c | 18 +++++++++--- lib/obex_server.h | 2 +- lib/obex_transport.c | 2 +- 8 files changed, 78 insertions(+), 36 deletions(-) diff --git a/lib/obex.c b/lib/obex.c index bf2b71b..e56ef74 100644 --- a/lib/obex.c +++ b/lib/obex.c @@ -535,7 +535,7 @@ int CALLAPI OBEX_Request(obex_t *self, obex_object_t *object) self->mode = MODE_CLI; self->state = STATE_SEND; - return obex_client(self, NULL, 0); + return obex_client_send(self, NULL, 0); } /** diff --git a/lib/obex_client.c b/lib/obex_client.c index 0199fbf..e17528a 100644 --- a/lib/obex_client.c +++ b/lib/obex_client.c @@ -238,22 +238,29 @@ int obex_client_send(obex_t *self, buf_t *msg, int rsp) * Handle client operations * */ -int obex_client(obex_t *self, buf_t *msg, int final) +int obex_client(obex_t *self) { + int ret = -1; + buf_t *msg = obex_data_receive(self); int rsp = msg_get_rsp(msg); DEBUG(4, "\n"); switch (self->state) { case STATE_SEND: - return obex_client_send(self, msg, rsp); + ret = obex_client_send(self, msg, rsp); + break; case STATE_REC: - return obex_client_recv(self, msg, rsp); + ret = obex_client_recv(self, msg, rsp); + break; default: DEBUG(0, "Unknown state\n"); obex_deliver_event(self, OBEX_EV_PARSEERR, rsp, 0, TRUE); return -1; } + + obex_data_receive_finished(self); + return ret; } diff --git a/lib/obex_client.h b/lib/obex_client.h index bed3593..d1ae8fd 100644 --- a/lib/obex_client.h +++ b/lib/obex_client.h @@ -25,7 +25,7 @@ struct obex; struct databuffer; -int obex_client(struct obex *self, struct databuffer *msg, int final); +int obex_client(struct obex *self); int obex_client_send(obex_t *self, buf_t *msg, int rsp); #endif diff --git a/lib/obex_main.c b/lib/obex_main.c index 884c9e3..5337208 100644 --- a/lib/obex_main.c +++ b/lib/obex_main.c @@ -257,6 +257,20 @@ int obex_data_request(obex_t *self, buf_t *msg) return status; } +static int obex_mode(obex_t *self) +{ + switch (self->mode) { + case MODE_SRV: + return obex_server(self); + + case MODE_CLI: + return obex_client(self); + + default: + return -1; + } +} + /* * Function obex_work (self, timeout) * @@ -265,6 +279,8 @@ int obex_data_request(obex_t *self, buf_t *msg) */ int obex_work(obex_t *self, int timeout) { + int ret; + /* Waiting for an incoming packet will not work for single response mode * as the client is not supposed to send any when we (as server) are * sending the response. @@ -273,8 +289,6 @@ int obex_work(obex_t *self, int timeout) self->object->rsp_mode != OBEX_RSP_MODE_NORMAL && self->state == STATE_SEND && !(self->srm_flags & OBEX_SRM_FLAG_WAIT_LOCAL)) { - int ret; - /* Still, we need to do a zero-wait check for an ABORT * and for connection errors. */ ret = obex_transport_handle_input(self, 0); @@ -298,7 +312,10 @@ int obex_work(obex_t *self, int timeout) return sizeof(obex_common_hdr_t); } - return obex_transport_handle_input(self, timeout); + ret = obex_transport_handle_input(self, timeout); + if (ret == 1) + ret = obex_mode(self); + return ret; } /* @@ -314,15 +331,14 @@ int obex_get_buffer_status(buf_t *msg) { /* * Function obex_data_indication (self) * - * Read/Feed some input from device and find out which packet it is + * Read some input from device and find out which packet it is * */ int obex_data_indication(obex_t *self) { obex_common_hdr_t *hdr; buf_t *msg; - uint8_t opcode; - int final, ret, actual = 0; + int actual; unsigned int size; DEBUG(4, "\n"); @@ -342,7 +358,7 @@ int obex_data_indication(obex_t *self) * partial buffer (custom transport) */ if (actual < 0) { obex_deliver_event(self, OBEX_EV_LINKERR, 0, 0, TRUE); - return actual; + return -1; } } @@ -366,14 +382,14 @@ int obex_data_indication(obex_t *self) if (actual < 0) { obex_deliver_event(self, OBEX_EV_LINKERR, 0, 0, TRUE); - return actual; + return -1; } } } else { /* Wait until we have at least 3 bytes data */ DEBUG(3, "Need at least 3 bytes got only %lu!\n", (unsigned long) msg->data_size); - return actual; + return 0; } /* New data has been inserted at the end of message */ @@ -392,16 +408,20 @@ int obex_data_indication(obex_t *self) size, (unsigned long)msg->data_size); /* I'll be back! */ - return msg->data_size; + return 0; } DUMPBUFFER(2, "Rx", msg); - actual = msg->data_size; - opcode = hdr->opcode & ~OBEX_FINAL; - final = hdr->opcode & OBEX_FINAL; /* Extract final bit */ + return 1; +} + +buf_t* obex_data_receive(obex_t *self) +{ + buf_t *msg = self->rx_msg; + obex_common_hdr_t *hdr = (obex_common_hdr_t *)msg->data; + uint8_t opcode = hdr->opcode & ~OBEX_FINAL; - /* Dispatch to the mode we are in */ if (self->mode == MODE_SRV) { /* Single response mode makes it possible for the client to send * the next request (e.g. PUT) while still receiving the last @@ -411,23 +431,26 @@ int obex_data_indication(obex_t *self) self->object->rsp_mode != OBEX_RSP_MODE_NORMAL && self->state == STATE_SEND && !(opcode == OBEX_CMD_ABORT || opcode == self->object->cmd)) - return 0; + return NULL; + } - self->srm_flags &= ~OBEX_SRM_FLAG_WAIT_LOCAL; - ret = obex_server(self, msg, final); - } else - ret = obex_client(self, msg, final); + if (!obex_get_buffer_status(msg)) + return NULL; + + self->srm_flags &= ~OBEX_SRM_FLAG_WAIT_LOCAL; + return msg; +} + +void obex_data_receive_finished(obex_t *self) +{ + buf_t *msg = self->rx_msg; + obex_common_hdr_t *hdr = (obex_common_hdr_t *)msg->data; + unsigned int size = ntohs(hdr->len); DEBUG(4, "Pulling %u bytes\n", size); buf_remove_begin(msg, size); if (msg->data_size == 0) buf_reuse(msg); - - /* Check parse errors */ - if (ret < 0) - actual = ret; - - return actual; } /* diff --git a/lib/obex_main.h b/lib/obex_main.h index 53d2768..8a3e975 100644 --- a/lib/obex_main.h +++ b/lib/obex_main.h @@ -69,6 +69,8 @@ void obex_deliver_event(struct obex *self, int event, int cmd, int rsp, int del) int obex_work(struct obex *self, int timeout); int obex_get_buffer_status(buf_t *msg); int obex_data_indication(struct obex *self); +buf_t* obex_data_receive(obex_t *self); +void obex_data_receive_finished(obex_t *self); void obex_response_request(struct obex *self, uint8_t opcode); void obex_data_request_prepare(struct obex *self, struct databuffer *msg, diff --git a/lib/obex_server.c b/lib/obex_server.c index 52f490e..1902e4f 100644 --- a/lib/obex_server.c +++ b/lib/obex_server.c @@ -324,22 +324,29 @@ static int obex_server_idle(obex_t *self, buf_t *msg, int final, * Handle server-operations * */ -int obex_server(obex_t *self, buf_t *msg, int final) +int obex_server(obex_t *self) { + int ret = -1; + buf_t *msg = obex_data_receive(self); + obex_common_hdr_t *hdr = (obex_common_hdr_t *)msg->data; int cmd = msg_get_cmd(msg); uint16_t len = msg_get_len(msg); + int final = hdr->opcode & OBEX_FINAL; /* Extract final bit */ DEBUG(4, "\n"); switch (self->state) { case STATE_IDLE: - return obex_server_idle(self, msg, final, cmd, len); + ret = obex_server_idle(self, msg, final, cmd, len); + break; case STATE_REC: - return obex_server_recv(self, msg, final, cmd, len); + ret = obex_server_recv(self, msg, final, cmd, len); + break; case STATE_SEND: - return obex_server_send(self, msg, cmd, len); + ret = obex_server_send(self, msg, cmd, len); + break; default: DEBUG(0, "Unknown state\n"); @@ -347,4 +354,7 @@ int obex_server(obex_t *self, buf_t *msg, int final) obex_deliver_event(self, OBEX_EV_PARSEERR, cmd, 0, TRUE); return -1; } + + obex_data_receive_finished(self); + return ret; } diff --git a/lib/obex_server.h b/lib/obex_server.h index 3906e6f..2d4bc18 100644 --- a/lib/obex_server.h +++ b/lib/obex_server.h @@ -25,7 +25,7 @@ struct obex; struct databuffer; -int obex_server(struct obex *self, struct databuffer *msg, int final); +int obex_server(struct obex *self); int obex_server_send(obex_t *self, buf_t *msg, int cmd, uint16_t len); #endif diff --git a/lib/obex_transport.c b/lib/obex_transport.c index aa113ed..6207279 100644 --- a/lib/obex_transport.c +++ b/lib/obex_transport.c @@ -251,7 +251,7 @@ int obex_transport_handle_input(obex_t *self, int timeout) self->trans.timeout = timeout; if (obex_get_buffer_status(self->rx_msg)) { DEBUG(4, "full message already in buffer\n"); - return obex_data_indication(self); + return 1; } if (self->trans.ops.handle_input) -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:30
|
--- lib/obex_object.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/obex_object.c b/lib/obex_object.c index 78a15c5..f3f5672 100644 --- a/lib/obex_object.c +++ b/lib/obex_object.c @@ -744,9 +744,9 @@ static void obex_object_receive_stream(obex_t *self, uint8_t hi, } /* - * Function obex_object_receive_body() + * Function obex_object_receive_buffered() * - * Handle receiving of body + * Handle receiving of buffered body * */ static int obex_object_receive_buffered(obex_t *self, uint8_t hi, -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:23
|
--- lib/obex_client.c | 101 +++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 72 insertions(+), 29 deletions(-) diff --git a/lib/obex_client.c b/lib/obex_client.c index e17528a..fd9962b 100644 --- a/lib/obex_client.c +++ b/lib/obex_client.c @@ -49,12 +49,63 @@ static __inline uint16_t msg_get_len(const buf_t *msg) return 0; } -static int obex_client_recv(obex_t *self, buf_t *msg, int rsp) +static int obex_client_recv_transmit_tx(obex_t *self) +{ + int ret = 0; + int rsp = OBEX_RSP_CONTINUE; + + DEBUG(4, "STATE: RECV/TRANSMIT_TX\n"); + + ret = obex_object_send_transmit(self, self->object); + if (ret == -1) { + obex_deliver_event(self, OBEX_EV_LINKERR, + self->object->opcode, rsp, TRUE); + self->state = STATE_IDLE; + + } else if (ret == 1) { + obex_deliver_event(self, OBEX_EV_PROGRESS, + self->object->opcode, rsp, FALSE); + self->substate = SUBSTATE_RECEIVE_RX; + } + + return ret; +} + +static int obex_client_recv_prepare_tx(obex_t *self) +{ + DEBUG(4, "STATE: RECV/PREPARE_TX\n"); + + if (self->object->rsp_mode == OBEX_RSP_MODE_NORMAL || + (self->object->rsp_mode == OBEX_RSP_MODE_SINGLE && + self->srm_flags & OBEX_SRM_FLAG_WAIT_REMOTE)) + { + int ret = obex_object_prepare_send(self, self->object, TRUE, + FALSE); + if (ret == 1) { + self->substate = SUBSTATE_TRANSMIT_TX; + return obex_client_recv_transmit_tx(self); + + } else + return ret; + + } else { + self->substate = SUBSTATE_RECEIVE_RX; + } + + return 0; +} + +static int obex_client_recv(obex_t *self) { int ret; + buf_t *msg = obex_data_receive(self); + int rsp; - /* Receiving answer of request */ - DEBUG(4, "STATE_REC\n"); + DEBUG(4, "STATE: RECV/RECEIVE_RX\n"); + + if (msg == NULL) + return 0; + rsp = msg_get_rsp(msg); switch (self->object->opcode) { case OBEX_CMD_CONNECT: @@ -88,50 +139,33 @@ static int obex_client_recv(obex_t *self, buf_t *msg, int rsp) self->state = STATE_IDLE; return -1; } + obex_data_receive_finished(self); /* Are we done yet? */ if (rsp == OBEX_RSP_CONTINUE) { DEBUG(3, "Continue...\n"); - - self->object->continue_received = 1; - if (self->object->abort) { DEBUG(3, "Ignoring CONTINUE because request was aborted\n"); return 0; } - - if (self->object->suspend) { - DEBUG(3, "Not sending new request because transfer is suspended\n"); - return 0; - } - - if (self->object->rsp_mode == OBEX_RSP_MODE_NORMAL || - (self->srm_flags & OBEX_SRM_FLAG_WAIT_REMOTE)) { - ret = obex_object_send(self, self->object, TRUE, FALSE); - if (ret < 0) - obex_deliver_event(self, OBEX_EV_LINKERR, - self->object->opcode, rsp, - TRUE); - } - if (ret >= 0) - obex_deliver_event(self, OBEX_EV_PROGRESS, - self->object->opcode, rsp, FALSE); - - if (self->object) - self->object->continue_received = 0; + self->substate = SUBSTATE_PREPARE_TX; + return obex_client_recv_prepare_tx(self); } else { /* Notify app that client-operation is done! */ + ret = 0; DEBUG(3, "Done! Rsp=%02x!\n", rsp); if (self->object->abort) { if (rsp == OBEX_RSP_SUCCESS) obex_deliver_event(self, OBEX_EV_ABORT, self->object->opcode, rsp, TRUE); - else + else { obex_deliver_event(self, OBEX_EV_LINKERR, self->object->opcode, rsp, TRUE); + ret = -1; + } } else obex_deliver_event(self, OBEX_EV_REQDONE, @@ -139,9 +173,9 @@ static int obex_client_recv(obex_t *self, buf_t *msg, int rsp) rsp, TRUE); self->mode = MODE_SRV; self->state = STATE_IDLE; + return ret; } - return 0; } int obex_client_send(obex_t *self, buf_t *msg, int rsp) @@ -252,7 +286,16 @@ int obex_client(obex_t *self) break; case STATE_REC: - ret = obex_client_recv(self, msg, rsp); + switch (self->substate) { + case SUBSTATE_RECEIVE_RX: + return obex_client_recv(self); + + case SUBSTATE_PREPARE_TX: + return obex_client_recv_prepare_tx(self); + + case SUBSTATE_TRANSMIT_TX: + return obex_client_recv_transmit_tx(self); + } break; default: -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:23
|
Now that the multi-level state machine is used, the resume function can be simplified a lot. To actually continue now, you have to call the OBEX_HandleInput() function. --- lib/obex.c | 2 +- lib/obex_object.c | 43 ++++++------------------------------------- lib/obex_object.h | 2 +- 3 files changed, 8 insertions(+), 39 deletions(-) diff --git a/lib/obex.c b/lib/obex.c index 991f06f..277dbf2 100644 --- a/lib/obex.c +++ b/lib/obex.c @@ -574,7 +574,7 @@ LIB_SYMBOL int CALLAPI OBEX_ResumeRequest(obex_t *self) { obex_return_val_if_fail(self->object != NULL, -1); - return obex_object_resume(self, self->object); + return obex_object_resume(self->object); } /** diff --git a/lib/obex_object.c b/lib/obex_object.c index f888a2d..f0b4b7f 100644 --- a/lib/obex_object.c +++ b/lib/obex_object.c @@ -1146,49 +1146,18 @@ int obex_object_readstream(obex_t *self, obex_object_t *object, int obex_object_suspend(obex_object_t *object) { + if (object->suspend == 1) + return -1; + object->suspend = 1; return 0; } -int obex_object_resume(obex_t *self, obex_object_t *object) +int obex_object_resume(obex_object_t *object) { - int ret; - uint8_t cmd = obex_object_getcmd(self, object); - int allowfinalcmd = TRUE, forcefinalbit = FALSE; - - if (!object->suspend) - return 0; - - object->suspend = 0; - - if (object->first_packet_sent && !object->continue_received) - return 0; - - if (self->mode == MODE_SRV) { - forcefinalbit = TRUE; - if (self->state == STATE_REC) - allowfinalcmd = FALSE; - } - - ret = obex_object_send(self, object, allowfinalcmd, forcefinalbit); - - if (ret < 0) { - obex_deliver_event(self, OBEX_EV_LINKERR, cmd, 0, TRUE); + if (object->suspend == 0) return -1; - } else if (ret == 0) { - obex_deliver_event(self, OBEX_EV_PROGRESS, cmd, 0, FALSE); - object->first_packet_sent = 1; - object->continue_received = 0; - } else { - if (self->mode == MODE_SRV) { - obex_deliver_event(self, OBEX_EV_REQDONE, - cmd, 0, TRUE); - self->state = STATE_IDLE; - return 0; - } - } - - self->state = STATE_REC; + object->suspend = 0; return 0; } diff --git a/lib/obex_object.h b/lib/obex_object.h index 5bcbe0b..31a7d80 100644 --- a/lib/obex_object.h +++ b/lib/obex_object.h @@ -109,6 +109,6 @@ int obex_object_receive(struct obex *self, struct databuffer *msg); int obex_object_readstream(struct obex *self, struct obex_object *object, const uint8_t **buf); int obex_object_suspend(struct obex_object *object); -int obex_object_resume(struct obex *self, struct obex_object *object); +int obex_object_resume(struct obex_object *object); #endif -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:16
|
This is needed for obex_test to actually work. --- lib/obex_client.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/obex_client.c b/lib/obex_client.c index 5107d62..0199fbf 100644 --- a/lib/obex_client.c +++ b/lib/obex_client.c @@ -61,10 +61,10 @@ static int obex_client_recv(obex_t *self, buf_t *msg, int rsp) /* Response of a CMD_CONNECT needs some special treatment.*/ DEBUG(2, "We expect a connect-rsp\n"); if (obex_parse_connect_header(self, msg) < 0) { - self->mode = MODE_SRV; - self->state = STATE_IDLE; obex_deliver_event(self, OBEX_EV_PARSEERR, self->object->opcode, 0, TRUE); + self->mode = MODE_SRV; + self->state = STATE_IDLE; return -1; } self->object->headeroffset=4; @@ -82,10 +82,10 @@ static int obex_client_recv(obex_t *self, buf_t *msg, int rsp) /* Receive any headers */ ret = obex_object_receive(self, msg); if (ret < 0) { - self->mode = MODE_SRV; - self->state = STATE_IDLE; obex_deliver_event(self, OBEX_EV_PARSEERR, self->object->opcode, 0, TRUE); + self->mode = MODE_SRV; + self->state = STATE_IDLE; return -1; } @@ -123,8 +123,6 @@ static int obex_client_recv(obex_t *self, buf_t *msg, int rsp) } else { /* Notify app that client-operation is done! */ DEBUG(3, "Done! Rsp=%02x!\n", rsp); - self->mode = MODE_SRV; - self->state = STATE_IDLE; if (self->object->abort) { if (rsp == OBEX_RSP_SUCCESS) obex_deliver_event(self, OBEX_EV_ABORT, @@ -139,6 +137,8 @@ static int obex_client_recv(obex_t *self, buf_t *msg, int rsp) obex_deliver_event(self, OBEX_EV_REQDONE, self->object->opcode, rsp, TRUE); + self->mode = MODE_SRV; + self->state = STATE_IDLE; } return 0; @@ -197,10 +197,10 @@ int obex_client_send(obex_t *self, buf_t *msg, int rsp) if (self->object->opcode == OBEX_CMD_CONNECT) ret = obex_object_receive(self, msg); if (ret < 0) { - self->mode = MODE_SRV; - self->state = STATE_IDLE; obex_deliver_event(self, OBEX_EV_PARSEERR, self->object->opcode, 0, TRUE); + self->mode = MODE_SRV; + self->state = STATE_IDLE; return -1; } -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:16
|
--- lib/obex_incl.h | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/lib/obex_incl.h b/lib/obex_incl.h index dbca28e..d1b5446 100644 --- a/lib/obex_incl.h +++ b/lib/obex_incl.h @@ -10,6 +10,11 @@ /* This add the deprecated API items */ #define OPENOBEX_DEPRECATED 1 +/* Visual Studio C++ Compiler 7.1 does not know about Bluetooth */ +#if defined(_MSC_VER) && _MSC_VER < 1400 +#define bt_addr_t void +#endif + #include <openobex/obex.h> #endif -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:09
|
--- apps/obex_test/obex_test.c | 17 +++++++---------- 1 files changed, 7 insertions(+), 10 deletions(-) diff --git a/apps/obex_test/obex_test.c b/apps/obex_test/obex_test.c index 96e16fa..184a70b 100644 --- a/apps/obex_test/obex_test.c +++ b/apps/obex_test/obex_test.c @@ -118,28 +118,25 @@ static void obex_event(obex_t *handle, obex_object_t *object, #if 0 /* * Function get_peer_addr (name, peer) - * - * - * */ -static int get_peer_addr(char *name, struct sockaddr_in *peer) +static int get_peer_addr(char *name, struct sockaddr_in *peer) { struct hostent *host; in_addr_t inaddr; - + /* Is the address in dotted decimal? */ if ((inaddr = inet_addr(name)) != INADDR_NONE) { memcpy((char *) &peer->sin_addr, (char *) &inaddr, - sizeof(inaddr)); + sizeof(inaddr)); } else { if ((host = gethostbyname(name)) == NULL) { printf( "Bad host name: "); exit(-1); - } + } memcpy((char *) &peer->sin_addr, host->h_addr, host->h_length); - } + } return 0; } @@ -155,7 +152,7 @@ static int inet_connect(obex_t *handle) sizeof(struct sockaddr_in)); } #endif - + // // // @@ -408,7 +405,7 @@ int main (int argc, char *argv[]) } OBEX_SetUserData(handle, &global_context); - + printf( "OBEX Interactive test client/server.\n"); while (!end) { -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:08
|
This also makes the public type an enum (like it was for the internal type) but the names for the values stay the same. --- include/openobex/obex_const.h | 7 +++++-- lib/defines.h | 5 ----- lib/obex.c | 6 +++--- lib/obex_client.c | 12 ++++++------ lib/obex_main.c | 9 +++------ lib/obex_object.c | 2 +- 6 files changed, 18 insertions(+), 23 deletions(-) diff --git a/include/openobex/obex_const.h b/include/openobex/obex_const.h index 8276aae..ff147df 100644 --- a/include/openobex/obex_const.h +++ b/include/openobex/obex_const.h @@ -145,8 +145,11 @@ typedef union { //obex_bluetooth_intf_t bt; // to be added } obex_interface_t; -#define OBEX_MODE_CLIENT 0 -#define OBEX_MODE_SERVER 1 +/** Possible modes */ +enum obex_mode { + OBEX_MODE_CLIENT = 0, /**< client mode */ + OBEX_MODE_SERVER = 1, /**< server mode */ +}; /* Possible events */ #define OBEX_EV_PROGRESS 0 /* Progress has been made */ diff --git a/lib/defines.h b/lib/defines.h index 5935930..051509a 100644 --- a/lib/defines.h +++ b/lib/defines.h @@ -18,11 +18,6 @@ #define OBEX_VERSION 0x10 /* OBEX Protocol Version 1.1 */ -enum obex_mode { - MODE_SRV, - MODE_CLI, -}; - enum obex_state { STATE_IDLE, STATE_SEND, diff --git a/lib/obex.c b/lib/obex.c index eaa50b0..7bb5bfb 100644 --- a/lib/obex.c +++ b/lib/obex.c @@ -118,7 +118,7 @@ obex_t * CALLAPI OBEX_Init(int transport, obex_event_t eventcb, self->eventcb = eventcb; self->init_flags = flags; - self->mode = MODE_SRV; + self->mode = OBEX_MODE_SERVER; self->state = STATE_IDLE; self->rsp_mode = OBEX_RSP_MODE_NORMAL; @@ -383,7 +383,7 @@ obex_t *CALLAPI OBEX_ServerAccept(obex_t *server, obex_event_t eventcb, goto out_err; obex_transport_split(self, server); - self->mode = MODE_SRV; + self->mode = OBEX_MODE_SERVER; self->state = STATE_IDLE; self->rsp_mode = server->rsp_mode; @@ -532,7 +532,7 @@ int CALLAPI OBEX_Request(obex_t *self, obex_object_t *object) object->rsp_mode = self->rsp_mode; self->object = object; - self->mode = MODE_CLI; + self->mode = OBEX_MODE_CLIENT; self->state = STATE_SEND; self->substate = SUBSTATE_PREPARE_TX; diff --git a/lib/obex_client.c b/lib/obex_client.c index efaf9f3..0282886 100644 --- a/lib/obex_client.c +++ b/lib/obex_client.c @@ -99,7 +99,7 @@ static int obex_client_abort(obex_t *self) if (event == OBEX_EV_LINKERR) ret = -1; - self->mode = MODE_SRV; + self->mode = OBEX_MODE_SERVER; self->state = STATE_IDLE; return ret; } @@ -176,7 +176,7 @@ static int obex_client_recv(obex_t *self) if (obex_parse_connect_header(self, msg) < 0) { obex_deliver_event(self, OBEX_EV_PARSEERR, self->object->opcode, 0, TRUE); - self->mode = MODE_SRV; + self->mode = OBEX_MODE_SERVER; self->state = STATE_IDLE; return -1; } @@ -198,7 +198,7 @@ static int obex_client_recv(obex_t *self) if (ret < 0) { obex_deliver_event(self, OBEX_EV_PARSEERR, self->object->opcode, 0, TRUE); - self->mode = MODE_SRV; + self->mode = OBEX_MODE_SERVER; self->state = STATE_IDLE; return -1; } @@ -216,7 +216,7 @@ static int obex_client_recv(obex_t *self) DEBUG(3, "Done! Rsp=%02x!\n", rsp); obex_deliver_event(self, OBEX_EV_REQDONE, self->object->opcode, rsp, TRUE); - self->mode = MODE_SRV; + self->mode = OBEX_MODE_SERVER; self->state = STATE_IDLE; return 0; } @@ -234,7 +234,7 @@ static int obex_client_send_transmit_tx(obex_t *self) /* Error while sending */ obex_deliver_event(self, OBEX_EV_LINKERR, self->object->opcode, 0, TRUE); - self->mode = MODE_SRV; + self->mode = OBEX_MODE_SERVER; self->state = STATE_IDLE; } else if (ret == 1) { @@ -344,7 +344,7 @@ static int obex_client_send(obex_t *self) if (ret < 0) { obex_deliver_event(self, OBEX_EV_PARSEERR, self->object->opcode, 0, TRUE); - self->mode = MODE_SRV; + self->mode = OBEX_MODE_SERVER; self->state = STATE_IDLE; return -1; } diff --git a/lib/obex_main.c b/lib/obex_main.c index 03819a2..690dd97 100644 --- a/lib/obex_main.c +++ b/lib/obex_main.c @@ -192,10 +192,7 @@ void obex_deliver_event(obex_t *self, int event, int cmd, int rsp, int del) if (del == TRUE) self->object = NULL; - if (self->mode == MODE_SRV) - self->eventcb(self, object, OBEX_MODE_SERVER, event, cmd, rsp); - else - self->eventcb(self, object, OBEX_MODE_CLIENT, event, cmd, rsp); + self->eventcb(self, object, self->mode, event, cmd, rsp); if (del == TRUE) obex_object_delete(object); @@ -267,10 +264,10 @@ int obex_data_request(obex_t *self, buf_t *msg) static int obex_mode(obex_t *self) { switch (self->mode) { - case MODE_SRV: + case OBEX_MODE_SERVER: return obex_server(self); - case MODE_CLI: + case OBEX_MODE_CLIENT: return obex_client(self); default: diff --git a/lib/obex_object.c b/lib/obex_object.c index f0b4b7f..9f84862 100644 --- a/lib/obex_object.c +++ b/lib/obex_object.c @@ -278,7 +278,7 @@ int obex_object_addheader(obex_t *self, obex_object_t *object, uint8_t hi, static uint8_t obex_object_getcmd(const obex_t *self, const obex_object_t *object) { - if (self->mode == MODE_SRV) + if (self->mode == OBEX_MODE_SERVER) return object->cmd; else return (object->opcode & ~OBEX_FINAL); -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:01
|
--- include/openobex/obex_const.h | 18 ++++++++++-------- 1 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/openobex/obex_const.h b/include/openobex/obex_const.h index 18d698a..cdcd823 100644 --- a/include/openobex/obex_const.h +++ b/include/openobex/obex_const.h @@ -193,14 +193,16 @@ enum obex_event { #define OBEX_FL_STREAM_DATAEND 0x08 /* Body stream last data */ #define OBEX_FL_SUSPEND 0x10 /* Suspend after sending this header */ -/* Transports */ -#define OBEX_TRANS_IRDA 1 -#define OBEX_TRANS_INET 2 -#define OBEX_TRANS_CUSTOM 3 -#define OBEX_TRANS_BLUETOOTH 4 /* Bluetooth RFCOMM */ -#define OBEX_TRANS_FD 5 -#define OBEX_TRANS_USB 6 -#define OBEX_TRANS_BT_L2CAP 7 /* Bluetooth L2CAP */ +/** Possible transports */ +enum obex_transport_type { + OBEX_TRANS_IRDA = 1, /**< Infrared */ + OBEX_TRANS_INET = 2, /**< TCP over IPv4/v6 */ + OBEX_TRANS_CUSTOM = 3, /**< Custom transport with callbacks */ + OBEX_TRANS_BLUETOOTH = 4, /**< Bluetooth RFCOMM */ + OBEX_TRANS_FD = 5, /**< file descriptors */ + OBEX_TRANS_USB = 6, /**< USB CDC OBEX */ + OBEX_TRANS_BT_L2CAP = 7, /**< Bluetooth L2CAP */ +}; /* Standard headers */ #define OBEX_HDR_TYPE_UNICODE (0 << 6) /* zero terminated unicode string (network byte order) */ -- 1.7.5.4 |
From: Hendrik S. <po...@he...> - 2011-07-27 17:02:01
|
Change obex_test so that only the compiled-in parts are visible. Prepare the bluetooth part for addition of L2CAP usage. --- apps/obex_test/obex_test.c | 247 ++++++++++++++++++++++++-------------------- 1 files changed, 136 insertions(+), 111 deletions(-) diff --git a/apps/obex_test/obex_test.c b/apps/obex_test/obex_test.c index 350d808..7527a51 100644 --- a/apps/obex_test/obex_test.c +++ b/apps/obex_test/obex_test.c @@ -27,6 +27,11 @@ #include "../lib/bluez_compat.h" #ifdef _WIN32 bdaddr_t bluez_compat_bdaddr_any = { BTH_ADDR_NULL }; +int str2ba(const char *str, bdaddr_t *ba) { + //TODO + *ba = *BDADDR_ANY; + return 0; +} #endif #endif @@ -36,9 +41,11 @@ bdaddr_t bluez_compat_bdaddr_any = { BTH_ADDR_NULL }; #include "obex_test_client.h" #include "obex_test_server.h" -#ifndef _WIN32 +#if defined(_WIN32) +#undef HAVE_CABLE_OBEX +#else #include "obex_test_cable.h" - +#define HAVE_CABLE_OBEX 1 #include <sys/socket.h> #include <arpa/inet.h> #include <netdb.h> @@ -76,7 +83,7 @@ static void obex_event(obex_t *handle, obex_object_t *object, int mode, break; case OBEX_EV_REQDONE: - if(mode == OBEX_MODE_CLIENT) { + if (mode == OBEX_MODE_CLIENT) { client_done(handle, object, obex_cmd, obex_rsp); } else { @@ -155,76 +162,88 @@ int main (int argc, char *argv[]) { char cmd[3]; int end = 0; - int cobex = FALSE, tcpobex = FALSE, btobex = FALSE, r320 = FALSE, usbobex = FALSE; - obex_t *handle; + int tcpobex = FALSE; + obex_t *handle = NULL; + struct context global_context = {0}; + #ifdef HAVE_BLUETOOTH + int btobex = FALSE; bdaddr_t bdaddr; uint8_t channel = 0; #endif - #ifdef HAVE_USB + int usbobex = FALSE; obex_interface_t *obex_intf = NULL; #endif - - struct context global_context = {0,}; - -#ifndef _WIN32 - +#ifdef HAVE_CABLE_OBEX + int cobex = FALSE, r320 = FALSE; char *port; obex_ctrans_t custfunc; +#endif - if( (argc == 2) && (strcmp(argv[1], "-h") == 0 ) ) { + if (argc == 2 && strcmp(argv[1], "-h") == 0) { printf( "Usage: obex_test [options]\n" "\n" "Options:\n" - " -s [tty] Use cable transport (Sony-Ericsson phones/DCU-11 cable)\n" - " -r [tty] Use cable transport for R320\n" - " -i Use IP/TCP transport\n" - " -b [addr] [chan] Use bluetooth transport\n" - " -u [interface] Use USB transport\n" - " -h Print this help message\n" +#ifdef HAVE_CABLE_OBEX + " -s [tty] Use cable transport (Sony-Ericsson phones/DCU-11 cable)\n" + " -r [tty] Use cable transport for R320\n" +#endif +#ifdef HAVE_BLUETOOTH + " -b [addr] [chan] Use bluetooth RFCOMM transport\n" +#endif +#ifdef HAVE_USB + " -u [interface] Use USB transport\n" +#endif + " -i Use IP/TCP transport\n" + " -h Print this help message\n" "\n" "If no transport is selected, IrDA is used.\n" ); return 0; } - if( (argc == 2 || argc ==3) && (strcmp(argv[1], "-s") == 0 ) ) +#ifdef HAVE_CABLE_OBEX + if ((argc == 2 || argc ==3) && strcmp(argv[1], "-s") == 0) cobex = TRUE; - if( (argc == 2 || argc ==3) && (strcmp(argv[1], "-r") == 0 ) ) { + if ((argc == 2 || argc ==3) && strcmp(argv[1], "-r") == 0) { cobex = TRUE; r320 = TRUE; } #endif - - if( (argc == 2) && (strcmp(argv[1], "-i") == 0 ) ) - tcpobex = TRUE; - if( (argc >= 2) && (strcmp(argv[1], "-b") == 0 ) ) +#ifdef HAVE_BLUETOOTH + if (argc >= 2 && strcmp(argv[1], "-b") == 0) btobex = TRUE; - if( (argc >= 2) && (strcmp(argv[1], "-u") == 0 ) ) +#endif +#ifdef HAVE_USB + if (argc >= 2 && strcmp(argv[1], "-u") == 0) usbobex = TRUE; +#endif + if (argc == 2 && strcmp(argv[1], "-i") == 0) + tcpobex = TRUE; - if(cobex) { -#ifndef _WIN32 - if(argc == 3) +#ifdef HAVE_CABLE_OBEX + if (cobex) { + if (argc == 3) port = argv[2]; else port = "/dev/ttyS0"; - if(r320) + if (r320) printf("OBEX to R320 on %s!\n", port); else printf("OBEX on %s!\n", port); custfunc.customdata = cobex_open(port, r320); - if(custfunc.customdata == NULL) { + if (custfunc.customdata == NULL) { printf("cobex_open() failed\n"); return -1; } - if(! (handle = OBEX_Init(OBEX_TRANS_CUSTOM, obex_event, 0))) { + handle = OBEX_Init(OBEX_TRANS_CUSTOM, obex_event, 0); + if (!handle) { perror( "OBEX_Init failed"); return -1; } @@ -235,69 +254,67 @@ int main (int argc, char *argv[]) custfunc.handleinput = cobex_handle_input; custfunc.listen = cobex_connect; // Listen and connect is 100% same on cable - if(OBEX_RegisterCTransport(handle, &custfunc) < 0) { + if (OBEX_RegisterCTransport(handle, &custfunc) < 0) printf("Custom transport callback-registration failed\n"); - } -#else - printf("Not implemented in Win32 yet.\n"); -#endif // _WIN32 - } - else if(tcpobex) { - printf("Using TCP transport\n"); - if(! (handle = OBEX_Init(OBEX_TRANS_INET, obex_event, 0))) { - perror( "OBEX_Init failed"); - exit(0); - } - } - else if(btobex) { -#ifndef _WIN32 - switch (argc) { + } else +#endif #ifdef HAVE_BLUETOOTH + if (btobex) { + const char *channel_arg = NULL; + switch (argc) { case 4: str2ba(argv[2], &bdaddr); - channel = atoi(argv[3]); + channel_arg = argv[3]; break; case 3: str2ba(argv[2], &bdaddr); if (bacmp(&bdaddr, BDADDR_ANY) == 0) - channel = atoi(argv[2]); - else - channel = BT_CHANNEL; + channel_arg = argv[2]; break; case 2: bacpy(&bdaddr, BDADDR_ANY); - channel = BT_CHANNEL; break; -#endif default: printf("Wrong number of arguments\n"); exit(0); } - printf("Using Bluetooth RFCOMM transport\n"); - if(! (handle = OBEX_Init(OBEX_TRANS_BLUETOOTH, obex_event, 0))) { + switch (btobex) { + case TRUE: + printf("Using Bluetooth RFCOMM transport\n"); + handle = OBEX_Init(OBEX_TRANS_BLUETOOTH, obex_event, 0); + if (channel_arg) + channel = (atoi(channel_arg) & 0xFF); + else + channel = BT_CHANNEL; + break; + } + + if (!handle) { perror( "OBEX_Init failed"); exit(0); } -#else - printf("Not implemented in Win32 yet.\n"); -#endif // _WIN32 - } - else if(usbobex) { + } else +#endif #ifdef HAVE_USB + if (usbobex) { int i, interfaces_number, intf_num; switch (argc) { case 2: - printf("Using USB transport, querying available interfaces\n"); - if(! (handle = OBEX_Init(OBEX_TRANS_USB, obex_event, 0))) { + printf("Using USB transport, " + "querying available interfaces\n"); + handle = OBEX_Init(OBEX_TRANS_USB, obex_event, 0); + if (!handle) { perror( "OBEX_Init failed"); exit(0); } interfaces_number = OBEX_EnumerateInterfaces(handle); - for (i=0; i < interfaces_number; i++) { + for (i = 0; i < interfaces_number; i++) { obex_intf = OBEX_GetInterfaceByIndex(handle, i); - printf("Interface %d: idVendor: %#x, idProduct: %#x, bus %d, dev %d, intf %d, %s %s %s\n", i, + printf("Interface %d: idVendor: %#x, " + "idProduct: %#x, bus %d, dev %d, " + "intf %d, %s %s %s\n", i, obex_intf->usb.idVendor, obex_intf->usb.idProduct, obex_intf->usb.bus_number, @@ -307,14 +324,16 @@ int main (int argc, char *argv[]) obex_intf->usb.product, obex_intf->usb.control_interface); } - printf("Use '%s -u interface_number' to run interactive OBEX test client\n", argv[0]); + printf("Use '%s -u interface_number' to run " + "interactive OBEX test client\n", argv[0]); OBEX_Cleanup(handle); exit(0); break; case 3: intf_num = atoi(argv[2]); printf("Using USB transport \n"); - if(! (handle = OBEX_Init(OBEX_TRANS_USB, obex_event, 0))) { + handle = OBEX_Init(OBEX_TRANS_USB, obex_event, 0); + if (!handle) { perror( "OBEX_Init failed"); exit(0); } @@ -331,14 +350,21 @@ int main (int argc, char *argv[]) printf("Wrong number of arguments\n"); exit(0); } -#else - printf("Not compiled with USB support\n"); - exit(0); + } else #endif - } - else { + + if (tcpobex) { + printf("Using TCP transport\n"); + handle = OBEX_Init(OBEX_TRANS_INET, obex_event, 0); + if (!handle) { + perror( "OBEX_Init failed"); + exit(0); + } + + } else { printf("Using IrDA transport\n"); - if(! (handle = OBEX_Init(OBEX_TRANS_IRDA, obex_event, 0))) { + handle = OBEX_Init(OBEX_TRANS_IRDA, obex_event, 0); + if (!handle) { perror( "OBEX_Init failed"); exit(0); } @@ -386,44 +412,41 @@ int main (int argc, char *argv[]) break; case 'c': /* First connect transport */ - if(tcpobex) { - if(TcpOBEX_TransportConnect(handle, NULL, 0) < 0) { - printf("Transport connect error! (TCP)\n"); - break; - } - } - if(cobex) { - if(OBEX_TransportConnect(handle, (void*) 1, 0) < 0) { +#ifdef HAVE_CABLE_OBEX + if (cobex) { + if (OBEX_TransportConnect(handle, (void*) 1, 0) < 0) { printf("Transport connect error! (Serial)\n"); break; } - } - if(btobex) { + } else +#endif #ifdef HAVE_BLUETOOTH + if (btobex) { if (bacmp(&bdaddr, BDADDR_ANY) == 0) { printf("Device address error! (Bluetooth)\n"); break; } - if(BtOBEX_TransportConnect(handle, BDADDR_ANY, &bdaddr, channel) <0) { + if (BtOBEX_TransportConnect(handle, BDADDR_ANY, &bdaddr, channel) <0) { printf("Transport connect error! (Bluetooth)\n"); break; } -#else - printf("Transport not found! (Bluetooth)\n"); + } else #endif - } - if (usbobex) { #ifdef HAVE_USB + if (usbobex) { if (OBEX_InterfaceConnect(handle, obex_intf) < 0) { printf("Transport connect error! (USB)\n"); break; } -#else - printf("Transport not found! (USB)\n"); + } else #endif - } - if (!tcpobex && !cobex && !btobex && !usbobex) { - if(IrOBEX_TransportConnect(handle, IR_SERVICE) < 0) { + if (tcpobex) { + if (TcpOBEX_TransportConnect(handle, NULL, 0) < 0) { + printf("Transport connect error! (TCP)\n"); + break; + } + } else { + if (IrOBEX_TransportConnect(handle, IR_SERVICE) < 0) { printf("Transport connect error! (IrDA)\n"); break; } @@ -436,33 +459,35 @@ int main (int argc, char *argv[]) break; case 's': /* First register server */ - if(tcpobex) { - if(TcpOBEX_ServerRegister(handle, NULL, 0) < 0) { - printf("Server register error! (TCP)\n"); - break; - } - } - if(cobex) { - if(OBEX_ServerRegister(handle, (void*) 1, 0) < 0) { +#ifdef HAVE_CABLE_OBEX + if (cobex) { + if (OBEX_ServerRegister(handle, (void*) 1, 0) < 0) { printf("Server register error! (Serial)\n"); break; } - } - if(btobex) { + } else +#endif #ifdef HAVE_BLUETOOTH - if(BtOBEX_ServerRegister(handle, BDADDR_ANY, channel) < 0) { + if (btobex) { + if (BtOBEX_ServerRegister(handle, BDADDR_ANY, channel) < 0) { printf("Server register error! (Bluetooth)\n"); break; } -#else - printf("Transport not found! (Bluetooth)\n"); + } else #endif - } +#ifdef HAVE_USB if (usbobex) { printf("Transport not found! (USB)\n"); - } - if (!tcpobex && !cobex && !btobex && !usbobex) { - if(IrOBEX_ServerRegister(handle, IR_SERVICE) < 0) { + } else +#endif + if (tcpobex) { + if (TcpOBEX_ServerRegister(handle, NULL, 0) < 0) { + printf("Server register error! (TCP)\n"); + break; + } + + } else { + if (IrOBEX_ServerRegister(handle, IR_SERVICE) < 0) { printf("Server register error! (IrDA)\n"); break; } @@ -475,8 +500,8 @@ int main (int argc, char *argv[]) printf("Unknown command %s\n", cmd); } } -#ifndef _WIN32 - if(cobex) +#ifdef HAVE_CABLE_OBEX + if (cobex) cobex_close(custfunc.customdata); #endif -- 1.7.5.4 |