"FCE_FILE_DELETE",
"FCE_DIR_DELETE",
"FCE_FILE_CREATE",
- "FCE_DIR_CREATE",
- "FCE_TM_SIZE"
+ "FCE_DIR_CREATE"
};
// get sockaddr, IPv4 or IPv6:
if (memcmp(packet.magic, FCE_PACKET_MAGIC, sizeof(packet.magic)) == 0) {
switch (packet.mode) {
- case FCE_TM_SIZE:
- memcpy(&tmsize, packet.data, sizeof(uint64_t));
- tmsize = ntoh64(tmsize);
- printf("ID: %" PRIu32 ", Event: %s, Volume: %s, TM used size: %" PRIu64 " \n",
- packet.event_id, fce_ev_names[packet.mode], packet.data + sizeof(uint64_t), tmsize);
- break;
-
case FCE_CONN_START:
printf("FCE Start\n");
break;
(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[] =
"FCE_FILE_DELETE",
"FCE_DIR_DELETE",
"FCE_FILE_CREATE",
- "FCE_DIR_CREATE",
- "FCE_TM_SIZE",
+ "FCE_DIR_CREATE"
};
/*
/* 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;
}
+ /* 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_fce, "FCE file name too long: %s/%s", cwd, u_name );
return AFPERR_PARAM;
}
/* Can we ignore this event based on type or history? */
- if (!(mode & FCE_TM_SIZE) && fce_handle_coalescation( full_path_buffer, is_dir, mode ))
- {
+ 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_fce, "Detected fc event <%d> for <%s>", mode, full_path_buffer );
-
if (mode & FCE_FILE_MODIFY) {
save_close_event(full_path_buffer);
return AFP_OK;
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);
}
}
return( AFP_OK );
}
-#define FCE_TM_DELTA 10 /* send notification every 10 seconds */
-void vol_fce_tm_event(void)
-{
- static time_t last;
- time_t now = time(NULL);
- struct vol *vol = getvolumes();
-
- if ((last + FCE_TM_DELTA) < now) {
- last = now;
- for ( ; vol; vol = vol->v_next ) {
- if (vol->v_flags & AFPVOL_TM)
- (void)fce_register_tm_size(vol->v_path, vol->v_tm_used + vol->v_appended);
- }
- }
-}
-
/* -----------------------
* set volume creation date
* avoid duplicate, well at least it tries
uint32_t *);
extern void setvoltime (AFPObj *, struct vol *);
extern int pollvoltime (AFPObj *);
-extern void vol_fce_tm_event(void);
/* FP functions */
int afp_openvol (AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen);
#define FCE_DIR_DELETE 3
#define FCE_FILE_CREATE 4
#define FCE_DIR_CREATE 5
-#define FCE_TM_SIZE 6
#define FCE_CONN_START 42
#define FCE_CONN_BROKEN 99
#define FCE_FIRST_EVENT FCE_FILE_MODIFY /* keep in sync with last file event above */
-#define FCE_LAST_EVENT FCE_TM_SIZE /* keep in sync with last file event above */
+#define FCE_LAST_EVENT FCE_DIR_CREATE /* keep in sync with last file event above */
/* fce_packet.fce_magic */
#define FCE_PACKET_MAGIC "at_fcapi"
int fce_register_new_dir( struct path *path );
int fce_register_new_file( struct path *path );
int fce_register_file_modification( struct ofork *ofork );
-int fce_register_tm_size(const char *vol, size_t used);
int fce_add_udp_socket(const char *target ); // IP or IP:Port
int fce_set_coalesce(const char *coalesce_opt ); // all|delete|create
-int fce_set_events(const char *events); /* fmod,fdel,ddel,fcre,dcre,tmsz (default is all except tmsz) */
+int fce_set_events(const char *events); /* fmod,fdel,ddel,fcre,dcre */
#define FCE_DEFAULT_PORT 12250
#define FCE_DEFAULT_PORT_STRING "12250"
is 12250 if not specified\&. Specifying mutliple listeners is done by having this option once for each of them\&.
.RE
.PP
-fce events = \fIfmod,fdel,ddel,fcre,dcre,tmsz\fR \fB(G)\fR
+fce events = \fIfmod,fdel,ddel,fcre,dcre\fR \fB(G)\fR
.RS 4
Speficies which FCE events are active, default is
\fIfmod,fdel,ddel,fcre,dcre\fR\&.