diff options
Diffstat (limited to 'frontend/test.c')
-rw-r--r-- | frontend/test.c | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/frontend/test.c b/frontend/test.c new file mode 100644 index 0000000..df06751 --- /dev/null +++ b/frontend/test.c @@ -0,0 +1,182 @@ +/* sane - Scanner Access Now Easy. + Copyright (C) 1997 Andreas Beck + This file is part of the SANE package. + + SANE 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. + + 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. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with sane; see the file COPYING. If not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + This file implements a simple SANE frontend (well it rather is a + transport layer, but seen from libsane it is a frontend) which acts + as a NETSANE server. The NETSANE specifications should have come + with this package. + Feel free to enhance this program ! It needs extension especially + regarding crypto-support and authentication. + */ + +#include <ctype.h> +#include <limits.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <sys/socket.h> +#include <sys/types.h> + +#include <netdb.h> +#include <netinet/in.h> + +#include "../include/sane/sane.h" + +void +auth_callback (SANE_String_Const domain, + SANE_Char *username, + SANE_Char *password) +{ + printf ("Client '%s' requested authorization.\nUser:\n", domain); + scanf ("%s", username); + printf ("Password:\n"); + scanf ("%s", password); + return; +} + +void +testsane (const char *dev_name) +{ + int hlp, x; + SANE_Status bla; + SANE_Int blubb; + SANE_Handle hand; + SANE_Parameters pars; + const SANE_Option_Descriptor *sod; + const SANE_Device **device_list; + char buffer[2048]; + + bla = sane_init (&blubb, auth_callback); + fprintf (stderr, "Init : stat=%d ver=%x\nPress Enter to continue...", + bla, blubb); + getchar (); + if (bla != SANE_STATUS_GOOD) + return; + + bla = sane_get_devices (&device_list, SANE_FALSE); + fprintf (stderr, "GetDev : stat=%s\n", sane_strstatus (bla)); + if (bla != SANE_STATUS_GOOD) + return; + + bla = sane_open (dev_name, &hand); + fprintf (stderr, "Open : stat=%s hand=%p\n", sane_strstatus (bla), hand); + if (bla != SANE_STATUS_GOOD) + return; + + bla = sane_set_io_mode (hand, 0); + fprintf (stderr, "SetIoMode : stat=%s\n", sane_strstatus (bla)); + + for (hlp = 0; hlp < 9999; hlp++) + { + sod = sane_get_option_descriptor (hand, hlp); + if (sod == NULL) + break; + fprintf (stderr, "Gopt(%d) : stat=%p\n", hlp, sod); + fprintf (stderr, "name : %s\n", sod->name); + fprintf (stderr, "title: %s\n", sod->title); + fprintf (stderr, "desc : %s\n", sod->desc); + + fprintf (stderr, "type : %d\n", sod->type); + fprintf (stderr, "unit : %d\n", sod->unit); + fprintf (stderr, "size : %d\n", sod->size); + fprintf (stderr, "cap : %d\n", sod->cap); + fprintf (stderr, "ctyp : %d\n", sod->constraint_type); + switch (sod->constraint_type) + { + case SANE_CONSTRAINT_NONE: + break; + case SANE_CONSTRAINT_STRING_LIST: + fprintf (stderr, "stringlist:\n"); + break; + case SANE_CONSTRAINT_WORD_LIST: + fprintf (stderr, "wordlist (%d) : ", sod->constraint.word_list[0]); + for (x = 1; x <= sod->constraint.word_list[0]; x++) + fprintf (stderr, " %d ", sod->constraint.word_list[x]); + fprintf (stderr, "\n"); + break; + case SANE_CONSTRAINT_RANGE: + fprintf (stderr, "range: %d-%d %d \n", sod->constraint.range->min, + sod->constraint.range->max, sod->constraint.range->quant); + break; + } + } + + bla = sane_get_parameters (hand, &pars); + fprintf (stderr, + "Parm : stat=%s form=%d,lf=%d,bpl=%d,pixpl=%d,lin=%d,dep=%d\n", + sane_strstatus (bla), + pars.format, pars.last_frame, + pars.bytes_per_line, pars.pixels_per_line, + pars.lines, pars.depth); + if (bla != SANE_STATUS_GOOD) + return; + + bla = sane_start (hand); + fprintf (stderr, "Start : stat=%s\n", sane_strstatus (bla)); + if (bla != SANE_STATUS_GOOD) + return; + + do + { + bla = sane_read (hand, buffer, sizeof (buffer), &blubb); + /*printf("Read : stat=%s len=%d\n",sane_strstatus (bla),blubb); */ + if (bla != SANE_STATUS_GOOD) + { + if (bla == SANE_STATUS_EOF) + break; + return; + } + fwrite (buffer, 1, blubb, stdout); + } + while (1); + + sane_cancel (hand); + fprintf (stderr, "Cancel.\n"); + + sane_close (hand); + fprintf (stderr, "Close\n"); + + for (hlp = 0; hlp < 20; hlp++) + fprintf (stderr, "STRS %d=%s\n", hlp, sane_strstatus (hlp)); + + fprintf (stderr, "Exit.\n"); +} + +int +main (int argc, char *argv[]) +{ + if (argc != 2 && argc != 3) + { + fprintf (stderr, "Usage: %s devicename [hostname]\n", argv[0]); + exit (0); + } + if (argc == 3) + { + char envbuf[1024]; + sprintf (envbuf, "SANE_NET_HOST=%s", argv[2]); + putenv (envbuf); + } + + fprintf (stderr, "This is a SANE test application.\n" + "Now connecting to device %s.\n", argv[1]); + testsane (argv[1]); + sane_exit (); + return 0; +} |