Add the -client_polling code.
* NEW: NetBSD support contributed by David Rankin and NetBSD contributors.
This includes a new configure option --enable-netbsd.
+* NEW: Add the -client_polling afpd.conf flag to allow for clients to poll
+ the server every 10 seconds for open window updates. Currently
+ this is the only way to get asynchronous directory updates.
* UPD: Use separate macro for AFS configure check.
* UPD: Some Perl scripts are now (partially) auto-generated. This improves
out-of-the-box usage of Netatalk.
# -loginmesg "Message" Client will display "Message" upon logging in
# (no default, same as -l "Message" on commandline)
# -nodebug Switch off debugging
+# -client_polling With this switch enabled, afpd won't advertise
+# that it is capable of server notifications, so that
+# connected clients poll the server every 10 seconds
+# to detect changes in opened server windows.
+# Note: Depending on the number of simultaneously
+# connected clients and the network's speed, this can
+# lead to a significant higher load on your network!
# -tickleval <number> Specify the tickle timeout interval (in seconds).
# Note, this defaults to 30 seconds, and really
# shouldn't be changed. If you want to control
(no default, same as -l "Message" on
command-line)
-nodebug Switch off debugging
+ -client_polling Disable server notifications. This forces the
+ clients to poll every 10 seconds for directory updates. Note,
+ currently this is the only way to get asynchronous updates.
-ticklevel <number> Specify the tickle timeout interval (in seconds)
+ -timeout <number> Specify the number of tickles to miss before tearing
+ down a client connection
-icon Use the platform-specific icon.
An example:
/*
- * $Id: afp_options.c,v 1.13.2.5 2002-02-09 05:35:17 jmarcus Exp $
+ * $Id: afp_options.c,v 1.13.2.6 2002-02-11 17:46:40 jmarcus Exp $
*
* Copyright (c) 1997 Adrian Sun (asun@zoology.washington.edu)
* Copyright (c) 1990,1993 Regents of The University of Michigan.
options->passwdfile = _PATH_AFPDPWFILE;
options->tickleval = 30;
options->timeout = 4;
+ options->server_notif = 1;
options->authprintdir = NULL;
options->umask = 0;
#ifdef ADMIN_GRP
options->transports |= AFPTRANS_DDP;
if (strstr(buf, " -noddp"))
options->transports &= ~AFPTRANS_DDP;
+ if (strstr(buf, "-client_polling"))
+ options->server_notif = 0;
/* figure out options w/ values. currently, this will ignore the setting
* if memory is lacking. */
/*
- * $Id: globals.h,v 1.6.2.4 2002-02-09 05:35:17 jmarcus Exp $
+ * $Id: globals.h,v 1.6.2.5 2002-02-11 17:46:40 jmarcus Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
/* a couple of these options could get stuck in unions to save
* space. */
struct afp_options {
- int connections, port, transports, tickleval, timeout, flags;
+ int connections, port, transports, tickleval, timeout, server_notif, flags;
unsigned char passwdbits, passwdminlen, loginmaxfail;
u_int32_t server_quantum;
char hostname[MAXHOSTNAMELEN + 1], *server, *ipaddr, *configfile;
/*
- * $Id: status.c,v 1.4.2.4 2002-02-09 05:35:17 jmarcus Exp $
+ * $Id: status.c,v 1.4.2.5 2002-02-11 17:46:40 jmarcus Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
#include "afp_config.h"
#include "icon.h"
-static void status_flags(char *data, const int ipok,
+static void status_flags(char *data, const int notif, const int ipok,
const unsigned char passwdbits)
{
u_int16_t status;
if (ipok)
status |= AFPSRVRINFO_TCPIP;
status |= AFPSRVRINFO_SRVMSGS;
- status |= AFPSRVRINFO_SRVNOTIFY;
+ /* Allow the user to decide if we should support server notifications.
+ * With this turned off, the clients will poll for directory changes every
+ * 10 seconds. This might be too costly to network resources, so make
+ * this an optional thing. Default will be to _not_ support server
+ * notifications. */
+ if (notif) {
+ status |= AFPSRVRINFO_SRVNOTIFY;
+ }
status |= AFPSRVRINFO_FASTBOZO;
status = htons(status);
memcpy(data + AFPSTATUS_FLAGOFF, &status, sizeof(status));
* (16-bytes), network addresses, volume icon/mask
*/
- status_flags(status, options->fqdn ||
+ status_flags(status, options->server_notif, options->fqdn ||
(dsiconfig && dsi->server.sin_addr.s_addr),
options->passwdbits);
/* returns offset to signature offset */
/*
- * $Id: volume.c,v 1.14.2.6 2002-02-09 05:35:17 jmarcus Exp $
+ * $Id: volume.c,v 1.14.2.7 2002-02-11 17:46:40 jmarcus Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
/* a little granularity */
if (vol->v_time < tv.tv_sec) {
vol->v_time = tv.tv_sec;
- obj->attention(obj->handle, AFPATTN_NOTIFY | AFPATTN_VOLCHANGED);
+ if (obj->options.server_notif) {
+ obj->attention(obj->handle, AFPATTN_NOTIFY | AFPATTN_VOLCHANGED);
+ }
}
}