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 1043 of file gnutls.c.
1044{
1046 if (!data)
1047 {
1049 return -1;
1050 }
1051
1052 int rc;
1053 do
1054 {
1055 rc = gnutls_record_recv(data->
state, buf, count);
1056 } while ((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED));
1057
1058 if (rc < 0)
1059 {
1060 mutt_error(
"tls_socket_read (%s)", gnutls_strerror(rc));
1061 return -1;
1062 }
1063
1064 return rc;
1065}
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 1326 of file openssl.c.
1327{
1328 struct SslSockData *data =
sockdata(conn);
1329 int rc;
1330
1331 rc = SSL_read(data->ssl, buf, count);
1332 if ((rc <= 0) || (errno == EINTR))
1333 {
1334 if (errno == EINTR)
1335 {
1336 rc = -1;
1337 }
1338 data->isopen = 0;
1340 }
1341
1342 return rc;
1343}
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 264 of file raw.c.
265{
266 int rc;
267
269 do
270 {
271 rc = read(conn->
fd, buf, count);
272 } while (rc < 0 && (errno == EINTR));
273
274 if (rc < 0)
275 {
278 }
280
282 {
285 rc = -1;
286 }
287
288 return rc;
289}
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 463 of file sasl.c.
464{
465 int rc;
466 unsigned int olen;
467
469
470
471 if (sasldata->
blen > sasldata->
bpos)
472 {
473 olen = ((sasldata->
blen - sasldata->
bpos) > count) ?
474 count :
476
477 memcpy(
buf, sasldata->
buf + sasldata->
bpos, olen);
478 sasldata->
bpos += olen;
479
480 return olen;
481 }
482
484
487
488
489 if (*sasldata->
ssf != 0)
490 {
491 do
492 {
493
494 rc = sasldata->
read(conn,
buf, count);
495 if (rc <= 0)
496 goto out;
497
499 if (rc != SASL_OK)
500 {
502 goto out;
503 }
504 }
while (sasldata->
blen == 0);
505
506 olen = ((sasldata->
blen - sasldata->
bpos) > count) ?
507 count :
509
510 memcpy(
buf, sasldata->
buf, olen);
511 sasldata->
bpos += olen;
512
513 rc = olen;
514 }
515 else
516 rc = sasldata->
read(conn,
buf, count);
517
518out:
520
521 return rc;
522}
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 137 of file tunnel.c.
138{
140 int rc;
141
142 do
143 {
144 rc = read(tunnel->
fd_read, buf, count);
145 } while (rc < 0 && errno == EINTR);
146
147 if (rc < 0)
148 {
150 return -1;
151 }
152
153 return rc;
154}
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) |