Read from a socket Connection.
More...
|
static int | tls_socket_read (struct Connection *conn, char *buf, size_t count) |
| Read data from a TLS socket - Implements Connection::read() -. More...
|
|
static int | ssl_socket_read (struct Connection *conn, char *buf, size_t count) |
| Read data from an SSL socket - Implements Connection::read() -. More...
|
|
int | raw_socket_read (struct Connection *conn, char *buf, size_t count) |
| Read data from a socket - Implements Connection::read() -. More...
|
|
static int | mutt_sasl_conn_read (struct Connection *conn, char *buf, size_t count) |
| Read data from an SASL connection - Implements Connection::read() -. More...
|
|
static int | tunnel_socket_read (struct Connection *conn, char *buf, size_t count) |
| Read data from a tunnel socket - Implements Connection::read() -. More...
|
|
static int | zstrm_read (struct Connection *conn, char *buf, size_t len) |
| Read compressed data from a socket - Implements Connection::read() -. More...
|
|
Read from a socket Connection.
- Parameters
-
conn | Connection to a server |
buf | Buffer to store the data |
count | Number of bytes to read |
- Return values
-
>0 | Success, number of bytes read |
-1 | Error, see errno |
◆ tls_socket_read()
static int tls_socket_read |
( |
struct Connection * |
conn, |
|
|
char * |
buf, |
|
|
size_t |
count |
|
) |
| |
|
static |
Read data from a TLS socket - Implements Connection::read() -.
Definition at line 1040 of file gnutls.c.
1041{
1043 if (!data)
1044 {
1046 return -1;
1047 }
1048
1049 int rc;
1050 do
1051 {
1052 rc = gnutls_record_recv(data->
session, buf, count);
1053 } while ((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED));
1054
1055 if (rc < 0)
1056 {
1057 mutt_error(
"tls_socket_read (%s)", gnutls_strerror(rc));
1058 return -1;
1059 }
1060
1061 return rc;
1062}
void * sockdata
Backend-specific socket data.
◆ ssl_socket_read()
static int ssl_socket_read |
( |
struct Connection * |
conn, |
|
|
char * |
buf, |
|
|
size_t |
count |
|
) |
| |
|
static |
Read data from an SSL socket - Implements Connection::read() -.
Definition at line 1325 of file openssl.c.
1326{
1327 struct SslSockData *data =
sockdata(conn);
1328 int rc;
1329
1330 rc = SSL_read(data->ssl, buf, count);
1331 if ((rc <= 0) || (errno == EINTR))
1332 {
1333 if (errno == EINTR)
1334 {
1335 rc = -1;
1336 }
1337 data->isopen = 0;
1339 }
1340
1341 return rc;
1342}
static struct SslSockData * sockdata(struct Connection *conn)
Get a Connection's socket data.
static void ssl_err(struct SslSockData *data, int err)
Display an SSL error message.
◆ raw_socket_read()
int raw_socket_read |
( |
struct Connection * |
conn, |
|
|
char * |
buf, |
|
|
size_t |
count |
|
) |
| |
Read data from a socket - Implements Connection::read() -.
Definition at line 280 of file raw.c.
281{
282 int rc;
283
285 do
286 {
287 rc = read(conn->
fd, buf, count);
288 } while (rc < 0 && (errno == EINTR));
289
290 if (rc < 0)
291 {
294 }
296
298 {
301 rc = -1;
302 }
303
304 return rc;
305}
SIG_ATOMIC_VOLATILE_T SigInt
true after SIGINT is received
void mutt_sig_allow_interrupt(bool allow)
Allow/disallow Ctrl-C (SIGINT)
char host[128]
Server to login to.
struct ConnAccount account
Account details: username, password, etc.
int fd
Socket file descriptor.
◆ mutt_sasl_conn_read()
static int mutt_sasl_conn_read |
( |
struct Connection * |
conn, |
|
|
char * |
buf, |
|
|
size_t |
count |
|
) |
| |
|
static |
Read data from an SASL connection - Implements Connection::read() -.
Definition at line 465 of file sasl.c.
466{
467 int rc;
468 unsigned int olen;
469
471
472
473 if (sasldata->
blen > sasldata->
bpos)
474 {
475 olen = ((sasldata->
blen - sasldata->
bpos) > count) ?
476 count :
478
479 memcpy(
buf, sasldata->
buf + sasldata->
bpos, olen);
480 sasldata->
bpos += olen;
481
482 return olen;
483 }
484
486
489
490
491 if (*sasldata->
ssf != 0)
492 {
493 do
494 {
495
496 rc = sasldata->
read(conn,
buf, count);
497 if (rc <= 0)
498 goto out;
499
501 if (rc != SASL_OK)
502 {
504 goto out;
505 }
506 }
while (sasldata->
blen == 0);
507
508 olen = ((sasldata->
blen - sasldata->
bpos) > count) ?
509 count :
511
512 memcpy(
buf, sasldata->
buf, olen);
513 sasldata->
bpos += olen;
514
515 rc = olen;
516 }
517 else
518 {
519 rc = sasldata->
read(conn,
buf, count);
520 }
521
522out:
524
525 return rc;
526}
int(* read)(struct Connection *conn, char *buf, size_t count)
Read from a socket Connection - Implements Connection::read() -.
#define mutt_debug(LEVEL,...)
@ LL_DEBUG1
Log at debug level 1.
SASL authentication API -.
void * sockdata
Underlying socket data.
unsigned int blen
Size of the read buffer.
unsigned int bpos
Current read position.
const char * buf
Buffer for data read from the connection.
◆ tunnel_socket_read()
static int tunnel_socket_read |
( |
struct Connection * |
conn, |
|
|
char * |
buf, |
|
|
size_t |
count |
|
) |
| |
|
static |
Read data from a tunnel socket - Implements Connection::read() -.
Definition at line 144 of file tunnel.c.
145{
147 int rc;
148
149 do
150 {
151 rc = read(tunnel->
fd_read, buf, count);
152 } while (rc < 0 && errno == EINTR);
153
154 if (rc < 0)
155 {
157 return -1;
158 }
159
160 return rc;
161}
A network tunnel (pair of sockets)
int fd_read
File descriptor to read from.
◆ zstrm_read()
static int zstrm_read |
( |
struct Connection * |
conn, |
|
|
char * |
buf, |
|
|
size_t |
len |
|
) |
| |
|
static |
Read compressed data from a socket - Implements Connection::read() -.
Definition at line 129 of file zstrm.c.
130{
132 int rc = 0;
133 int zrc = 0;
134
135retry:
137 return 0;
138
139
140
141
143 {
146 if (rc < 0)
147 return rc;
148 else if (rc == 0)
150 else
152 }
153
156 zctx->
read.
z.avail_out = (uInt) len;
157 zctx->
read.
z.next_out = (Bytef *) buf;
158
159 zrc = inflate(&zctx->
read.
z, Z_SYNC_FLUSH);
162 len - zctx->
read.
z.avail_out, len);
163
164
166 {
169 }
170
171 switch (zrc)
172 {
173 case Z_OK:
174 zrc = len - zctx->
read.
z.avail_out;
175 if (zrc == 0)
176 {
177
179 goto retry;
180 }
181 break;
182
183 case Z_STREAM_END:
185 zrc = len - zctx->
read.
z.avail_out;
187 break;
188
189 case Z_BUF_ERROR:
191 {
193 goto retry;
194 }
195 zrc = 0;
196 break;
197
198 default:
199
201 zrc = -1;
202 break;
203 }
204
205 return zrc;
206}
@ LL_DEBUG5
Log at debug level 5.
int(* read)(struct Connection *conn, char *buf, size_t count)
struct ZstrmDirection read
Data being read and de-compressed.
struct Connection next_conn
Underlying stream.
unsigned int pos
Current position.
bool conn_eof
Connection end-of-file reached.
unsigned int len
Length of data.
z_stream z
zlib compression handle
char * buf
Buffer for data being (de-)compressed.
bool stream_eof
Stream end-of-file reached.
◆ read
int(* SaslSockData::read) (struct Connection *conn, char *buf, size_t count) |