/*
- * "$Id$"
+ * "$Id: dirsvc.c 5889 2006-08-24 21:44:35Z mike $"
*
* Directory services routines for the Common UNIX Printing System (CUPS).
*
else
p = cupsdAddPrinter(value);
- p->accepting = 1;
- p->state = IPP_PRINTER_IDLE;
- p->type |= CUPS_PRINTER_REMOTE;
- p->browse_time = now + BrowseTimeout;
+ p->accepting = 1;
+ p->state = IPP_PRINTER_IDLE;
+ p->type |= CUPS_PRINTER_REMOTE;
+ p->browse_time = now;
+ p->browse_expire = now + BrowseTimeout;
/*
* Set the default printer as needed...
else
p = cupsdAddClass(value);
- p->accepting = 1;
- p->state = IPP_PRINTER_IDLE;
- p->type |= CUPS_PRINTER_REMOTE;
- p->browse_time = now + BrowseTimeout;
+ p->accepting = 1;
+ p->state = IPP_PRINTER_IDLE;
+ p->type |= CUPS_PRINTER_REMOTE;
+ p->browse_time = now;
+ p->browse_expire = now + BrowseTimeout;
/*
* Set the default printer as needed...
{
time_t t = atoi(value);
- if (t > (now + BrowseInterval))
- p->browse_time = t;
+ if (t > p->browse_expire)
+ p->browse_expire = t;
}
else
{
}
+/*
+ * 'cupsdRestartPolling()' - Restart polling servers as needed.
+ */
+
+void
+cupsdRestartPolling(void)
+{
+ int i; /* Looping var */
+ cupsd_dirsvc_poll_t *pollp; /* Current polling server */
+
+
+ for (i = 0, pollp = Polled; i < NumPolled; i ++, pollp ++)
+ if (pollp->pid)
+ kill(pollp->pid, SIGHUP);
+}
+
+
/*
* 'cupsdSaveRemoteCache()' - Save the remote printer cache.
*/
cupsFilePrintf(fp, "Type %d\n", printer->type);
- cupsFilePrintf(fp, "BrowseTime %d\n", (int)printer->browse_time);
+ cupsFilePrintf(fp, "BrowseTime %d\n", (int)printer->browse_expire);
if (printer->info)
cupsFilePrintf(fp, "Info %s\n", printer->info);
fcntl(BrowseSocket, F_SETFD, fcntl(BrowseSocket, F_GETFD) | FD_CLOEXEC);
/*
- * Finally, add the socket to the input selection set...
+ * Finally, add the socket to the input selection set as needed...
*/
- cupsdLogMessage(CUPSD_LOG_DEBUG2,
- "cupsdStartBrowsing: Adding fd %d to InputSet...",
- BrowseSocket);
+ if (BrowseRemoteProtocols & BROWSE_CUPS)
+ {
+ /*
+ * We only listen if we want remote printers...
+ */
- FD_SET(BrowseSocket, InputSet);
+ cupsdLogMessage(CUPSD_LOG_DEBUG2,
+ "cupsdStartBrowsing: Adding fd %d to InputSet...",
+ BrowseSocket);
+
+ FD_SET(BrowseSocket, InputSet);
+ }
}
else
BrowseSocket = -1;
if (cupsdCheckAuth(address, srcname, len, 1, &(Relays[i].from)))
if (sendto(BrowseSocket, packet, bytes, 0,
(struct sockaddr *)&(Relays[i].to),
- sizeof(http_addr_t)) <= 0)
+ httpAddrLength(&(Relays[i].to))) <= 0)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"cupsdUpdateCUPSBrowse: sendto failed for relay %d - %s.",
if (!strchr(PollStatusBuffer->buffer, '\n'))
break;
- if (ptr == NULL)
+ if (ptr == NULL && !PollStatusBuffer->bufused)
{
/*
* All polling processes have died; stop polling...
hptr = strchr(host, '.');
sptr = strchr(ServerName, '.');
- if (sptr != NULL && hptr != NULL)
+ if (!ServerNameIsIP && sptr != NULL && hptr != NULL)
{
/*
* Strip the common domain name components...
else
return;
+ if (hptr && !*hptr)
+ *hptr = '.'; /* Resource FQDN */
+
if ((p = cupsdFindClass(name)) == NULL && BrowseShortNames)
{
if ((p = cupsdFindClass(resource + 9)) != NULL)
else
return;
+ if (hptr && !*hptr)
+ *hptr = '.'; /* Resource FQDN */
+
if ((p = cupsdFindPrinter(name)) == NULL && BrowseShortNames)
{
if ((p = cupsdFindPrinter(resource + 10)) != NULL)
sendto(BrowseSocket, packet, bytes, 0,
(struct sockaddr *)&(iface->broadcast),
- sizeof(struct sockaddr_in));
+ httpAddrLength(&(iface->broadcast)));
}
}
else if ((iface = cupsdNetIFFind(b->iface)) != NULL)
sendto(BrowseSocket, packet, bytes, 0,
(struct sockaddr *)&(iface->broadcast),
- sizeof(struct sockaddr_in));
+ httpAddrLength(&(iface->broadcast)));
}
}
}
if (sendto(BrowseSocket, packet, bytes, 0,
(struct sockaddr *)&(b->to),
- sizeof(struct sockaddr_in)) <= 0)
+ httpAddrLength(&(b->to))) <= 0)
{
/*
* Unable to send browse packet, so remove this address from the
/*
- * End of "$Id$".
+ * End of "$Id: dirsvc.c 5889 2006-08-24 21:44:35Z mike $".
*/