(1 << FCE_FILE_CREATE) |
(1 << FCE_DIR_CREATE);
-static uint64_t tm_used; /* used for passing to event handler */
#define MAXIOBUF 1024
static char iobuf[MAXIOBUF];
static const char *skip_files[] =
};
static struct fce_close_event last_close_event;
+static char *fce_event_names[] = {
+ "",
+ "FCE_FILE_MODIFY",
+ "FCE_FILE_DELETE",
+ "FCE_DIR_DELETE",
+ "FCE_FILE_CREATE",
+ "FCE_DIR_CREATE"
+};
+
/*
*
* Initialize network structs for any listeners
close(udp_entry->sock);
if ((rv = getaddrinfo(udp_entry->addr, udp_entry->port, &hints, &servinfo)) != 0) {
- LOG(log_error, logtype_afpd, "fce_init_udp: getaddrinfo(%s:%s): %s",
+ LOG(log_error, logtype_fce, "fce_init_udp: getaddrinfo(%s:%s): %s",
udp_entry->addr, udp_entry->port, gai_strerror(rv));
continue;
}
/* loop through all the results and make a socket */
for (p = servinfo; p != NULL; p = p->ai_next) {
if ((udp_entry->sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
- LOG(log_error, logtype_afpd, "fce_init_udp: socket(%s:%s): %s",
+ LOG(log_error, logtype_fce, "fce_init_udp: socket(%s:%s): %s",
udp_entry->addr, udp_entry->port, strerror(errno));
continue;
}
}
if (p == NULL) {
- LOG(log_error, logtype_afpd, "fce_init_udp: no socket for %s:%s",
+ LOG(log_error, logtype_fce, "fce_init_udp: no socket for %s:%s",
udp_entry->addr, udp_entry->port);
}
udp_entry->addrinfo = *p;
/* This is the payload len. Means: the packet has len bytes more until packet is finished */
data_len = FCE_PACKET_HEADER_SIZE + pathlen;
- switch (mode) {
- case FCE_TM_SIZE:
- t = (uint64_t *)packet->data;
- *t = hton64(tm_used);
- memcpy(packet->data + sizeof(tm_used), path, pathlen);
-
- packet->datalen = pathlen + sizeof(tm_used);
- data_len += sizeof(tm_used);
- break;
- default:
- memcpy(packet->data, path, pathlen);
- break;
- }
+ memcpy(packet->data, path, pathlen);
/* return the packet len */
return data_len;
static uint32_t event_id = 0; /* the unique packet couter to detect packet/data loss. Going from 0xFFFFFFFF to 0x0 is a valid increment */
time_t now = time(NULL);
- LOG(log_debug, logtype_afpd, "send_fce_event: start");
+ LOG(log_debug, logtype_fce, "send_fce_event: start");
/* initialized ? */
if (first_event == FCE_TRUE) {
if (udp_entry->sock == -1) {
/* failed again, so go to rest again */
- LOG(log_error, logtype_afpd, "Cannot recreate socket for fce UDP connection: errno %d", errno );
+ LOG(log_error, logtype_fce, "Cannot recreate socket for fce UDP connection: errno %d", errno );
udp_entry->next_try_on_error = now + FCE_SOCKET_RETRY_DELAY_S;
continue;
/* Problems ? */
if (sent_data != data_len) {
/* Argh, socket broke, we close and retry later */
- LOG(log_error, logtype_afpd, "send_fce_event: error sending packet to %s:%s, transfered %d of %d: %s",
+ LOG(log_error, logtype_fce, "send_fce_event: error sending packet to %s:%s, transfered %d of %d: %s",
udp_entry->addr, udp_entry->port, sent_data, data_len, strerror(errno));
close( udp_entry->sock );
target_port = FCE_DEFAULT_PORT_STRING;
if (udp_sockets >= FCE_MAX_UDP_SOCKS) {
- LOG(log_error, logtype_afpd, "Too many file change api UDP connections (max %d allowed)", FCE_MAX_UDP_SOCKS );
+ LOG(log_error, logtype_fce, "Too many file change api UDP connections (max %d allowed)", FCE_MAX_UDP_SOCKS );
return AFPERR_PARAM;
}
send_fce_event(last_close_event.path, FCE_FILE_MODIFY);
}
- LOG(log_debug, logtype_afpd, "save_close_event: %s", path);
+ LOG(log_debug, logtype_fce, "save_close_event: %s", path);
last_close_event.time = now;
strncpy(last_close_event.path, path, MAXPATHLEN);
{
static int first_event = FCE_TRUE;
+ AFP_ASSERT(mode >= FCE_FIRST_EVENT && mode <= FCE_LAST_EVENT);
+
+ LOG(log_debug, logtype_fce, "register_fce(path: %s, type: %s, event: %s",
+ fullpathname(u_name), is_dir ? "dir" : "file", fce_event_names[mode]);
+
if (udp_sockets == 0)
/* No listeners configured */
return AFP_OK;
}
+ /* FIXME: use fullpathname() for path? */
char full_path_buffer[MAXPATHLEN + 1] = {""};
const char *cwd = getcwdpath();
- if (mode == FCE_TM_SIZE) {
- strlcpy(full_path_buffer, u_name, MAXPATHLEN);
- } else if (!is_dir || mode == FCE_DIR_DELETE) {
+ if (!is_dir || mode == FCE_DIR_DELETE) {
if (strlen( cwd ) + strlen( u_name) + 1 >= MAXPATHLEN) {
- LOG(log_error, logtype_afpd, "FCE file name too long: %s/%s", cwd, u_name );
+ LOG(log_error, logtype_fce, "FCE file name too long: %s/%s", cwd, u_name );
return AFPERR_PARAM;
}
sprintf( full_path_buffer, "%s/%s", cwd, u_name );
} else {
if (strlen( cwd ) >= MAXPATHLEN) {
- LOG(log_error, logtype_afpd, "FCE directory name too long: %s", cwd);
+ LOG(log_error, logtype_fce, "FCE directory name too long: %s", cwd);
return AFPERR_PARAM;
}
strcpy( full_path_buffer, cwd);
}
/* Can we ignore this event based on type or history? */
- if (!(mode & FCE_TM_SIZE) && fce_handle_coalescation( full_path_buffer, is_dir, mode ))
- {
- LOG(log_debug9, logtype_afpd, "Coalesced fc event <%d> for <%s>", mode, full_path_buffer );
+ if (fce_handle_coalescation(full_path_buffer, is_dir, mode)) {
+ LOG(log_debug9, logtype_fce, "Coalesced fc event <%d> for <%s>", mode, full_path_buffer );
return AFP_OK;
}
- LOG(log_debug9, logtype_afpd, "Detected fc event <%d> for <%s>", mode, full_path_buffer );
-
if (mode & FCE_FILE_MODIFY) {
save_close_event(full_path_buffer);
return AFP_OK;
/* check if configured holdclose time has passed */
if (last_close_event.time && ((last_close_event.time + fmodwait) < now)) {
- LOG(log_debug, logtype_afpd, "check_saved_close_events: sending event: %s", last_close_event.path);
+ LOG(log_debug, logtype_fce, "check_saved_close_events: sending event: %s", last_close_event.path);
/* yes, send event */
send_fce_event(&last_close_event.path[0], FCE_FILE_MODIFY);
last_close_event.path[0] = 0;
void fce_pending_events(AFPObj *obj)
{
- vol_fce_tm_event();
check_saved_close_events(obj->options.fce_fmodwait);
}
return ret;
}
-
-int fce_register_tm_size(const char *vol, size_t used)
-{
- int ret = AFP_OK;
-
- if (vol == NULL)
- return AFPERR_PARAM;
-
- if (!(fce_ev_enabled & (1 << FCE_TM_SIZE)))
- return ret;
-
- tm_used = used; /* oh what a hack */
- ret = register_fce(vol, false, FCE_TM_SIZE);
-
- return ret;
-}
#endif
/*
fce_ev_enabled |= (1 << FCE_FILE_CREATE);
} else if (strcmp(p, "dcre") == 0) {
fce_ev_enabled |= (1 << FCE_DIR_CREATE);
- } else if (strcmp(p, "tmsz") == 0) {
- fce_ev_enabled |= (1 << FCE_TM_SIZE);
}
}