--- cups-1.3.7/scheduler/conf.c.bpint 2010-10-06 23:27:11.000000000 +0100 +++ cups-1.3.7/scheduler/conf.c 2010-10-06 23:27:11.000000000 +0100 @@ -85,6 +85,8 @@ #endif /* __APPLE__ */ { "AutoPurgeJobs", &JobAutoPurge, CUPSD_VARTYPE_BOOLEAN }, { "BrowseInterval", &BrowseInterval, CUPSD_VARTYPE_INTEGER }, + { "BrowsePollInterval", &BrowsePollInterval, CUPSD_VARTYPE_INTEGER }, + { "BrowsePollLease", &BrowsePollLease, CUPSD_VARTYPE_INTEGER }, #ifdef HAVE_LDAP { "BrowseLDAPBindDN", &BrowseLDAPBindDN, CUPSD_VARTYPE_STRING }, { "BrowseLDAPCACertFile", &BrowseLDAPCACertFile, CUPSD_VARTYPE_PATHNAME }, @@ -558,6 +560,8 @@ NumSystemGroups = 0; BrowseInterval = DEFAULT_INTERVAL; + BrowsePollInterval = 0; + BrowsePollLease = 0; BrowsePort = ippPort(); BrowseLocalProtocols = parse_protocols(CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS); BrowseRemoteProtocols = parse_protocols(CUPS_DEFAULT_BROWSE_REMOTE_PROTOCOLS); --- cups-1.3.7/scheduler/dirsvc.c.bpint 2010-10-06 23:27:11.000000000 +0100 +++ cups-1.3.7/scheduler/dirsvc.c 2010-10-06 23:39:04.000000000 +0100 @@ -820,6 +820,10 @@ max_count = 2 * cupsArrayCount(Printers) / BrowseInterval + 1; + /* JSP says: Set minimum rate to 5 per sec ... */ + if (max_count < 5) + max_count = 5; + for (count = 0, p = (cupsd_printer_t *)cupsArrayFirst(Printers); count < max_count && p != NULL; p = (cupsd_printer_t *)cupsArrayNext(Printers)) @@ -1199,8 +1203,9 @@ char sport[255]; /* Server port */ char bport[255]; /* Browser port */ char interval[255]; /* Poll interval */ + char leasetime[255]; /* JSP says: leasetime printer adverts */ int statusfds[2]; /* Status pipe */ - char *argv[6]; /* Arguments */ + char *argv[7]; /* Arguments; JSP says: I need an extra one */ char *envp[100]; /* Environment */ @@ -1223,16 +1228,24 @@ sprintf(bport, "%d", BrowsePort); - if (BrowseInterval) + /* JSP says: prefer the new BrowsePollInterval, falling back to the + existing BrowseInterval or 30 if neither is set. */ + if (BrowsePollInterval) + sprintf(interval, "%d", BrowsePollInterval); + else if (BrowseInterval) sprintf(interval, "%d", BrowseInterval); else strcpy(interval, "30"); + /* JSP says: this passes the leasetime to use to cups-polld */ + sprintf(leasetime, "%d", BrowsePollLease); + argv[0] = "cups-polld"; argv[2] = sport; argv[3] = interval; argv[4] = bport; - argv[5] = NULL; + argv[5] = leasetime; + argv[6] = NULL; cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0]))); --- cups-1.3.7/scheduler/dirsvc.h.bpint 2007-07-11 22:46:42.000000000 +0100 +++ cups-1.3.7/scheduler/dirsvc.h 2010-10-06 23:27:11.000000000 +0100 @@ -94,6 +94,10 @@ /* Port number for broadcasts */ BrowseInterval VALUE(DEFAULT_INTERVAL), /* Broadcast interval in seconds */ + BrowsePollInterval VALUE(0), + /* JSP says: Interval for BrowsePoll, defaults to using BrowseInterval if not defined */ + BrowsePollLease VALUE(0), + /* JSP says: leasetime for cups-polld if zero the code uses 2 * interval */ BrowseTimeout VALUE(DEFAULT_TIMEOUT), /* Time out for printers in seconds */ UseNetworkDefault VALUE(CUPS_DEFAULT_USE_NETWORK_DEFAULT), --- cups-1.3.7/scheduler/cups-polld.c.bpint 2010-10-06 23:27:11.000000000 +0100 +++ cups-1.3.7/scheduler/cups-polld.c 2010-10-06 23:27:11.000000000 +0100 @@ -39,6 +39,7 @@ */ static int restart_polling = 1; +static int first_pollrun = 1; /* @@ -47,6 +48,7 @@ static char *dequote(char *d, const char *s, int dlen); static int poll_server(http_t *http, int sock, int port, int interval, + int leasetime, const char *prefix); static void sighup_handler(int sig); @@ -61,6 +63,7 @@ { http_t *http; /* HTTP connection */ int interval; /* Polling interval */ + int leasetime; /* lease time to include in updates we send */ int sock; /* Browser sock */ int port; /* Browser port */ int val; /* Socket option value */ @@ -101,9 +104,9 @@ * cups-polld server server-port interval port */ - if (argc != 5) + if ((argc != 5) && (argc != 6)) { - fputs("Usage: cups-polld server server-port interval port\n", stderr); + fputs("Usage: cups-polld server server-port interval port [lease-time]\n", stderr); return (1); } @@ -113,6 +116,14 @@ if (interval < 2) interval = 2; + /* JSP says: if passed the optional extra argument use it unless it is too short! */ + if (argc == 6) { + leasetime = atoi(argv[5]); + if (leasetime < (2 * interval)) + leasetime = 2 * interval; + } else + leasetime = 2 * interval; + snprintf(prefix, sizeof(prefix), "[cups-polld %s:%d]", argv[1], atoi(argv[2])); /* @@ -182,7 +193,7 @@ remain = interval; - if (http && (seconds = poll_server(http, sock, port, interval, prefix)) > 0) + if (http && (seconds = poll_server(http, sock, port, interval, leasetime, prefix)) > 0) remain -= seconds; /* @@ -236,6 +247,7 @@ int sock, /* I - Broadcast sock */ int port, /* I - Broadcast port */ int interval, /* I - Polling interval */ + int leasetime, /* I - lease time to use */ const char *prefix) /* I - Prefix for log messages */ { int seconds; /* Number of seconds */ @@ -328,6 +340,16 @@ count = 0; max_count = max_count / interval + 1; + /* JSP says: set minimum rate to 5 per second ... */ + if (max_count < 5) + max_count = 5; + /* JSP says: if this is the first time through send them even + faster to quickly populate the list of printers */ + if (first_pollrun) { + first_pollrun=0; + if (max_count < 30) + max_count = 30; + } /* * Loop through the printers or classes returned in the list... @@ -418,9 +440,13 @@ if (!accepting) type |= CUPS_PRINTER_REJECTING; + /* JSP says: this sets the lease-duration of the printer to 5 + days which may be overkill and may cause the printers to + persist too long after devices have been removed from our + networks... */ snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\" lease-duration=%d%s\n", - type, state, uri, location, info, make_model, interval * 2, + type, state, uri, location, info, make_model, leasetime, job_sheets); fprintf(stderr, "DEBUG2: %s Sending %s", prefix, packet); --- cups-1.3.7/man/cupsd.conf.man.in.bpint 2010-10-06 23:27:11.000000000 +0100 +++ cups-1.3.7/man/cupsd.conf.man.in 2010-10-06 23:27:11.000000000 +0100 @@ -138,6 +138,14 @@ .br Specifies the maximum interval between printer information broadcasts. .TP 5 +BrowsePollInterval seconds +.br +The interval used for polling servers by BrowsePoll. +.TP 5 +BrowsePollLease seconds +.br +The lease for cups-polld to use in the adverts it sends, if not set then 2 * interval is used. +.TP 5 BrowseOrder allow,deny .TP 5 BrowseOrder deny,allow --- cups-1.3.7/doc/help/ref-cupsd-conf.html.in.bpint 2010-10-06 23:27:11.000000000 +0100 +++ cups-1.3.7/doc/help/ref-cupsd-conf.html.in 2010-10-06 23:27:11.000000000 +0100 @@ -426,6 +426,38 @@ value. Otherwise printers and classes will disappear from client systems between updates.

