2009-03-06 Louis Lagendijk <llagendijk-guest at users.alioth.debian.org>

* backend/pixma_bjnp.c
        - silenced some debug statements during scanner detections
        - increased timeouts to 20 seconds as 10 seconds is apparently
        - not enough for the combination of a Mac and an MX850.
merge-requests/1/head
Louis Lagendijk 2009-03-31 19:07:26 +00:00
rodzic ba825f1050
commit d214d08f1b
2 zmienionych plików z 342 dodań i 310 usunięć

Wyświetl plik

@ -1,3 +1,9 @@
2009-03-06 Louis Lagendijk <llagendijk-guest at users.alioth.debian.org>
* backend/pixma_bjnp.c
- silenced some debug statements during scanner detections
- increased timeouts to 20 seconds as 10 seconds is apparently
- not enough for the combination of a Mac and an MX850.
2009-03-21 Alex Belkin <abc@telekom.ru>
* backend/xerox_mfp.conf.in: add Xerox Phaser 6110MFP
* backend/xerox_mfp.c: compatibility with scanners w/o feeder.

Wyświetl plik

@ -168,21 +168,22 @@ charTo2byte (char d[], char s[], int len)
return copied;
}
static char *getusername(void)
static char *
getusername (void)
{
static char noname[] = "sane_pixma";
struct passwd *pwdent;
#ifdef HAVE_PWD_H
if (((pwdent = getpwuid(geteuid())) != NULL) &&
(pwdent->pw_name != NULL))
if (((pwdent = getpwuid (geteuid ())) != NULL) && (pwdent->pw_name != NULL))
return pwdent->pw_name;
#endif
return noname;
}
static char *truncate_hostname(char *hostname, char *short_hostname)
static char *
truncate_hostname (char *hostname, char *short_hostname)
{
char *dot;
@ -242,7 +243,8 @@ bjnp_open_tcp (int devno)
(sock, (struct sockaddr *) &device[devno].addr,
sizeof (device[devno].addr)) != 0)
{
PDBG(pixma_dbg (LOG_CRIT, "bjnp_open_tcp: Can not connect to scanner: %s\n",
PDBG (pixma_dbg
(LOG_CRIT, "bjnp_open_tcp: Can not connect to scanner: %s\n",
strerror (errno)));
return -1;
}
@ -395,7 +397,8 @@ udp_command (const int dev_no, char *command, int cmd_len, char *response,
if ((sockfd = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
{
PDBG (pixma_dbg
(LOG_CRIT, "udp_command: can not open socket - %s\n", strerror (errno)));
(LOG_CRIT, "udp_command: can not open socket - %s\n",
strerror (errno)));
return -1;
}
@ -404,7 +407,8 @@ udp_command (const int dev_no, char *command, int cmd_len, char *response,
(socklen_t) sizeof (struct sockaddr_in)) != 0)
{
PDBG (pixma_dbg
(LOG_CRIT, "udp_command: connect failed- %s\n", strerror (errno)));
(LOG_CRIT, "udp_command: connect failed- %s\n",
strerror (errno)));
return -1;
}
@ -427,8 +431,9 @@ udp_command (const int dev_no, char *command, int cmd_len, char *response,
timeout.tv_sec = device[dev_no].bjnp_timeout_sec;
timeout.tv_usec = device[dev_no].bjnp_timeout_msec;
}
while (((result = select (sockfd + 1, &fdset, NULL, NULL, &timeout)) <= 0) &&
(errno == EINTR) && (attempt++ < MAX_SELECT_ATTEMPTS));
while (((result =
select (sockfd + 1, &fdset, NULL, NULL, &timeout)) <= 0)
&& (errno == EINTR) && (attempt++ < MAX_SELECT_ATTEMPTS));
if (result <= 0)
{
@ -574,8 +579,9 @@ parse_scanner_address (char *resp_buf, char *address, char *serial)
}
static int
bjnp_send_broadcast (struct in_addr local_addr, int local_port, struct in_addr broadcast_addr,
struct BJNP_command cmd, int size)
bjnp_send_broadcast (struct in_addr local_addr, int local_port,
struct in_addr broadcast_addr, struct BJNP_command cmd,
int size)
{
/*
* send command to interface and return open socket
@ -589,7 +595,8 @@ bjnp_send_broadcast (struct in_addr local_addr, int local_port, struct in_addr b
if ((sockfd = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
{
PDBG (pixma_dbg
(LOG_CRIT, "bjnp_send_broadcast: can not open socket - %s", strerror (errno)));
(LOG_INFO, "bjnp_send_broadcast: can not open socket - %s",
strerror (errno)));
return -1;
}
@ -600,7 +607,8 @@ bjnp_send_broadcast (struct in_addr local_addr, int local_port, struct in_addr b
sizeof (broadcast)) != 0)
{
PDBG (pixma_dbg
(LOG_CRIT, "bjnp_send_broadcast: setting socket options failed - %s",
(LOG_INFO,
"bjnp_send_broadcast: setting socket options failed - %s",
strerror (errno)));
close (sockfd);
return -1;
@ -618,7 +626,9 @@ bjnp_send_broadcast (struct in_addr local_addr, int local_port, struct in_addr b
(socklen_t) sizeof (sendaddr)) != 0)
{
PDBG (pixma_dbg
(LOG_CRIT, "bjnp_send_broadcast: bind socket to local address failed - %s\n", strerror (errno)));
(LOG_INFO,
"bjnp_send_broadcast: bind socket to local address failed - %s\n",
strerror (errno)));
close (sockfd);
return -1;
}
@ -637,8 +647,8 @@ bjnp_send_broadcast (struct in_addr local_addr, int local_port, struct in_addr b
(struct sockaddr *) &sendaddr,
sizeof (sendaddr))) != size)
{
PDBG (pixma_dbg (LOG_CRIT,
"bjnp_send_broadcasts: Sent only %x = %d bytes of packet, error = %s\n",
PDBG (pixma_dbg (LOG_INFO,
"bjnp_send_broadcast: Sent only %x = %d bytes of packet, error = %s\n",
numbytes, numbytes, strerror (errno)));
/* not allowed, skip this interface */
@ -662,10 +672,11 @@ bjnp_finish_job (int devno)
set_cmd (devno, &cmd, CMD_UDP_CLOSE, 0);
PDBG (pixma_dbg (LOG_DEBUG2, "Finish scanjob\n"));
PDBG(pixma_hexdump (LOG_DEBUG2, (char *) &cmd, sizeof (struct BJNP_command)));
PDBG (pixma_hexdump
(LOG_DEBUG2, (char *) &cmd, sizeof (struct BJNP_command)));
resp_len =
udp_command (devno, (char *) &cmd, sizeof (struct BJNP_command),
resp_buf, BJNP_RESP_MAX);
udp_command (devno, (char *) &cmd, sizeof (struct BJNP_command), resp_buf,
BJNP_RESP_MAX);
if (resp_len != sizeof (struct BJNP_command))
{
@ -830,7 +841,8 @@ bjnp_write (int devno, const SANE_Byte * buf, size_t count)
struct SCAN_BUF bjnp_buf;
if (device[devno].scanner_data_left)
PDBG (pixma_dbg (LOG_CRIT, "bjnp_write: ERROR scanner data left = 0x%lx = %ld\n",
PDBG (pixma_dbg
(LOG_CRIT, "bjnp_write: ERROR scanner data left = 0x%lx = %ld\n",
(long) device[devno].scanner_data_left,
(long) device[devno].scanner_data_left));
@ -878,7 +890,8 @@ bjnp_send_read_request (int devno)
if (device[devno].scanner_data_left)
PDBG (pixma_dbg
(LOG_CRIT, "bjnp_send_read_request: ERROR scanner data left = 0x%lx = %ld\n",
(LOG_CRIT,
"bjnp_send_read_request: ERROR scanner data left = 0x%lx = %ld\n",
(long) device[devno].scanner_data_left,
(long) device[devno].scanner_data_left));
@ -929,7 +942,8 @@ bjnp_recv_header (int devno)
if (device[devno].scanner_data_left)
PDBG (pixma_dbg
(LOG_CRIT, "bjnp_send_request: ERROR scanner data left = 0x%lx = %ld\n",
(LOG_CRIT,
"bjnp_send_request: ERROR scanner data left = 0x%lx = %ld\n",
(long) device[devno].scanner_data_left,
(long) device[devno].scanner_data_left));
@ -1005,10 +1019,11 @@ bjnp_recv_header (int devno)
device[devno].scanner_data_left = ntohl (resp_buf.payload_len);
PDBG(pixma_dbg (LOG_DEBUG2, "TCP response header(scanner data = %ld bytes):\n",
PDBG (pixma_dbg
(LOG_DEBUG2, "TCP response header(scanner data = %ld bytes):\n",
(long) device[devno].scanner_data_left));
PDBG(pixma_hexdump (LOG_DEBUG2, (char *) &resp_buf,
sizeof (struct BJNP_command)));
PDBG (pixma_hexdump
(LOG_DEBUG2, (char *) &resp_buf, sizeof (struct BJNP_command)));
return SANE_STATUS_GOOD;
}
@ -1092,7 +1107,8 @@ bjnp_recv_data (int devno, SANE_Byte * buffer, size_t * len)
}
static BJNP_Status
bjnp_allocate_device (SANE_String_Const devname, SANE_Int * dn, char *res_hostname)
bjnp_allocate_device (SANE_String_Const devname, SANE_Int * dn,
char *res_hostname)
{
char method[256];
char hostname[256];
@ -1112,7 +1128,8 @@ bjnp_allocate_device (SANE_String_Const devname, SANE_Int * dn, char *res_hostna
if (strlen (args) != 0)
{
PDBG (pixma_dbg
(LOG_CRIT, "URI may not contain userid, password or aguments: %s\n",
(LOG_CRIT,
"URI may not contain userid, password or aguments: %s\n",
devname));
return BJNP_STATUS_INVAL;
@ -1164,7 +1181,9 @@ bjnp_allocate_device (SANE_String_Const devname, SANE_Int * dn, char *res_hostna
if (first_free_device == BJNP_NO_DEVICES)
{
PDBG (pixma_dbg
(LOG_CRIT, "Too many devices, ran out of device structures, can not add %s\n", devname));
(LOG_CRIT,
"Too many devices, ran out of device structures, can not add %s\n",
devname));
return BJNP_STATUS_INVAL;
}
*dn = first_free_device++;
@ -1261,8 +1280,7 @@ sanei_bjnp_find_devices (const char **conf_devices,
for (i = 0; conf_devices[i] != NULL; i++)
{
PDBG (pixma_dbg
(LOG_DEBUG, "Adding configured scanner: %s\n",
conf_devices[i]));
(LOG_DEBUG, "Adding configured scanner: %s\n", conf_devices[i]));
/* Allocate device structure for scanner and read its model */
switch (bjnp_allocate_device (conf_devices[i], &dev_no, hostname))
@ -1300,7 +1318,9 @@ sanei_bjnp_find_devices (const char **conf_devices,
break;
}
}
PDBG (pixma_dbg (LOG_DEBUG, "Added all configured scanners, now do auto detection...\n"));
PDBG (pixma_dbg
(LOG_DEBUG,
"Added all configured scanners, now do auto detection...\n"));
/*
* Send UDP broadcast to discover scanners and return the list of scanners found
@ -1323,15 +1343,17 @@ sanei_bjnp_find_devices (const char **conf_devices,
{
/* send broadcast packet to each suitable interface */
if ( (interface->ifa_addr == NULL) || (interface->ifa_broadaddr == NULL) ||
(interface->ifa_addr->sa_family != AF_INET) ||
(((struct sockaddr_in *) interface->ifa_addr)->sin_addr.s_addr ==
htonl (INADDR_LOOPBACK)))
if ((interface->ifa_addr == NULL)
|| (interface->ifa_broadaddr == NULL)
|| (interface->ifa_addr->sa_family != AF_INET)
|| (((struct sockaddr_in *) interface->ifa_addr)->sin_addr.
s_addr == htonl (INADDR_LOOPBACK)))
{
/* not an IPv4 address */
PDBG (pixma_dbg
(LOG_DEBUG, "%s is not a valid IPv4 interface, skipping...\n",
(LOG_DEBUG,
"%s is not a valid IPv4 interface, skipping...\n",
interface->ifa_name));
}
@ -1342,11 +1364,11 @@ sanei_bjnp_find_devices (const char **conf_devices,
interface->ifa_name));
if ((socket_fd[no_sockets] =
bjnp_send_broadcast (((struct sockaddr_in *) interface->
ifa_addr)->sin_addr,
bjnp_send_broadcast (((struct sockaddr_in *)
interface->ifa_addr)->sin_addr,
BJNP_PORT_BROADCAST_BASE + attempt,
((struct sockaddr_in *) interface->
ifa_broadaddr)->sin_addr,
((struct sockaddr_in *)
interface->ifa_broadaddr)->sin_addr,
cmd, sizeof (cmd))) != -1)
{
if (socket_fd[no_sockets] > last_socketfd)
@ -1375,7 +1397,8 @@ sanei_bjnp_find_devices (const char **conf_devices,
for (attempt = 0; attempt < MAX_SELECT_ATTEMPTS; attempt++)
{
if ((socket_fd[no_sockets] =
bjnp_send_broadcast (local, BJNP_PORT_BROADCAST_BASE + attempt, broadcast, cmd, sizeof (cmd))) != -1)
bjnp_send_broadcast (local, BJNP_PORT_BROADCAST_BASE + attempt,
broadcast, cmd, sizeof (cmd))) != -1)
{
if (socket_fd[no_sockets] > last_socketfd)
{
@ -1407,11 +1430,10 @@ sanei_bjnp_find_devices (const char **conf_devices,
if (FD_ISSET (socket_fd[i], &active_fdset))
{
if ((numbytes =
recv (socket_fd[i], resp_buf, sizeof (resp_buf),
0)) == -1)
recv (socket_fd[i], resp_buf, sizeof (resp_buf), 0)) == -1)
{
PDBG (pixma_dbg
(LOG_CRIT, "bjnp_send_broadcasts: no data received"));
(LOG_INFO, "bjnp_send_broadcasts: no data received"));
break;
}
else
@ -1444,7 +1466,8 @@ sanei_bjnp_find_devices (const char **conf_devices,
{
PDBG (pixma_dbg
(LOG_CRIT,
"Scanner not added: Cannot read scanner make & model: %s\n", uri));
"Scanner not added: Cannot read scanner make & model: %s\n",
uri));
}
else
{
@ -1553,7 +1576,8 @@ sanei_bjnp_close (SANE_Int dn)
* @param dn device number
*/
SANE_Status sanei_bjnp_activate(SANE_Int dn)
SANE_Status
sanei_bjnp_activate (SANE_Int dn)
{
char hostname[256];
char pid_str[64];
@ -1576,7 +1600,8 @@ SANE_Status sanei_bjnp_activate(SANE_Int dn)
* @paran dn device number
*/
SANE_Status sanei_bjnp_deactivate(SANE_Int dn)
SANE_Status
sanei_bjnp_deactivate (SANE_Int dn)
{
PDBG (pixma_dbg (LOG_INFO, "sanei_bjnp_deactivate (%d)\n", dn));
bjnp_finish_job (dn);
@ -1599,8 +1624,8 @@ sanei_bjnp_set_timeout (SANE_Int devno, SANE_Int timeout)
/* timeout must be at least 10 second */
if (my_timeout < 10000)
my_timeout = 10000;
if (my_timeout < 20000)
my_timeout = 20000;
PDBG (pixma_dbg (LOG_INFO, "bjnp_set_timeout(requested %d, set %d):\n",
timeout, my_timeout));
@ -1647,7 +1672,8 @@ sanei_bjnp_read_bulk (SANE_Int dn, SANE_Byte * buffer, size_t * size)
/* so scanner needs first a high level read command. This is not an error */
PDBG (pixma_dbg
(LOG_DEBUG, "Scanner has no more data available, return immediately!\n"));
(LOG_DEBUG,
"Scanner has no more data available, return immediately!\n"));
*size = 0;
return SANE_STATUS_EOF;
}
@ -1658,8 +1684,7 @@ sanei_bjnp_read_bulk (SANE_Int dn, SANE_Byte * buffer, size_t * size)
(long) device[dn].scanner_data_left,
(long) device[dn].scanner_data_left,
(int) device[dn].short_read,
(long) device[dn].blocksize,
(long) device[dn].blocksize));
(long) device[dn].blocksize, (long) device[dn].blocksize));
while ((recvd < *size)
&& (!device[dn].short_read || device[dn].scanner_data_left))
@ -1677,7 +1702,8 @@ sanei_bjnp_read_bulk (SANE_Int dn, SANE_Byte * buffer, size_t * size)
*/
PDBG (pixma_dbg
(LOG_DEBUG, "No (more) scanner data available, requesting more\n"));
(LOG_DEBUG,
"No (more) scanner data available, requesting more\n"));
if ((error = bjnp_send_read_request (dn)) != SANE_STATUS_GOOD)
{
@ -1707,9 +1733,10 @@ sanei_bjnp_read_bulk (SANE_Int dn, SANE_Byte * buffer, size_t * size)
more = left;
PDBG (pixma_dbg (LOG_DEBUG, "reading 0x%lx = %ld (of max 0x%lx = %ld) bytes more\n",
device[dn].scanner_data_left,
device[dn].scanner_data_left,
PDBG (pixma_dbg
(LOG_DEBUG,
"reading 0x%lx = %ld (of max 0x%lx = %ld) bytes more\n",
device[dn].scanner_data_left, device[dn].scanner_data_left,
(long) more, (long) more));
result = bjnp_recv_data (dn, buffer, &more);
if (result != SANE_STATUS_GOOD)
@ -1756,7 +1783,8 @@ sanei_bjnp_write_bulk (SANE_Int dn, const SANE_Byte * buffer, size_t * size)
return SANE_STATUS_IO_ERROR;
if (sent != (int) *size)
{
PDBG(pixma_dbg (LOG_CRIT, "Sent only %ld bytes to scanner, expected %ld!!\n",
PDBG (pixma_dbg
(LOG_CRIT, "Sent only %ld bytes to scanner, expected %ld!!\n",
(long) sent, (long) *size));
return SANE_STATUS_IO_ERROR;
}
@ -1786,7 +1814,8 @@ sanei_bjnp_write_bulk (SANE_Int dn, const SANE_Byte * buffer, size_t * size)
recvd = ntohl (buf);
if (recvd != *size)
{
PDBG(pixma_dbg (LOG_CRIT, "Scanner confirmed %ld bytes, expected %ld!!\n",
PDBG (pixma_dbg
(LOG_CRIT, "Scanner confirmed %ld bytes, expected %ld!!\n",
(long) recvd, (long) *size));
return SANE_STATUS_IO_ERROR;
}
@ -1821,8 +1850,7 @@ sanei_bjnp_read_int (SANE_Int dn, SANE_Byte * buffer, size_t * size)
#ifndef PIXMA_BJNP_STATUS
PDBG (pixma_dbg
(LOG_INFO, "bjnp_read_int(%d, bufferptr, 0x%lx = %ld):\n", dn,
(long) *size,
(long) *size));
(long) *size, (long) *size));
memset (buffer, 0, *size);
sleep (1);
return SANE_STATUS_IO_ERROR;
@ -1881,9 +1909,7 @@ sanei_bjnp_read_int (SANE_Int dn, SANE_Byte * buffer, size_t * size)
sleep (4);
PDBG (pixma_dbg
(LOG_NOTICE,
"sanei_bjnp_read_int: no data received\n"));
PDBG (pixma_dbg (LOG_NOTICE, "sanei_bjnp_read_int: no data received\n"));
return SANE_STATUS_IO_ERROR;
#endif