isdn4k-utils/isdnlog/isdnlog/isdnlog.h

634 lines
22 KiB
C

/* $Id: isdnlog.h,v 1.30 2007/01/05 04:23:58 tobiasb Exp $
*
* ISDN accounting for isdn4linux.
*
* Copyright 1995 .. 2000 by Andreas Kool (akool@isdn4linux.de)
* and Stefan Luethje (luethje@sl-gw.lake.de)
*
* 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log: isdnlog.h,v $
* Revision 1.30 2007/01/05 04:23:58 tobiasb
* Made isdnrep and isdnrate buildable under cygwin. See ChangeLog for details.
*
* Revision 1.29 2004/09/05 22:04:56 tobiasb
* New parameter file entry "ignoreUPD" for suppressing "Unexpected
* discrimator (...)" messages, demanded by Günther J. Niederwimmer
* on the suse-isdn mailing list.
*
* Revision 1.28 2004/01/28 14:27:46 tobiasb
* Second step in restricting fds at isdnlog restart and script starting.
* The fd limit is now taken from getrlimit() instead of NR_OPEN.
* Close_Fds(first) which tries to close all possible fds is generally
* built in but the execution must be requested with "closefds=yes" in
* the parameterfile otherwise the isdnlog behaviour remains unchanged.
*
* Revision 1.27 2004/01/26 15:20:08 tobiasb
* First step to close all unnecessary open file descriptors before
* starting a start script as reaction to a call. The same applies to the
* restart of isdnlog using SIGHUP. Till now each restart increases the
* number of used fds.
* For now the modifications are inactive by default. They can be enabled
* by adding the line "DEFS += -DFD_AT_EXEC_MODE=1" to ../Makefile.in.
* The next isdnlog (4.68) will have this enabled per default.
* The upper limit for fd numbers is taken from NR_OPEN in <linux/limits.h>.
* If there is a smarter way to access this limit, please let me know.
* Another approach would be to set the close-on-exec flag on each fd
* directly after it is opened. This would require more extensive changes.
* I'd like to thank Jan Bernhardt for discovering this problem.
*
* Revision 1.26 2003/08/26 19:46:12 tobiasb
* isdnlog-4.66:
* - Added support for AVM B1 (with layer 2 d-channel trace) in point-to-
* point mode, where only TEI 0 is used ("Anlagenanschluss" in German).
* Many thanks to Klaus Heske for his testing efforts.
* - The source number "0" in outgoing calls is now expanded to
* +<country><area>0. This may be useful for point-to-point setups,
* when <area> contains area code and local number without extension.
* - Basic support for different codesets in (E)DSS1 messages. Except
* for codeset 0, unknown information elements are now silently
* ignored (controlled by ignore_unknown_IE in isdnlog/isdnlog.h).
* - Added some information elements to isdnlog/messages.c.
* - Increased the length of msn (local number) in struct telnum.
* - Fixed separation of country and area code for long numbers
* in getDest, tools/dest.c.
* - Changed broken (with gcc 2.95.2) generation of .depend. The old
* output did not consider the location of objectfiles in subdirs.
* Remove this file before compiling this upgraded isdnlog.
* - Moved DUALFIX... defines from tools/tools.h to isdnlog/isdnlog.h.
* - Added missing R:-Links for cellphone entries in country-de.dat.
* - Different entry for each city "Neustadt" in tools/zone/de/code.
* - Earlier changes since isdnlog-4.65:
* - Allow dualmode workaround 0x100 (DUALFIX_DESTNUM) to work also with
* CALL_PROCEEDING messages for cleaning up unanswered incoming calls.
*
* Revision 1.25 2001/06/08 11:55:24 kai
* fix to compile with newer kernel headers. Maybe someone wants to fix isdnlog to recognize the number of channels at run time?
*
* Revision 1.24 1999/12/31 13:30:02 akool
* isdnlog-4.00 (Millenium-Edition)
* - Oracle support added by Jan Bolt (Jan.Bolt@t-online.de)
*
* Revision 1.23 1999/11/16 18:09:39 akool
* isdnlog-3.67
* isdnlog-3.66 writes wrong provider number into it's logfile isdn.log
* there is a patch and a repair program available at
* http://www.toetsch.at/linux/i4l/i4l-3_66.htm
*
* Revision 1.22 1999/09/11 22:28:24 akool
* isdnlog-3.50
* added 3. parameter to "-h" Option: Controls CHARGEHUP for providers like
* DTAG (T-Online) or AOL.
* Many thanks to Martin Lesser <m-lesser@lesser-com.de>
*
* Revision 1.21 1999/05/04 19:32:40 akool
* isdnlog Version 3.24
*
* - fully removed "sondernummern.c"
* - removed "gcc -Wall" warnings in ASN.1 Parser
* - many new entries for "rate-de.dat"
* - better "isdnconf" utility
*
* Revision 1.20 1999/04/10 16:35:29 akool
* isdnlog Version 3.13
*
* WARNING: This is pre-ALPHA-dont-ever-use-Code!
* "tarif.dat" (aka "rate-xx.dat"): the next generation!
*
* You have to do the following to test this version:
* cp /usr/src/isdn4k-utils/isdnlog/holiday-de.dat /etc/isdn
* cp /usr/src/isdn4k-utils/isdnlog/rate-de.dat /usr/lib/isdn
* cp /usr/src/isdn4k-utils/isdnlog/samples/rate.conf.de /etc/isdn/rate.conf
*
* After that, add the following entries to your "/etc/isdn/isdn.conf" or
* "/etc/isdn/callerid.conf" file:
*
* [ISDNLOG]
* SPECIALNUMBERS = /usr/lib/isdn/sonderrufnummern.dat
* HOLIDAYS = /usr/lib/isdn/holiday-de.dat
* RATEFILE = /usr/lib/isdn/rate-de.dat
* RATECONF = /etc/isdn/rate.conf
*
* Please replace any "de" with your country code ("at", "ch", "nl")
*
* Good luck (Andreas Kool and Michael Reinelt)
*
* Revision 1.19 1999/03/25 19:39:55 akool
* - isdnlog Version 3.11
* - make isdnlog compile with egcs 1.1.7 (Bug report from Christophe Zwecker <doc@zwecker.com>)
*
* Revision 1.18 1999/03/24 19:37:49 akool
* - isdnlog Version 3.10
* - moved "sondernnummern.c" from isdnlog/ to tools/
* - "holiday.c" and "rate.c" integrated
* - NetCologne rates from Oliver Flimm <flimm@ph-cip.uni-koeln.de>
* - corrected UUnet and T-Online rates
*
* Revision 1.17 1999/03/07 18:18:51 akool
* - new 01805 tarif of DTAG
* - new March 1999 tarife
* - added new provider "01051 Telecom"
* - fixed a buffer overrun from Michael Weber <Michael.Weber@Post.RWTH-Aachen.DE>
* - fixed a bug using "sondernnummern.c"
* - fixed chargeint change over the time
* - "make install" now install's "sonderrufnummern.dat", "tarif.dat",
* "vorwahl.dat" and "tarif.conf"! Many thanks to
* Mario Joussen <mario.joussen@post.rwth-aachen.de>
* - Euracom Frames would now be ignored
* - fixed warnings in "sondernnummern.c"
* - "10plus" messages no longer send to syslog
*
* Revision 1.16 1999/01/24 19:01:35 akool
* - second version of the new chargeint database
* - isdnrep reanimated
*
* Revision 1.15 1999/01/10 15:23:16 akool
* - "message = 0" bug fixed (many thanks to
* Sebastian Kanthak <sebastian.kanthak@muehlheim.de>)
* - CITYWEEKEND via config-file possible
* - fixes from Michael Reinelt <reinelt@eunet.at>
* - fix a typo in the README from Sascha Ziemann <szi@aibon.ping.de>
* - Charge for .at optimized by Michael Reinelt <reinelt@eunet.at>
* - first alpha-Version of the new chargeinfo-Database
* ATTENTION: This version requires the following manual steps:
* cp /usr/src/isdn4k-utils/isdnlog/tarif.dat /usr/lib/isdn
* cp /usr/src/isdn4k-utils/isdnlog/samples/tarif.conf /etc/isdn
*
* Revision 1.14 1998/12/09 20:39:30 akool
* - new option "-0x:y" for leading zero stripping on internal S0-Bus
* - new option "-o" to suppress causes of other ISDN-Equipment
* - more support for the internal S0-bus
* - Patches from Jochen Erwied <mack@Joker.E.Ruhr.DE>, fixes TelDaFax Tarif
* - workaround from Sebastian Kanthak <sebastian.kanthak@muehlheim.de>
* - new CHARGEINT chapter in the README from
* "Georg v.Zezschwitz" <gvz@popocate.hamburg.pop.de>
*
* Revision 1.13 1998/11/24 20:51:35 akool
* - changed my email-adress
* - new Option "-R" to supply the preselected provider (-R24 -> Telepassport)
* - made Provider-Prefix 6 digits long
* - full support for internal S0-bus implemented (-A, -i Options)
* - isdnlog now ignores unknown frames
* - added 36 allocated, but up to now unused "Auskunft" Numbers
* - added _all_ 122 Providers
* - Patch from Jochen Erwied <mack@Joker.E.Ruhr.DE> for Quante-TK-Anlagen
* (first dialed digit comes with SETUP-Frame)
*
* Revision 1.12 1998/11/01 08:49:47 akool
* - fixed "configure.in" problem with NATION_*
* - DESTDIR fixes (many thanks to Michael Reinelt <reinelt@eunet.at>)
* - isdnrep: Outgoing calls ordered by Zone/Provider/MSN corrected
* - new Switch "-i" -> running on internal S0-Bus
* - more providers
* - "sonderrufnummern.dat" extended (Frag Fred, Telegate ...)
* - added AVM-B1 to the documentation
* - removed the word "Teles" from the whole documentation ;-)
*
* Revision 1.11 1998/10/18 20:13:37 luethje
* isdnlog: Added the switch -K
*
* Revision 1.10 1998/09/26 18:29:10 akool
* - quick and dirty Call-History in "-m" Mode (press "h" for more info) added
* - eat's one more socket, Stefan: sockets[3] now is STDIN, FIRST_DESCR=4 !!
* - Support for tesion)) Baden-Wuerttemberg Tarif
* - more Providers
* - Patches from Wilfried Teiken <wteiken@terminus.cl-ki.uni-osnabrueck.de>
* - better zone-info support in "tools/isdnconf.c"
* - buffer-overrun in "isdntools.c" fixed
* - big Austrian Patch from Michael Reinelt <reinelt@eunet.at>
* - added $(DESTDIR) in any "Makefile.in"
* - new Configure-Switches "ISDN_AT" and "ISDN_DE"
* - splitted "takt.c" and "tools.c" into
* "takt_at.c" / "takt_de.c" ...
* "tools_at.c" / "takt_de.c" ...
* - new feature
* CALLFILE = /var/log/caller.log
* CALLFMT = %b %e %T %N7 %N3 %N4 %N5 %N6
* in "isdn.conf"
* - ATTENTION:
* 1. "isdnrep" dies with an seg-fault, if not HTML-Mode (Stefan?)
* 2. "isdnlog/Makefile.in" now has hardcoded "ISDN_DE" in "DEFS"
* should be fixed soon
*
* Revision 1.9 1998/06/21 11:52:47 akool
* First step to let isdnlog generate his own AOCD messages
*
* Revision 1.8 1998/06/07 21:08:34 akool
* - Accounting for the following new providers implemented:
* o.tel.o, Tele2, EWE TEL, Debitel, Mobilcom, Isis, NetCologne,
* TelePassport, Citykom Muenster, TelDaFax, Telekom, Hutchison Telekom,
* tesion)), HanseNet, KomTel, ACC, Talkline, Esprit, Interoute, Arcor,
* WESTCom, WorldCom, Viag Interkom
*
* Code shamelessly stolen from G.Glendown's (garry@insider.regio.net)
* program http://www.insider.org/tarif/gebuehr.c
*
* - Telekom's 10plus implemented
*
* - Berechnung der Gebuehrenzone implementiert
* (CityCall, RegioCall, GermanCall, GlobalCall)
* The entry "ZONE" is not needed anymore in the config-files
*
* you need the file
* http://swt.wi-inf.uni-essen.de/~omatthes/tgeb/vorwahl2.exe
* and the new entry
* [GLOBAL]
* AREADIFF = /usr/lib/isdn/vorwahl.dat
* for that feature.
*
* Many thanks to Olaf Matthes (olaf.matthes@uni-essen.de) for the
* Data-File and Harald Milz for his first Perl-Implementation!
*
* - Accounting for all "Sonderrufnummern" (0010 .. 11834) implemented
*
* You must install the file
* "isdn4k-utils/isdnlog/sonderrufnummern.dat.bz2"
* as "/usr/lib/isdn/sonderrufnummern.dat"
* for that feature.
*
* ATTENTION: This is *NO* production-code! Please test it carefully!
*
* Revision 1.7 1997/05/25 19:41:02 luethje
* isdnlog: close all files and open again after kill -HUP
* isdnrep: support vbox version 2.0
* isdnconf: changes by Roderich Schupp <roderich@syntec.m.EUnet.de>
* conffile: ignore spaces at the end of a line
*
* Revision 1.6 1997/05/09 23:30:50 luethje
* isdnlog: new switch -O
* isdnrep: new format %S
* bugfix in handle_runfiles()
*
* Revision 1.5 1997/04/08 00:02:17 luethje
* Bugfix: isdnlog is running again ;-)
* isdnlog creates now a file like /var/lock/LCK..isdnctrl0
* README completed
* Added some values (countrycode, areacode, lock dir and lock file) to
* the global menu
*
* Revision 1.4 1997/04/03 22:34:50 luethje
* splitt the files callerid.conf and ~/.isdn.
*
* Revision 1.3 1997/03/23 23:11:54 luethje
* improved performance
*
* Revision 1.2 1997/03/23 20:55:41 luethje
* some bugfixes
*
* Revision 1.1 1997/03/16 20:58:43 luethje
* Added the source code isdnlog. isdnlog is not working yet.
* A workaround for that problem:
* copy lib/policy.h into the root directory of isdn4k-utils.
*
* Revision 2.6.36 1997/02/11 18:21:43 akool
* isdnctrl2 implemented
*
* Revision 2.6.30 1997/01/28 16:49:43 akool
* LOG_MAJOR_VERSION auf 3 erhoeht
*
* Revision 2.6.26 1997/01/18 12:56:43 akool
* huptimeofs neu definiert
*
* Revision 2.3.4 1996/04/05 11:30:43 akool
* New ibytes/obytes ioctl() from Fritz implemented
* USERFILE
*
* Revision 2.23 1996/03/14 18:07:43 akool
*
* Revision 2.15 1996/02/21 20:14:43 akool
*
* Revision 2.12 1996/02/13 20:08:43 root
* Nu geht's (oder?)
*
* Revision 2.12 1996/02/13 20:08:43 root
* Nu geht's (oder?)
*
* Revision 1.2 1996/02/13 20:05:28 root
* so nun gehts
*
* Revision 1.1 1996/02/13 14:28:14 root
* Initial revision
*
* Revision 2.05 1995/02/11 17:10:16 akool
*
*/
/****************************************************************************/
#ifndef _ISDNLOG_H_
#define _ISDNLOG_H_
/****************************************************************************/
#define PUBLIC extern
/****************************************************************************/
#include <tools.h> /* includes linux/isdn.h for __linux__ */
#include <holiday.h>
#include <rate.h>
#include "socket.h"
/****************************************************************************/
#define MAX_CALLS_IN_QUEUE 100
#define MAX_PRINTS_IN_QUEUE 500
/****************************************************************************/
#define BROADCAST 0x7f
#define OUTGOING !call[chan].dialin
/****************************************************************************/
#define ISDNCTRL 0
#define ISDNCTRL2 1
#define ISDNINFO 2
#define STDIN 3
#define IN_PORT 4
#define FIRST_DESCR 4
/****************************************************************************/
#define PRT_SHOWNUMBERS 0x10
#define PRT_SHOWAOCD 0x20
#define PRT_SHOWCONNECT 0x40
#define PRT_SHOWHANGUP 0x80
#define PRT_SHOWCAUSE 0x100
#define PRT_SHOWTIME 0x200
#define PRT_SHOWBYTE 0x400
#define PRT_SHOWIMON 0x800
#define PRT_SHOWBEARER 0x1000
#define PRT_SHOWTICKS 0x2000
#define PRT_SHOWCHARGEMAX 0x4000
#define PRT_DEBUG_GENERAL 0x8000
#define PRT_DEBUG_DIAG 0x10000
#define PRT_DEBUG_INFO 0x20000
#define PRT_DEBUG_EXEC 0x40000
#define PRT_DEBUG_BUGS 0x80000
#define PRT_DEBUG_DECODE 0x100000
#define PRT_DEBUG_RING 0x200000
#define PRT_DEBUG_CS 0x200000
#define PRT_DEBUG_PROT 0x800000
#define PRT_NOTHING 0x1000000
#define IS_DEBUG(VALUE) (VALUE >= PRT_DEBUG_GENERAL && VALUE < PRT_NOTHING)
/****************************************************************************/
#define AOC_INITIAL 0
#define AOCDCurrency 1
#define AOCDChargingUnit 2
#define AOCECurrency 3
#define AOCEChargingUnit 4
#define AOCDCurrencyInfo 5
#define AOCECurrencyInfo 6
#define AOCDChargingUnitInfo 7
#define AOCEChargingUnitInfo 8
#define RecordedCurrency 9
#define TypeOfChargingInfo 10
#define Currency 11
#define Amount 12
#define CurrencyAmount 13
#define Multiplier 14
#define RecordedUnitsList 15
#define RecordedUnits 16
#define NumberOfUnits 17
/****************************************************************************/
#define VERBOSE_HEX 1 /* only "HEX:" messages from /dev/isdnctrl */
#define VERBOSE_CTRL 2 /* any message from /dev/isdnctrl */
#define VERBOSE_INFO 4 /* any message from /dev/isdninfo */
#define VERBOSE_FLOW 8 /* any message from ioctl(IIOCGETCPS) */
/****************************************************************************/
#ifndef USERFILE
#define USERFILE "isdnlog.users"
#endif
/****************************************************************************/
#define DUALFIX_DESTNUM 0x100
#define DUALFIX_SRCNUM 0x200
#define DUALFIX_MULTLOG 0x400
/****************************************************************************/
typedef struct {
int current;
int shift;
int locked;
} CODESET;
/****************************************************************************/
typedef struct _interval {
int event;
int chan;
info_args *infoarg;
time_t next_start;
struct _interval *next;
} interval;
/****************************************************************************/
#ifdef _ISDNLOG_C_
#define _EXTERN
socket_queue *sockets = NULL;
_EXTERN int ignore_unknown_IE = 0xFE; /* codesets 7 to 1 */
_EXTERN int ignore_unknown_PD = 0;
_EXTERN int param_closefds = 0;
#else
#define _EXTERN extern
extern socket_queue *sockets;
_EXTERN int ignore_unknown_IE;
_EXTERN int ignore_unknown_PD;
_EXTERN int param_closefds;
#endif
_EXTERN FILE *flog; /* /var/adm/isdn.log */
_EXTERN FILE *fcons; /* /dev/ttyX (or stderr) */
_EXTERN FILE *fprot; /* /tmp/isdnctrl0 */
_EXTERN FILE *fout; /* outfile */
_EXTERN int first_descr;
_EXTERN int chan;
_EXTERN int message;
_EXTERN int syslogmessage;
_EXTERN int xinfo;
_EXTERN int sound;
_EXTERN int trace;
_EXTERN int isdaemon;
_EXTERN int imon;
_EXTERN int port;
_EXTERN int wakeup;
_EXTERN int fullhour;
_EXTERN int tty_dv;
_EXTERN int net_dv;
_EXTERN int inf_dv;
_EXTERN clock_t tt;
_EXTERN clock_t tto;
_EXTERN char st[FNSIZE];
_EXTERN char stl[FNSIZE];
_EXTERN int settime;
_EXTERN int replay;
_EXTERN int replaydev;
_EXTERN int verbose;
_EXTERN int synclog;
_EXTERN int any;
_EXTERN int stdoutput;
_EXTERN int allflags;
_EXTERN int newcps;
_EXTERN int chans;
_EXTERN int bilingual;
_EXTERN int hupctrl;
_EXTERN int hup1;
_EXTERN int hup2;
_EXTERN int hup3;
_EXTERN int trim;
_EXTERN int trimi;
_EXTERN int trimo;
_EXTERN int mcalls;
_EXTERN int xlog;
_EXTERN char *myname, *myshortname;
_EXTERN int newline;
_EXTERN int width;
_EXTERN int watchdog;
_EXTERN char *isdnctrl;
_EXTERN char isdnctrl2[FNSIZE];
_EXTERN char *outfile;
_EXTERN char tmpout[PATH_MAX];
_EXTERN int readkeyboard;
_EXTERN int other;
// I think 16 is the maximum isdnlog currently handles, but to
// be on the safe side, keep it at 64
_EXTERN IFO ifo[64];
_EXTERN IO io[64];
#undef _EXTERN
/****************************************************************************/
#ifdef _PROCESSOR_C_
#define _EXTERN
#else
#define _EXTERN extern
#endif
_EXTERN void dotrace(void);
_EXTERN int morectrl(int card);
_EXTERN void moreinfo(void);
_EXTERN void morekbd(void);
_EXTERN void processcint(void);
_EXTERN void processflow(void);
_EXTERN void processRate(int chan);
_EXTERN void clearchan(int chan, int total);
#undef _EXTERN
/****************************************************************************/
#ifdef _FUNCTIONS_C_
#define _EXTERN
#else
#define _EXTERN extern
#endif
#define Exit(a) _Exit_isdnlog(__FILE__,__LINE__,a)
_EXTERN void _Exit_isdnlog(char *File, int Line, int RetCode);
#ifndef _REP_FUNC_C_
_EXTERN int print_msg(int Level, const char *fmt, ...);
#endif
_EXTERN void info(int chan, int reason, int state, char *msg);
_EXTERN int Change_Channel(int old_channel, int new_channel);
_EXTERN void set_time_str(void);
_EXTERN void now(void);
_EXTERN void logger(int chan);
_EXTERN int ringer(int chan, int event);
#undef _EXTERN
/****************************************************************************/
#ifdef _SERVER_C_
#define _EXTERN
#else
#define _EXTERN extern
#endif
_EXTERN int message_from_server(CALL *call, int chan);
_EXTERN int eval_message(int sock);
_EXTERN int start_server(int port);
_EXTERN int listening(int port);
_EXTERN int print_from_server(char *String);
_EXTERN int change_channel(int old_chan, int new_chan);
_EXTERN int disconnect_client(int sock);
#undef _EXTERN
/****************************************************************************/
#ifdef _START_PROG_C_
#define _EXTERN
#else
#define _EXTERN extern
#endif
_EXTERN int Ring(info_args *, char *[], int, int);
_EXTERN void Alarm(void);
_EXTERN int CheckTime(char *);
_EXTERN int Print_Cmd_Output( int sock );
_EXTERN int Get_Sock_From_Call_And_Info_Args( int chan, info_args *Ptr, int Cnt );
_EXTERN int Get_Sock_From_Call( int chan, int Cnt );
_EXTERN int Get_Sock_From_Info_Args( info_args *Ptr, int Cnt );
_EXTERN int Condition_Changed( int condition, int flag );
_EXTERN const char *Set_Ringer_Flags( int condtion, int InOut );
_EXTERN int Start_Ring(int chan, info_args *infoarg, int event, int intervalflag);
_EXTERN int Start_Process(int chan, info_args *infoarg, int event);
_EXTERN int New_Interval(int chan, info_args *infoarg, int event);
_EXTERN int Del_Interval(int chan, info_args *infoarg);
_EXTERN struct timeval *Get_Interval(int Sec);
_EXTERN int Change_Channel_Ring( int old_channel, int new_channel);
_EXTERN int Start_Interval(void);
_EXTERN void Close_Fds( const int first );
#undef _EXTERN
/****************************************************************************/
#ifdef _USER_ACCESS_C_
#define _EXTERN
#else
#define _EXTERN extern
#endif
_EXTERN int read_user_access( void );
_EXTERN int write_user_access( void );
_EXTERN int user_has_access(char *User, char *Host);
_EXTERN int User_Get_Message(char *User, char *Host, char* mymsn, int Flag);
_EXTERN const char *userfile(void);
#undef _EXTERN
/****************************************************************************/
extern int prefix2pnum(int);
#endif /* _ISDNLOG_H_ */