+

BrowsePollInterval

+ +

Examples

+ +
+BrowsePollInterval 0
+BrowsePollInterval 300
+
+ +

Description

+ +

The BrowsePollInterval directive specifies the +time interval used by BrowsePoll to query remote servers.

+ +

If not specified then BrowseInterval is used (as was +done in previous versions).

+ +

BrowsePollLease

+ +

Examples

+ +
+BrowsePollLease 0
+BrowsePollLease 28800
+
+ +

Description

+ +

The BrowsePollLease directive specifies the lease time +used by BrowsePoll (cups-polld) in the printer adverts it sends to +cupsd. If not specified (ot set to 0) then twice the interval is +used.

CUPS 1.2BrowseLDAPBindDN

@@ -566,13 +598,19 @@

The BrowsePoll directive polls a server for available printers once every BrowseInterval seconds. +HREF="#BrowsePollInterval">BrowsePollInterval seconds. Multiple BrowsePoll directives can be specified to poll multiple servers.

+

If BrowsePollInterval is set to 0 then the value of +BrowseInterval is used.

+

If BrowseInterval is set to 0 then the server is polled once every 30 seconds.

+

If BrowsePollLease is set then this is the leasetime +used in the printers adverts that cups-polld sends to cupsd. If not +set (or set to 0), then twice the interval is used.

BrowsePort