1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#ifndef __RES_CONN_H__
#define __RES_CONN_H__
#include <stdarg.h>
#include <dbus/dbus.h>
#include <res-proto.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef int (*resconn_link_t) (union resconn_u*, char *,
resproto_linkst_t);
typedef void (*resconn_receive_t) (resmsg_t *, resset_t *, void *);
typedef resset_t *(*resconn_connect_t) (union resconn_u *,resmsg_t *);
typedef void (*resconn_disconn_t) (resset_t *);
typedef int (*resconn_send_t) (resset_t *, resmsg_t *,
resproto_status_t);
typedef int (*resconn_error_t) (resset_t *, resmsg_t *, void *);
typedef void (*resconn_linkup_t) (union resconn_u *);
typedef int (*resconn_timercb_t) (void *);
typedef void *(*resconn_timer_add_t)(uint32_t,resconn_timercb_t,void*);
typedef void (*resconn_timer_del_t)(void *);
typedef struct resconn_reply_s {
struct resconn_reply_s *next;
uint32_t serial; /* msg sequence number, if applies */
resmsg_type_t type; /* msg type */
uint32_t reqno; /* request number, if applies */
resproto_status_t callback;
resset_t *rset;
void *timer; /* timer, if applies */
void *data; /* timer data, if applies */
} resconn_reply_t;
#define RESCONN_QUEUE_LINK \
struct resconn_qitem_s *next; \
struct resconn_qitem_s *prev
typedef struct resconn_qitem_s {
RESCONN_QUEUE_LINK;
char *peer; /* sender name */
void *data; /* for the callback */
resmsg_t *msg; /* message */
} resconn_qitem_t;
typedef struct {
RESCONN_QUEUE_LINK;
} resconn_qhead_t;
#define RESCONN_COMMON \
union resconn_u *next; \
uint32_t id; \
resproto_role_t role; \
resproto_transport_t transp; \
resset_t *rsets; \
resconn_reply_t *replies; \
resconn_link_t link; \
resconn_receive_t receive; \
resconn_connect_t connect; \
resconn_disconn_t disconn; \
resconn_send_t send; \
resconn_error_t error; \
int *valid; \
resproto_handler_t handler[RESMSG_MAX]; \
resconn_linkup_t mgrup; \
int killed
typedef struct {
RESCONN_COMMON;
} resconn_any_t;
typedef struct {
RESCONN_COMMON;
DBusConnection *conn;
char *dbusid;
char *path;
} resconn_dbus_t;
typedef struct {
RESCONN_COMMON;
char *name;
int busy;
struct {
resconn_qhead_t head;
void *timer;
} queue;
struct {
resconn_timer_add_t add;
resconn_timer_del_t del;
} timer;
} resconn_internal_t;
typedef union resconn_u {
resconn_any_t any;
resconn_dbus_t dbus;
resconn_internal_t internal;
} resconn_t;
resset_t *resconn_connect(resconn_t *, resmsg_t *, resproto_status_t);
int resconn_disconnect(resset_t *, resmsg_t *, resproto_status_t);
#ifdef __cplusplus
};
#endif
#endif /* __RES_CONN_H__ */
/*
* Local Variables:
* c-basic-offset: 4
* indent-tabs-mode: nil
* End:
* vim:set expandtab shiftwidth=4:
*/
|