Fix: missing declaration of ssize_t on MSVC
[openobex:mainline.git] / lib / obex_transport.h
1 /**
2         \file obex_transport.h
3         Handle different types of transports.
4         OpenOBEX library - Free implementation of the Object Exchange protocol.
5
6         Copyright (c) 1999 Dag Brattli, All Rights Reserved.
7
8         OpenOBEX is free software; you can redistribute it and/or modify
9         it under the terms of the GNU Lesser General Public License as
10         published by the Free Software Foundation; either version 2.1 of
11         the License, or (at your option) any later version.
12
13         This program is distributed in the hope that it will be useful,
14         but WITHOUT ANY WARRANTY; without even the implied warranty of
15         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16         GNU Lesser General Public License for more details.
17
18         You should have received a copy of the GNU Lesser General Public
19         License along with OpenOBEX. If not, see <http://www.gnu.org/>.
20  */
21
22 #ifndef OBEX_TRANSPORT_H
23 #define OBEX_TRANSPORT_H
24
25 #ifdef _WIN32
26 #include <winsock2.h>
27 #include <ws2tcpip.h>
28 #else
29 #include <netinet/in.h>
30 #include <sys/socket.h>
31 #include <sys/types.h>
32 #include <sys/time.h>
33 #endif
34
35 #include <unistd.h>
36
37 /* forward declaration for all transport includes */
38 struct obex_transport_ops;
39 struct obex;
40 struct databuffer;
41
42 struct obex_transport_ops {
43         void * (*create)(void);
44         bool (*init)(obex_t*);
45         void (*cleanup)(obex_t*);
46
47         result_t (*handle_input)(obex_t*);
48         ssize_t (*write)(obex_t*, struct databuffer*);
49         ssize_t (*read)(obex_t*, void*, int);
50         bool (*disconnect)(obex_t*);
51
52         int (*get_fd)(obex_t*);
53         bool (*set_local_addr)(obex_t*, struct sockaddr*, size_t);
54         bool (*set_remote_addr)(obex_t*, struct sockaddr*, size_t);
55
56         struct {
57                 bool (*listen)(obex_t*);
58                 bool (*accept)(obex_t*, const obex_t*);
59         } server;
60
61         struct {
62                 bool (*connect)(obex_t*);
63                 int (*find_interfaces)(obex_t*, obex_interface_t**);
64                 void (*free_interface)(obex_interface_t*);
65                 bool (*select_interface)(obex_t*, obex_interface_t*);
66         } client;
67 };
68
69 struct obex_transport * obex_transport_create(struct obex_transport_ops *ops);
70
71 typedef struct obex_transport {
72         struct obex_transport_ops *ops;
73         void *data;             /* Private data for the transport */
74
75         int64_t timeout;        /* set timeout */
76         bool connected;         /* Link connection state */
77         bool server;            /* Listens on local interface */
78 } obex_transport_t;
79
80 bool obex_transport_init(obex_t *self, int transport);
81 void obex_transport_cleanup(obex_t *self);
82
83 bool obex_transport_is_server(obex_t *self);
84 bool obex_transport_accept(obex_t *self, const obex_t *server);
85 int64_t obex_transport_get_timeout(struct obex *self);
86 void obex_transport_set_timeout(struct obex *self, int64_t timeout);
87 result_t obex_transport_handle_input(struct obex *self);
88 bool obex_transport_connect_request(struct obex *self);
89 void obex_transport_disconnect(struct obex *self);
90 bool obex_transport_listen(struct obex *self);
91 ssize_t obex_transport_write(struct obex *self, struct databuffer *msg);
92 ssize_t obex_transport_read(struct obex *self, int count);
93 void obex_transport_enumerate(struct obex *self);
94 void obex_transport_free_interfaces(struct obex *self);
95 int obex_transport_get_fd(struct obex *self);
96
97 bool obex_transport_set_local_addr(obex_t *self, struct sockaddr *addr, size_t len);
98 bool obex_transport_set_remote_addr(obex_t *self, struct sockaddr *addr, size_t len);
99
100 #endif /* OBEX_TRANSPORT_H */