155
155
udp_initialized = FCE_FALSE;
160
159
* Construct a UDP packet for our listeners and return packet size
162
161
static ssize_t build_fce_packet( struct fce_packet *packet, char *path, int mode, uint32_t event_id )
165
164
ssize_t data_len = 0;
167
strncpy(packet->magic, FCE_PACKET_MAGIC, sizeof(packet->magic) );
167
/* Set content of packet */
168
memcpy(packet->magic, FCE_PACKET_MAGIC, sizeof(packet->magic) );
168
169
packet->version = FCE_PACKET_VERSION;
169
170
packet->mode = mode;
170
packet->event_id = event_id;
172
pathlen = strlen(path) + 1; /* include string terminator */
172
packet->event_id = event_id;
174
pathlen = strlen(path); /* exclude string terminator */
174
176
/* This should never happen, but before we bust this server, we send nonsense, fce listener has to cope */
175
177
if (pathlen >= MAXPATHLEN)
176
178
pathlen = MAXPATHLEN - 1;
178
/* This is the payload len. Means: the stream has len bytes more until packet is finished */
179
/* A server should read the first 16 byte, decode them and then fetch the rest */
180
packet->datalen = pathlen;
182
/* This is the payload len. Means: the packet has len bytes more until packet is finished */
180
183
data_len = FCE_PACKET_HEADER_SIZE + pathlen;
181
packet->datalen = pathlen;
184
186
case FCE_TM_SIZE:
185
tm_used = hton64(tm_used);
186
memcpy(packet->data, &tm_used, sizeof(tm_used));
187
strncpy(packet->data + sizeof(tm_used), path, pathlen);
189
packet->datalen += sizeof(tm_used);
187
t = (uint64_t *)packet->data;
188
*t = hton64(tm_used);
189
memcpy(packet->data + sizeof(tm_used), path, pathlen);
191
packet->datalen = pathlen + sizeof(tm_used);
190
192
data_len += sizeof(tm_used);
193
strncpy(packet->data, path, pathlen);
195
memcpy(packet->data, path, pathlen);
211
216
*p = packet->mode;
214
uint32_t id = htonl(packet->event_id);
215
memcpy(p, &id, sizeof(id));
219
uint32_t *id = (uint32_t*)p;
220
*id = htonl(packet->event_id);
216
221
p += sizeof(packet->event_id);
218
uint16_t l = htons(packet->datalen);
219
memcpy(p, &l, sizeof(l));
222
memcpy(p, &packet->data[0], packet->datalen);
223
p += packet->datalen;
223
uint16_t *l = ( uint16_t *)p;
224
*l = htons(packet->datalen);
225
p += sizeof(packet->datalen);
227
if (((p - buf) + packet->datalen) < maxlen) {
228
memcpy(p, &packet->data[0], packet->datalen);
251
255
/* build our data packet */
252
256
ssize_t data_len = build_fce_packet( &packet, path, mode, ++event_id );
253
pack_fce_packet(&packet, iobuf);
257
pack_fce_packet(&packet, iobuf, MAXIOBUF);
255
259
for (int i = 0; i < udp_sockets; i++)
282
286
/* Okay, we have a running socket again, send server that we had a problem on our side*/
283
287
data_len = build_fce_packet( &packet, "", FCE_CONN_BROKEN, 0 );
284
pack_fce_packet(&packet, iobuf);
288
pack_fce_packet(&packet, iobuf, MAXIOBUF);
286
290
sendto(udp_entry->sock,
293
297
/* Rebuild our original data packet */
294
298
data_len = build_fce_packet( &packet, path, mode, event_id );
295
pack_fce_packet(&packet, iobuf);
299
pack_fce_packet(&packet, iobuf, MAXIOBUF);
298
302
sent_data = sendto(udp_entry->sock,
459
463
if (!(fce_ev_enabled & (1 << FCE_FILE_DELETE)))
462
ret = register_fce( path->u_name, FALSE, FCE_FILE_DELETE );
466
ret = register_fce( path->u_name, false, FCE_FILE_DELETE );
473
477
if (!(fce_ev_enabled & (1 << FCE_DIR_DELETE)))
476
ret = register_fce( name, TRUE, FCE_DIR_DELETE);
480
ret = register_fce( name, true, FCE_DIR_DELETE);
488
492
if (!(fce_ev_enabled & (1 << FCE_DIR_CREATE)))
491
ret = register_fce( path->u_name, TRUE, FCE_DIR_CREATE );
495
ret = register_fce( path->u_name, true, FCE_DIR_CREATE );
504
508
if (!(fce_ev_enabled & (1 << FCE_FILE_CREATE)))
507
ret = register_fce( path->u_name, FALSE, FCE_FILE_CREATE );
511
ret = register_fce( path->u_name, false, FCE_FILE_CREATE );
546
550
tm_used = used; /* oh what a hack */
547
ret = register_fce(vol, FALSE, FCE_TM_SIZE);
551
ret = register_fce(vol, false, FCE_TM_SIZE);