rpms/cups/F-11 cups-avahi.patch,1.6,1.7 cups.spec,1.516,1.517

Tim Waugh twaugh at fedoraproject.org
Fri Sep 4 14:08:35 UTC 2009


Author: twaugh

Update of /cvs/pkgs/rpms/cups/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv21942

Modified Files:
	cups-avahi.patch cups.spec 
Log Message:
* Fri Sep  4 2009 Tim Waugh <twaugh at redhat.com> 1:1.4.0-2
- Fixed the dnssd backend so that it only reports devices once avahi
  resolution has completed.  This makes it report Device IDs
  (bug #520858).


cups-avahi.patch:
 backend/dnssd.c              |  544 ++++++++++++++++++++++++++++++++++++-------
 config-scripts/cups-dnssd.m4 |   15 +
 config.h.in                  |    7 
 cups/http-support.c          |  177 +++++++++++++
 4 files changed, 657 insertions(+), 86 deletions(-)

Index: cups-avahi.patch
===================================================================
RCS file: /cvs/pkgs/rpms/cups/F-11/cups-avahi.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- cups-avahi.patch	28 Aug 2009 21:30:05 -0000	1.6
+++ cups-avahi.patch	4 Sep 2009 14:08:35 -0000	1.7
@@ -1,6 +1,6 @@
 diff -up cups-1.4.0/backend/dnssd.c.avahi cups-1.4.0/backend/dnssd.c
 --- cups-1.4.0/backend/dnssd.c.avahi	2009-08-07 23:27:12.000000000 +0100
-+++ cups-1.4.0/backend/dnssd.c	2009-08-28 21:44:27.262137662 +0100
++++ cups-1.4.0/backend/dnssd.c	2009-09-04 14:57:04.730388833 +0100
 @@ -22,6 +22,7 @@
   *   exec_backend()          - Execute the backend that corresponds to the
   *                             resolved service name.
@@ -29,17 +29,20 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  
  
  /*
-@@ -52,7 +64,9 @@ typedef enum
+@@ -52,7 +64,12 @@ typedef enum
  
  typedef struct
  {
 +#ifdef HAVE_DNSSD
    DNSServiceRef	ref;			/* Service reference for resolve */
 +#endif /* HAVE_DNSSD */
++#ifdef HAVE_AVAHI
++  int		resolved;		/* Did we resolve the device? */
++#endif /* HAVE_AVAHI */
    char		*name,			/* Service name */
  		*domain,		/* Domain name */
  		*fullName,		/* Full name */
-@@ -64,6 +78,20 @@ typedef struct
+@@ -64,6 +81,20 @@ typedef struct
  		sent;			/* Did we list the device? */
  } cups_device_t;
  
@@ -60,7 +63,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  
  /*
   * Local globals...
-@@ -77,6 +105,7 @@ static int		job_canceled = 0;
+@@ -77,6 +108,7 @@ static int		job_canceled = 0;
   * Local functions...
   */
  
