2001-01-24 14:03:42 +00:00
|
|
|
/* $Id$ */
|
2000-07-02 20:43:55 +00:00
|
|
|
|
2000-09-27 05:38:29 +00:00
|
|
|
/* Settings you should not change -- see below for changeable ones */
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include "config.h"
|
|
|
|
#endif
|
|
|
|
|
2000-04-17 13:49:40 +00:00
|
|
|
/* Settings you can change */
|
|
|
|
|
|
|
|
#define DEFLINE 256
|
|
|
|
#define UDPMAX 65535
|
2000-06-29 11:48:49 +00:00
|
|
|
#ifdef HTTP
|
2000-04-17 13:49:40 +00:00
|
|
|
#define MAXTOREAD 150000
|
2000-06-29 11:48:49 +00:00
|
|
|
#endif
|
2000-09-27 05:38:29 +00:00
|
|
|
#ifdef SMTP
|
|
|
|
#define MAXSMTP 1024
|
|
|
|
#define MAXSMTPLINES 30
|
2000-04-17 11:36:29 +00:00
|
|
|
#endif
|
2000-04-13 09:19:23 +00:00
|
|
|
|
|
|
|
/* Probably too many inclusions but this is to keep 'gcc -Wall' happy... */
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <netdb.h>
|
|
|
|
#include <sys/socket.h>
|
|
|
|
#include <netinet/in.h>
|
|
|
|
#include <arpa/inet.h>
|
2001-01-28 21:03:05 +00:00
|
|
|
#include <stdarg.h>
|
2000-04-13 09:19:23 +00:00
|
|
|
#include <sys/time.h>
|
|
|
|
#include <errno.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <signal.h>
|
2002-09-25 13:00:29 +00:00
|
|
|
#include <math.h>
|
2004-04-05 20:56:19 +00:00
|
|
|
#include <dlfcn.h>
|
2000-04-13 09:19:23 +00:00
|
|
|
|
2004-04-06 08:19:17 +00:00
|
|
|
/* popt library TODO: what if missing? */
|
|
|
|
#include <popt.h>
|
|
|
|
|
2000-11-04 12:36:37 +00:00
|
|
|
#ifdef OPENSSL
|
|
|
|
#include <openssl/crypto.h>
|
|
|
|
#include <openssl/x509.h>
|
|
|
|
#include <openssl/pem.h>
|
|
|
|
#include <openssl/ssl.h>
|
|
|
|
#include <openssl/err.h>
|
2001-02-14 10:08:48 +00:00
|
|
|
#include <openssl/rand.h>
|
2001-01-23 13:52:07 +00:00
|
|
|
#endif /* OpenSSL */
|
2000-11-04 12:36:37 +00:00
|
|
|
|
2003-11-05 12:14:01 +00:00
|
|
|
#ifdef GNUTLS
|
|
|
|
#include <gnutls/gnutls.h>
|
|
|
|
#endif
|
|
|
|
|
2004-02-18 14:59:03 +00:00
|
|
|
#ifdef LIBIDN
|
2003-12-25 20:04:25 +00:00
|
|
|
#include <stringprep.h> /* stringprep_locale_to_utf8() */
|
|
|
|
#include <idna.h> /* idna_to_ascii_from_utf8() */
|
|
|
|
#endif
|
|
|
|
|
2000-04-13 09:19:23 +00:00
|
|
|
#ifndef FALSE
|
|
|
|
#define FALSE 0
|
|
|
|
#endif
|
|
|
|
#ifndef TRUE
|
|
|
|
#define TRUE 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef SIGALRM /* Linux... */
|
|
|
|
#define SIGALRM 14 /* alarm clock timeout */
|
|
|
|
#endif
|
|
|
|
#ifndef SIGINT /* Linux... */
|
|
|
|
#define SIGINT 2 /* interrupt, generated from terminal special char */
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef INADDR_NONE /* SunOS */
|
|
|
|
#define INADDR_NONE (-1)
|
|
|
|
#endif
|
|
|
|
|
2001-03-02 20:47:47 +00:00
|
|
|
#ifndef SOL_IP
|
|
|
|
#define SOL_IP (getprotobyname("ip")->p_proto)
|
|
|
|
#endif
|
|
|
|
|
2000-04-13 09:19:23 +00:00
|
|
|
/* These entities should be in errno.h but some systems do not define
|
|
|
|
them. */
|
2000-04-17 11:36:29 +00:00
|
|
|
#ifdef DECL_SYS_NERR
|
|
|
|
extern int sys_nerr;
|
|
|
|
#endif
|
2000-04-13 09:19:23 +00:00
|
|
|
|
2000-04-17 13:49:40 +00:00
|
|
|
/* If we have it, use it */
|
|
|
|
#ifdef HAVE_SIGACTION
|
|
|
|
#define USE_SIGACTION 1
|
|
|
|
#endif
|
2000-04-17 14:31:25 +00:00
|
|
|
#ifdef HAVE_TTCP
|
|
|
|
#define USE_TTCP 1
|
|
|
|
#endif
|
2001-02-20 21:48:39 +00:00
|
|
|
#ifdef HAVE_TOS
|
|
|
|
#define USE_TOS 1
|
|
|
|
#endif
|
2001-03-02 20:47:47 +00:00
|
|
|
#ifdef HAVE_SOCKET_PRIORITY
|
|
|
|
#define USE_PRIORITY 1
|
|
|
|
#endif
|
2001-02-20 21:48:39 +00:00
|
|
|
|
2000-04-17 13:49:40 +00:00
|
|
|
|
2000-11-04 12:36:37 +00:00
|
|
|
#ifndef HEADER_INCLUDED
|
2001-01-25 15:25:13 +00:00
|
|
|
typedef union _CHANNEL
|
|
|
|
{
|
2000-11-04 12:36:37 +00:00
|
|
|
FILE *fs;
|
|
|
|
#ifdef OPENSSL
|
2001-01-25 15:25:13 +00:00
|
|
|
SSL *ssl;
|
2000-11-04 12:36:37 +00:00
|
|
|
#endif
|
2003-11-05 12:14:01 +00:00
|
|
|
#ifdef GNUTLS
|
|
|
|
gnutls_session tls;
|
|
|
|
#endif
|
2001-01-25 15:25:13 +00:00
|
|
|
}
|
|
|
|
CHANNEL;
|
2000-11-04 12:36:37 +00:00
|
|
|
|
2002-09-25 13:00:29 +00:00
|
|
|
struct result
|
|
|
|
{
|
|
|
|
unsigned short valid;
|
|
|
|
struct timeval timevalue;
|
|
|
|
};
|
2004-04-05 20:56:19 +00:00
|
|
|
|
|
|
|
unsigned short timeout_flag;
|
|
|
|
|
|
|
|
#ifndef IN_PLUGIN
|
|
|
|
/* The functions we will find in the plugin */
|
|
|
|
/* Initializes the plugin with its arguments. Returns the port name or number. */
|
|
|
|
typedef char * (*init_f) (const int argc, const char **argv);
|
|
|
|
init_f plugin_init;
|
|
|
|
typedef void (*start_f) (struct addrinfo *);
|
|
|
|
start_f plugin_start;
|
2004-04-06 20:30:06 +00:00
|
|
|
typedef int (*execute_f) ();
|
2004-04-05 20:56:19 +00:00
|
|
|
execute_f plugin_execute;
|
2004-04-06 20:30:06 +00:00
|
|
|
typedef void (*terminate_f) ();
|
|
|
|
terminate_f plugin_terminate;
|
2004-04-05 20:56:19 +00:00
|
|
|
#endif
|
|
|
|
|
2002-09-25 13:00:29 +00:00
|
|
|
#endif
|
2001-02-20 21:48:39 +00:00
|
|
|
|
2000-04-13 09:19:23 +00:00
|
|
|
struct timeval null_timeval;
|
|
|
|
struct timeval max_timeval;
|
|
|
|
|
|
|
|
#define ECHO_TCP_PORT "echo"
|
|
|
|
#define DISCARD_TCP_PORT "discard"
|
|
|
|
#define CHARACTER_GENERATOR_TCP_PORT "chargen"
|
2003-11-05 12:56:18 +00:00
|
|
|
#define DEFAULT_HTTP_TCP_PORT "http"
|
|
|
|
#define DEFAULT_HTTPS_TCP_PORT "https"
|
|
|
|
#define DEFAULT_ICP_UDP_PORT "icp"
|
2000-04-13 09:19:23 +00:00
|
|
|
|
2001-03-06 16:46:00 +00:00
|
|
|
#ifdef HTTP
|
|
|
|
/* Use the old HTTP 1.0 protocol? If yes, set HTTP10 to 1*/
|
|
|
|
#undef HTTP10
|
|
|
|
#endif
|
|
|
|
|
2000-04-13 09:19:23 +00:00
|
|
|
#define USE_ECHO 1
|
|
|
|
#define USE_DISCARD 2
|
|
|
|
#define USE_CHARGEN 3
|
|
|
|
#define USE_HTTP 4
|
|
|
|
#define USE_ICP 5
|
2000-09-27 05:38:29 +00:00
|
|
|
#define USE_SMTP 6
|
2000-04-13 09:19:23 +00:00
|
|
|
|
|
|
|
#define CHARGENERATED " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefg";
|
|
|
|
|
|
|
|
char *server;
|
2004-02-18 14:59:03 +00:00
|
|
|
#ifdef LIBIDN
|
2003-12-25 20:04:25 +00:00
|
|
|
char *locale_server, *ace_server, *utf8_server;
|
|
|
|
#endif
|
2000-04-13 09:19:23 +00:00
|
|
|
|
|
|
|
/* My functions */
|
|
|
|
|
|
|
|
/* error.c */
|
|
|
|
void usage ();
|
2001-01-28 21:03:05 +00:00
|
|
|
void err_sys (char *str, ...);
|
|
|
|
void err_ret (char *str, ...);
|
|
|
|
void err_quit (char *str, ...);
|
2000-04-13 09:19:23 +00:00
|
|
|
char *sys_err_str ();
|
|
|
|
/* writen.c */
|
|
|
|
int writen ();
|
|
|
|
/* readline.c */
|
|
|
|
int readline ();
|
2000-11-04 12:36:37 +00:00
|
|
|
#ifdef OPENSSL
|
|
|
|
int SSL_readline ();
|
|
|
|
#endif
|
2003-11-05 12:14:01 +00:00
|
|
|
#ifdef GNUTLS
|
|
|
|
int TLS_readline ();
|
|
|
|
#endif
|
2000-04-13 09:19:23 +00:00
|
|
|
/* util.c */
|
|
|
|
char *random_string ();
|
|
|
|
void tvsub ();
|
|
|
|
void tvadd ();
|
|
|
|
void tvavg ();
|
|
|
|
void tvmin ();
|
|
|
|
void tvmax ();
|
2002-09-25 13:00:29 +00:00
|
|
|
int tvcmp ();
|
|
|
|
void tvstddev ();
|
2000-04-13 09:19:23 +00:00
|
|
|
double tv2double ();
|
2002-09-25 13:00:29 +00:00
|
|
|
struct timeval double2tv ();
|
2000-04-13 09:19:23 +00:00
|
|
|
/* http.c */
|
|
|
|
#ifdef HTTP
|
|
|
|
char *make_http_sendline ();
|
|
|
|
void find_server_and_port ();
|
2000-11-04 12:36:37 +00:00
|
|
|
/* This one has prototypes, for a very subtile compiler issue. */
|
|
|
|
int read_from_server (CHANNEL fs, short ssl);
|
2000-04-13 09:19:23 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef ICP
|
|
|
|
#include "icp.h"
|
|
|
|
void *make_icp_sendline ();
|
|
|
|
int recv_icp ();
|
|
|
|
#ifndef HTTP
|
|
|
|
int read_from_server ();
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2000-09-27 05:38:29 +00:00
|
|
|
#ifdef SMTP
|
|
|
|
int smtp_read_response_from_server ();
|
|
|
|
#endif
|
2000-04-13 09:19:23 +00:00
|
|
|
|
|
|
|
extern char *progname;
|
|
|
|
|
|
|
|
extern unsigned short timeout_flag;
|
2000-11-04 12:36:37 +00:00
|
|
|
|
|
|
|
#ifndef HEADER_INCLUDED
|
|
|
|
#define HEADER_INCLUDED
|
|
|
|
#endif
|