]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - scheduler/dirsvc.c
Load cups into easysw/current.
[thirdparty/cups.git] / scheduler / dirsvc.c
index 900f135380ddddcd731247cbb2acebe66a20d851..cb751549bc698d57b668e4fb2efe7cbb09a13d00 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id$"
+ * "$Id: dirsvc.c 5889 2006-08-24 21:44:35Z mike $"
  *
  *   Directory services routines for the Common UNIX Printing System (CUPS).
  *
@@ -212,10 +212,11 @@ cupsdLoadRemoteCache(void)
        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...
@@ -252,10 +253,11 @@ cupsdLoadRemoteCache(void)
        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...
@@ -416,8 +418,8 @@ cupsdLoadRemoteCache(void)
       {
         time_t t = atoi(value);
 
-       if (t > (now + BrowseInterval))
-          p->browse_time = t;
+       if (t > p->browse_expire)
+          p->browse_expire = t;
       }
       else
       {
@@ -511,6 +513,23 @@ cupsdLoadRemoteCache(void)
 }
 
 
+/*
+ * '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.
  */
@@ -591,7 +610,7 @@ cupsdSaveRemoteCache(void)
 
     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);
@@ -906,14 +925,21 @@ cupsdStartBrowsing(void)
     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;
@@ -1459,7 +1485,7 @@ cupsdUpdateCUPSBrowse(void)
     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.",
@@ -1600,7 +1626,7 @@ cupsdUpdatePolling(void)
     if (!strchr(PollStatusBuffer->buffer, '\n'))
       break;
 
-  if (ptr == NULL)
+  if (ptr == NULL && !PollStatusBuffer->bufused)
   {
    /*
     * All polling processes have died; stop polling...
@@ -1885,7 +1911,7 @@ process_browse_data(
   hptr   = strchr(host, '.');
   sptr   = strchr(ServerName, '.');
 
-  if (sptr != NULL && hptr != NULL)
+  if (!ServerNameIsIP && sptr != NULL && hptr != NULL)
   {
    /*
     * Strip the common domain name components...
@@ -1914,6 +1940,9 @@ process_browse_data(
     else
       return;
 
+    if (hptr && !*hptr)
+      *hptr = '.';                     /* Resource FQDN */
+
     if ((p = cupsdFindClass(name)) == NULL && BrowseShortNames)
     {
       if ((p = cupsdFindClass(resource + 9)) != NULL)
@@ -2017,6 +2046,9 @@ process_browse_data(
     else
       return;
 
+    if (hptr && !*hptr)
+      *hptr = '.';                     /* Resource FQDN */
+
     if ((p = cupsdFindPrinter(name)) == NULL && BrowseShortNames)
     {
       if ((p = cupsdFindPrinter(resource + 10)) != NULL)
@@ -2557,7 +2589,7 @@ send_cups_browse(cupsd_printer_t *p)      /* I - Printer to send */
 
          sendto(BrowseSocket, packet, bytes, 0,
                 (struct sockaddr *)&(iface->broadcast),
-                sizeof(struct sockaddr_in));
+                httpAddrLength(&(iface->broadcast)));
         }
       }
       else if ((iface = cupsdNetIFFind(b->iface)) != NULL)
@@ -2598,7 +2630,7 @@ send_cups_browse(cupsd_printer_t *p)      /* I - Printer to send */
 
          sendto(BrowseSocket, packet, bytes, 0,
                 (struct sockaddr *)&(iface->broadcast),
-                sizeof(struct sockaddr_in));
+                httpAddrLength(&(iface->broadcast)));
         }
       }
     }
@@ -2619,7 +2651,7 @@ send_cups_browse(cupsd_printer_t *p)      /* I - Printer to send */
 
       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
@@ -3149,5 +3181,5 @@ slp_url_callback(
 
 
 /*
- * End of "$Id$".
+ * End of "$Id: dirsvc.c 5889 2006-08-24 21:44:35Z mike $".
  */