forked from enlightenment/efl
Added basic ssl-client support to Ecore_Con
SVN revision: 9535
This commit is contained in:
parent
7bd60e9cb0
commit
b3d3a59b95
|
@ -469,6 +469,23 @@ fi
|
||||||
AC_SUBST(ecore_con_cflags)
|
AC_SUBST(ecore_con_cflags)
|
||||||
AC_SUBST(ecore_con_libs)
|
AC_SUBST(ecore_con_libs)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(openssl,
|
||||||
|
[ --enable-openssl enable openssl support (default: autodetect)],
|
||||||
|
[use_openssl=$enableval], use_openssl=yes)
|
||||||
|
|
||||||
|
if test "x$use_openssl" = "xyes"; then
|
||||||
|
PKG_CHECK_MODULES(SSL, openssl, use_openssl=yes, use_openssl=no)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$use_openssl" = "xyes"; then
|
||||||
|
USE_OPENSSL=1
|
||||||
|
else
|
||||||
|
USE_OPENSSL=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(USE_OPENSSL)
|
||||||
|
AC_DEFINE_UNQUOTED(USE_OPENSSL, $USE_OPENSSL, [Use OpenSSL])
|
||||||
|
|
||||||
have_ecore_ipc="no";
|
have_ecore_ipc="no";
|
||||||
ecore_ipc_cflags="";
|
ecore_ipc_cflags="";
|
||||||
ecore_ipc_libs="";
|
ecore_ipc_libs="";
|
||||||
|
@ -617,6 +634,7 @@ src/lib/ecore_x/Makefile
|
||||||
src/lib/ecore_fb/Makefile
|
src/lib/ecore_fb/Makefile
|
||||||
src/lib/ecore_evas/Ecore_Evas.h
|
src/lib/ecore_evas/Ecore_Evas.h
|
||||||
src/lib/ecore_evas/Makefile
|
src/lib/ecore_evas/Makefile
|
||||||
|
src/lib/ecore_con/Ecore_Con.h
|
||||||
src/lib/ecore_con/Makefile
|
src/lib/ecore_con/Makefile
|
||||||
src/lib/ecore_ipc/Makefile
|
src/lib/ecore_ipc/Makefile
|
||||||
src/lib/ecore_txt/Makefile
|
src/lib/ecore_txt/Makefile
|
||||||
|
@ -633,7 +651,7 @@ echo
|
||||||
echo "Optional Modules:"
|
echo "Optional Modules:"
|
||||||
echo
|
echo
|
||||||
echo " Ecore_Job...............: $have_ecore_job"
|
echo " Ecore_Job...............: $have_ecore_job"
|
||||||
echo " Ecore_Con...............: $have_ecore_con"
|
echo " Ecore_Con...............: $have_ecore_con (OpenSSL: $use_openssl)"
|
||||||
echo " Ecore_Txt...............: $have_ecore_txt"
|
echo " Ecore_Txt...............: $have_ecore_txt"
|
||||||
echo " Ecore_X.................: $have_ecore_x"
|
echo " Ecore_X.................: $have_ecore_x"
|
||||||
echo " Ecore_FB................: $have_ecore_fb"
|
echo " Ecore_FB................: $have_ecore_fb"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
.deps
|
.deps
|
||||||
.libs
|
.libs
|
||||||
|
Ecore_Con.h
|
||||||
Makefile
|
Makefile
|
||||||
Makefile.in
|
Makefile.in
|
||||||
ecore_con.lo
|
ecore_con.lo
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
#ifndef _ECORE_CON_H
|
#ifndef _ECORE_CON_H
|
||||||
#define _ECORE_CON_H
|
#define _ECORE_CON_H
|
||||||
|
|
||||||
|
#define HAVE_ECORE_CON_OPENSSL @USE_OPENSSL@
|
||||||
|
|
||||||
|
#if HAVE_ECORE_CON_OPENSSL
|
||||||
|
#include <openssl/ssl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -11,9 +17,12 @@ extern "C" {
|
||||||
|
|
||||||
typedef enum _Ecore_Con_Type
|
typedef enum _Ecore_Con_Type
|
||||||
{
|
{
|
||||||
ECORE_CON_LOCAL_USER,
|
ECORE_CON_LOCAL_USER,
|
||||||
ECORE_CON_LOCAL_SYSTEM,
|
ECORE_CON_LOCAL_SYSTEM,
|
||||||
ECORE_CON_REMOTE_SYSTEM,
|
ECORE_CON_REMOTE_SYSTEM
|
||||||
|
#if HAVE_ECORE_CON_OPENSSL
|
||||||
|
,ECORE_CON_USE_SSL = 16
|
||||||
|
#endif
|
||||||
} Ecore_Con_Type;
|
} Ecore_Con_Type;
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -1,7 +1,7 @@
|
||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(top_srcdir)/src/lib/ecore
|
-I$(top_srcdir)/src/lib/ecore @SSL_CFLAGS@
|
||||||
|
|
||||||
libecore_con_la_LDFLAGS = -version-info 1:0:0 \
|
libecore_con_la_LDFLAGS = -version-info 1:0:0 \
|
||||||
-L$(top_builddir)/src/lib/ecore/.libs
|
-L$(top_builddir)/src/lib/ecore/.libs
|
||||||
|
@ -17,7 +17,7 @@ ecore_con.c \
|
||||||
ecore_con_private.h
|
ecore_con_private.h
|
||||||
|
|
||||||
libecore_con_la_LIBADD = \
|
libecore_con_la_LIBADD = \
|
||||||
$(top_builddir)/src/lib/ecore/libecore.la
|
$(top_builddir)/src/lib/ecore/libecore.la @SSL_LIBS@
|
||||||
|
|
||||||
libecore_con_la_DEPENDENCIES = \
|
libecore_con_la_DEPENDENCIES = \
|
||||||
$(top_builddir)/src/lib/ecore/libecore.la
|
$(top_builddir)/src/lib/ecore/libecore.la
|
||||||
|
@ -25,6 +25,6 @@ $(top_builddir)/src/lib/ecore/libecore.la
|
||||||
endif
|
endif
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
Ecore_Con.h \
|
Ecore_Con.h.in \
|
||||||
ecore_con.c \
|
ecore_con.c \
|
||||||
ecore_con_private.h
|
ecore_con_private.h
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "Ecore.h"
|
#include "Ecore.h"
|
||||||
|
#include "config.h"
|
||||||
#include "ecore_private.h"
|
#include "ecore_private.h"
|
||||||
#include "ecore_con_private.h"
|
#include "ecore_con_private.h"
|
||||||
#include "Ecore_Con.h"
|
#include "Ecore_Con.h"
|
||||||
|
@ -15,6 +16,10 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
|
||||||
|
#if USE_OPENSSL
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static void _ecore_con_server_free(Ecore_Con_Server *svr);
|
static void _ecore_con_server_free(Ecore_Con_Server *svr);
|
||||||
static void _ecore_con_client_free(Ecore_Con_Client *cl);
|
static void _ecore_con_client_free(Ecore_Con_Client *cl);
|
||||||
static int _ecore_con_svr_handler(void *data, Ecore_Fd_Handler *fd_handler);
|
static int _ecore_con_svr_handler(void *data, Ecore_Fd_Handler *fd_handler);
|
||||||
|
@ -58,6 +63,11 @@ ecore_con_init(void)
|
||||||
ECORE_CON_EVENT_SERVER_DEL = ecore_event_type_new();
|
ECORE_CON_EVENT_SERVER_DEL = ecore_event_type_new();
|
||||||
ECORE_CON_EVENT_CLIENT_DATA = ecore_event_type_new();
|
ECORE_CON_EVENT_CLIENT_DATA = ecore_event_type_new();
|
||||||
ECORE_CON_EVENT_SERVER_DATA = ecore_event_type_new();
|
ECORE_CON_EVENT_SERVER_DATA = ecore_event_type_new();
|
||||||
|
|
||||||
|
#if USE_OPENSSL
|
||||||
|
SSL_library_init();
|
||||||
|
SSL_load_error_strings();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return init_count;
|
return init_count;
|
||||||
}
|
}
|
||||||
|
@ -257,12 +267,13 @@ ecore_con_server_add(Ecore_Con_Type type,
|
||||||
* FIXME: To be fixed.
|
* FIXME: To be fixed.
|
||||||
*/
|
*/
|
||||||
Ecore_Con_Server *
|
Ecore_Con_Server *
|
||||||
ecore_con_server_connect(Ecore_Con_Type type,
|
ecore_con_server_connect(Ecore_Con_Type compl_type,
|
||||||
char *name,
|
char *name,
|
||||||
int port,
|
int port,
|
||||||
const void *data)
|
const void *data)
|
||||||
{
|
{
|
||||||
Ecore_Con_Server *svr;
|
Ecore_Con_Server *svr;
|
||||||
|
Ecore_Con_Type type = compl_type & ~ECORE_CON_USE_SSL;
|
||||||
struct sockaddr_un socket_unix;
|
struct sockaddr_un socket_unix;
|
||||||
struct sockaddr_in socket_addr;
|
struct sockaddr_in socket_addr;
|
||||||
int curstate = 0;
|
int curstate = 0;
|
||||||
|
@ -353,9 +364,22 @@ ecore_con_server_connect(Ecore_Con_Type type,
|
||||||
ECORE_FD_READ,
|
ECORE_FD_READ,
|
||||||
_ecore_con_cl_handler, svr,
|
_ecore_con_cl_handler, svr,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
|
|
||||||
if (!svr->fd_handler) goto error;
|
if (!svr->fd_handler) goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if USE_OPENSSL
|
||||||
|
if (compl_type & ECORE_CON_USE_SSL)
|
||||||
|
{
|
||||||
|
if (!(svr->ssl_ctx = SSL_CTX_new(SSLv3_client_method())))
|
||||||
|
goto error;
|
||||||
|
if (!(svr->ssl = SSL_new(svr->ssl_ctx)))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
SSL_set_fd(svr->ssl, svr->fd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
svr->name = strdup(name);
|
svr->name = strdup(name);
|
||||||
if (!svr->name) goto error;
|
if (!svr->name) goto error;
|
||||||
svr->type = type;
|
svr->type = type;
|
||||||
|
@ -371,6 +395,10 @@ ecore_con_server_connect(Ecore_Con_Type type,
|
||||||
if (svr->path) free(svr->path);
|
if (svr->path) free(svr->path);
|
||||||
if (svr->fd >= 0) close(svr->fd);
|
if (svr->fd >= 0) close(svr->fd);
|
||||||
if (svr->fd_handler) ecore_main_fd_handler_del(svr->fd_handler);
|
if (svr->fd_handler) ecore_main_fd_handler_del(svr->fd_handler);
|
||||||
|
#if USE_OPENSSL
|
||||||
|
if (svr->ssl_ctx) SSL_CTX_free(svr->ssl_ctx);
|
||||||
|
if (svr->ssl) SSL_free(svr->ssl);
|
||||||
|
#endif
|
||||||
free(svr);
|
free(svr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -592,6 +620,11 @@ _ecore_con_server_free(Ecore_Con_Server *svr)
|
||||||
_ecore_con_client_free((Ecore_Con_Client *)svr->clients);
|
_ecore_con_client_free((Ecore_Con_Client *)svr->clients);
|
||||||
if ((svr->created) && (svr->path)) unlink(svr->path);
|
if ((svr->created) && (svr->path)) unlink(svr->path);
|
||||||
if (svr->fd >= 0) close(svr->fd);
|
if (svr->fd >= 0) close(svr->fd);
|
||||||
|
#if USE_OPENSSL
|
||||||
|
if (svr->ssl) SSL_set_shutdown(svr->ssl, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
|
||||||
|
if (svr->ssl) SSL_free(svr->ssl);
|
||||||
|
if (svr->ssl_ctx) SSL_CTX_free(svr->ssl_ctx);
|
||||||
|
#endif
|
||||||
if (svr->name) free(svr->name);
|
if (svr->name) free(svr->name);
|
||||||
if (svr->path) free(svr->path);
|
if (svr->path) free(svr->path);
|
||||||
if (svr->fd_handler) ecore_main_fd_handler_del(svr->fd_handler);
|
if (svr->fd_handler) ecore_main_fd_handler_del(svr->fd_handler);
|
||||||
|
@ -674,8 +707,14 @@ _ecore_con_cl_handler(void *data, Ecore_Fd_Handler *fd_handler)
|
||||||
{
|
{
|
||||||
char buf[65536];
|
char buf[65536];
|
||||||
int num;
|
int num;
|
||||||
|
#if USE_OPENSSL
|
||||||
num = read(svr->fd, buf, 65536);
|
if (!svr->ssl)
|
||||||
|
#endif
|
||||||
|
num = read(svr->fd, buf, 65536);
|
||||||
|
#ifdef USE_OPENSSL
|
||||||
|
else
|
||||||
|
num = SSL_read(svr->ssl, buf, 65536);
|
||||||
|
#endif
|
||||||
if (num < 1)
|
if (num < 1)
|
||||||
{
|
{
|
||||||
if (inbuf)
|
if (inbuf)
|
||||||
|
@ -726,7 +765,15 @@ _ecore_con_cl_handler(void *data, Ecore_Fd_Handler *fd_handler)
|
||||||
{
|
{
|
||||||
int so_err;
|
int so_err;
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
|
#if USE_OPENSSL
|
||||||
|
struct timespec t = {0, 250000000L};
|
||||||
|
|
||||||
|
if (svr->ssl)
|
||||||
|
while (SSL_connect(svr->ssl) == -1)
|
||||||
|
nanosleep(&t, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
svr->connecting = 0;
|
svr->connecting = 0;
|
||||||
so_err = 0;
|
so_err = 0;
|
||||||
size = sizeof(int);
|
size = sizeof(int);
|
||||||
|
@ -847,7 +894,16 @@ _ecore_con_server_flush(Ecore_Con_Server *svr)
|
||||||
|
|
||||||
if (!svr->buf) return;
|
if (!svr->buf) return;
|
||||||
num = svr->buf_size - svr->buf_offset;
|
num = svr->buf_size - svr->buf_offset;
|
||||||
count = write(svr->fd, svr->buf + svr->buf_offset, num);
|
|
||||||
|
#if USE_OPENSSL
|
||||||
|
if (!svr->ssl)
|
||||||
|
#endif
|
||||||
|
count = write(svr->fd, svr->buf + svr->buf_offset, num);
|
||||||
|
#if USE_OPENSSL
|
||||||
|
else
|
||||||
|
count = SSL_write(svr->ssl, svr->buf + svr->buf_offset, num);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (count < 1)
|
if (count < 1)
|
||||||
{
|
{
|
||||||
if ((errno == EIO) || (errno == EBADF) || (errno == EPIPE) ||
|
if ((errno == EIO) || (errno == EBADF) || (errno == EPIPE) ||
|
||||||
|
|
|
@ -4,14 +4,21 @@
|
||||||
#define ECORE_MAGIC_CON_SERVER 0x77665544
|
#define ECORE_MAGIC_CON_SERVER 0x77665544
|
||||||
#define ECORE_MAGIC_CON_CLIENT 0x77556677
|
#define ECORE_MAGIC_CON_CLIENT 0x77556677
|
||||||
|
|
||||||
|
#if USE_OPENSSL
|
||||||
|
#include <openssl/ssl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct _Ecore_Con_Client Ecore_Con_Client;
|
typedef struct _Ecore_Con_Client Ecore_Con_Client;
|
||||||
typedef struct _Ecore_Con_Server Ecore_Con_Server;
|
typedef struct _Ecore_Con_Server Ecore_Con_Server;
|
||||||
|
|
||||||
typedef enum _Ecore_Con_Type
|
typedef enum _Ecore_Con_Type
|
||||||
{
|
{
|
||||||
ECORE_CON_LOCAL_USER,
|
ECORE_CON_LOCAL_USER,
|
||||||
ECORE_CON_LOCAL_SYSTEM,
|
ECORE_CON_LOCAL_SYSTEM,
|
||||||
ECORE_CON_REMOTE_SYSTEM,
|
ECORE_CON_REMOTE_SYSTEM
|
||||||
|
#if USE_OPENSSL
|
||||||
|
,ECORE_CON_USE_SSL = 16
|
||||||
|
#endif
|
||||||
} Ecore_Con_Type;
|
} Ecore_Con_Type;
|
||||||
|
|
||||||
struct _Ecore_Con_Client
|
struct _Ecore_Con_Client
|
||||||
|
@ -46,6 +53,10 @@ struct _Ecore_Con_Server
|
||||||
char dead : 1;
|
char dead : 1;
|
||||||
char created : 1;
|
char created : 1;
|
||||||
char connecting : 1;
|
char connecting : 1;
|
||||||
|
#if USE_OPENSSL
|
||||||
|
SSL_CTX *ssl_ctx;
|
||||||
|
SSL *ssl;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue