NeoMutt  2021-02-05-89-gabe350
Teaching an old dog new tricks
DOXYGEN
mutt_socket.c File Reference
#include "config.h"
#include <stdio.h>
#include <string.h>
#include "email/lib.h"
#include "conn/lib.h"
#include "mutt_socket.h"
#include "hook.h"
#include "mutt_account.h"
+ Include dependency graph for mutt_socket.c:

Go to the source code of this file.

Functions

struct Connectionmutt_conn_new (const struct ConnAccount *cac)
 Create a new Connection. More...
 
struct Connectionmutt_conn_find (const struct ConnAccount *cac)
 Find a connection from a list. More...
 

Detailed Description

NeoMutt connections

Authors
  • Brendan Cully

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file mutt_socket.c.

Function Documentation

◆ mutt_conn_new()

struct Connection* mutt_conn_new ( const struct ConnAccount cac)

Create a new Connection.

Parameters
cacCredentials to use
Return values
ptrNew Connection

Definition at line 46 of file mutt_socket.c.

47 {
48  enum ConnectionType conn_type;
49 
50  if (C_Tunnel)
51  conn_type = MUTT_CONNECTION_TUNNEL;
52  else if (cac->flags & MUTT_ACCT_SSL)
53  conn_type = MUTT_CONNECTION_SSL;
54  else
55  conn_type = MUTT_CONNECTION_SIMPLE;
56 
57  struct Connection *conn = mutt_socket_new(conn_type);
58  if (conn)
59  {
60  memcpy(&conn->account, cac, sizeof(struct ConnAccount));
61  }
62  else
63  {
64  if (conn_type == MUTT_CONNECTION_SSL)
65  {
66 #ifndef USE_SSL
67  /* that's probably why it failed */
68  mutt_error(_("SSL is unavailable, can't connect to %s"), cac->host);
69 #endif
70  }
71  }
72  return conn;
73 }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mutt_conn_find()

struct Connection* mutt_conn_find ( const struct ConnAccount cac)

Find a connection from a list.

Parameters
cacConnAccount to match
Return values
ptrMatching Connection

find a connection off the list of connections whose account matches cac. If start is not null, only search for connections after the given connection (allows higher level socket code to make more fine-grained searches than account info - eg in IMAP we may wish to find a connection which is not in IMAP_SELECTED state)

Definition at line 86 of file mutt_socket.c.

87 {
88  struct Url url = { 0 };
89  char hook[1024];
90 
91  /* cac isn't actually modified, since url isn't either */
92  mutt_account_tourl((struct ConnAccount *) cac, &url);
93  url.path = NULL;
94  url_tostring(&url, hook, sizeof(hook), U_NO_FLAGS);
95  mutt_account_hook(hook);
96 
97  return mutt_conn_new(cac);
98 }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:
mutt_conn_new
struct Connection * mutt_conn_new(const struct ConnAccount *cac)
Create a new Connection.
Definition: mutt_socket.c:46
ConnAccount
Login details for a remote server.
Definition: connaccount.h:51
Connection
An open network connection (socket)
Definition: connection.h:34
ConnAccount::host
char host[128]
Server to login to.
Definition: connaccount.h:53
_
#define _(a)
Definition: message.h:28
MUTT_CONNECTION_SSL
@ MUTT_CONNECTION_SSL
SSL/TLS-encrypted connection.
Definition: socket.h:38
Connection::account
struct ConnAccount account
Account details: username, password, etc.
Definition: connection.h:36
MUTT_CONNECTION_TUNNEL
@ MUTT_CONNECTION_TUNNEL
Tunnelled connection.
Definition: socket.h:37
mutt_account_tourl
void mutt_account_tourl(struct ConnAccount *cac, struct Url *url)
Fill URL with info from account.
Definition: mutt_account.c:79
U_NO_FLAGS
#define U_NO_FLAGS
Definition: url.h:48
C_Tunnel
const char * C_Tunnel
Config: Shell command to establish a tunnel.
Definition: config.c:39
url_tostring
int url_tostring(struct Url *url, char *dest, size_t len, uint8_t flags)
Output the URL string for a given Url object.
Definition: url.c:418
mutt_account_hook
void mutt_account_hook(const char *url)
Perform an account hook.
Definition: hook.c:756
Url
A parsed URL proto://user:password@host:port/path?a=1&b=2
Definition: url.h:67
ConnAccount::flags
MuttAccountFlags flags
Which fields are initialised, e.g. MUTT_ACCT_USER.
Definition: connaccount.h:59
MUTT_ACCT_SSL
#define MUTT_ACCT_SSL
Account uses SSL/TLS.
Definition: connaccount.h:46
MUTT_CONNECTION_SIMPLE
@ MUTT_CONNECTION_SIMPLE
Simple TCP socket connection.
Definition: socket.h:36
mutt_socket_new
struct Connection * mutt_socket_new(enum ConnectionType type)
allocate and initialise a new connection
Definition: socket.c:279
Url::path
char * path
Path.
Definition: url.h:74
ConnectionType
ConnectionType
Type of connection.
Definition: socket.h:34
mutt_error
#define mutt_error(...)
Definition: logging.h:84