aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--PalmPilot.c381
-rw-r--r--Status22
-rw-r--r--mail.c228
-rw-r--r--mail.h50
-rw-r--r--mail2.c537
-rw-r--r--socket.c228
-rw-r--r--socket.h45
-rw-r--r--wifi.c151
-rw-r--r--wifi.h41
9 files changed, 13 insertions, 1670 deletions
diff --git a/PalmPilot.c b/PalmPilot.c
deleted file mode 100644
index c0c6bcf..0000000
--- a/PalmPilot.c
+++ /dev/null
@@ -1,381 +0,0 @@
-/* $Id: PalmPilot.c,v 1.17 2004/01/30 20:57:55 reinelt Exp $
- *
- * driver for 3Com Palm Pilot
- *
- * Copyright 2000 Michael Reinelt <reinelt@eunet.at>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux 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, or (at your option)
- * any later version.
- *
- * LCD4Linux 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * $Log: PalmPilot.c,v $
- * Revision 1.17 2004/01/30 20:57:55 reinelt
- * HD44780 patch from Martin Hejl
- * dmalloc integrated
- *
- * Revision 1.16 2004/01/29 04:40:02 reinelt
- * every .c file includes "config.h" now
- *
- * Revision 1.15 2004/01/09 04:16:06 reinelt
- * added 'section' argument to cfg_get(), but NULLed it on all calls by now.
- *
- * Revision 1.14 2003/10/05 17:58:50 reinelt
- * libtool junk; copyright messages cleaned up
- *
- * Revision 1.13 2003/09/13 06:45:43 reinelt
- * icons for all remaining drivers
- *
- * Revision 1.12 2003/09/09 06:54:43 reinelt
- * new function 'cfg_number()'
- *
- * Revision 1.11 2003/08/24 05:17:58 reinelt
- * liblcd4linux patch from Patrick Schemitz
- *
- * Revision 1.10 2003/08/17 12:11:58 reinelt
- * framework for icons prepared
- *
- * Revision 1.9 2003/07/24 04:48:09 reinelt
- * 'soft clear' needed for virtual rows
- *
- * Revision 1.8 2003/02/22 07:53:10 reinelt
- * cfg_get(key,defval)
- *
- * Revision 1.7 2002/08/19 04:41:20 reinelt
- * introduced bar.c, moved bar stuff from display.h to bar.h
- *
- * Revision 1.6 2001/04/27 05:04:57 reinelt
- *
- * replaced OPEN_MAX with sysconf()
- * replaced mktemp() with mkstemp()
- * unlock serial port if open() fails
- *
- * Revision 1.5 2001/03/16 16:40:17 ltoetsch
- * implemented time bar
- *
- * Revision 1.4 2001/02/13 09:00:13 reinelt
- *
- * prepared framework for GPO's (general purpose outputs)
- *
- * Revision 1.3 2000/08/10 09:44:09 reinelt
- *
- * new debugging scheme: error(), info(), debug()
- * uses syslog if in daemon mode
- *
- * Revision 1.2 2000/08/09 09:50:29 reinelt
- *
- * opened 0.98 development
- * removed driver-specific signal-handlers
- * added 'quit'-function to driver structure
- * added global signal-handler
- *
- * Revision 1.1 2000/05/02 06:05:00 reinelt
- *
- * driver for 3Com Palm Pilot added
- *
- */
-
-/*
- *
- * exported fuctions:
- *
- * struct LCD PalmPilot[]
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <termios.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "debug.h"
-#include "cfg.h"
-#include "lock.h"
-#include "display.h"
-#include "bar.h"
-#include "icon.h"
-#include "pixmap.h"
-
-#ifdef WITH_DMALLOC
-#include <dmalloc.h>
-#endif
-
-
-static LCD Lcd;
-static char *Port=NULL;
-static speed_t Speed;
-static int Device=-1;
-
-static int pixel=-1;
-static int pgap=0;
-static int rgap=0;
-static int cgap=0;
-static int border=0;
-static int icons;
-
-static int Palm_open (void)
-{
- int fd;
- pid_t pid;
- struct termios portset;
-
- if ((pid=lock_port(Port))!=0) {
- if (pid==-1)
- error ("PalmPilot: port %s could not be locked", Port);
- else
- error ("PalmPilot: port %s is locked by process %d", Port, pid);
- return -1;
- }
- fd = open(Port, O_RDWR | O_NOCTTY | O_NDELAY);
- if (fd==-1) {
- error ("PalmPilot: open(%s) failed: %s", Port, strerror(errno));
- unlock_port(Port);
- return -1;
- }
- if (tcgetattr(fd, &portset)==-1) {
- error ("PalmPilot: tcgetattr(%s) failed: %s", Port, strerror(errno));
- unlock_port(Port);
- return -1;
- }
- cfmakeraw(&portset);
- cfsetospeed(&portset, Speed);
- if (tcsetattr(fd, TCSANOW, &portset)==-1) {
- error ("PalmPilot: tcsetattr(%s) failed: %s", Port, strerror(errno));
- unlock_port(Port);
- return -1;
- }
- return fd;
-}
-
-static void Palm_write (char *string, int len)
-{
- if (Device==-1) return;
- if (write (Device, string, len)==-1) {
- if (errno==EAGAIN) {
- usleep(1000);
- if (write (Device, string, len)>=0) return;
- }
- error ("PalmPilot: write(%s) failed: %s", Port, strerror(errno));
- }
-}
-
-int Palm_flush (void)
-{
- static unsigned char *bitbuf=NULL;
- static unsigned char *rowbuf=NULL;
- int xsize, ysize, row, col;
-
- xsize=2*border+(Lcd.cols-1)*cgap+Lcd.cols*Lcd.xres*pixel+(Lcd.cols*Lcd.xres-1)*pgap;
- ysize=2*border+(Lcd.rows-1)*rgap+Lcd.rows*Lcd.yres*pixel+(Lcd.rows*Lcd.yres-1)*pgap;
-
- if (bitbuf==NULL) {
- if ((bitbuf=malloc(xsize*ysize*sizeof(*bitbuf)))==NULL) {
- error ("PalmPilot: malloc(%d) failed: %s", xsize*ysize*sizeof(*bitbuf), strerror(errno));
- return -1;
- }
- }
-
- if (rowbuf==NULL) {
- if ((rowbuf=malloc(((xsize+7)/8)*sizeof(*rowbuf)))==NULL) {
- error ("PalmPilot: malloc(%d) failed: %s", ((xsize+7)/8)*sizeof(*rowbuf), strerror(errno));
- return -1;
- }
- }
-
- memset (bitbuf, 0, xsize*ysize*sizeof(*bitbuf));
-
- for (row=0; row<Lcd.rows*Lcd.yres; row++) {
- int y=border+(row/Lcd.yres)*rgap+row*(pixel+pgap);
- for (col=0; col<Lcd.cols*Lcd.xres; col++) {
- int x=border+(col/Lcd.xres)*cgap+col*(pixel+pgap);
- int a, b;
- for (a=0; a<pixel; a++)
- for (b=0; b<pixel; b++)
- bitbuf[y*xsize+x+a*xsize+b]=LCDpixmap[row*Lcd.cols*Lcd.xres+col];
- }
- }
-
- sprintf (rowbuf, "%c%c", xsize, ysize);
- Palm_write (rowbuf, 2);
-
- for (row=0; row<ysize; row++) {
- memset (rowbuf, 0, (xsize+7)/8);
- for (col=0; col<xsize; col++) {
- rowbuf[col/8]<<=1;
- rowbuf[col/8]|=bitbuf[row*xsize+col];
- }
- rowbuf[xsize/8]<<=(8-xsize%8)&7;
- Palm_write (rowbuf, (xsize+7)/8);
- }
-
- return 0;
-}
-
-int Palm_clear (int full)
-{
- if (pix_clear()!=0)
- return -1;
-
- if (full)
- return Palm_flush();
-
- return 0;
-}
-
-int Palm_init (LCD *Self)
-{
- char *port, *s;
- int speed;
- int rows=-1, cols=-1;
- int xres=1, yres=-1;
-
- if (Port) {
- free (Port);
- Port=NULL;
- }
-
- port=cfg_get (NULL, "Port", NULL);
- if (port==NULL || *port=='\0') {
- error ("PalmPilot: no 'Port' entry in %s", cfg_source());
- return -1;
- }
- Port=strdup(port);
-
- if (cfg_number(NULL, "Speed", 19200, 1200,19200, &speed)<0) return -1;
-
- switch (speed) {
- case 1200:
- Speed=B1200;
- break;
- case 2400:
- Speed=B2400;
- break;
- case 4800:
- Speed=B4800;
- break;
- case 9600:
- Speed=B9600;
- break;
- case 19200:
- Speed=B19200;
- break;
- default:
- error ("PalmPilot: unsupported speed '%d' in %s", speed, cfg_source());
- return -1;
- }
-
- debug ("using port %s at %d baud", Port, speed);
-
- if (sscanf(s=cfg_get(NULL, "size", "20x4"), "%dx%d", &cols, &rows)!=2 || rows<1 || cols<1) {
- error ("PalmPilot: bad size '%s'", s);
- return -1;
- }
-
- if (sscanf(s=cfg_get(NULL, "font", "6x8"), "%dx%d", &xres, &yres)!=2 || xres<5 || yres<7) {
- error ("PalmPilot: bad font '%s'", s);
- return -1;
- }
-
- if (sscanf(s=cfg_get(NULL, "pixel", "1+0"), "%d+%d", &pixel, &pgap)!=2 || pixel<1 || pgap<0) {
- error ("PalmPilot: bad pixel '%s'", s);
- return -1;
- }
-
- if (sscanf(s=cfg_get(NULL, "gap", "0x0"), "%dx%d", &cgap, &rgap)!=2 || cgap<-1 || rgap<-1) {
- error ("PalmPilot: bad gap '%s'", s);
- return -1;
- }
- if (rgap<0) rgap=pixel+pgap;
- if (cgap<0) cgap=pixel+pgap;
-
- if (cfg_number(NULL, "border", 0, 0, 1000000, &border)<0) return -1;
-
- if (pix_init (rows, cols, xres, yres)!=0) {
- error ("PalmPilot: pix_init(%d, %d, %d, %d) failed", rows, cols, xres, yres);
- return -1;
- }
-
- if (cfg_number(NULL, "Icons", 0, 0, 8, &icons) < 0) return -1;
- if (icons>0) {
- info ("allocating %d icons", icons);
- icon_init(rows, cols, xres, yres, 8, icons, pix_icon);
- }
-
-
- Self->rows=rows;
- Self->cols=cols;
- Self->xres=xres;
- Self->yres=yres;
- Self->icons=icons;
- Lcd=*Self;
-
- // Device=open ("PalmOrb.dat", O_WRONLY | O_CREAT | O_TRUNC, 0644);
- Device=Palm_open();
- if (Device==-1) return -1;
-
- pix_clear();
-
- return 0;
-}
-
-int Palm_put (int row, int col, char *text)
-{
- return pix_put (row, col, text);
-}
-
-int Palm_bar (int type, int row, int col, int max, int len1, int len2)
-{
- return pix_bar (type, row, col, max, len1, len2);
-}
-
-int Palm_icon (int num, int seq, int row, int col)
-{
- return icon_draw (num, seq, row, col);
-}
-
-int Palm_quit (void)
-{
- debug ("closing port %s", Port);
- close (Device);
- unlock_port (Port);
- return 0;
-}
-
-LCD PalmPilot[] = {
- { name: "PalmPilot",
- rows: 0,
- cols: 0,
- xres: 0,
- yres: 0,
- bars: BAR_L | BAR_R | BAR_U | BAR_D | BAR_H2 | BAR_V2 | BAR_T,
- icons: 0,
- gpos: 0,
- init: Palm_init,
- clear: Palm_clear,
- put: Palm_put,
- bar: Palm_bar,
- icon: Palm_icon,
- gpo: NULL,
- flush: Palm_flush,
- quit: Palm_quit },
- { NULL }
-};
diff --git a/Status b/Status
index 61a348b..a177724 100644
--- a/Status
+++ b/Status
@@ -6,21 +6,24 @@ Lcd4Linux NextGeneration porting status
Cwlinux -> Ported (Text,Bar,Icon) + blacklight [gpo,gpi,inverted text,relay]
HD44780 -> Ported (Text,Bar,Icon) + soft brightness,'busy flag',gpo [soft contrast]
M50530 -> Ported (Text,Bar,Icon) + gpo
- MatrixOrbital -> Ported (Text,Bar,Icon) + blacklight,contrast,gpo,pwm,rpm [?]
- T6963* -> Ported (Text,Bar,Icon) [?]
- USBLCD -> Ported (Text,Bar,Icon) [?]
+ MatrixOrbital -> Ported (Text,Bar,Icon) + blacklight,contrast,gpo,pwm,rpm
+ T6963* -> Ported (Text,Bar,Icon)
+ USBLCD -> Ported (Text,Bar,Icon)
XWindow* -> Ported (Text,Bar,Icon) [gnome applet ?]
+ Raster* -> Ported (Text,Bar,Icon)
BeckmannEgle ->
Curses ->
MilfordInstruments ->
- PalmPilot ->
- Raster* ->
- SIN* ->
+
+ PalmPilot -> Obsolete
+ SIN -> Obsolete
* graphic displays
+
+
PLUGINS : format : status (functions) {old tokens} [todo]
------------------------------------------------------------
plugin_apm -> Finished (apm) {battery: bd bp bs}
@@ -39,12 +42,13 @@ Lcd4Linux NextGeneration porting status
plugin_uname -> Finished (uname) {o v}
plugin_wireless -> Finished (level, noise, quality, ...) {ws wl wn}
plugin_xmms -> Finished (xmms) NEW
+ plugin_isdn -> Finished (info, cps) {ic ii im io it}
+ plugin_uptime -> Finished (uptime) NEW
+ plugin_time -> Finished (time strftime) NEW
+ plugin_pop3 -> Finished (POP3check) {e* u*}
(special plugins : plugin_cfg, plugin_math, plugin_string)
-tokens not ported :
-mail {e* u*}
-ISDN {ic ii im io it}
TODO : task {assigned to}
--------
diff --git a/mail.c b/mail.c
deleted file mode 100644
index 68f29b6..0000000
--- a/mail.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/* $Id: mail.c,v 1.16 2004/03/03 03:47:04 reinelt Exp $
- *
- * email specific functions
- *
- * Copyright 2001 Axel Ehnert <axel@ehnert.net>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux 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, or (at your option)
- * any later version.
- *
- * LCD4Linux 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * $Log: mail.c,v $
- * Revision 1.16 2004/03/03 03:47:04 reinelt
- * big patch from Martin Hejl:
- * - use qprintf() where appropriate
- * - save CPU cycles on gettimeofday()
- * - add quit() functions to free allocated memory
- * - fixed lots of memory leaks
- *
- * Revision 1.15 2004/01/29 04:40:02 reinelt
- * every .c file includes "config.h" now
- *
- * Revision 1.14 2004/01/09 04:16:06 reinelt
- * added 'section' argument to cfg_get(), but NULLed it on all calls by now.
- *
- * Revision 1.13 2003/10/05 17:58:50 reinelt
- * libtool junk; copyright messages cleaned up
- *
- * Revision 1.12 2003/02/22 07:53:10 reinelt
- * cfg_get(key,defval)
- *
- * Revision 1.11 2001/09/12 05:58:16 reinelt
- * fixed bug in mail2.c
- *
- * Revision 1.10 2001/09/12 05:37:22 reinelt
- *
- * fixed a bug in seti.c (file was never closed, lcd4linux run out of fd's
- *
- * improved socket debugging
- *
- * Revision 1.9 2001/08/05 17:13:29 reinelt
- *
- * cleaned up inlude of sys/time.h and time.h
- *
- * Revision 1.8 2001/03/15 15:49:23 ltoetsch
- * fixed compile HD44780.c, cosmetics
- *
- * Revision 1.7 2001/03/15 14:25:05 ltoetsch
- * added unread/total news
- *
- * Revision 1.6 2001/03/14 13:19:29 ltoetsch
- * Added pop3/imap4 mail support
- *
- * Revision 1.5 2001/03/13 08:34:15 reinelt
- *
- * corrected a off-by-one bug with sensors
- *
- * Revision 1.4 2001/03/08 09:02:04 reinelt
- *
- * seti client cleanup
- *
- * Revision 1.3 2001/02/21 04:48:13 reinelt
- *
- * big mailbox patch from Axel Ehnert
- * thanks to herp for his idea to check mtime of mailbox
- *
- * Revision 1.2 2001/02/19 00:15:46 reinelt
- *
- * integrated mail and seti client
- * major rewrite of parser and tokenizer to support double-byte tokens
- *
- * Revision 1.1 2001/02/18 22:11:34 reinelt
- * *** empty log message ***
- *
- */
-
-/*
- * exported functions:
- *
- * Mail (int index, int *num)
- * returns 0 if ok, -1 if error
- * sets num to number of emails in mailbox #index
- *
- */
-
-#define FALSE 0
-#define TRUE 1
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <time.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "cfg.h"
-#include "debug.h"
-#include "mail.h"
-
-int Mail (int index, int *num, int *unseen)
-{
- FILE *fstr;
- char buffer[32];
- static int cfgmbx[MAILBOXES+1]={[0 ... MAILBOXES]=TRUE,}; // Mailbox #index configured?
- static time_t mbxlt[MAILBOXES+1]={[0 ... MAILBOXES]=0,}; // mtime of Mailbox #index
- static int mbxnum[MAILBOXES+1]={[0 ... MAILBOXES]=0,}; // Last calculated # of mails
- static time_t now[MAILBOXES+1]={[0 ... MAILBOXES]=0,}; // Last call to procedure at
- // for Mailbox #index
- char *fnp1;
- int v1=0;
- int last_line_blank1; // Was the last line blank?
- struct stat fst;
- int rc;
- char *s:
- int i;
-
- char *txt;
- char txt1[100];
-
- if (index<0 || index>MAILBOXES) return -1;
-
- if (now[index] == 0) { /* first time, to give faster a chance */
- now[index] = -1-index;
- return 0;
- }
- if (now[index] < -1) { /* wait different time to avoid long startup */
- now[index]++;
- return 0;
- }
- if (now[index] > 0) { /* not first time, delay */
- sprintf(txt1, "Delay_e%d", index);
- s= cfg_get(NULL, txt1, "5");
- i=now[index]+atoi(s);
- free(s);
- if (time(NULL)<=i)
- return 0; // no more then 5/Delay_eX seconds after last check?
- }
- time(&now[index]); // for Mailbox #index
- /*
- Build the filename from the config
- */
- qprintf(buffer, sizeof(buffer), "Mailbox%d", index);
- fnp1=cfg_get(NULL, buffer, NULL);
- if (fnp1==NULL || *fnp1=='\0') {
- cfgmbx[index]=FALSE; // There is now entry for Mailbox #index
- }
- v1=mbxnum[index];
- /*
- Open the file
- */
- if (cfgmbx[index]==TRUE) {
- /*
- Check the last touch of mailbox. Changed?
- */
- rc=stat(fnp1, &fst);
- if ( rc != 0 ) {
- /*
- is it pop3, imap4 or nntp?
- */
- rc = Mail_pop_imap_news(fnp1, num, unseen);
- if (rc == 0) {
- free(fnp1);
- return 0;
- }
- else
- cfgmbx[index] = FALSE; /* don't try again */
-
- error ("Error getting stat of Mailbox%d", index);
- return (-1);
- }
- if ( mbxlt[index] != fst.st_mtime ) {
- mbxlt[index]=fst.st_mtime;
-
- fstr=fopen(fnp1,"r");
- if (fstr != NULL) {
- txt=&txt1[0];
- last_line_blank1=TRUE;
- v1=0;
-
- while ( ( fgets ( txt1, 100, fstr ) ) != NULL ) {
- txt1[strlen(txt1)-1]='\0'; // cut the newline
- /*
- Is there a "From ..." line. Count only, if a blank line was directly before this
- */
- if ( strncmp (txt1, "From ", 5 ) == 0 ) {
- if ( last_line_blank1 == TRUE ) {
- v1++;
- last_line_blank1 = FALSE;
- }
- }
- if ( strlen (txt1) == 0 ) {
- last_line_blank1 = TRUE;
- }
- else {
- last_line_blank1 = FALSE;
- }
- }
- fclose (fstr);
- }
- }
- }
- free(fnp1);
- /* FIXME look at the Status of Mails */
- *unseen = v1 - mbxnum[index];
- if (*unseen < 0)
- *unseen = 0;
- mbxnum[index]=v1;
- *num=v1;
- return (0);
-}
-
diff --git a/mail.h b/mail.h
deleted file mode 100644
index cba5b38..0000000
--- a/mail.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* $Id: mail.h,v 1.5 2003/10/05 17:58:50 reinelt Exp $
- *
- * email specific functions
- *
- * Copyright 2001 Axel Ehnert <axel@ehnert.net>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux 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, or (at your option)
- * any later version.
- *
- * LCD4Linux 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * $Log: mail.h,v $
- * Revision 1.5 2003/10/05 17:58:50 reinelt
- * libtool junk; copyright messages cleaned up
- *
- * Revision 1.4 2001/03/15 14:25:05 ltoetsch
- * added unread/total news
- *
- * Revision 1.3 2001/03/14 13:19:29 ltoetsch
- * Added pop3/imap4 mail support
- *
- * Revision 1.2 2001/03/08 09:02:04 reinelt
- *
- * seti client cleanup
- *
- * Revision 1.1 2001/02/18 22:11:34 reinelt
- * *** empty log message ***
- *
- */
-
-#ifndef _MAIL_H
-#define _MAIL_H_
-
-#define MAILBOXES 9
-
-int Mail (int index, int *num, int *unseen);
-int Mail_pop_imap_news(char *mbx, int *num, int *unseen); /* mail2.c */
-#endif
diff --git a/mail2.c b/mail2.c
deleted file mode 100644
index 63cc604..0000000
--- a/mail2.c
+++ /dev/null
@@ -1,537 +0,0 @@
-/* $Id: mail2.c,v 1.13 2004/03/03 03:47:04 reinelt Exp $
- *
- * mail: pop3, imap, news functions
- *
- * Copyright 2001 Leopold Tötsch <lt@toetsch.at>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux 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, or (at your option)
- * any later version.
- *
- * LCD4Linux 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * $Log: mail2.c,v $
- * Revision 1.13 2004/03/03 03:47:04 reinelt
- * big patch from Martin Hejl:
- * - use qprintf() where appropriate
- * - save CPU cycles on gettimeofday()
- * - add quit() functions to free allocated memory
- * - fixed lots of memory leaks
- *
- * Revision 1.12 2004/01/30 20:57:56 reinelt
- * HD44780 patch from Martin Hejl
- * dmalloc integrated
- *
- * Revision 1.11 2004/01/29 04:40:02 reinelt
- * every .c file includes "config.h" now
- *
- * Revision 1.10 2004/01/09 04:16:06 reinelt
- * added 'section' argument to cfg_get(), but NULLed it on all calls by now.
- *
- * Revision 1.9 2003/10/05 17:58:50 reinelt
- * libtool junk; copyright messages cleaned up
- *
- * Revision 1.8 2003/02/22 07:53:10 reinelt
- * cfg_get(key,defval)
- *
- * Revision 1.7 2002/12/05 19:23:01 reinelt
- * fixed undefined operations found by gcc3
- *
- * Revision 1.6 2001/09/12 06:17:22 reinelt
- * *** empty log message ***
- *
- * Revision 1.5 2001/09/12 05:58:16 reinelt
- * fixed bug in mail2.c
- *
- * Revision 1.4 2001/03/16 09:28:08 ltoetsch
- * bugfixes
- *
- * Revision 1.3 2001/03/15 14:25:05 ltoetsch
- * added unread/total news
- *
- * Revision 1.2 2001/03/15 11:10:53 ltoetsch
- * added quit/logout to pop/imap
- *
- * Revision 1.1 2001/03/14 13:19:29 ltoetsch
- * Added pop3/imap4 mail support
- *
- *
- * Exported Functions:
- *
- * int Mail_pop_imap_news(char *mbox, int *total_mails, int *unseen);
- * returns -1 on error, 0 on success
- *
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <errno.h>
-
-#include "debug.h"
-#include "cfg.h"
-#include "socket.h"
-
-#ifdef WITH_DMALLOC
-#include <dmalloc.h>
-#endif
-
-#define PROTO_UNKNOWN -1
-#define PROTO_POP3 110
-#define PROTO_NNTP 119
-#define PROTO_IMAP4 143
-
-/*
- * parse_proto()
- *
- * parse a MailboxN entry in 's' as
- *
- * proto:[user[:pass]@]machine[:port][/dir]
- *
- * 's' get's destroyed
- * returns 0 on success, -1 on error
- *
- */
-
-static int parse_proto(char *s, int *proto, char **user, char **pass,
- char **machine, int *port, char **dir)
-{
- struct
- {
- char *prefix;
- int proto;
- }
- protos[] =
- {
- { "pop3:", PROTO_POP3 },
- { "nntp:", PROTO_NNTP },
- { "imap4:", PROTO_IMAP4 },
- };
- int i;
- char *p, *q;
- static char empty[] = "";
- static char INBOX[] = "INBOX";
-
- *proto = *port = PROTO_UNKNOWN;
- for (i=0; i< sizeof(protos)/sizeof(protos[0]); i++)
- {
- if (memcmp(s, protos[i].prefix, strlen(protos[i].prefix)) == 0)
- {
- *proto = *port = protos[i].proto;
- break;
- }
- }
- if (*proto == PROTO_UNKNOWN)
- return -1;
-
- p = s + strlen(protos[i].prefix);
- /*
- * this might fail if user or pass contains a '/'
- *
- */
- if ((q = strchr(p, '/')) != NULL)
- {
- /* /dir */
- *dir = q + 1;
- *q = '\0';
- }
- else
- *dir = empty;
-
- if ((q = strchr(p, '@')) != NULL)
- {
- /* user, pass is present */
- *machine = q + 1;
- *q = '\0';
- *user = p;
- if ((q = strchr(p, ':')) != NULL)
- {
- /* user[:pass] */
- *q = '\0';
- *pass = q+1;
- }
- else
- *pass = empty;
- }
- else
- {
- *machine = p;
- *user = *pass = empty;
- }
-
- if ((q = strchr(*machine, ':')) != NULL)
- {
- /* machine[:pass] */
- *q = '\0';
- *port = atoi(q+1);
- if (*port <= 0 || *port >= 0xffff)
- return -1;
- }
- if (!**machine)
- return -1;
- if (*proto == PROTO_POP3 && **dir)
- return -1;
- if (*proto == PROTO_IMAP4 && !**dir)
- *dir = INBOX;
- return 0;
-}
-
-
-/* write buffer, compare with match */
-
-#define BUFLEN 256
-static int wr_rd(int fd, char *buf, char *match,
- char *err, char *machine, int port)
-{
- int n;
- n = write_socket(fd, buf);
- if (n <= 0)
- {
- error("Couldn't write to %s:%d (%s)", machine, port, strerror(errno));
- close(fd);
- return -1;
- }
- n = read_socket_match(fd, buf, BUFLEN-1, match);
- if (n <= 0)
- {
- error("%s %s:%d (%s)", err, machine, port, strerror(errno));
- close(fd);
- return -1;
- }
- return n;
-}
-
-static int check_nntp(char *user, char *pass, char *machine,
- int port, char *dir, int *total, int *unseen)
-{
- int fd;
- int n;
- char buf[BUFLEN];
- char line[BUFLEN];
- FILE *fp;
- int groups;
- int err;
- int totg, unsg;
- int first;
- char *s;
-
- *total = 0;
- *unseen = 0;
-
- strcpy(buf, (s=cfg_get(NULL, "Newsrc", ".newsrc")));
- if (*buf == 0 || ((fp = fopen(buf, "r")) == NULL)) {
- error("Couldn't open .newsrc-file '%s'", buf);
- free(s);
- return -1;
- }
- free(s);
- fd = open_socket(machine, port);
- if (fd < 0)
- {
- error("Couldn't connect to %s:%d (%s)", machine, port, strerror(errno));
- fclose(fp);
- return -1;
- }
- n = read_socket_match(fd, buf, BUFLEN-1, "20"); /* server ready */
- if (n <= 0) {
- error("Server doesn't respond %s:%d (%s)", machine, port, strerror(errno));
- close(fd);
- return -1;
- }
- /* do auth if necessary, this is NOT TESTED */
- if (*user) {
- sprintf(buf, "AUTHINFO USER %s\r\n", user);
- if (wr_rd(fd, buf, "381", "No AUTH required?", machine, port) <= 0)
- return -1;
- if (*pass)
- {
- sprintf(buf, "AUTHINFO PASS %s\r\n", pass);
- if (wr_rd(fd, buf, "281", "Wrong PASS?", machine, port) <= 0)
- return -1;
- }
- }
- // Fixme: this is badbadbadbad
- sleep(2); /* wait for newsserver to read groupinfo */
- groups = 0;
- err = 0;
- totg = unsg = 0; /* total, unseen */
- while (fgets(line, sizeof(line)-1, fp) && err < 5) {
- char group[256];
- char *p;
- int smin, smax, lmin, lmax;
-
- if (sscanf(line, "%255[^:]:", group) != 1) {
- error("Couldn't read group in '%s'", line);
- err++;
- continue;
- }
- if ((p=strchr(group,':')) != NULL)
- *p='\0';
-
- /* check dir if it matches group */
- if (*dir && strcmp(dir, group))
- continue;
-
- sprintf(buf, "GROUP %s\r\n", group);
- if (wr_rd(fd, buf, "211", "Wrong Group", machine, port) <= 0) {
- err++;
- continue;
- }
- /* answer 211 total smin smax group: */
- sscanf(buf, "211 %*d %d %d", &smin, &smax);
- debug("nntp: %s: smin=%d smax=%d", group, smin, smax);
- totg += smax-smin-1;
- p = strchr(line, ':');
- p++;
- first = 1;
- while (1) {
- lmin = strtol(p, &p, 10);
- if (*p == '-')
- lmax = strtol(p+1, &p, 10);
- else
- lmax=lmin;
- debug("nntp: %s: lmin=%d lmax=%d", group, lmin, lmax);
- if (smax >= lmax) { /* server has more articles */
- if (first)
- unsg += smax - lmax;
- else
- unsg -= lmax-lmin+1;
- first = 0;
- }
- else /* local has higher article ??? */
- break;
- if (*p == ',')
- p++;
- else
- break;
- }
- } /* while fp */
- fclose(fp);
- strcpy(buf, "QUIT\r\n");
- wr_rd(fd, buf, "2", "Quit", machine, port);
- close(fd);
- *unseen = unsg;
- *total = totg;
- return 0;
-}
-
-
-static int check_imap4(char *user, char *pass, char *machine,
- int port, char *dir, int *total, int *unseen)
-{
- int fd = open_socket(machine, port);
- int n;
- char buf[BUFLEN];
- char *p;
-
- *total=0;
- *unseen = 0;
-
- if (fd < 0)
- {
- error("Couldn't connect to %s:%d (%s)", machine, port, strerror(errno));
- return -1;
- }
- n = read_socket_match(fd, buf, BUFLEN-1, "* OK");
- if (n <= 0) {
- error("Server doesn't respond %s:%d (%s)", machine, port, strerror(errno));
- close(fd);
- return -1;
- }
- sprintf(buf, ". LOGIN %s %s\r\n", user, pass);
- if (wr_rd(fd, buf, ". OK", "Wrong User/PASS?", machine, port) <= 0)
- return -1;
- sprintf(buf, ". STATUS %s (MESSAGES UNSEEN)\r\n", dir);
- if (wr_rd(fd, buf, "*", "Wrong dir?", machine, port) <= 0)
- return -1;
- if ((p = strstr(buf, "MESSAGES")) != NULL)
- sscanf(p, "%*s %d", total);
- else {
- error("Server doesn't provide MESSAGES (%s)", machine, port, strerror(errno));
- close(fd);
- return -1;
- }
- if ((p = strstr(buf, "UNSEEN")) != NULL)
- sscanf(p, "%*s %d", unseen);
- else {
- error("Server doesn't provide UNSEEN (%s)", machine, port, strerror(errno));
- close(fd);
- return -1;
- }
- strcpy(buf,". LOGOUT\r\n");
- wr_rd(fd, buf, "", "LOGOUT", machine, port);
- close(fd);
- return 0;
-}
-
-static int check_pop3(char *user, char *pass, char *machine,
- int port, int *total, int *unseen)
-{
- int fd = open_socket(machine, port);
- int n;
- char buf[BUFLEN];
-
- *total=0;
- *unseen=0;
-
- if (fd < 0)
- {
- error("Couldn't connect to %s:%d (%s)", machine, port, strerror(errno));
- return -1;
- }
- n = read_socket_match(fd, buf, BUFLEN-1, "+OK");
- if (n <= 0) {
- error("Server doesn't respond %s:%d (%s)", machine, port, strerror(errno));
- close(fd);
- return -1;
- }
- if (*user)
- {
- sprintf(buf, "USER %s\r\n", user);
- if (wr_rd(fd, buf, "+OK", "Wrong USER?", machine, port) <= 0)
- return -1;
- }
- if (*pass)
- {
- sprintf(buf, "PASS %s\r\n", pass);
- if (wr_rd(fd, buf, "+OK", "Wrong PASS?", machine, port) <= 0)
- return -1;
- }
- sprintf(buf, "STAT\r\n");
- if (wr_rd(fd, buf, "+OK", "Wrong STAT answer?", machine, port) <= 0)
- return -1;
- sscanf(buf, "+OK %d", total);
- if (*total) {
- sprintf(buf, "LAST\r\n");
- if (wr_rd(fd, buf, "+OK", "Wrong LAST answer?", machine, port) <= 0)
- return -1;
- sscanf(buf, "+OK %d", unseen);
- *unseen = *total - *unseen;
- }
- strcpy(buf, "QUIT\r\n");
- wr_rd(fd, buf, "+OK", "Quit", machine, port);
- close(fd);
- return 0;
-}
-
-int Mail_pop_imap_news(char *s, int *total, int *unseen)
-{
- int proto, port, ret;
- char *user, *pass, *machine, *dir, *ds;
-
- ds = strdup(s);
- if (ds == NULL)
- {
- error("Out of mem");
- return -1;
- }
- ret = parse_proto(ds, &proto, &user, &pass,
- &machine, &port, &dir) ;
- if (ret < 0)
- error("Not a pop3/imap4 mailbox");
- else
- ret = (proto == PROTO_POP3) ?
- check_pop3(user, pass, machine, port, total, unseen) :
- (proto == PROTO_NNTP) ?
- check_nntp(user, pass, machine, port, dir, total, unseen) :
- check_imap4(user, pass, machine, port, dir, total, unseen);
- free(ds);
- return ret;
-}
-
-#ifdef STANDALONE
-
-/*
- * test parse_proto with some garbage
- *
- */
-
-int foreground = 1;
-int debugging = 3;
-
-/*
- * for STANDALONE tests, disable Text driver and
- *
- * cc -DSTANDALONE mail2.c socket.c debug.c -g -Wall -o mail2
- *
- */
-
-#ifdef CHECK_PARSER
-
-static int test(char *s)
-{
- int ret;
- int proto, port;
- char *user, *pass, *machine, *dir, *ds;
-
- ds = strdup(s);
- ret = parse_proto(ds, &proto, &user, &pass,
- &machine, &port, &dir) ;
- printf("parse_proto(%s) ret=%d\n", s, ret);
- if (!ret)
- printf(
- "\tproto='%d'\n"
- "\tuser='%s'\n"
- "\tpass='%s'\n"
- "\tmachine='%s'\n"
- "\tport='%d'\n"
- "\tdir='%s'\n",
- proto,user,pass,machine,port,dir);
- free(ds);
- return ret;
-}
-#endif
-
-int main(int argc, char *argv[])
-{
-
-#ifdef CHECK_PARSER
- int i, ret;
- /* proto:[user[:pass]@]machine[:port][/dir] */
- char *t[] =
- {
- "pop3:sepp:Geheim@Rechner:123",
- "pop3:sepp@Rechner",
- "pop3:Rechner:123",
- "imap4:sepp:Geheim@Rechner/dir@/:pfad",
- "imap4:sepp:Geheim@Rechner",
- "imap4sepp:Geheim@Rechner/dir@/:pfad",
- "imap4:sepp:Geheim/Rechner/dir@/:pfad",
- "pop3:sepp@:",
- 0
- };
-
- ret = 0;
- if (argc > 1)
- ret |= test(argv[1]);
- else
- for (i = 0; t[i]; i++)
- ret |= test(t[i]);
- return ret;
-# else
-
- int total = -1, unseen = -1;
- char *mbx = "imap4:user:pass@server/folder/file";
- int ret = Mail_pop_imap(mbx, &total, &unseen);
- printf("ret = %d, total = %d unseen = %d\n", ret, total, unseen);
- return ret;
-
-# endif
-}
-
-#endif
diff --git a/socket.c b/socket.c
deleted file mode 100644
index 5102bda..0000000
--- a/socket.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/* $Id: socket.c,v 1.7 2004/01/29 04:40:03 reinelt Exp $
- *
- * simple socket functions
- *
- * Copyright 2001 Leopold Tötsch <lt@toetsch.at>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux 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, or (at your option)
- * any later version.
- *
- * LCD4Linux 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * $Log: socket.c,v $
- * Revision 1.7 2004/01/29 04:40:03 reinelt
- * every .c file includes "config.h" now
- *
- * Revision 1.6 2003/10/05 17:58:50 reinelt
- * libtool junk; copyright messages cleaned up
- *
- * Revision 1.5 2002/12/05 19:09:57 reinelt
- * patches for gcc-3.2
- *
- * Revision 1.4 2001/09/12 05:58:16 reinelt
- * fixed bug in mail2.c
- *
- * Revision 1.3 2001/09/12 05:37:22 reinelt
- *
- * fixed a bug in seti.c (file was never closed, lcd4linux run out of fd's
- *
- * improved socket debugging
- *
- * Revision 1.2 2001/03/15 14:25:05 ltoetsch
- * added unread/total news
- *
- * Revision 1.1 2001/03/14 13:19:29 ltoetsch
- * Added pop3/imap4 mail support
- *
- *
- */
-
-/*
- * Exported Functions:
- *
- * int open_socket(char *machine, int port);
- *
- * open and connect to socket on machine:port
- * returns fd on success or -1 on error
- *
- *
- * int read_socket(int fd, char *buf, size_t size);
- *
- * read maximum size chars into buf
- * returns n byte read, 0 on timeout, -1 on error
- *
- *
- * int read_socket_match(int fd, char *buf, size_t size, char *match);
- *
- * read maximum size chars into buf and check if the start of line
- * matches 'match'
- * returns n on successful match, 0 on timeout/mismatch, -1 on error
- *
- *
- * int write_socket(int fd, char *string);
- *
- * write string to socket fd
- * returns n byte written, -1 on error
- *
- * with debuglevel 3, traffic on socket is logged
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-
-#include "debug.h"
-
-#define TIMEOUT 5 /* 5 seconds timeout */
-
-
-static char *quotemeta (char *string)
-{
- static char buffer[256];
- char *s, *p;
-
- p=buffer;
- for (s=string; *s; s++) {
- if (isprint(*s)) {
- *p++=*s;
- } else {
- switch (*s) {
- case '\r':
- *p++='\\';
- *p++='r';
- break;
- case '\n':
- *p++='\\';
- *p++='n';
- break;
- default:
- p+=sprintf(p, "<\\%03o>", (int)*s);
- }
- }
- if ((p-buffer)>240) {
- *p++='.';
- *p++='.';
- *p++='.';
- break;
- }
- }
-
- *p='\0';
- return buffer;
-}
-
-static char *del_pass(char *s)
-{
- char *p;
- /* del pop3 pass from log */
- if (memcmp(s, "PASS ", 5) == 0)
- for (p = s+5; *p && *p != '\r'; p++)
- *p = '*';
- /* del imap4 pass from log */
- else if (memcmp(s, ". LOGIN", 7) == 0)
- for (p = s + strlen(s)-3 ; p > s && *p != ' '; p--)
- *p = '*';
- return s;
-}
-
-
-static void sockdebug (char dir, int len, char *string) {
-
- // delete passwords from log
- if (dir=='>') {
- del_pass (string);
- }
- message (3, "%c[%2d] %s", dir, len, quotemeta(string));
-}
-
-
-int open_socket(char *machine, int port)
-{
- struct hostent *addr;
- struct sockaddr_in s;
- int fd;
-
- addr = gethostbyname (machine);
- if (addr)
- memcpy (&s.sin_addr, addr->h_addr, sizeof (struct in_addr));
- else
- return -1;
-
- fd = socket (AF_INET, SOCK_STREAM, 0);
- if (fd < 0)
- return -1;
-
- s.sin_family = AF_INET;
- s.sin_port = htons (port);
-
- if (connect (fd, (struct sockaddr *)&s, sizeof (s)) < 0)
- return -1;
- return fd;
-}
-
-int read_socket(int fd, char *buf, size_t size)
-{
- fd_set readfds;
- struct timeval tv;
- int n;
-
- FD_ZERO(&readfds);
- FD_SET(fd, &readfds);
- tv.tv_sec = TIMEOUT;
- tv.tv_usec = 0;
-
- if (select(fd+1, &readfds, NULL, NULL, &tv) > 0)
- n = read(fd, buf, size);
- else
- n = 0;
-
- if (n >= 0)
- buf[n] = '\0';
- else
- buf[0] = '\0';
- sockdebug('<', n, buf);
- return n;
-}
-
-int read_socket_match(int fd, char *buf, size_t size, char *match)
-{
- int n = read_socket(fd, buf, size);
- int len;
- if (n <= 0)
- return n;
- len = strlen(match);
- if (n >= len && memcmp(buf, match, len) == 0)
- return n;
- return 0;
-}
-
-int write_socket(int fd, char *buf)
-{
- int n = write(fd, buf, strlen(buf));
- sockdebug('>', n, del_pass(buf));
- return n;
-}
-
diff --git a/socket.h b/socket.h
deleted file mode 100644
index ef9e26a..0000000
--- a/socket.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* $Id: socket.h,v 1.2 2003/10/05 17:58:50 reinelt Exp $
- *
- * simple socket functions
- *
- * Copyright 2001 Leopold Tötsch <lt@toetsch.at>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux 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, or (at your option)
- * any later version.
- *
- * LCD4Linux 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * $Log: socket.h,v $
- * Revision 1.2 2003/10/05 17:58:50 reinelt
- * libtool junk; copyright messages cleaned up
- *
- * Revision 1.1 2001/03/14 13:19:29 ltoetsch
- * Added pop3/imap4 mail support
- *
- *
- */
-
-#ifndef __SOCKET_H_
-#define __SOCKET_H_
-
-int open_socket(char *machine, int port);
-int read_socket(int fd, char *buf, size_t size);
-int read_socket_match(int fd, char *buf, size_t size, char *match);
-int write_socket(int fd, char *buf);
-
-#endif
-
-
-
diff --git a/wifi.c b/wifi.c
deleted file mode 100644
index 9d13d73..0000000
--- a/wifi.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/* $Id: wifi.c,v 1.7 2004/03/03 03:47:04 reinelt Exp $
- *
- * WIFI specific functions
- *
- * Copyright 2003 Xavier Vello <xavier66@free.fr>
- *
- * based on lcd4linux/isdn.c which is
- * Copyright 1999, 2000 Michael Reinelt <reinelt@eunet.at>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux 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, or (at your option)
- * any later version.
- *
- * LCD4Linux 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * $Log: wifi.c,v $
- * Revision 1.7 2004/03/03 03:47:04 reinelt
- * big patch from Martin Hejl:
- * - use qprintf() where appropriate
- * - save CPU cycles on gettimeofday()
- * - add quit() functions to free allocated memory
- * - fixed lots of memory leaks
- *
- * Revision 1.6 2004/01/29 04:40:03 reinelt
- * every .c file includes "config.h" now
- *
- * Revision 1.5 2004/01/09 04:16:06 reinelt
- * added 'section' argument to cfg_get(), but NULLed it on all calls by now.
- *
- * Revision 1.4 2004/01/06 22:33:14 reinelt
- * Copyright statements cleaned up
- *
- * Revision 1.3 2003/12/01 07:08:51 reinelt
- *
- * Patches from Xavier:
- * - WiFi: make interface configurable
- * - "quiet" as an option from the config file
- * - ignore missing "MemShared" on Linux 2.6
- *
- * Revision 1.2 2003/11/28 18:34:55 nicowallmeier
- * Minor bugfixes
- *
- * Revision 1.1 2003/11/14 05:59:37 reinelt
- * added wifi.c wifi.h which have been forgotten at the last checkin
- *
- */
-
-/*
- * exported functions:
- *
- * Wifi (int *signal, int *link, int *noise)
- * returns 0 if ok, -1 if error
- * sets *signal to signal level (which determines the rate)
- * sets *link to link quality
- * sets *noise to noise level (reverse of link quality)
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-
-#include "debug.h"
-#include "wifi.h"
-#include "filter.h"
-#include "cfg.h"
-
-int Wifi (int *signal, int *link, int *noise)
-{
- int ws, wl, wn;
- static int fd=-2;
- char buffer[4096];
- char *p;
-
- char *interface=cfg_get(NULL, "Wifi.Interface", "wlan0");
-
- *signal=0;
- *link=0;
- *noise=0;
-
- if (fd==-1) return -1;
-
- if (fd==-2) {
- fd = open("/proc/net/wireless", O_RDONLY); // the real procfs file
- //fd = open("/wireless", O_RDONLY); // a fake file for testing
- if (fd==-1) {
- error ("open(/proc/net/wireless) failed: %s", strerror(errno));
- return -1;
- }
- debug ("open(/proc/net/wireless)=%d", fd);
- }
-
- if (lseek(fd, 0L, SEEK_SET)!=0) {
- error ("lseek(/proc/net/wireless) failed: %s", strerror(errno));
- fd=-1;
- return -1;
- }
-
- if (read (fd, &buffer, sizeof(buffer)-1)==-1) {
- error("read(/proc/net/wireless) failed: %s", strerror(errno));
- fd=-1;
- return -1;
- }
-
- p=strstr(buffer, interface);
- if (p!=NULL) {
- // TODO : size of interface ??
- if (sscanf(p+13, "%d", &wl)!=1) {
- error ("parse(/proc/net/wireless) failed: unknown format");
- fd=-1;
- return -1;
- }
- if (sscanf(p+19, "%d", &ws)!=1) {
- error ("parse(/proc/net/wireless) failed: unknown format");
- fd=-1;
- return -1;
- }
- if (sscanf(p+25, "%d", &wn)!=1) {
- error ("parse(/proc/net/wireless) failed: unknown format");
- fd=-1;
- return -1;
- }
- } else {
- error("read(/proc/net/wireless) failed: %s", strerror(errno));
- fd=-1;
- return -1;
- }
- *signal=ws;
- *link=wl;
- *noise=wn;
- free(interface);
- return 0;
-}
diff --git a/wifi.h b/wifi.h
deleted file mode 100644
index a1b4a1f..0000000
--- a/wifi.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* $Id: wifi.h,v 1.2 2004/01/06 22:33:14 reinelt Exp $
- *
- * WIFI specific functions
- *
- * Copyright 2003 Xavier Vello <xavier66@free.fr>
- *
- * based on lcd4linux/isdn.c which is
- * Copyright 1999, 2000 Michael Reinelt <reinelt@eunet.at>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux 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, or (at your option)
- * any later version.
- *
- * LCD4Linux 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * $Log: wifi.h,v $
- * Revision 1.2 2004/01/06 22:33:14 reinelt
- * Copyright statements cleaned up
- *
- * Revision 1.1 2003/11/14 05:59:37 reinelt
- * added wifi.c wifi.h which have been forgotten at the last checkin
- *
- */
-
-#ifndef _WIFI_H_
-#define _WIFI_H_
-
-int Wifi (int *signal, int *link, int *noise);
-
-#endif