summaryrefslogtreecommitdiff
path: root/backend/socket.c
diff options
context:
space:
mode:
authorjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>2007-04-05 18:24:21 +0000
committerjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>2007-04-05 18:24:21 +0000
commit323c5de1e804061e344172cc9a9551bb0ee71005 (patch)
treea5dc0097015c75bd1c556a62fbc3eef2c65814a7 /backend/socket.c
parentc0e1af835b65e53b4506f37f235c7cdc820dffa8 (diff)
downloadcups-323c5de1e804061e344172cc9a9551bb0ee71005.tar.gz
Load cups into easysw/current.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@308 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'backend/socket.c')
-rw-r--r--backend/socket.c91
1 files changed, 55 insertions, 36 deletions
diff --git a/backend/socket.c b/backend/socket.c
index 4c779ec7d..19994f042 100644
--- a/backend/socket.c
+++ b/backend/socket.c
@@ -1,5 +1,5 @@
/*
- * "$Id: socket.c 6403 2007-03-27 16:00:56Z mike $"
+ * "$Id: socket.c 6438 2007-04-03 17:52:41Z mike $"
*
* AppSocket backend for the Common UNIX Printing System (CUPS).
*
@@ -27,6 +27,7 @@
*
* main() - Send a file to the printer or server.
* side_cb() - Handle side-channel requests...
+ * wait_bc() - Wait for back-channel data...
*/
/*
@@ -56,6 +57,7 @@
*/
static void side_cb(int print_fd, int device_fd, int use_bc);
+static int wait_bc(int device_fd, int secs);
/*
@@ -93,9 +95,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
*addr; /* Connected address */
char addrname[256]; /* Address name */
ssize_t tbytes; /* Total number of bytes written */
- struct timeval timeout; /* Timeout for select() */
- fd_set input; /* Input set for select() */
- ssize_t bc_bytes; /* Number of back-channel bytes read */
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
struct sigaction action; /* Actions for POSIX signals */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
@@ -387,6 +386,12 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
CUPS_LLCAST tbytes);
}
+ /*
+ * Get any pending back-channel data...
+ */
+
+ while (wait_bc(device_fd, 5) > 0);
+
if (waiteof)
{
/*
@@ -398,37 +403,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
shutdown(device_fd, 1);
- for (;;)
- {
- /*
- * Wait a maximum of 90 seconds for backchannel data or a closed
- * connection...
- */
-
- timeout.tv_sec = 90;
- timeout.tv_usec = 0;
-
- FD_ZERO(&input);
- FD_SET(device_fd, &input);
-
- if (select(device_fd + 1, &input, NULL, NULL, &timeout) > 0)
- {
- /*
- * Grab the data coming back and spit it out to stderr...
- */
-
- if ((bc_bytes = read(device_fd, resource, sizeof(resource))) > 0)
- {
- fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
- (int)bc_bytes);
- cupsBackChannelWrite(resource, bc_bytes, 1.0);
- }
- else
- break;
- }
- else
- break;
- }
+ while (wait_bc(device_fd, 90) > 0);
}
/*
@@ -503,5 +478,49 @@ side_cb(int print_fd, /* I - Print file */
/*
- * End of "$Id: socket.c 6403 2007-03-27 16:00:56Z mike $".
+ * 'wait_bc()' - Wait for back-channel data...
+ */
+
+static int /* O - # bytes read or -1 on error */
+wait_bc(int device_fd, /* I - Socket */
+ int secs) /* I - Seconds to wait */
+{
+ struct timeval timeout; /* Timeout for select() */
+ fd_set input; /* Input set for select() */
+ ssize_t bytes; /* Number of back-channel bytes read */
+ char buffer[1024]; /* Back-channel buffer */
+
+
+ /*
+ * Wait up to "secs" seconds for backchannel data...
+ */
+
+ timeout.tv_sec = secs;
+ timeout.tv_usec = 0;
+
+ FD_ZERO(&input);
+ FD_SET(device_fd, &input);
+
+ if (select(device_fd + 1, &input, NULL, NULL, &timeout) > 0)
+ {
+ /*
+ * Grab the data coming back and spit it out to stderr...
+ */
+
+ if ((bytes = read(device_fd, buffer, sizeof(buffer))) > 0)
+ {
+ fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
+ (int)bytes);
+ cupsBackChannelWrite(buffer, bytes, 1.0);
+ }
+
+ return (bytes);
+ }
+ else
+ return (-1);
+}
+
+
+/*
+ * End of "$Id: socket.c 6438 2007-04-03 17:52:41Z mike $".
*/