where standard open/close/read/write functions are implemented with macros.
Thanks to Aaron Crane and others for their input about the problem.
/*
- * Copyright (C) 2000-3 Brendan Cully <brendan@kublai.com>
+ * Copyright (C) 2000-5 Brendan Cully <brendan@kublai.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/* preserve old functions */
sasldata->sockdata = conn->sockdata;
- sasldata->open = conn->open;
- sasldata->close = conn->close;
- sasldata->read = conn->read;
- sasldata->write = conn->write;
+ sasldata->msasl_open = conn->conn_open;
+ sasldata->msasl_close = conn->conn_close;
+ sasldata->msasl_read = conn->conn_read;
+ sasldata->msasl_write = conn->conn_write;
/* and set up new functions */
conn->sockdata = sasldata;
- conn->open = mutt_sasl_conn_open;
- conn->close = mutt_sasl_conn_close;
- conn->read = mutt_sasl_conn_read;
- conn->write = mutt_sasl_conn_write;
+ conn->conn_open = mutt_sasl_conn_open;
+ conn->conn_close = mutt_sasl_conn_close;
+ conn->conn_read = mutt_sasl_conn_read;
+ conn->conn_write = mutt_sasl_conn_write;
}
/* mutt_sasl_cb_log: callback to log SASL messages */
sasldata = (SASL_DATA*) conn->sockdata;
conn->sockdata = sasldata->sockdata;
- rc = (sasldata->open) (conn);
+ rc = (sasldata->msasl_open) (conn);
conn->sockdata = sasldata;
return rc;
/* restore connection's underlying methods */
conn->sockdata = sasldata->sockdata;
- conn->open = sasldata->open;
- conn->close = sasldata->close;
- conn->read = sasldata->read;
- conn->write = sasldata->write;
+ conn->conn_open = sasldata->msasl_open;
+ conn->conn_close = sasldata->msasl_close;
+ conn->conn_read = sasldata->msasl_read;
+ conn->conn_write = sasldata->msasl_write;
/* release sasl resources */
sasl_dispose (&sasldata->saslconn);
FREE (&sasldata);
/* call underlying close */
- rc = (conn->close) (conn);
+ rc = (conn->conn_close) (conn);
return rc;
}
do
{
/* call the underlying read function to fill the buffer */
- rc = (sasldata->read) (conn, buf, len);
+ rc = (sasldata->msasl_read) (conn, buf, len);
if (rc <= 0)
goto out;
rc = olen;
}
else
- rc = (sasldata->read) (conn, buf, len);
+ rc = (sasldata->msasl_read) (conn, buf, len);
out:
conn->sockdata = sasldata;
goto fail;
}
- rc = (sasldata->write) (conn, pbuf, plen);
+ rc = (sasldata->msasl_write) (conn, pbuf, plen);
#ifndef USE_SASL2
FREE (&pbuf);
#endif
}
else
/* just write using the underlying socket function */
- rc = (sasldata->write) (conn, buf, len);
+ rc = (sasldata->msasl_write) (conn, buf, len);
conn->sockdata = sasldata;
/*
- * Copyright (C) 2000-1 Brendan Cully <brendan@kublai.com>
+ * Copyright (C) 2000-5 Brendan Cully <brendan@kublai.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/* underlying socket data */
void* sockdata;
- int (*open) (CONNECTION* conn);
- int (*close) (CONNECTION* conn);
- int (*read) (CONNECTION* conn, char* buf, size_t len);
- int (*write) (CONNECTION* conn, const char* buf, size_t count);
+ int (*msasl_open) (CONNECTION* conn);
+ int (*msasl_close) (CONNECTION* conn);
+ int (*msasl_read) (CONNECTION* conn, char* buf, size_t len);
+ int (*msasl_write) (CONNECTION* conn, const char* buf, size_t count);
}
SASL_DATA;
/*
* Copyright (C) 1998 Michael R. Elkins <me@mutt.org>
- * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>
+ * Copyright (C) 1999-2005 Brendan Cully <brendan@kublai.com>
* Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>
*
* This program is free software; you can redistribute it and/or modify
if (socket_preconnect ())
return -1;
- return conn->open (conn);
+ return conn->conn_open (conn);
}
int mutt_socket_close (CONNECTION* conn)
if (conn->fd < 0)
dprint (1, (debugfile, "mutt_socket_close: Attempt to close closed connection.\n"));
else
- rc = conn->close (conn);
+ rc = conn->conn_close (conn);
conn->fd = -1;
conn->ssf = 0;
return -1;
}
- rc = conn->read (conn, buf, len);
+ rc = conn->conn_read (conn, buf, len);
/* EOF */
if (rc == 0)
{
}
len = mutt_strlen (buf);
- if ((rc = conn->write (conn, buf, len)) < 0)
+ if ((rc = conn->conn_write (conn, buf, len)) < 0)
{
dprint (1, (debugfile,
"mutt_socket_write: error writing, closing socket\n"));
if (conn->bufpos >= conn->available)
{
if (conn->fd >= 0)
- conn->available = conn->read (conn, conn->inbuf, sizeof (conn->inbuf));
+ conn->available = conn->conn_read (conn, conn->inbuf, sizeof (conn->inbuf));
else
{
dprint (1, (debugfile, "mutt_socket_readchar: attempt to read from closed connection.\n"));
}
else
{
- conn->read = raw_socket_read;
- conn->write = raw_socket_write;
- conn->open = raw_socket_open;
- conn->close = raw_socket_close;
+ conn->conn_read = raw_socket_read;
+ conn->conn_write = raw_socket_write;
+ conn->conn_open = raw_socket_open;
+ conn->conn_close = raw_socket_close;
}
return conn;
/*
* Copyright (C) 1998 Brandon Long <blong@fiction.net>
- * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>
+ * Copyright (C) 1999-2005 Brendan Cully <brendan@kublai.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
struct _connection *next;
void *sockdata;
- int (*read) (struct _connection* conn, char* buf, size_t len);
- int (*write) (struct _connection *conn, const char *buf, size_t count);
- int (*open) (struct _connection *conn);
- int (*close) (struct _connection *conn);
+ int (*conn_read) (struct _connection* conn, char* buf, size_t len);
+ int (*conn_write) (struct _connection *conn, const char *buf, size_t count);
+ int (*conn_open) (struct _connection *conn);
+ int (*conn_close) (struct _connection *conn);
} CONNECTION;
int mutt_socket_open (CONNECTION* conn);
/* hmm. watch out if we're starting TLS over any method other than raw. */
conn->sockdata = ssldata;
- conn->read = ssl_socket_read;
- conn->write = ssl_socket_write;
- conn->close = tls_close;
+ conn->conn_read = ssl_socket_read;
+ conn->conn_write = ssl_socket_write;
+ conn->conn_close = tls_close;
conn->ssf = SSL_CIPHER_get_bits (SSL_get_current_cipher (ssldata->ssl),
&maxbits);
{
if (ssl_init() < 0)
{
- conn->open = ssl_socket_open_err;
+ conn->conn_open = ssl_socket_open_err;
return -1;
}
- conn->open = ssl_socket_open;
- conn->read = ssl_socket_read;
- conn->write = ssl_socket_write;
- conn->close = ssl_socket_close;
+ conn->conn_open = ssl_socket_open;
+ conn->conn_read = ssl_socket_read;
+ conn->conn_write = ssl_socket_write;
+ conn->conn_close = ssl_socket_close;
return 0;
}
int rc;
rc = ssl_socket_close (conn);
- conn->read = raw_socket_read;
- conn->write = raw_socket_write;
- conn->close = raw_socket_close;
+ conn->conn_read = raw_socket_read;
+ conn->conn_write = raw_socket_write;
+ conn->conn_close = raw_socket_close;
return rc;
}
if (tls_init() < 0)
return -1;
- conn->open = tls_socket_open;
- conn->read = tls_socket_read;
- conn->write = tls_socket_write;
- conn->close = tls_socket_close;
+ conn->conn_open = tls_socket_open;
+ conn->conn_read = tls_socket_read;
+ conn->conn_write = tls_socket_write;
+ conn->conn_close = tls_socket_close;
return 0;
}
if (tls_negotiate (conn) < 0)
return -1;
- conn->read = tls_socket_read;
- conn->write = tls_socket_write;
- conn->close = tls_starttls_close;
+ conn->conn_read = tls_socket_read;
+ conn->conn_write = tls_socket_write;
+ conn->conn_close = tls_starttls_close;
return 0;
}
int rc;
rc = tls_socket_close (conn);
- conn->read = raw_socket_read;
- conn->write = raw_socket_write;
- conn->close = raw_socket_close;
+ conn->conn_read = raw_socket_read;
+ conn->conn_write = raw_socket_write;
+ conn->conn_close = raw_socket_close;
return rc;
}
{
if (mutt_nss_init ())
return -1;
- con->open = mutt_nss_socket_open;
- con->read = mutt_nss_socket_read;
- con->write = mutt_nss_socket_write;
- con->close = mutt_nss_socket_close;
+ con->conn_open = mutt_nss_socket_open;
+ con->conn_read = mutt_nss_socket_read;
+ con->conn_write = mutt_nss_socket_write;
+ con->conn_close = mutt_nss_socket_close;
return 0;
}
/* -- public functions -- */
int mutt_tunnel_socket_setup (CONNECTION *conn)
{
- conn->open = tunnel_socket_open;
- conn->close = tunnel_socket_close;
- conn->read = tunnel_socket_read;
- conn->write = tunnel_socket_write;
+ conn->conn_open = tunnel_socket_open;
+ conn->conn_close = tunnel_socket_close;
+ conn->conn_read = tunnel_socket_read;
+ conn->conn_write = tunnel_socket_write;
return 0;
}