/*
* listener.h:
* Objects representing addresses on which to listen.
*
* Copyright (c) 2001 Chris Lightfoot. All rights reserved.
*
* $Id: listener.h,v 1.7 2002/11/10 13:45:47 chris Exp $
*
*/
#ifndef __LISTENER_H_ /* include guard */
#define __LISTENER_H_
#include <sys/types.h>
#ifdef MASS_HOSTING
#include <regex.h>
#endif
#ifdef USE_TLS
#include <openssl/err.h>
#include <openssl/ssl.h>
enum tls_mode { none = 0, immediate, stls };
#endif
/* For virtual-domains support, we need to find the address and domain name
* associated with a socket on which we are listening. */
typedef struct _listener {
struct sockaddr_in sin;
char *domain;
#ifdef MASS_HOSTING
int have_re;
regex_t re;
char *regex; /* string form of RE */
#endif
#ifdef USE_TLS
struct {
enum tls_mode mode;
SSL_CTX *ctx;
} tls;
#endif
int s;
} *listener;
/* the arguments of the constructor vary according to the particular
* compile-time options. */
listener listener_new(const struct sockaddr_in *addr, const char *domain
#ifdef MASS_HOSTING
/* leading comma-- yuk */ , const char *regex
#endif
#ifdef USE_TLS
, enum tls_mode mode,
const char *certfile, const char *pkeyfile
#endif
);
#ifdef MASS_HOSTING
char *listener_obtain_domain(listener L, int s);
#endif
void listener_delete(listener L);
#endif /* __LISTENER_H_ */
syntax highlighted by Code2HTML, v. 0.9.1