~ubuntu-branches/ubuntu/maverick/telepathy-salut/maverick

« back to all changes in this revision

Viewing changes to lib/gibber/gibber-r-multicast-sender.h

  • Committer: Bazaar Package Importer
  • Author(s): Laurent Bigonville
  • Date: 2008-09-17 19:03:47 UTC
  • mfrom: (7.1.8 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080917190347-fhkvbcpf8jp8wxkw
Tags: 0.3.3-2
* Use my debian.org address in Uploaders
* debian/patches/fix-activity-announce.patch:
  - Only announce OLPC activity we actually joined (dev.laptop.org #8441)

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
 
28
28
G_BEGIN_DECLS
29
29
 
 
30
typedef struct _GibberRMulticastSenderGroup GibberRMulticastSenderGroup;
 
31
 
 
32
struct _GibberRMulticastSenderGroup {
 
33
  /* <public>
 
34
   * GUINT_TO_POINTER (sender_id) => owned GibberRMulticastSender */
 
35
  GHashTable *senders;
 
36
  /* <private> */
 
37
  gboolean popping;
 
38
  gboolean stopped;
 
39
  /* queue of GibberRMulticast GibberRMulticastSender */
 
40
  GQueue *pop_queue;
 
41
  /* GArray of pending removal GibberRMulticastSenders */
 
42
  GPtrArray *pending_removal;
 
43
};
 
44
 
30
45
typedef struct _GibberRMulticastSender GibberRMulticastSender;
31
46
typedef struct _GibberRMulticastSenderClass GibberRMulticastSenderClass;
32
47
 
37
52
typedef enum {
38
53
  /* We have no info about this sender whatsoever */
39
54
  GIBBER_R_MULTICAST_SENDER_STATE_NEW = 0,
40
 
  /* We know the sequence numbering, but no data has been output just yet */
 
55
  /* We know the sequence number we have to start from, but haven't send out
 
56
   * any data yet */
41
57
  GIBBER_R_MULTICAST_SENDER_STATE_PREPARING,
 
58
  /* Non-data Packets are flowing */
 
59
  GIBBER_R_MULTICAST_SENDER_STATE_RUNNING,
42
60
  /* Data is flowing */
43
 
  GIBBER_R_MULTICAST_SENDER_STATE_RUNNING,
 
61
  GIBBER_R_MULTICAST_SENDER_STATE_DATA_RUNNING,
 
62
  /* Node has failed, still pop packets but stop depending on it */
 
63
  GIBBER_R_MULTICAST_SENDER_STATE_FAILED,
 
64
  GIBBER_R_MULTICAST_SENDER_STATE_UNKNOWN_FAILED,
 
65
  GIBBER_R_MULTICAST_SENDER_STATE_STOPPED,
 
66
  /* Will be removed as soon as all dependencies are resolved */
 
67
  GIBBER_R_MULTICAST_SENDER_STATE_PENDING_REMOVAL,
44
68
} GibberRMulticastSenderState;
45
69
 
46
70
struct _GibberRMulticastSender {
52
76
 
53
77
    /* Next packet we want to send out */
54
78
    guint32 next_output_packet;
55
 
 
56
 
    /* Last packet that we send in the output stream*/
57
 
    guint32 last_output_packet;
 
79
    /* Next data packet we want to send out. Can be different from
 
80
     * next_output_packet iff holding back data or a fragmented data message is
 
81
     * interleaved with control messages.. Guaranteed to be <=
 
82
     * next_output_packet */
 
83
    guint32 next_output_data_packet;
58
84
 
59
85
    /* Next packet we expect from the sender */
60
86
    guint32 next_input_packet;
61
87
};
62
88
 
63
 
GType gibber_r_multicast_sender_get_type(void);
 
89
GType gibber_r_multicast_sender_get_type (void);
64
90
 
65
91
/* TYPE MACROS */
66
92
#define GIBBER_TYPE_R_MULTICAST_SENDER \
67
 
  (gibber_r_multicast_sender_get_type())
 
93
  (gibber_r_multicast_sender_get_type ())
68
94
#define GIBBER_R_MULTICAST_SENDER(obj) \
69
 
  (G_TYPE_CHECK_INSTANCE_CAST((obj), GIBBER_TYPE_R_MULTICAST_SENDER, GibberRMulticastSender))
 
95
  (G_TYPE_CHECK_INSTANCE_CAST((obj), GIBBER_TYPE_R_MULTICAST_SENDER, \
 
96
   GibberRMulticastSender))
70
97
#define GIBBER_R_MULTICAST_SENDER_CLASS(klass) \
71
 
  (G_TYPE_CHECK_CLASS_CAST((klass), GIBBER_TYPE_R_MULTICAST_SENDER, GibberRMulticastSenderClass))
 
98
  (G_TYPE_CHECK_CLASS_CAST((klass), GIBBER_TYPE_R_MULTICAST_SENDER, \
 
99
   GibberRMulticastSenderClass))
72
100
#define GIBBER_IS_R_MULTICAST_SENDER(obj) \
73
101
  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GIBBER_TYPE_R_MULTICAST_SENDER))
74
102
#define GIBBER_IS_R_MULTICAST_SENDER_CLASS(klass) \
75
103
  (G_TYPE_CHECK_CLASS_TYPE((klass), GIBBER_TYPE_R_MULTICAST_SENDER))
