dockapps/wmbiff/wmbiff/tlsComm.h
Jeremy Sowden b055b12fa5 wmbiff: stop hiding pointers behind typedefs.
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
2019-07-14 17:35:21 +01:00

71 lines
2.3 KiB
C

/* tlsComm.h - interface for the thin layer that looks
sort of like fgets and fprintf, but might read or write
to a socket or a TLS association
Neil Spring (nspring@cs.washington.edu)
Comments in @'s are for lclint's benefit:
http://lclint.cs.virginia.edu/
*/
/* used to drill through per-mailbox debug keys */
#include <stdint.h>
#include "Client.h"
/* opaque reference to the state associated with a
connection: may be just a file handle, or may include
encryption state */
struct connection_state;
/* take a socket descriptor and negotiate a TLS connection
over it */
/*@only@*/
struct connection_state *initialize_gnutls(intptr_t sd,
/* @only@ */ char *name,
Pop3 *pc,
const char *hostname);
/* take a socket descriptor and bundle it into a connection
state structure for later communication */
/*@only@*/
struct connection_state *initialize_unencrypted(int sd, /*@only@ */
char *name, Pop3 * pc);
/* store a binding when connect() times out. these should be
skipped when trying to check mail so that other mailboxes
are checked responsively. I believe linux defaults to
around 90 seconds for a failed connect() attempt */
/* TODO: engineer an eventual retry scheme */
/*@only@*/
struct connection_state *initialize_blacklist( /*@only@ */ char *name);
int tlscomm_is_blacklisted(const struct connection_state *scs);
/* just like fprintf, only takes a connection state structure */
void tlscomm_printf(struct connection_state *scs, const char *format, ...);
/* modeled after fgets; may not work exactly the same */
int tlscomm_gets( /*@out@ */ char *buf,
int buflen, struct connection_state *scs);
/* gobbles lines until it finds one starting with {prefix},
which is returned in buf */
int tlscomm_expect(struct connection_state *scs, const char *prefix,
/*@out@ */ char *buf,
int buflen);
/* terminates the TLS association or just closes the socket,
and frees the connection state */
void tlscomm_close( /*@only@ */ struct connection_state *scs);
/* internal function exported for testing */
int getline_from_buffer(char *readbuffer, char *linebuffer,
int linebuflen);
#ifndef UNUSED
#ifdef HAVE___ATTRIBUTE__
#define UNUSED(x) /*@unused@*/ x __attribute__((unused))
#else
#define UNUSED(x) x
#endif
#endif