2007-06-13 16:43:07 +00:00
|
|
|
--- cups-1.2.11/backend/ipp.c.eggcups 2007-04-30 18:18:21.000000000 +0100
|
|
|
|
+++ cups-1.2.11/backend/ipp.c 2007-06-13 16:47:06.000000000 +0100
|
2006-11-03 12:12:18 +00:00
|
|
|
@@ -54,6 +54,70 @@
|
|
|
|
#include <signal.h>
|
|
|
|
#include <sys/wait.h>
|
|
|
|
|
|
|
|
+#if HAVE_DBUS
|
|
|
|
+#include <dbus/dbus.h>
|
|
|
|
+
|
|
|
|
+static DBusConnection *dbus_connection = NULL;
|
|
|
|
+
|
|
|
|
+static int
|
|
|
|
+init_dbus (void)
|
|
|
|
+{
|
|
|
|
+ DBusConnection *connection;
|
|
|
|
+ DBusError error;
|
|
|
|
+
|
|
|
|
+ if (dbus_connection &&
|
|
|
|
+ !dbus_connection_get_is_connected (dbus_connection)) {
|
|
|
|
+ dbus_connection_unref (dbus_connection);
|
|
|
|
+ dbus_connection = NULL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dbus_error_init (&error);
|
|
|
|
+ connection = dbus_bus_get (getuid () ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &error);
|
|
|
|
+ if (connection == NULL) {
|
|
|
|
+ dbus_error_free (&error);
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dbus_connection = connection;
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+int
|
|
|
|
+dbus_broadcast_queued_remote (const char *printer_uri,
|
|
|
|
+ ipp_status_t status,
|
|
|
|
+ unsigned int local_job_id,
|
|
|
|
+ unsigned int remote_job_id,
|
|
|
|
+ const char *username,
|
|
|
|
+ const char *printer_name)
|
|
|
|
+{
|
|
|
|
+ DBusMessage *message;
|
|
|
|
+ DBusMessageIter iter;
|
|
|
|
+ const char *errstr;
|
|
|
|
+
|
|
|
|
+ if (!dbus_connection || !dbus_connection_get_is_connected (dbus_connection)) {
|
|
|
|
+ if (init_dbus () || !dbus_connection)
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ errstr = ippErrorString (status);
|
|
|
|
+ message = dbus_message_new_signal ("/com/redhat/PrinterSpooler",
|
|
|
|
+ "com.redhat.PrinterSpooler",
|
|
|
|
+ "JobQueuedRemote");
|
|
|
|
+ dbus_message_iter_init_append (message, &iter);
|
|
|
|
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &printer_uri);
|
|
|
|
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &errstr);
|
|
|
|
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &local_job_id);
|
|
|
|
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &remote_job_id);
|
|
|
|
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &username);
|
|
|
|
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &printer_name);
|
|
|
|
+
|
|
|
|
+ dbus_connection_send (dbus_connection, message, NULL);
|
|
|
|
+ dbus_connection_flush (dbus_connection);
|
|
|
|
+ dbus_message_unref (message);
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+#endif /* HAVE_DBUS */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Globals...
|
2007-06-13 16:43:07 +00:00
|
|
|
@@ -955,6 +1019,15 @@
|
2006-11-03 12:12:18 +00:00
|
|
|
fprintf(stderr, "NOTICE: Print file accepted - job ID %d.\n", job_id);
|
|
|
|
}
|
|
|
|
|
|
|
|
+#if HAVE_DBUS
|
|
|
|
+ dbus_broadcast_queued_remote (argv[0],
|
|
|
|
+ ipp_status,
|
|
|
|
+ atoi (argv[1]),
|
|
|
|
+ job_id,
|
|
|
|
+ argv[2],
|
|
|
|
+ getenv ("PRINTER"));
|
|
|
|
+#endif /* HAVE_DBUS */
|
|
|
|
+
|
|
|
|
ippDelete(response);
|
|
|
|
|
|
|
|
if (job_cancelled)
|
2007-06-13 16:43:07 +00:00
|
|
|
--- cups-1.2.11/backend/Makefile.eggcups 2006-10-23 01:26:52.000000000 +0100
|
|
|
|
+++ cups-1.2.11/backend/Makefile 2007-06-13 16:47:06.000000000 +0100
|
2006-11-03 12:12:18 +00:00
|
|
|
@@ -134,7 +134,7 @@
|
|
|
|
|
|
|
|
ipp: ipp.o ../cups/$(LIBCUPS)
|
|
|
|
echo Linking $@...
|
|
|
|
- $(CC) $(LDFLAGS) -o ipp ipp.o $(LIBS)
|
|
|
|
+ $(CC) $(LDFLAGS) -o ipp ipp.o $(LIBS) $(DBUSLIBS)
|
|
|
|
$(RM) http
|
|
|
|
$(LN) ipp http
|
|
|
|
|
2007-06-13 16:43:07 +00:00
|
|
|
--- cups-1.2.11/config-scripts/cups-common.m4.eggcups 2007-05-08 22:11:23.000000000 +0100
|
|
|
|
+++ cups-1.2.11/config-scripts/cups-common.m4 2007-06-13 16:47:06.000000000 +0100
|
|
|
|
@@ -188,6 +188,7 @@
|
|
|
|
dnl Extra platform-specific libraries...
|
|
|
|
BACKLIBS=""
|
|
|
|
CUPSDLIBS=""
|
|
|
|
+DBUSLIBS=""
|
|
|
|
DBUSDIR=""
|
|
|
|
|
|
|
|
AC_ARG_ENABLE(dbus, [ --enable-dbus enable DBUS support, default=auto])
|
|
|
|
@@ -231,7 +232,8 @@
|
|
|
|
AC_MSG_RESULT(yes)
|
|
|
|
AC_DEFINE(HAVE_DBUS)
|
|
|
|
CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE"
|
|
|
|
- CUPSDLIBS="`$PKGCONFIG --libs dbus-1`"
|
|
|
|
+ DBUSLIBS="`$PKGCONFIG --libs dbus-1`"
|
|
|
|
+ CUPSDLIBS="$DBUSLIBS"
|
|
|
|
DBUSDIR="/etc/dbus-1/system.d"
|
|
|
|
AC_CHECK_LIB(dbus-1,
|
|
|
|
dbus_message_iter_init_append,
|
|
|
|
@@ -253,6 +255,7 @@
|
|
|
|
|
|
|
|
AC_SUBST(BACKLIBS)
|
|
|
|
AC_SUBST(CUPSDLIBS)
|
|
|
|
+AC_SUBST(DBUSLIBS)
|
|
|
|
AC_SUBST(DBUSDIR)
|
|
|
|
|
|
|
|
dnl New default port definition for IPP...
|
|
|
|
--- cups-1.2.11/scheduler/subscriptions.c.eggcups 2007-04-10 19:24:19.000000000 +0100
|
|
|
|
+++ cups-1.2.11/scheduler/subscriptions.c 2007-06-13 16:48:10.000000000 +0100
|
|
|
|
@@ -1321,13 +1321,13 @@
|
|
|
|
what = "PrinterAdded";
|
|
|
|
else if (event & CUPSD_EVENT_PRINTER_DELETED)
|
|
|
|
what = "PrinterRemoved";
|
|
|
|
- else if (event & CUPSD_EVENT_PRINTER_CHANGED)
|
|
|
|
- what = "QueueChanged";
|
|
|
|
else if (event & CUPSD_EVENT_JOB_CREATED)
|
|
|
|
what = "JobQueuedLocal";
|
|
|
|
else if ((event & CUPSD_EVENT_JOB_STATE) && job &&
|
|
|
|
job->state_value == IPP_JOB_PROCESSING)
|
|
|
|
what = "JobStartedLocal";
|
|
|
|
+ else if (event & (CUPSD_EVENT_PRINTER_CHANGED|CUPSD_EVENT_JOB_STATE_CHANGED|CUPSD_EVENT_PRINTER_STATE_CHANGED))
|
|
|
|
+ what = "QueueChanged";
|
|
|
|
else
|
|
|
|
return;
|
|
|
|
|
|
|
|
@@ -1363,7 +1363,7 @@
|
|
|
|
dbus_message_append_iter_init(message, &iter);
|
|
|
|
if (dest)
|
|
|
|
dbus_message_iter_append_string(&iter, dest->name);
|
|
|
|
- if (job)
|
|
|
|
+ if (job && strcmp (what, "QueueChanged") != 0)
|
|
|
|
{
|
|
|
|
dbus_message_iter_append_uint32(&iter, job->id);
|
|
|
|
dbus_message_iter_append_string(&iter, job->username);
|
|
|
|
--- cups-1.2.11/Makedefs.in.eggcups 2007-06-13 16:47:06.000000000 +0100
|
|
|
|
+++ cups-1.2.11/Makedefs.in 2007-06-13 16:47:06.000000000 +0100
|
2006-11-03 12:12:18 +00:00
|
|
|
@@ -124,6 +124,7 @@
|
|
|
|
@LARGEFILE@ @PTHREAD_FLAGS@ $(OPTIONS)
|
|
|
|
COMMONLIBS = @LIBS@
|
|
|
|
CUPSDLIBS = @CUPSDLIBS@
|
|
|
|
+DBUSLIBS = @DBUSLIBS@
|
|
|
|
CXXFLAGS = -I.. $(SSLFLAGS) @CPPFLAGS@ @CXXFLAGS@ \
|
|
|
|
@LARGEFILE@ @PTHREAD_FLAGS@ $(OPTIONS)
|
|
|
|
CXXLIBS = @CXXLIBS@
|