76
104
#define GIBBER_R_MULTICAST_SENDER_GET_CLASS(obj) \
77
 
  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIBBER_TYPE_R_MULTICAST_SENDER, GibberRMulticastSenderClass))
 
105
  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIBBER_TYPE_R_MULTICAST_SENDER, \
 
106
   GibberRMulticastSenderClass))
 
107
 
 
108
GibberRMulticastSenderGroup *gibber_r_multicast_sender_group_new (void);
 
109
 
 
110
void gibber_r_multicast_sender_group_free (GibberRMulticastSenderGroup *group);
 
111
void gibber_r_multicast_sender_group_stop (GibberRMulticastSenderGroup *group);
 
112
void gibber_r_multicast_sender_group_add (GibberRMulticastSenderGroup *group,
 
113
    GibberRMulticastSender *sender);
 
114
 
 
115
GibberRMulticastSender * gibber_r_multicast_sender_group_lookup (
 
116
    GibberRMulticastSenderGroup *group, guint32 sender_id);
 
117
 
 
118
GibberRMulticastSender * gibber_r_multicast_sender_group_lookup_by_name (
 
119
    GibberRMulticastSenderGroup *group, const gchar *name);
 
120
 
 
121
void gibber_r_multicast_sender_group_remove (
 
122
    GibberRMulticastSenderGroup *group, guint32 sender_id);
 
123
 
 
124
gboolean gibber_r_multicast_sender_group_push_packet (
 
125
  GibberRMulticastSenderGroup *group, GibberRMulticastPacket *packet);
78
126
 
79
127
GibberRMulticastSender *gibber_r_multicast_sender_new (guint32 id,
80
 
    const gchar *name, GHashTable *senders);
81
 
 
82
 
void
83
 
gibber_r_multicast_sender_push(GibberRMulticastSender *sender,
84
 
                               GibberRMulticastPacket *packet);
85
 
 
86
 
void
87
 
gibber_r_multicast_senders_updated(GibberRMulticastSender *sender);
 
128
    const gchar *name, GibberRMulticastSenderGroup *group);
 
129
 
 
130
/* Sequence for this sender starts at packet_id */
 
131
void gibber_r_multicast_sender_update_start (GibberRMulticastSender *sender,
 
132
    guint32 packet_id);
 
133
 
 
134
void gibber_r_multicast_sender_update_end (GibberRMulticastSender *sender,
 
135
    guint32 packet_id);
 
136
 
 
137
void gibber_r_multicast_sender_set_failed (GibberRMulticastSender *sender);
 
138
 
 
139
void gibber_r_multicast_sender_set_data_start (GibberRMulticastSender *sender,
 
140
    guint32 packet_id);
 
141
 
 
142
/* Tell the sender to not signal data starting from this packet */
 
143
void gibber_r_multicast_sender_hold_data (GibberRMulticastSender *sender,
 
144
  guint32 packet_id);
 
145
 
 
146
 
 
147
/* Stop holding back data of the sender */
 
148
void gibber_r_multicast_sender_release_data (GibberRMulticastSender *sender);
 
149
 
 
150
void gibber_r_multicast_sender_push (GibberRMulticastSender *sender,
 
151
     GibberRMulticastPacket *packet);
 
152
 
 
153
void
 
154
gibber_r_multicast_senders_updated (GibberRMulticastSender *sender);
88
155
 
89
156
/* Returns TRUE if we were up to dated */
90
 
gboolean
91
 
gibber_r_multicast_sender_seen(GibberRMulticastSender *sender, guint32 id);
92
 
 
93
 
void
94
 
gibber_r_multicast_sender_repair_request(GibberRMulticastSender *sender,
95
 
                                         guint32 id);
96
 
 
97
 
void gibber_r_multicast_sender_whois_push(GibberRMulticastSender *sender,
 
157
gboolean gibber_r_multicast_sender_seen (GibberRMulticastSender *sender,
 
158
    guint32 id);
 
159
 
 
160
gboolean gibber_r_multicast_sender_repair_request (
 
161
    GibberRMulticastSender *sender, guint32 id);
 
162
 
 
163
void gibber_r_multicast_sender_whois_push (GibberRMulticastSender *sender,
98
164
    const GibberRMulticastPacket *packet);
 
165
 
 
166
void gibber_r_multicast_sender_set_packet_repeat (
 
167
    GibberRMulticastSender *sender, guint32 packet_id, gboolean repeat);
 
168
 
 
169
/* Returns the amount of unpopped or unacked packets */
 
170
guint gibber_r_multicast_sender_packet_cache_size (
 
171
    GibberRMulticastSender *sender);
 
172
 
 
173
/* Ack management */
 
174
void gibber_r_multicast_sender_ack (GibberRMulticastSender *sender,
 
175
    guint32 ack);
 
176
 
 
177
/* Stop all pending requests, only reply to repair requests */
 
178
void gibber_r_multicast_sender_stop (GibberRMulticastSender *sender);
 
179
 
 
180
/* Trigger failure detection, for testing only */
 
181
void _gibber_r_multicast_TEST_sender_fail (GibberRMulticastSender *sender);
 
182
 
99
183
G_END_DECLS
100
184
 
101
185
#endif /* #ifndef __GIBBER_R_MULTICAST_SENDER_H__*/