The substates create situations where this function name doesn't fit anymore.
To avoid confusion, it is renamed to OBEX_Work(). The timeout argument is
now in milliseconds, the previous argument was in seconds which may be not
fine enough.
---
doc/openobex.coverpage | 2 +-
include/openobex/obex.h | 3 ++-
include/openobex/obex_const.h | 2 +-
lib/fdobex.c | 10 ++++++++--
lib/obex.c | 6 +++---
lib/obex.sym | 2 +-
lib/obex_main.c | 2 +-
lib/obex_main.h | 2 +-
lib/obex_transport.c | 12 +++++++++---
lib/obex_transport.h | 4 ++--
lib/usb1obex.c | 6 +++---
lib/usbobex.c | 6 +++---
12 files changed, 35 insertions(+), 22 deletions(-)
diff --git a/doc/openobex.coverpage b/doc/openobex.coverpage
index 1f7715b..d90075f 100644
--- a/doc/openobex.coverpage
+++ b/doc/openobex.coverpage
@@ -35,7 +35,7 @@ First of all you must create an OBEX instance by calling
#OBEX_New.
In this call you specify what transport you want to use, an event callback,
and optional flags.
#OBEX_New will return a handle which shall be passed to almost all other
functions.
-To let the parser do some work you must call #OBEX_HandleInput.
+To let the parser do some work you must call #OBEX_Work.
It will block for at-most the specified timeout for read and write actions.
You can call #OBEX_GetFD if you want to do select() yourself (this may not
work with all transports).
diff --git a/include/openobex/obex.h b/include/openobex/obex.h
index ae91f6e..096d5a2 100644
--- a/include/openobex/obex.h
+++ b/include/openobex/obex.h
@@ -84,6 +84,7 @@ OPENOBEX_SYMBOL(void) OBEX_SetUserCallBack(obex_t *self,
void * data);
OPENOBEX_SYMBOL(obex_t *) OBEX_ServerAccept(obex_t *server,
obex_event_t eventcb, void * data);
+#define OBEX_HandleInput(self, timeout) OBEX_Work((self), ((timeout)*1000L))
/*
* OBEX API
@@ -116,7 +117,7 @@ OPENOBEX_SYMBOL(void *) OBEX_GetCustomData(obex_t *self);
OPENOBEX_SYMBOL(int) OBEX_TransportConnect(obex_t *self, struct sockaddr
*saddr, int addlen);
OPENOBEX_SYMBOL(int) OBEX_TransportDisconnect(obex_t *self);
OPENOBEX_SYMBOL(int) OBEX_CustomDataFeed(obex_t *self, uint8_t *inputbuf, int
actual);
-OPENOBEX_SYMBOL(int) OBEX_HandleInput(obex_t *self, int timeout);
+OPENOBEX_SYMBOL(int) OBEX_Work(obex_t *self, long timeout);
OPENOBEX_SYMBOL(int) OBEX_ServerRegister(obex_t *self, struct sockaddr
*saddr, int addrlen);
OPENOBEX_SYMBOL(obex_t *) OBEX_Accept(obex_t *server);
diff --git a/include/openobex/obex_const.h b/include/openobex/obex_const.h
index cdcd823..f0cbbf0 100644
--- a/include/openobex/obex_const.h
+++ b/include/openobex/obex_const.h
@@ -66,7 +66,7 @@ typedef struct {
int (*read)(obex_t *handle, void *customdata, uint8_t *buf, int size);
/** remote connection output */
int (*write)(obex_t *handle, void *customdata, uint8_t *buf, int len);
- /** directly called by #OBEX_HandleInput */
+ /** eventually called by OBEX_Work() */
int (*handleinput)(obex_t *handle, void *customdata, int timeout);
void *customdata;
} obex_ctrans_t;
diff --git a/lib/fdobex.c b/lib/fdobex.c
index 70ae791..e057562 100644
--- a/lib/fdobex.c
+++ b/lib/fdobex.c
@@ -70,7 +70,10 @@ static int fdobex_write(obex_t *self, buf_t *msg)
size_t size = msg->data_size;
int status;
fd_set fdset;
- struct timeval time = {trans->timeout, 0};
+ struct timeval time = {
+ trans->timeout / 1000,
+ (trans->timeout % 1000) * 1000
+ };
if (size == 0)
return 0;
@@ -108,7 +111,10 @@ static int fdobex_read(obex_t *self, void *buf, int buflen)
int status;
int fd = trans->fd;
fd_set fdset;
- struct timeval time = {trans->timeout, 0};
+ struct timeval time = {
+ trans->timeout / 1000,
+ (trans->timeout % 1000) * 1000
+ };
FD_ZERO(&fdset);
FD_SET(fd, &fdset);
diff --git a/lib/obex.c b/lib/obex.c
index 460b0be..04016e1 100644
--- a/lib/obex.c
+++ b/lib/obex.c
@@ -390,7 +390,7 @@ obex_t *CALLAPI OBEX_Accept(obex_t *server)
/**
Let the OBEX parser do some work.
\param self OBEX handle
- \param timeout Maximum time to wait in seconds (-1 for infinite)
+ \param timeout Maximum time to wait in milliseconds (-1 for infinite)
\return -1 on error, 0 on timeout, positive on success
Let the OBEX parser read and process incoming data. If no data
@@ -404,7 +404,7 @@ obex_t *CALLAPI OBEX_Accept(obex_t *server)
positive on success.
*/
LIB_SYMBOL
-int CALLAPI OBEX_HandleInput(obex_t *self, int timeout)
+int CALLAPI OBEX_Work(obex_t *self, long timeout)
{
DEBUG(4, "\n");
obex_return_val_if_fail(self != NULL, -1);
@@ -482,7 +482,7 @@ int CALLAPI OBEX_TransportDisconnect(obex_t *self)
USB and custom transports do not.
The returned filehandle can be used to do select() on, before
- calling OBEX_HandleInput()
+ calling OBEX_Work()
There is one subtelty about this function. When the OBEX connection is
established, it returns the connection filedescriptor, while for
diff --git a/lib/obex.sym b/lib/obex.sym
index 6483738..3de52c7 100644
--- a/lib/obex.sym
+++ b/lib/obex.sym
@@ -13,7 +13,7 @@ OBEX_GetCustomData
OBEX_TransportConnect
OBEX_TransportDisconnect
OBEX_CustomDataFeed
-OBEX_HandleInput
+OBEX_Work
OBEX_ServerRegister
OBEX_ServerAccept
OBEX_Accept
diff --git a/lib/obex_main.c b/lib/obex_main.c
index 1233120..714571a 100644
--- a/lib/obex_main.c
+++ b/lib/obex_main.c
@@ -386,7 +386,7 @@ static int obex_mode(obex_t *self)
* Do some work on the current transferred object.
*
*/
-int obex_work(obex_t *self, int timeout)
+int obex_work(obex_t *self, long timeout)
{
int ret;
diff --git a/lib/obex_main.h b/lib/obex_main.h
index d880bb8..be154d1 100644
--- a/lib/obex_main.h
+++ b/lib/obex_main.h
@@ -71,7 +71,7 @@ socket_t obex_create_packet_socket(obex_t *self, int domain);
int obex_delete_socket(struct obex *self, socket_t fd);
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_work(struct obex *self, long timeout);
int obex_get_buffer_status(buf_t *msg);
int obex_data_indication(struct obex *self);
buf_t* obex_data_receive(obex_t *self);
diff --git a/lib/obex_transport.c b/lib/obex_transport.c
index a41f6e6..1c03baa 100644
--- a/lib/obex_transport.c
+++ b/lib/obex_transport.c
@@ -207,7 +207,10 @@ int obex_transport_standard_handle_input(obex_t *self)
/* Wait for input */
if (trans->timeout >= 0) {
- struct timeval time = { trans->timeout, 0 };
+ struct timeval time = {
+ trans->timeout / 1000,
+ (trans->timeout % 1000) * 1000
+ };
ret = select((int) highestfd + 1, &fdset, NULL, NULL, &time);
} else {
ret = select((int) highestfd + 1, &fdset, NULL, NULL, NULL);
@@ -245,7 +248,7 @@ int obex_transport_standard_handle_input(obex_t *self)
* Used when working in synchronous mode.
*
*/
-int obex_transport_handle_input(obex_t *self, int timeout)
+int obex_transport_handle_input(obex_t *self, long timeout)
{
DEBUG(4, "\n");
self->trans.timeout = timeout;
@@ -369,7 +372,10 @@ int obex_transport_do_send (obex_t *self, buf_t *msg)
int status;
fd_set fdset;
struct timeval *time_ptr = NULL;
- struct timeval timeout = {trans->timeout, 0};
+ struct timeval timeout = {
+ trans->timeout / 1000,
+ (trans->timeout % 1000) * 1000
+ };
if (size == 0)
return 0;
diff --git a/lib/obex_transport.h b/lib/obex_transport.h
index b7a4423..8c3d7cb 100644
--- a/lib/obex_transport.h
+++ b/lib/obex_transport.h
@@ -110,7 +110,7 @@ typedef struct obex_transport {
socket_t fd; /* Socket descriptor */
socket_t serverfd;
- int timeout; /* set timeout */
+ long timeout; /* timeout in milliseconds */
int connected; /* Link connection state */
unsigned int mtu; /* Tx MTU of the link */
@@ -122,7 +122,7 @@ void obex_transport_cleanup(obex_t *self);
void obex_transport_clone(obex_t *self, obex_t *old);
void obex_transport_split(obex_t *self, obex_t *server);
-int obex_transport_handle_input(struct obex *self, int timeout);
+int obex_transport_handle_input(struct obex *self, long timeout);
int obex_transport_connect_request(struct obex *self);
void obex_transport_disconnect_request(struct obex *self);
int obex_transport_listen(struct obex *self);
diff --git a/lib/usb1obex.c b/lib/usb1obex.c
index c00b55a..26f0c41 100644
--- a/lib/usb1obex.c
+++ b/lib/usb1obex.c
@@ -479,17 +479,17 @@ static int usbobex_disconnect_request(obex_t *self)
return 1;
}
-static unsigned int usbobex_get_timeout(int timeout)
+static unsigned int usbobex_get_timeout(long timeout)
{
/* uses closest to zero, 0 itself means infinite */
if (timeout == 0) {
return 1;
} else if (timeout > 0) {
- if ((unsigned int)timeout > UINT_MAX/1000)
+ if ((unsigned int)timeout > UINT_MAX)
return UINT_MAX;
else
- return timeout * 1000;
+ return timeout;
}
return 0;
diff --git a/lib/usbobex.c b/lib/usbobex.c
index 2ed26e1..a5f63f0 100644
--- a/lib/usbobex.c
+++ b/lib/usbobex.c
@@ -448,15 +448,15 @@ static int usbobex_disconnect_request(obex_t *self)
return ret;
}
-static int usbobex_get_timeout(int timeout)
+static int usbobex_get_timeout(long timeout)
{
- if (timeout < 0 || timeout > INT_MAX/1000) {
+ if (timeout < 0 || timeout > INT_MAX) {
/* libusb-0.x doesn't know about waiting infinitely
* so we try with the largest value possible
*/
return INT_MAX;
}
- return timeout*1000;
+ return timeout;
}
static int usbobex_write(obex_t *self, buf_t *msg)
--
1.7.5.4
------------------------------------------------------------------------------
Got Input? Slashdot Needs You.
Take our quick survey online. Come on, we don't ask for help often.
Plus, you'll get a chance to win $100 to spend on ThinkGeek.
http://p.sf.net/sfu/slashdot-survey
_______________________________________________
Openobex-users mailing list
[email protected]
http://lists.sourceforge.net/lists/listinfo/openobex-users