68 lines
2.2 KiB
C
68 lines
2.2 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 "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(int 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
|
||
|
|