view src/libident/ident.h @ 10:26e34ae9a3e3

changed indention and line wrapping to a more consistent style
author meillo@marmaro.de
date Mon, 27 Oct 2008 16:23:10 +0100 (2008-10-27)
parents 08114f7dcc23
children
line wrap: on
line source
/*
** ident.h
**
** Author: Peter Eriksson <pen@lysator.liu.se>
** Intruder: P�r Emanuelsson <pell@lysator.liu.se>
*/

#ifndef __IDENT_H__
#define __IDENT_H__

#ifdef __cplusplus
extern "C" {
#endif

/* Sigh */
#ifdef __STDC__
#  if __STDC__ == 1
#    define IS_STDC 1
#  endif
#endif

#ifdef __P
#  undef __P
#endif

#ifdef IS_STDC
#  define __P(AL) AL

#ifdef IN_LIBIDENT_SRC

#  define __P1(t1,a1) \
    (t1 a1)

#  define __P2(t1,a1,t2,a2) \
    (t1 a1, t2 a2)

#  define __P3(t1,a1,t2,a2,t3,a3) \
    (t1 a1, t2 a2, t3 a3)

#  define __P4(t1,a1,t2,a2,t3,a3,t4,a4) \
    (t1 a1, t2 a2, t3 a3, t4 a4)

#  define __P5(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
    (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5)

#  define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
    (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7)
#endif

#else

#  define __P(AL) ()

#ifdef IN_LIBIDENT_SRC

#  define __P1(t1,a1)                     (a1) \
    t1 a1;
#  define __P2(t1,a1,t2,a2)               (a1, a2) \
    t1 a1; \
    t2 a2;
#  define __P3(t1,a1,t2,a2,t3,a3)         (a1, a2, a3) \
    t1 a1; \
    t2 a2; \
    t3 a3;
#  define __P4(t1,a1,t2,a2,t3,a3,t4,a4)   (a1, a2, a3, a4) \
    t1 a1; \
    t2 a2; \
    t3 a3; \
    t4 a4;
#  define __P5(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5)   (a1, a2, a3, a4, a5) \
    t1 a1; \
    t2 a2; \
    t3 a3; \
    t4 a4; \
    t5 a5;
#  define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
    (a1, a2, a3, a4, a5, a6, a7) \
    t1 a1; \
    t2 a2; \
    t3 a3; \
    t4 a4; \
    t5 a5; \
    t6 a6; \
    t7 a7;
#endif
#endif

#ifdef IS_STDC
#  undef IS_STDC
#endif

#ifdef _AIX
#  include <sys/select.h>
#endif
#ifdef __sgi
#  include <bstring.h>
#endif
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/time.h>

#if defined(VMS) && !defined(FD_SETSIZE)
#  define FD_SETSIZE 64
#endif

/*
 * Sigh, GCC v2 complains when using undefined struct tags
 * in function prototypes...
 */
#if defined(__GNUC__) && !defined(INADDR_ANY)
#  define __STRUCT_IN_ADDR_P void *
#else
#  define __STRUCT_IN_ADDR_P struct in_addr *
#endif

#if defined(__GNUC__) && !defined(DST_NONE)
#  define __STRUCT_TIMEVAL_P void *
#else
#  define __STRUCT_TIMEVAL_P struct timeval *
#endif

#if defined(__sgi) && defined(_POSIX_SOURCE)
#  undef  __STRUCT_TIMEVAL_P
#  define __STRUCT_TIMEVAL_P void *
#endif

#ifndef IDBUFSIZE
#  define IDBUFSIZE 2048
#endif

#ifndef IDPORT
#  define IDPORT 113
#endif

	typedef struct {
		int fd;
		char buf[IDBUFSIZE];
	} ident_t;

	typedef struct {
		int lport;  /* Local port */
		int fport;  /* Far (remote) port */
		char *identifier;  /* Normally user name */
		char *opsys;  /* OS */
		char *charset;  /* Charset (what did you expect?) */
	} IDENT;  /* For higher-level routines */

/* Low-level calls and macros */
#define id_fileno(ID) ((ID)->fd)

	extern ident_t *id_open __P((__STRUCT_IN_ADDR_P laddr, __STRUCT_IN_ADDR_P faddr, __STRUCT_TIMEVAL_P timeout));

	extern int id_close __P((ident_t * id));

	extern int id_query __P((ident_t * id, int lport, int fport, __STRUCT_TIMEVAL_P timeout));

	extern int id_parse __P((ident_t * id, __STRUCT_TIMEVAL_P timeout, int *lport, int *fport, char **identifier, char **opsys, char **charset));

/* High-level calls */

	extern IDENT *ident_lookup __P((int fd, int timeout));

	extern char *ident_id __P((int fd, int timeout));

	extern IDENT *ident_query __P((__STRUCT_IN_ADDR_P laddr, __STRUCT_IN_ADDR_P raddr, int lport, int rport, int timeout));

	extern void ident_free __P((IDENT * id));

	extern char id_version[];

#ifdef IN_LIBIDENT_SRC

	extern char *id_strdup __P((char *str));
	extern char *id_strtok __P((char *cp, char *cs, char *dc));

#endif

#ifdef __cplusplus
}
#endif
#endif