#include <atalk/fce_api.h>
#include <atalk/globals.h>
#include <atalk/netatalk_conf.h>
+#include <atalk/spotlight.h>
#include "switch.h"
#include "auth.h"
}
}
-/* SIGQUIT handler */
-static void ipc_reconnect_handler(int sig _U_)
-{
- DSI *dsi = (DSI *)AFPobj->dsi;
-
- if (reconnect_ipc(AFPobj) != 0) {
- LOG(log_error, logtype_afpd, "ipc_reconnect_handler: failed IPC reconnect");
- afp_dsi_close(AFPobj);
- exit(EXITERR_SYS);
- }
-
- if (ipc_child_write(AFPobj->ipc_fd, IPC_GETSESSION, AFPobj->sinfo.clientid_len, AFPobj->sinfo.clientid) != 0) {
- LOG(log_error, logtype_afpd, "ipc_reconnect_handler: failed IPC ID resend");
- afp_dsi_close(AFPobj);
- exit(EXITERR_SYS);
- }
- LOG(log_note, logtype_afpd, "ipc_reconnect_handler: IPC reconnect done");
-}
-
/* SIGURG handler (primary reconnect) */
static void afp_dsi_transfer_session(int sig _U_)
{
}
/* install SIGQUIT */
- action.sa_handler = ipc_reconnect_handler;
+ action.sa_handler = afp_dsi_die;
if ( sigaction(SIGQUIT, &action, NULL ) < 0 ) {
LOG(log_error, logtype_afpd, "afp_over_dsi: sigaction: %s", strerror(errno) );
afp_dsi_die(EXITERR_SYS);
int flag = 1;
setsockopt(dsi->socket, SOL_TCP, TCP_NODELAY, &flag, sizeof(flag));
+ /* Initialize Spotlight */
+ if ((obj->options.flags & OPTION_SPOTLIGHT) && (obj->options.slmod_path))
+ sl_mod_load(obj->options.slmod_path);
+
+ ipc_child_state(obj, DSI_RUNNING);
+
/* get stuck here until the end */
while (1) {
if (sigsetjmp(recon_jmp, 1) != 0)
exit(0);
}
-#if 0
- /* got ECONNRESET in read from client => exit*/
- if (dsi->flags & DSI_GOT_ECONNRESET) {
- LOG(log_note, logtype_afpd, "afp_over_dsi: client connection reset");
- afp_dsi_close(obj);
- exit(0);
- }
-#endif
-
if (dsi->flags & DSI_RECONINPROG) {
LOG(log_note, logtype_afpd, "afp_over_dsi: failed reconnect");
afp_dsi_close(obj);
if (dsi_disconnect(dsi) != 0)
afp_dsi_die(EXITERR_CLNT);
+ ipc_child_state(obj, DSI_DISCONNECTED);
+
while (dsi->flags & DSI_DISCONNECTED)
pause(); /* gets interrupted by SIGALARM or SIGURG tickle */
+ ipc_child_state(obj, DSI_RUNNING);
continue; /* continue receiving until disconnect timer expires
* or a primary reconnect succeeds */
}
LOG(log_debug, logtype_afpd, "afp_over_dsi: got data, ending normal sleep");
dsi->flags &= ~DSI_SLEEPING;
dsi->tickle = 0;
+ ipc_child_state(obj, DSI_RUNNING);
}
if (reload_request) {
reload_request = 0;
- load_volumes(AFPobj, closevol);
+ load_volumes(AFPobj);
}
/* The first SIGINT enables debugging, the next restores the config */
LOG(log_debug, logtype_afpd, "<== Start AFP command: %s", AfpNum2name(function));
+ AFP_AFPFUNC_START(function, (char *)AfpNum2name(function));
err = (*afp_switch[function])(obj,
- (char *)&dsi->commands, dsi->cmdlen,
+ (char *)dsi->commands, dsi->cmdlen,
(char *)&dsi->data, &dsi->datalen);
+ AFP_AFPFUNC_DONE(function, (char *)AfpNum2name(function));
LOG(log_debug, logtype_afpd, "==> Finished AFP command: %s -> %s",
AfpNum2name(function), AfpErr2name(err));
LOG(log_debug, logtype_afpd, "<== Start AFP command: %s", AfpNum2name(function));
+ AFP_AFPFUNC_START(function, (char *)AfpNum2name(function));
+
err = (*afp_switch[function])(obj,
- (char *)&dsi->commands, dsi->cmdlen,
+ (char *)dsi->commands, dsi->cmdlen,
(char *)&dsi->data, &dsi->datalen);
+ AFP_AFPFUNC_DONE(function, (char *)AfpNum2name(function));
+
LOG(log_debug, logtype_afpd, "==> Finished AFP command: %s -> %s",
AfpNum2name(function), AfpErr2name(err));