pidgin/pidgin

Implement SNI support for the gnutls SSL plugin.
release-2.x.y
2019-12-16, Mihai Moldovan
6dba8046e1b1
Implement SNI support for the gnutls SSL plugin.

Note that gnutls is picky in regard to what it accepts as the server name - it
MUST be a domain name. IP addresses are not supported according to the
documentation.

Hence, filter out IP addresses and hope that whatever is not recognized as
such an address is actually a domain name. This will probably fail for more
exotic addresses (especially in IPv6 realm), but wiring up a full-blown parser
is too much effort and SSL plugins are not part of purple-3 anyway.

Fixes #17300
#ifndef __CRAZYCHAT_H__
#define __CRAZYCHAT_H__
#include <glib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <gtk/gtk.h>
#include "filter.h"
#include "purple.h"
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
struct crazychat;
/* --- type definitions --- */
typedef enum { INVITE = 0, ACCEPT, ACCEPTED, CONNECTED } CC_STATE;
/**
* Finds the CrazyChat session with the handle.
* @param cc global crazychat data structure
* @param handle the peer name
* @return the cc_session if found, or NULL
*/
struct cc_session *cc_find_session(struct crazychat *cc, char *handle);
/**
* Adds a new session with a peer, unless a peer session already exists.
* Makes a deep copy of the handle.
* @param cc global crazychat data structure
* @param handle the peer name
* @return the new/old cc_session
*/
struct cc_session *cc_add_session(struct crazychat *cc, char *handle);
/**
* Removes a crazychat session with a peer.
* @param cc global crazychat data structure
* @param session the cc_session to remove
*/
void cc_remove_session(struct crazychat *cc, struct cc_session *session);
#endif /* __CRAZYCHAT_H__ */