Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postfix/src/global/   (Postfix Mailserver Version 3.11©)  Datei vom 27.11.2017 mit Größe 5 kB image not shown  

Quelle  scache.h

  Sprache: C
 

#ifndef _SCACHE_H_INCLUDED_
#define _SCACHE_H_INCLUDED_

/*++
/* NAME
/* scache 3h
/* SUMMARY
/* generic session cache API
/* SYNOPSIS
/* #include <scache.h>
/* DESCRIPTION
/* .nf

 /*
  * Utility library.
  */

#include <vstring.h>

typedef struct SCACHE SCACHE;
typedef struct SCACHE_SIZE SCACHE_SIZE;

 /*
  * In order to cache a session, we specify:
  * 
  * - TTL for this session.
  * 
  * - File descriptor.
  * 
  * - Transport name and physical endpoint. The transport name must be included,
  * because fall-back destinations can be transport-dependent, and routing
  * for a given destination may be context dependent.
  * 
  * In the case of SMTP, the physical endpoint is the numerical IP address and
  * TCP port.
  * 
  * - Application-specific endpoint properties.
  * 
  * In the case of SMTP, the properties specify the ESMTP features advertised by
  * the server.
  * 
  * Note: with message delivery transports that have only one endpoint per
  * logical destination, the above is the only information that needs to be
  * maintained in a connection cache.
  */

typedef void (*SCACHE_SAVE_ENDP_FN) (SCACHE *, intconst char *, const char *, int);
typedef int (*SCACHE_FIND_ENDP_FN) (SCACHE *, const char *, VSTRING *);

 /*
  * The following information is stored in order to make a binding from
  * logical destination to physical destination. One logical destination can
  * have multiple physical destinations (and one physical destination can
  * have multiple sessions).
  * 
  * - TTL for this binding.
  * 
  * - Transport name and logical destination.
  * 
  * In the case of SMTP: the next-hop (NOT: fall-back) destination domain and
  * destination network port. It is not useful to create a link for an
  * address literal (but it is not harmful either: it just wastes a few
  * bits). This information specifies the destination domain in [] if no MX
  * lookup is done.
  * 
  * - Application-specific properties.
  * 
  * In case the of SMTP, the properties specify a) whether a physical endpoint
  * is best mx host with respect to a logical or fall-back destination (this
  * information is needed by the loop detection code in smtp_proto.c).
  * 
  * - Transport name and physical endpoint (see above).
  * 
  * Note 1: there is no need to store the binding's MX preference or equivalent
  * with respect to the logical destination; a client should store only the
  * first successful session for a given delivery request (otherwise the
  * client would keep talking to a less preferred server after the cached
  * connection for a more preferred server expires). After a failed delivery,
  * the client should not attempt to cache follow-up sessions with less
  * preferred endpoints under the same logical destination.
  * 
  * Note 2: logical to physical bindings exist independently from cached
  * sessions. The two types of information have independent TTLs; creation
  * and destruction proceed independently. Thus, a logical to physical
  * binding can refer to an endpoint for which all cached connections are
  * occupied or expired.
  */

typedef void (*SCACHE_SAVE_DEST_FN) (SCACHE *, intconst char *, const char *, const char *);
typedef int (*SCACHE_FIND_DEST_FN) (SCACHE *, const char *, VSTRING *, VSTRING *);

 /*
  * Session cache statistics. These are the actual numbers at a specific
  * point in time.
  */

struct SCACHE_SIZE {
    int     dest_count;   /* Nr of destination names */
    int     endp_count;   /* Nr of endpoint addresses */
    int     sess_count;   /* Nr of cached sessions */
};

 /*
  * Generic session cache object. Actual session cache objects are derived
  * types with some additional, cache dependent, private information.
  */

struct SCACHE {
    SCACHE_SAVE_ENDP_FN save_endp;
    SCACHE_FIND_ENDP_FN find_endp;
    SCACHE_SAVE_DEST_FN save_dest;
    SCACHE_FIND_DEST_FN find_dest;
    void    (*size) (struct SCACHE *, SCACHE_SIZE *);
    void    (*free) (struct SCACHE *);
};

extern SCACHE *scache_single_create(void);
extern SCACHE *scache_clnt_create(const char *, intintint);
extern SCACHE *scache_multi_create(void);

#define scache_save_endp(scache, ttl, endp_label, endp_prop, fd) \
    (scache)->save_endp((scache), (ttl), (endp_label), (endp_prop), (fd))
#define scache_find_endp(scache, endp_label, endp_prop) \
    (scache)->find_endp((scache), (endp_label), (endp_prop))
#define scache_save_dest(scache, ttl, dest_label, dest_prop, endp_label) \
    (scache)->save_dest((scache), (ttl), (dest_label), (dest_prop), (endp_label))
#define scache_find_dest(scache, dest_label, dest_prop, endp_prop) \
    (scache)->find_dest((scache), (dest_label), (dest_prop), (endp_prop))
#define scache_size(scache, stats) (scache)->size((scache), (stats))
#define scache_free(scache) (scache)->free(scache)

 /*
  * Cache types.
  */

#define SCACHE_TYPE_SINGLE 1 /* single-instance cache */
#define SCACHE_TYPE_CLIENT 2 /* session cache client */
#define SCACHE_TYPE_MULTI 3 /* multi-instance cache */

 /*
  * Client-server protocol.
  */

#define SCACHE_REQ_FIND_ENDP "find_endp"
#define SCACHE_REQ_SAVE_ENDP "save_endp"
#define SCACHE_REQ_FIND_DEST "find_dest"
#define SCACHE_REQ_SAVE_DEST "save_dest"

 /*
  * Session cache server status codes.
  */

#define SCACHE_STAT_OK  0 /* request completed successfully */
#define SCACHE_STAT_BAD  1 /* malformed request */
#define SCACHE_STAT_FAIL 2 /* request completed unsuccessfully */

/* LICENSE
/* .ad
/* .fi
/* The Secure Mailer license must be distributed with this software.
/* AUTHOR(S)
/* Wietse Venema
/* IBM T.J. Watson Research
/* P.O. Box 704
/* Yorktown Heights, NY 10598, USA
/*
/* Wietse Venema
/* Google, Inc.
/* 111 8th Avenue
/* New York, NY 10011, USA
/*--*/


#endif

Messung V0.5 in Prozent
C=88 H=100 G=94

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.