diff options
Diffstat (limited to 'cups/spp.c')
-rw-r--r-- | cups/spp.c | 23 |
1 files changed, 17 insertions, 6 deletions
@@ -34,7 +34,9 @@ #include <bluetooth/bluetooth.h> #include <bluetooth/rfcomm.h> -int spp_print(bdaddr_t *src, bdaddr_t *dst, uint8_t channel, int fd, int copies) +#include "cups.h" + +int spp_print(bdaddr_t *src, bdaddr_t *dst, uint8_t channel, int fd, int copies, const char *cups_class) { struct sockaddr_rc addr; unsigned char buf[2048]; @@ -42,7 +44,10 @@ int spp_print(bdaddr_t *src, bdaddr_t *dst, uint8_t channel, int fd, int copies) if ((sk = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)) < 0) { perror("ERROR: Can't create socket"); - return 1; + if (cups_class) + return CUPS_BACKEND_FAILED; + else + return CUPS_BACKEND_RETRY; } addr.rc_family = AF_BLUETOOTH; @@ -52,7 +57,10 @@ int spp_print(bdaddr_t *src, bdaddr_t *dst, uint8_t channel, int fd, int copies) if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("ERROR: Can't bind socket"); close(sk); - return 1; + if (cups_class) + return CUPS_BACKEND_FAILED; + else + return CUPS_BACKEND_RETRY; } addr.rc_family = AF_BLUETOOTH; @@ -62,7 +70,10 @@ int spp_print(bdaddr_t *src, bdaddr_t *dst, uint8_t channel, int fd, int copies) if (connect(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("ERROR: Can't connect to device"); close(sk); - return 1; + if (cups_class) + return CUPS_BACKEND_FAILED; + else + return CUPS_BACKEND_RETRY; } fputs("STATE: -connecting-to-device\n", stderr); @@ -93,7 +104,7 @@ int spp_print(bdaddr_t *src, bdaddr_t *dst, uint8_t channel, int fd, int copies) if (err < 0) { perror("ERROR: Error writing to device"); close(sk); - return 1; + return CUPS_BACKEND_FAILED; } } @@ -101,5 +112,5 @@ int spp_print(bdaddr_t *src, bdaddr_t *dst, uint8_t channel, int fd, int copies) close(sk); - return 0; + return CUPS_BACKEND_OK; } |