@@ -68,7 +71,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  static void		browse_callback(DNSServiceRef sdRef,
  			                DNSServiceFlags flags,
  				        uint32_t interfaceIndex,
-@@ -92,12 +121,6 @@ static void		browse_local_callback(DNSSe
+@@ -92,12 +124,6 @@ static void		browse_local_callback(DNSSe
  					      const char *regtype,
  					      const char *replyDomain,
  					      void *context);
@@ -81,7 +84,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  static void		query_callback(DNSServiceRef sdRef,
  			               DNSServiceFlags flags,
  				       uint32_t interfaceIndex,
-@@ -106,9 +129,111 @@ static void		query_callback(DNSServiceRe
+@@ -106,9 +132,111 @@ static void		query_callback(DNSServiceRe
  				       uint16_t rrclass, uint16_t rdlen,
  				       const void *rdata, uint32_t ttl,
  				       void *context);
@@ -193,7 +196,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  
  /*
   * 'main()' - Browse for printers.
-@@ -119,6 +244,13 @@ main(int  argc,				/* I - Number of comm
+@@ -119,6 +247,13 @@ main(int  argc,				/* I - Number of comm
       char *argv[])			/* I - Command-line arguments */
  {
    const char	*name;			/* Backend name */
@@ -207,7 +210,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
    DNSServiceRef	main_ref,		/* Main service reference */
  		fax_ipp_ref,		/* IPP fax service reference */
  		ipp_ref,		/* IPP service reference */
-@@ -130,12 +262,11 @@ main(int  argc,				/* I - Number of comm
+@@ -130,12 +265,11 @@ main(int  argc,				/* I - Number of comm
  		pdl_datastream_ref,	/* AppSocket service reference */
  		printer_ref,		/* LPD service reference */
  		riousbprint_ref;	/* Remote IO service reference */
@@ -225,7 +228,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
    struct sigaction action;		/* Actions for POSIX signals */
  #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
-@@ -194,6 +325,49 @@ main(int  argc,				/* I - Number of comm
+@@ -194,6 +328,49 @@ main(int  argc,				/* I - Number of comm
    * Browse for different kinds of printers...
    */
  
@@ -275,7 +278,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
    if (DNSServiceCreateConnection(&main_ref) != kDNSServiceErr_NoError)
    {
      perror("ERROR: Unable to create service connection");
-@@ -245,6 +419,7 @@ main(int  argc,				/* I - Number of comm
+@@ -245,6 +422,7 @@ main(int  argc,				/* I - Number of comm
    riousbprint_ref = main_ref;
    DNSServiceBrowse(&riousbprint_ref, kDNSServiceFlagsShareConnection, 0,
                     "_riousbprint._tcp", NULL, browse_callback, devices);
@@ -283,7 +286,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  
   /*
    * Loop until we are killed...
-@@ -252,6 +427,9 @@ main(int  argc,				/* I - Number of comm
+@@ -252,6 +430,9 @@ main(int  argc,				/* I - Number of comm
  
    while (!job_canceled)
    {
@@ -293,7 +296,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
      FD_ZERO(&input);
      FD_SET(fd, &input);
  
-@@ -271,11 +449,35 @@ main(int  argc,				/* I - Number of comm
+@@ -271,11 +452,35 @@ main(int  argc,				/* I - Number of comm
      }
      else
      {
@@ -329,7 +332,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
        cups_device_t *best;		/* Best matching device */
        char	device_uri[1024];	/* Device URI */
        int	count;			/* Number of queries */
-@@ -285,6 +487,7 @@ main(int  argc,				/* I - Number of comm
+@@ -285,6 +490,7 @@ main(int  argc,				/* I - Number of comm
                 best = NULL, count = 0;
             device;
  	   device = (cups_device_t *)cupsArrayNext(devices))
@@ -337,13 +340,18 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
          if (!device->ref && !device->sent)
  	{
  	 /*
-@@ -313,14 +516,18 @@ main(int  argc,				/* I - Number of comm
+@@ -313,14 +519,23 @@ main(int  argc,				/* I - Number of comm
  	      count ++;
            }
  	}
 -	else if (!device->sent)
 +	else
 +#endif /* HAVE_DNSSD */
++#ifdef HAVE_AVAHI
++	if (!device->resolved)
++	  continue;
++        else
++#endif /* HAVE_AVAHI */
 +	if (!device->sent)
  	{
 +#ifdef HAVE_DNSSD
@@ -357,7 +365,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  
            if (!best)
  	    best = device;
-@@ -372,6 +579,7 @@ main(int  argc,				/* I - Number of comm
+@@ -372,6 +587,7 @@ main(int  argc,				/* I - Number of comm
   * 'browse_callback()' - Browse devices.
   */
  
@@ -365,7 +373,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  static void
  browse_callback(
      DNSServiceRef       sdRef,		/* I - Service reference */
-@@ -405,12 +613,14 @@ browse_callback(
+@@ -405,12 +621,14 @@ browse_callback(
  
    get_device((cups_array_t *)context, serviceName, regtype, replyDomain);
  }
@@ -380,7 +388,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  static void
  browse_local_callback(
      DNSServiceRef       sdRef,		/* I - Service reference */
-@@ -456,6 +666,7 @@ browse_local_callback(
+@@ -456,6 +674,7 @@ browse_local_callback(
  	  device->fullName);
    device->sent = 1;
  }
@@ -388,7 +396,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  
  
  /*
-@@ -528,6 +739,32 @@ exec_backend(char **argv)		/* I - Comman
+@@ -528,6 +747,32 @@ exec_backend(char **argv)		/* I - Comman
    exit(CUPS_BACKEND_STOP);
  }
  
@@ -421,7 +429,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  
  /*
   * 'get_device()' - Create or update a device.
-@@ -550,18 +787,7 @@ get_device(cups_array_t *devices,	/* I -
+@@ -550,18 +795,7 @@ get_device(cups_array_t *devices,	/* I -
    */
  
    key.name = (char *)serviceName;
@@ -441,7 +449,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  
    for (device = cupsArrayFind(devices, &key);
         device;
-@@ -581,8 +807,14 @@ get_device(cups_array_t *devices,	/* I -
+@@ -581,8 +815,14 @@ get_device(cups_array_t *devices,	/* I -
          free(device->domain);
  	device->domain = strdup(replyDomain);
  
@@ -456,7 +464,17 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  	free(device->fullName);
  	device->fullName = strdup(fullName);
        }
-@@ -609,7 +841,13 @@ get_device(cups_array_t *devices,	/* I -
+@@ -602,6 +842,9 @@ get_device(cups_array_t *devices,	/* I -
+   device->domain   = strdup(replyDomain);
+   device->type     = key.type;
+   device->priority = 50;
++#ifdef HAVE_AVAHI
++  device->resolved = 0;
++#endif /* HAVE_AVAHI */
+ 
+   cupsArrayAdd(devices, device);
+ 
+@@ -609,7 +852,13 @@ get_device(cups_array_t *devices,	/* I -
    * Set the "full name" of this service, which is used for queries...
    */
  
@@ -470,7 +488,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
    device->fullName = strdup(fullName);
  
    return (device);
-@@ -620,6 +858,7 @@ get_device(cups_array_t *devices,	/* I -
+@@ -620,6 +869,7 @@ get_device(cups_array_t *devices,	/* I -
   * 'query_callback()' - Process query data.
   */
  
@@ -478,7 +496,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  static void
  query_callback(
      DNSServiceRef       sdRef,		/* I - Service reference */
-@@ -639,7 +878,7 @@ query_callback(
+@@ -639,7 +889,7 @@ query_callback(
  		*ptr;			/* Pointer into string */
    cups_device_t	dkey,			/* Search key */
  		*device;		/* Device */
@@ -487,7 +505,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
  
    fprintf(stderr, "DEBUG2: query_callback(sdRef=%p, flags=%x, "
                    "interfaceIndex=%d, errorCode=%d, fullName=\"%s\", "
-@@ -673,84 +912,211 @@ query_callback(
+@@ -673,84 +923,212 @@ query_callback(
    if ((ptr = strstr(name, "._")) != NULL)
      *ptr = '\0';
  
@@ -586,13 +604,13 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
 +    * Let the main loop know to announce the device.
 +    */
 +
++    device->resolved = 1;
 +    avahi_got_callback = 1;
 +  }
    else
 -    dkey.type = CUPS_DEVICE_RIOUSBPRINT;
 +    fprintf (stderr, "DEBUG: Ignoring TXT record for \"%s\"...\n", name);
- 
--  for (device = cupsArrayFind(devices, &dkey);
++
 +  avahi_service_resolver_free (resolver);
 +}
 +
@@ -653,7 +671,8 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
 +    }
 +
 +    break;
-+
+ 
+-  for (device = cupsArrayFind(devices, &dkey);
 +  case AVAHI_BROWSER_REMOVE:
 +  case AVAHI_BROWSER_ALL_FOR_NOW:
 +  case AVAHI_BROWSER_CACHE_EXHAUSTED:
@@ -751,7 +770,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
          if (!strncasecmp(key, "usb_", 4))
  	{
  	 /*
-@@ -805,6 +1171,10 @@ query_callback(
+@@ -805,6 +1183,10 @@ query_callback(
  	  if (device->type == CUPS_DEVICE_PRINTER)
  	    device->sent = 1;
  	}
@@ -762,7 +781,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
        }
  
        if (device->device_id)
-@@ -854,11 +1224,9 @@ query_callback(
+@@ -854,11 +1236,9 @@ query_callback(
      }
    }
  
@@ -777,7 +796,7 @@ diff -up cups-1.4.0/backend/dnssd.c.avah
   */
 diff -up cups-1.4.0/config.h.in.avahi cups-1.4.0/config.h.in
 --- cups-1.4.0/config.h.in.avahi	2009-06-10 16:51:21.000000000 +0100
-+++ cups-1.4.0/config.h.in	2009-08-28 21:44:27.265137528 +0100
++++ cups-1.4.0/config.h.in	2009-09-04 14:57:04.733388405 +0100
 @@ -336,6 +336,13 @@
  
  
@@ -794,7 +813,7 @@ diff -up cups-1.4.0/config.h.in.avahi cu
  
 diff -up cups-1.4.0/config-scripts/cups-dnssd.m4.avahi cups-1.4.0/config-scripts/cups-dnssd.m4
 --- cups-1.4.0/config-scripts/cups-dnssd.m4.avahi	2009-02-10 17:05:35.000000000 +0000
-+++ cups-1.4.0/config-scripts/cups-dnssd.m4	2009-08-28 21:44:27.263138688 +0100
++++ cups-1.4.0/config-scripts/cups-dnssd.m4	2009-09-04 14:57:04.731388902 +0100
 @@ -27,6 +27,21 @@ AC_ARG_WITH(dnssd-includes, [  --with-dn
  DNSSDLIBS=""
  DNSSD_BACKEND=""
@@ -819,7 +838,7 @@ diff -up cups-1.4.0/config-scripts/cups-
  		case "$uname" in
 diff -up cups-1.4.0/cups/http-support.c.avahi cups-1.4.0/cups/http-support.c
 --- cups-1.4.0/cups/http-support.c.avahi	2009-06-12 01:21:58.000000000 +0100
-+++ cups-1.4.0/cups/http-support.c	2009-08-28 21:44:27.267137550 +0100
++++ cups-1.4.0/cups/http-support.c	2009-09-04 14:57:04.736398674 +0100
 @@ -55,6 +55,11 @@
  #  include <dns_sd.h>
  #  include <poll.h>


Index: cups.spec
===================================================================
RCS file: /cvs/pkgs/rpms/cups/F-11/cups.spec,v
retrieving revision 1.516
retrieving revision 1.517
diff -u -p -r1.516 -r1.517
--- cups.spec	28 Aug 2009 21:30:05 -0000	1.516
+++ cups.spec	4 Sep 2009 14:08:35 -0000	1.517
@@ -9,7 +9,7 @@
 Summary: Common Unix Printing System
 Name: cups
 Version: 1.4.0
-Release: 1%{?dist}
+Release: 2%{?dist}
 License: GPLv2
 Group: System Environment/Daemons
 Source: http://ftp.easysw.com/pub/cups/1.4.0/cups-%{version}-source.tar.bz2
@@ -519,6 +519,11 @@ rm -rf $RPM_BUILD_ROOT
 %{php_extdir}/phpcups.so
 
 %changelog
+* Fri Sep  4 2009 Tim Waugh <twaugh at redhat.com> 1:1.4.0-2
+- Fixed the dnssd backend so that it only reports devices once avahi
+  resolution has completed.  This makes it report Device IDs
+  (bug #520858).
+
 * Fri Aug 28 2009 Tim Waugh <twaugh at redhat.com> 1:1.4.0-1
 - 1.4.0.
 




More information about the fedora-extras-commits mailing list