diff --git a/ChangeLog b/ChangeLog index 22c04a676..6c3bf2353 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2006-12-01 Alessandro Zummo + + * Added sanei_tcp interface. + 2006-11-27 Henning Meier-Geinitz * doc/descriptions-external/samsung.desc: SCX-4200 is reported to work. diff --git a/include/sane/sanei_tcp.h b/include/sane/sanei_tcp.h new file mode 100644 index 000000000..df20f7b01 --- /dev/null +++ b/include/sane/sanei_tcp.h @@ -0,0 +1,31 @@ +/* sane - Scanner Access Now Easy. + * Copyright (C) 2006 Tower Technologies + * Author: Alessandro Zummo + * This file is part of the SANE package. + * + * This file is in the public domain. You may use and modify it as + * you see fit, as long as this copyright message is included and + * that there is an indication as to what modifications have been + * made (if any). + * + * SANE is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * Header file for TCP/IP communications. + */ + +#ifndef sanei_tcp_h +#define sanei_tcp_h + +#include + +#include +#include + +extern SANE_Status sanei_tcp_open(const char *host, int port, int *fdp); +extern void sanei_tcp_close(int fd); +extern ssize_t sanei_tcp_write(int fd, const u_char * buf, int count); +extern ssize_t sanei_tcp_read(int fd, u_char * buf, int count); + +#endif /* sanei_tcp_h */ diff --git a/sanei/Makefile.in b/sanei/Makefile.in index 862fefe76..ded985c11 100644 --- a/sanei/Makefile.in +++ b/sanei/Makefile.in @@ -52,13 +52,14 @@ LIBSANEI_OBJS = sanei_ab306.o sanei_constrain_value.o sanei_init_debug.o \ sanei_net.o sanei_wire.o sanei_codec_ascii.o sanei_codec_bin.o \ sanei_scsi.o sanei_config.o sanei_config2.o sanei_pio.o sanei_pa4s2.o \ sanei_auth.o sanei_usb.o sanei_thread.o sanei_pv8630.o sanei_pp.o \ - sanei_lm983x.o sanei_access.o @SANEI_JPEG@ + sanei_lm983x.o sanei_access.o @SANEI_JPEG@ sanei_tcp.o LIBSANEI_LTOBJS = sanei_ab306.lo sanei_constrain_value.lo sanei_init_debug.lo \ sanei_net.lo sanei_wire.lo sanei_codec_ascii.lo sanei_codec_bin.lo \ sanei_scsi.lo sanei_config.lo sanei_config2.lo sanei_pio.lo \ sanei_pa4s2.lo sanei_auth.lo sanei_usb.lo sanei_thread.lo \ - sanei_pv8630.lo sanei_lm983x.lo sanei_pp.lo sanei_access.lo @SANEI_JPEG_LO@ + sanei_pv8630.lo sanei_lm983x.lo sanei_pp.lo sanei_access.lo @SANEI_JPEG_LO@ \ + sanei_tcp.lo TARGETS = libsanei.a $(LIBSANEI_LTOBJS) TESTPROGRAMS = test_wire @@ -69,7 +70,7 @@ DISTFILES = Makefile.in linux_sg3_err.h os2_srb.h sanei_DomainOS.c \ sanei_constrain_value.c sanei_init_debug.c sanei_jpeg.c \ sanei_net.c sanei_pa4s2.c sanei_pio.c sanei_pv8630.c sanei_lm983x.c \ sanei_scsi.c sanei_thread.c sanei_usb.c sanei_pp.c \ - sanei_wire.c test_wire.c sanei_access.c + sanei_wire.c test_wire.c sanei_access.c sanei_tcp.c .PHONY: all check clean depend dist distclean install uninstall diff --git a/sanei/sanei_tcp.c b/sanei/sanei_tcp.c new file mode 100644 index 000000000..4e966e79d --- /dev/null +++ b/sanei/sanei_tcp.c @@ -0,0 +1,108 @@ +/* sane - Scanner Access Now Easy. + Copyright (C) 2006 Tower Technologies + Author: Alessandro Zummo + This file is part of the SANE package. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + As a special exception, the authors of SANE give permission for + additional uses of the libraries contained in this release of SANE. + + The exception is that, if you link a SANE library with other files + to produce an executable, this does not by itself cause the + resulting executable to be covered by the GNU General Public + License. Your use of that executable is in no way restricted on + account of linking the SANE library code into it. + + This exception does not, however, invalidate any other reasons why + the executable file might be covered by the GNU General Public + License. + + If you submit changes to SANE to the maintainers to be included in + a subsequent release, you agree by submitting the changes that + those changes may be distributed with this exception intact. + + If you write modifications of your own for SANE, it is your choice + whether to permit this exception to apply to your modifications. + If you do not wish that, delete this exception notice. */ + +#include "../include/sane/config.h" + +#include +#include +#include +#include + +#define BACKEND_NAME sanei_tcp + +#include "../include/sane/sane.h" +#include "../include/sane/sanei_debug.h" +#include "../include/sane/sanei_tcp.h" + +SANE_Status +sanei_tcp_open(const char *host, int port, int *fdp) +{ + int fd, err; + struct sockaddr_in saddr; + struct hostent *h; + + DBG_INIT(); + DBG(1, "%s: host = %s, port = %d\n", __FUNCTION__, host, port); + + h = gethostbyname(host); + + if (h == NULL || h->h_addr_list[0] == NULL + || h->h_addrtype != AF_INET) + return SANE_STATUS_INVAL; + + if ((fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) + return SANE_STATUS_INVAL; + + memset(&saddr, 0x00, sizeof(struct sockaddr_in)); + + saddr.sin_family = AF_INET; + saddr.sin_port = htons(port); + memcpy(&saddr.sin_addr, h->h_addr_list[0], h->h_length); + + if ((err = + connect(fd, (struct sockaddr *) &saddr, + sizeof(struct sockaddr_in))) != 0) { + close(fd); + return SANE_STATUS_INVAL; + } + + *fdp = fd; + + return SANE_STATUS_GOOD; +} + +void +sanei_tcp_close(int fd) +{ + close(fd); +} + +ssize_t +sanei_tcp_write(int fd, const u_char * buf, int count) +{ + return send(fd, buf, count, 0); +} + +ssize_t +sanei_tcp_read(int fd, u_char * buf, int count) +{ + return recv(fd, buf, count, 0); +}