forked from enlightenment/efl
reformat ecore_con so I can read it...
This commit is contained in:
parent
2bcfc800c9
commit
41fe698fc2
|
@ -105,7 +105,7 @@ static void _ecore_con_event_client_write_free(Ecore_Con_Server *svr,
|
||||||
static void _ecore_con_lookup_done(void *data,
|
static void _ecore_con_lookup_done(void *data,
|
||||||
Ecore_Con_Info *infos);
|
Ecore_Con_Info *infos);
|
||||||
|
|
||||||
static const char * _ecore_con_pretty_ip(struct sockaddr *client_addr);
|
static const char *_ecore_con_pretty_ip(struct sockaddr *client_addr);
|
||||||
|
|
||||||
#ifdef HAVE_SYSTEMD
|
#ifdef HAVE_SYSTEMD
|
||||||
int sd_fd_index = 0;
|
int sd_fd_index = 0;
|
||||||
|
@ -146,12 +146,12 @@ _ecore_con_server_kill(Ecore_Con_Server *svr)
|
||||||
#define _ecore_con_server_kill(svr) do { \
|
#define _ecore_con_server_kill(svr) do { \
|
||||||
DBG("KILL %p", (svr)); \
|
DBG("KILL %p", (svr)); \
|
||||||
_ecore_con_server_kill((svr)); \
|
_ecore_con_server_kill((svr)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define _ecore_con_client_kill(cl) do { \
|
#define _ecore_con_client_kill(cl) do { \
|
||||||
DBG("KILL %p", (cl)); \
|
DBG("KILL %p", (cl)); \
|
||||||
_ecore_con_client_kill((cl)); \
|
_ecore_con_client_kill((cl)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
EAPI int ECORE_CON_EVENT_CLIENT_ADD = 0;
|
EAPI int ECORE_CON_EVENT_CLIENT_ADD = 0;
|
||||||
EAPI int ECORE_CON_EVENT_CLIENT_DEL = 0;
|
EAPI int ECORE_CON_EVENT_CLIENT_DEL = 0;
|
||||||
|
@ -209,7 +209,6 @@ ecore_con_init(void)
|
||||||
ECORE_CON_EVENT_SERVER_ERROR = ecore_event_type_new();
|
ECORE_CON_EVENT_SERVER_ERROR = ecore_event_type_new();
|
||||||
ECORE_CON_EVENT_PROXY_BIND = ecore_event_type_new();
|
ECORE_CON_EVENT_PROXY_BIND = ecore_event_type_new();
|
||||||
|
|
||||||
|
|
||||||
eina_magic_string_set(ECORE_MAGIC_CON_SERVER, "Ecore_Con_Server");
|
eina_magic_string_set(ECORE_MAGIC_CON_SERVER, "Ecore_Con_Server");
|
||||||
eina_magic_string_set(ECORE_MAGIC_CON_CLIENT, "Ecore_Con_Client");
|
eina_magic_string_set(ECORE_MAGIC_CON_CLIENT, "Ecore_Con_Client");
|
||||||
eina_magic_string_set(ECORE_MAGIC_CON_URL, "Ecore_Con_Url");
|
eina_magic_string_set(ECORE_MAGIC_CON_URL, "Ecore_Con_Url");
|
||||||
|
@ -419,7 +418,6 @@ error:
|
||||||
if (svr->path)
|
if (svr->path)
|
||||||
free(svr->path);
|
free(svr->path);
|
||||||
|
|
||||||
|
|
||||||
if (svr->fd_handler)
|
if (svr->fd_handler)
|
||||||
ecore_main_fd_handler_del(svr->fd_handler);
|
ecore_main_fd_handler_del(svr->fd_handler);
|
||||||
|
|
||||||
|
@ -936,9 +934,9 @@ ecore_con_client_port_get(Ecore_Con_Client *cl)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (cl->client_addr->sa_family == AF_INET)
|
if (cl->client_addr->sa_family == AF_INET)
|
||||||
return ((struct sockaddr_in*)cl->client_addr)->sin_port;
|
return ((struct sockaddr_in *)cl->client_addr)->sin_port;
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
return ((struct sockaddr_in6*)cl->client_addr)->sin6_port;
|
return ((struct sockaddr_in6 *)cl->client_addr)->sin6_port;
|
||||||
#else
|
#else
|
||||||
return -1;
|
return -1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1195,7 +1193,6 @@ ecore_con_event_client_data(Ecore_Con_Client *cl, unsigned char *buf, int num, E
|
||||||
_ecore_con_event_count++;
|
_ecore_con_event_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ecore_con_server_infos_del(Ecore_Con_Server *svr, void *info)
|
ecore_con_server_infos_del(Ecore_Con_Server *svr, void *info)
|
||||||
{
|
{
|
||||||
|
@ -1541,7 +1538,7 @@ _ecore_con_cb_tcp_listen(void *data,
|
||||||
if (listen(svr->fd, 4096) < 0) goto error;
|
if (listen(svr->fd, 4096) < 0) goto error;
|
||||||
|
|
||||||
#ifdef HAVE_SYSTEMD
|
#ifdef HAVE_SYSTEMD
|
||||||
fd_ready:
|
fd_ready:
|
||||||
#endif
|
#endif
|
||||||
svr->fd_handler = ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ,
|
svr->fd_handler = ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ,
|
||||||
_ecore_con_svr_tcp_handler, svr, NULL, NULL);
|
_ecore_con_svr_tcp_handler, svr, NULL, NULL);
|
||||||
|
@ -1554,7 +1551,7 @@ _ecore_con_cb_tcp_listen(void *data,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (errno || memerr) ecore_con_event_server_error(svr, memerr ?: strerror(errno));
|
if (errno || memerr) ecore_con_event_server_error(svr, memerr ? : strerror(errno));
|
||||||
ecore_con_ssl_server_shutdown(svr);
|
ecore_con_ssl_server_shutdown(svr);
|
||||||
_ecore_con_server_kill(svr);
|
_ecore_con_server_kill(svr);
|
||||||
}
|
}
|
||||||
|
@ -1643,7 +1640,7 @@ _ecore_con_cb_udp_listen(void *data,
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
#ifdef HAVE_SYSTEMD
|
#ifdef HAVE_SYSTEMD
|
||||||
fd_ready:
|
fd_ready:
|
||||||
#endif
|
#endif
|
||||||
svr->fd_handler =
|
svr->fd_handler =
|
||||||
ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ,
|
ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ,
|
||||||
|
@ -1659,7 +1656,7 @@ _ecore_con_cb_udp_listen(void *data,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (errno || memerr) ecore_con_event_server_error(svr, memerr ?: strerror(errno));
|
if (errno || memerr) ecore_con_event_server_error(svr, memerr ? : strerror(errno));
|
||||||
ecore_con_ssl_server_shutdown(svr);
|
ecore_con_ssl_server_shutdown(svr);
|
||||||
_ecore_con_server_kill(svr);
|
_ecore_con_server_kill(svr);
|
||||||
}
|
}
|
||||||
|
@ -1752,7 +1749,7 @@ _ecore_con_cb_tcp_connect(void *data,
|
||||||
|
|
||||||
error:
|
error:
|
||||||
ecore_con_event_server_error(svr,
|
ecore_con_event_server_error(svr,
|
||||||
memerr ?: errno? strerror(errno) : "DNS error");
|
memerr ? : errno ? strerror(errno) : "DNS error");
|
||||||
ecore_con_ssl_server_shutdown(svr);
|
ecore_con_ssl_server_shutdown(svr);
|
||||||
_ecore_con_server_kill(svr);
|
_ecore_con_server_kill(svr);
|
||||||
}
|
}
|
||||||
|
@ -1810,7 +1807,7 @@ _ecore_con_cb_udp_connect(void *data,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (errno || memerr) ecore_con_event_server_error(svr, memerr ?: strerror(errno));
|
if (errno || memerr) ecore_con_event_server_error(svr, memerr ? : strerror(errno));
|
||||||
ecore_con_ssl_server_shutdown(svr);
|
ecore_con_ssl_server_shutdown(svr);
|
||||||
_ecore_con_server_kill(svr);
|
_ecore_con_server_kill(svr);
|
||||||
}
|
}
|
||||||
|
@ -1884,11 +1881,12 @@ _ecore_con_pretty_ip(struct sockaddr *client_addr)
|
||||||
int family = client_addr->sa_family;
|
int family = client_addr->sa_family;
|
||||||
void *src;
|
void *src;
|
||||||
|
|
||||||
switch(family)
|
switch (family)
|
||||||
{
|
{
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
src = &(((struct sockaddr_in *)client_addr)->sin_addr);
|
src = &(((struct sockaddr_in *)client_addr)->sin_addr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
src = &(((struct sockaddr_in6 *)client_addr)->sin6_addr);
|
src = &(((struct sockaddr_in6 *)client_addr)->sin6_addr);
|
||||||
|
@ -1896,9 +1894,10 @@ _ecore_con_pretty_ip(struct sockaddr *client_addr)
|
||||||
if (IN6_IS_ADDR_V4MAPPED((struct in6_addr *)src))
|
if (IN6_IS_ADDR_V4MAPPED((struct in6_addr *)src))
|
||||||
{
|
{
|
||||||
family = AF_INET;
|
family = AF_INET;
|
||||||
src = (char*)src + 12;
|
src = (char *)src + 12;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return eina_stringshare_add("0.0.0.0");
|
return eina_stringshare_add("0.0.0.0");
|
||||||
|
@ -1995,7 +1994,7 @@ error:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(cl);
|
free(cl);
|
||||||
if (clerr || errno) ecore_con_event_server_error(svr, clerr ?: strerror(errno));
|
if (clerr || errno) ecore_con_event_server_error(svr, clerr ? : strerror(errno));
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2190,7 +2189,6 @@ _ecore_con_svr_udp_handler(void *data,
|
||||||
return ECORE_CALLBACK_CANCEL;
|
return ECORE_CALLBACK_CANCEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Create a new client for use in the client data event */
|
/* Create a new client for use in the client data event */
|
||||||
cl = calloc(1, sizeof(Ecore_Con_Client));
|
cl = calloc(1, sizeof(Ecore_Con_Client));
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, ECORE_CALLBACK_RENEW);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, ECORE_CALLBACK_RENEW);
|
||||||
|
@ -2680,7 +2678,6 @@ _ecore_con_event_server_data_free(void *data EINA_UNUSED,
|
||||||
ecore_con_mempool_shutdown();
|
ecore_con_mempool_shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_con_event_server_error_free(void *data EINA_UNUSED, Ecore_Con_Event_Server_Error *e)
|
_ecore_con_event_server_error_free(void *data EINA_UNUSED, Ecore_Con_Event_Server_Error *e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,7 @@ struct _Ecore_Con_Mempool
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
void \
|
void \
|
||||||
Type##_free(TYPE *e) \
|
Type##_free(TYPE * e) \
|
||||||
{ \
|
{ \
|
||||||
eina_mempool_free(Type##_mp.mp, e); \
|
eina_mempool_free(Type##_mp.mp, e); \
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ ecore_con_mempool_init(void)
|
||||||
|
|
||||||
for (i = 0; i < sizeof (mempool_array) / sizeof (mempool_array[0]); ++i)
|
for (i = 0; i < sizeof (mempool_array) / sizeof (mempool_array[0]); ++i)
|
||||||
{
|
{
|
||||||
retry:
|
retry:
|
||||||
mempool_array[i]->mp = eina_mempool_add(choice, mempool_array[i]->name, NULL, mempool_array[i]->size, 16);
|
mempool_array[i]->mp = eina_mempool_add(choice, mempool_array[i]->name, NULL, mempool_array[i]->size, 16);
|
||||||
if (!mempool_array[i]->mp)
|
if (!mempool_array[i]->mp)
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,7 +44,8 @@ struct _Ecore_Con_CAres
|
||||||
struct addrinfo hints;
|
struct addrinfo hints;
|
||||||
Ecore_Con_Info *result;
|
Ecore_Con_Info *result;
|
||||||
|
|
||||||
union {
|
union
|
||||||
|
{
|
||||||
struct in_addr v4;
|
struct in_addr v4;
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
struct in6_addr v6;
|
struct in6_addr v6;
|
||||||
|
@ -73,12 +74,12 @@ static Eina_Bool _ecore_con_info_cares_fd_cb(Ecore_Con_FD *ecf,
|
||||||
static Eina_Bool _ecore_con_info_cares_timeout_cb(void *data);
|
static Eina_Bool _ecore_con_info_cares_timeout_cb(void *data);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_con_info_cares_state_cb(void *data,
|
_ecore_con_info_cares_state_cb(void *data,
|
||||||
ares_socket_t fd,
|
ares_socket_t fd,
|
||||||
int readable,
|
int readable,
|
||||||
int writable);
|
int writable);
|
||||||
static int
|
static int
|
||||||
_ecore_con_info_fds_search(const Ecore_Con_FD *fd1,
|
_ecore_con_info_fds_search(const Ecore_Con_FD *fd1,
|
||||||
const Ecore_Con_FD *fd2);
|
const Ecore_Con_FD *fd2);
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -465,6 +466,7 @@ _ecore_con_info_ares_host_cb(Ecore_Con_CAres *arg,
|
||||||
addr = (struct sockaddr *)addri;
|
addr = (struct sockaddr *)addri;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
{
|
{
|
||||||
|
@ -487,6 +489,7 @@ _ecore_con_info_ares_host_cb(Ecore_Con_CAres *arg,
|
||||||
addr = (struct sockaddr *)addri6;
|
addr = (struct sockaddr *)addri6;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
ERR("Unknown addrtype %i", hostent->h_addrtype);
|
ERR("Unknown addrtype %i", hostent->h_addrtype);
|
||||||
|
|
|
@ -78,8 +78,10 @@ _ecore_con_dns_check(Ecore_Con_DNS *dns)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EAGAIN:
|
case EAGAIN:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ERR("resolve failed: %s", dns_strerror(error));
|
ERR("resolve failed: %s", dns_strerror(error));
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -298,7 +300,6 @@ ecore_con_info_get(Ecore_Con_Server *svr,
|
||||||
{
|
{
|
||||||
ERR("res_open: %s", dns_strerror(error));
|
ERR("res_open: %s", dns_strerror(error));
|
||||||
goto reserr;
|
goto reserr;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
error = _dns_addrinfo_get(dns, svr->ecs ? svr->ecs->ip : svr->name, dns->svr->ecs ? dns->svr->ecs->port : dns->svr->port);
|
error = _dns_addrinfo_get(dns, svr->ecs ? svr->ecs->ip : svr->name, dns->svr->ecs ? dns->svr->ecs->port : dns->svr->port);
|
||||||
|
@ -312,11 +313,13 @@ ecore_con_info_get(Ecore_Con_Server *svr,
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
dns->fdh = ecore_main_fd_handler_add(dns_ai_pollfd(dns->ai), dns_ai_events(dns->ai), (Ecore_Fd_Cb)_dns_fd_cb, dns, NULL, NULL);
|
dns->fdh = ecore_main_fd_handler_add(dns_ai_pollfd(dns->ai), dns_ai_events(dns->ai), (Ecore_Fd_Cb)_dns_fd_cb, dns, NULL, NULL);
|
||||||
svr->infos = eina_list_append(svr->infos, dns);
|
svr->infos = eina_list_append(svr->infos, dns);
|
||||||
dns->timer = ecore_timer_add(5.0, (Ecore_Task_Cb)_dns_timer_cb, dns);
|
dns->timer = ecore_timer_add(5.0, (Ecore_Task_Cb)_dns_timer_cb, dns);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,13 +76,16 @@ struct _Ecore_Con_Eet
|
||||||
Eina_Hash *data_callbacks;
|
Eina_Hash *data_callbacks;
|
||||||
Eina_Hash *raw_data_callbacks;
|
Eina_Hash *raw_data_callbacks;
|
||||||
|
|
||||||
union {
|
union
|
||||||
struct {
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
Eina_List *connections;
|
Eina_List *connections;
|
||||||
Eina_List *client_connect_callbacks;
|
Eina_List *client_connect_callbacks;
|
||||||
Eina_List *client_disconnect_callbacks;
|
Eina_List *client_disconnect_callbacks;
|
||||||
} server;
|
} server;
|
||||||
struct {
|
struct
|
||||||
|
{
|
||||||
Ecore_Con_Reply *r;
|
Ecore_Con_Reply *r;
|
||||||
Eina_List *server_connect_callbacks;
|
Eina_List *server_connect_callbacks;
|
||||||
Eina_List *server_disconnect_callbacks;
|
Eina_List *server_disconnect_callbacks;
|
||||||
|
@ -111,6 +114,7 @@ _ecore_con_eet_raw_data_free(void *data)
|
||||||
eina_stringshare_del(eced->name);
|
eina_stringshare_del(eced->name);
|
||||||
free(eced);
|
free(eced);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_con_eet_reply_cleanup(Ecore_Con_Reply *n)
|
_ecore_con_eet_reply_cleanup(Ecore_Con_Reply *n)
|
||||||
{
|
{
|
||||||
|
@ -122,7 +126,8 @@ _ecore_con_eet_reply_cleanup(Ecore_Con_Reply *n)
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct _Ecore_Con_Eet_Protocol Ecore_Con_Eet_Protocol;
|
typedef struct _Ecore_Con_Eet_Protocol Ecore_Con_Eet_Protocol;
|
||||||
struct _Ecore_Con_Eet_Protocol {
|
struct _Ecore_Con_Eet_Protocol
|
||||||
|
{
|
||||||
const char *type;
|
const char *type;
|
||||||
void *data;
|
void *data;
|
||||||
};
|
};
|
||||||
|
@ -174,7 +179,7 @@ _ecore_con_eet_read_cb(const void *eet_data, size_t size, void *user_data)
|
||||||
cb = eina_hash_find(n->ece->data_callbacks, protocol->type);
|
cb = eina_hash_find(n->ece->data_callbacks, protocol->type);
|
||||||
if (!cb) return EINA_TRUE; /* Should I report unknow protocol communication ? */
|
if (!cb) return EINA_TRUE; /* Should I report unknow protocol communication ? */
|
||||||
|
|
||||||
cb->func((void*)cb->data, n, cb->name, protocol->data);
|
cb->func((void *)cb->data, n, cb->name, protocol->data);
|
||||||
|
|
||||||
eina_stringshare_del(protocol->type);
|
eina_stringshare_del(protocol->type);
|
||||||
free(protocol);
|
free(protocol);
|
||||||
|
@ -187,7 +192,7 @@ _ecore_con_eet_server_write_cb(const void *data, size_t size, void *user_data)
|
||||||
{
|
{
|
||||||
Ecore_Con_Reply *n = user_data;
|
Ecore_Con_Reply *n = user_data;
|
||||||
|
|
||||||
if (ecore_con_client_send(n->client, data, size) != (int) size)
|
if (ecore_con_client_send(n->client, data, size) != (int)size)
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -197,7 +202,7 @@ _ecore_con_eet_client_write_cb(const void *data, size_t size, void *user_data)
|
||||||
{
|
{
|
||||||
Ecore_Con_Reply *n = user_data;
|
Ecore_Con_Reply *n = user_data;
|
||||||
|
|
||||||
if (ecore_con_server_send(n->ece->server, data, size) != (int) size)
|
if (ecore_con_server_send(n->ece->server, data, size) != (int)size)
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -222,7 +227,7 @@ _ecore_con_eet_server_connected(void *data, int type EINA_UNUSED, Ecore_Con_Even
|
||||||
ecore_con_client_data_set(n->client, n);
|
ecore_con_client_data_set(n->client, n);
|
||||||
|
|
||||||
EINA_LIST_FOREACH(r->u.server.client_connect_callbacks, ll, ecec)
|
EINA_LIST_FOREACH(r->u.server.client_connect_callbacks, ll, ecec)
|
||||||
if (!ecec->func((void*) ecec->data, n, n->client))
|
if (!ecec->func((void *)ecec->data, n, n->client))
|
||||||
{
|
{
|
||||||
eet_connection_close(n->econn, NULL);
|
eet_connection_close(n->econn, NULL);
|
||||||
free(n);
|
free(n);
|
||||||
|
@ -251,7 +256,7 @@ _ecore_con_eet_server_disconnected(void *data, int type EINA_UNUSED, Ecore_Con_E
|
||||||
Eina_List *ll;
|
Eina_List *ll;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(r->u.server.client_disconnect_callbacks, ll, ecec)
|
EINA_LIST_FOREACH(r->u.server.client_disconnect_callbacks, ll, ecec)
|
||||||
ecec->func((void*) ecec->data, n, n->client);
|
ecec->func((void *)ecec->data, n, n->client);
|
||||||
|
|
||||||
eet_connection_close(n->econn, NULL);
|
eet_connection_close(n->econn, NULL);
|
||||||
free(n);
|
free(n);
|
||||||
|
@ -272,7 +277,7 @@ _ecore_con_eet_raw_data_push(Ecore_Con_Reply *n, void *data, int size)
|
||||||
if (n->buffer_current == n->buffer_length)
|
if (n->buffer_current == n->buffer_length)
|
||||||
{
|
{
|
||||||
if (n->buffer_handler)
|
if (n->buffer_handler)
|
||||||
n->buffer_handler->func((void*) n->buffer_handler->data, n, n->buffer_handler->name, n->buffer_section, n->buffer, n->buffer_length);
|
n->buffer_handler->func((void *)n->buffer_handler->data, n, n->buffer_handler->name, n->buffer_section, n->buffer, n->buffer_length);
|
||||||
_ecore_con_eet_reply_cleanup(n);
|
_ecore_con_eet_reply_cleanup(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -292,7 +297,7 @@ _ecore_con_eet_data(Ecore_Con_Reply *n, void *data, unsigned int size)
|
||||||
_ecore_con_eet_raw_data_push(n, data, size);
|
_ecore_con_eet_raw_data_push(n, data, size);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (eet_connection_empty(n->econn) && size > (int) (4 * sizeof (unsigned int) + 2))
|
else if (eet_connection_empty(n->econn) && size > (int)(4 * sizeof (unsigned int) + 2))
|
||||||
{
|
{
|
||||||
unsigned int *tmp = data;
|
unsigned int *tmp = data;
|
||||||
size -= 4 * sizeof (unsigned int);
|
size -= 4 * sizeof (unsigned int);
|
||||||
|
@ -305,7 +310,7 @@ _ecore_con_eet_data(Ecore_Con_Reply *n, void *data, unsigned int size)
|
||||||
|
|
||||||
if (protocol_length > 1 && section_length > 1 && protocol_length + section_length <= size && data_length < 10 * 1024 * 1024)
|
if (protocol_length > 1 && section_length > 1 && protocol_length + section_length <= size && data_length < 10 * 1024 * 1024)
|
||||||
{
|
{
|
||||||
char *buffer = (char*) &tmp[4];
|
char *buffer = (char *)&tmp[4];
|
||||||
char *protocol;
|
char *protocol;
|
||||||
char *section;
|
char *section;
|
||||||
|
|
||||||
|
@ -325,7 +330,7 @@ _ecore_con_eet_data(Ecore_Con_Reply *n, void *data, unsigned int size)
|
||||||
if (n->buffer_handler)
|
if (n->buffer_handler)
|
||||||
n->buffer = malloc(sizeof (unsigned char) * data_length);
|
n->buffer = malloc(sizeof (unsigned char) * data_length);
|
||||||
else
|
else
|
||||||
n->buffer = (void*) 1;
|
n->buffer = (void *)1;
|
||||||
if (n->buffer)
|
if (n->buffer)
|
||||||
{
|
{
|
||||||
_ecore_con_eet_raw_data_push(n, buffer, size);
|
_ecore_con_eet_raw_data_push(n, buffer, size);
|
||||||
|
@ -382,7 +387,7 @@ _ecore_con_eet_client_connected(void *data, int type EINA_UNUSED, Ecore_Con_Even
|
||||||
n->econn = eet_connection_new(_ecore_con_eet_read_cb, _ecore_con_eet_client_write_cb, n);
|
n->econn = eet_connection_new(_ecore_con_eet_read_cb, _ecore_con_eet_client_write_cb, n);
|
||||||
|
|
||||||
EINA_LIST_FOREACH(r->u.client.server_connect_callbacks, ll, eces)
|
EINA_LIST_FOREACH(r->u.client.server_connect_callbacks, ll, eces)
|
||||||
if (!eces->func((void*) eces->data, n, n->ece->server))
|
if (!eces->func((void *)eces->data, n, n->ece->server))
|
||||||
{
|
{
|
||||||
eet_connection_close(n->econn, NULL);
|
eet_connection_close(n->econn, NULL);
|
||||||
free(n);
|
free(n);
|
||||||
|
@ -406,7 +411,7 @@ _ecore_con_eet_client_disconnected(void *data, int type EINA_UNUSED, Ecore_Con_E
|
||||||
|
|
||||||
/* Client disconnected */
|
/* Client disconnected */
|
||||||
EINA_LIST_FOREACH(r->u.client.server_disconnect_callbacks, ll, eces)
|
EINA_LIST_FOREACH(r->u.client.server_disconnect_callbacks, ll, eces)
|
||||||
eces->func((void*) eces->data, r->u.client.r, r->server);
|
eces->func((void *)eces->data, r->u.client.r, r->server);
|
||||||
|
|
||||||
eet_connection_close(r->u.client.r->econn, NULL);
|
eet_connection_close(r->u.client.r->econn, NULL);
|
||||||
free(r->u.client.r);
|
free(r->u.client.r);
|
||||||
|
@ -430,8 +435,8 @@ _ecore_con_eet_client_data(void *data, int type EINA_UNUSED, Ecore_Con_Event_Ser
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************
|
/**************
|
||||||
* Global API *
|
* Global API *
|
||||||
**************/
|
**************/
|
||||||
|
|
||||||
EAPI Ecore_Con_Eet *
|
EAPI Ecore_Con_Eet *
|
||||||
ecore_con_eet_server_new(Ecore_Con_Server *server)
|
ecore_con_eet_server_new(Ecore_Con_Server *server)
|
||||||
|
@ -590,7 +595,7 @@ ecore_con_eet_raw_data_callback_del(Ecore_Con_Eet *ece, const char *name)
|
||||||
{
|
{
|
||||||
ece->u.client.r->buffer_handler = NULL;
|
ece->u.client.r->buffer_handler = NULL;
|
||||||
free(ece->u.client.r->buffer);
|
free(ece->u.client.r->buffer);
|
||||||
ece->u.client.r->buffer = (void*) 1;
|
ece->u.client.r->buffer = (void *)1;
|
||||||
}
|
}
|
||||||
eina_hash_del(ece->raw_data_callbacks, name, NULL);
|
eina_hash_del(ece->raw_data_callbacks, name, NULL);
|
||||||
}
|
}
|
||||||
|
@ -740,7 +745,7 @@ EAPI void *
|
||||||
ecore_con_eet_data_get(Ecore_Con_Eet *ece)
|
ecore_con_eet_data_get(Ecore_Con_Eet *ece)
|
||||||
{
|
{
|
||||||
if (!ece) return NULL;
|
if (!ece) return NULL;
|
||||||
return (void*) ece->data;
|
return (void *)ece->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Ecore_Con_Eet *
|
EAPI Ecore_Con_Eet *
|
||||||
|
|
|
@ -77,7 +77,8 @@ ecore_con_info_shutdown(void)
|
||||||
{
|
{
|
||||||
info_init--;
|
info_init--;
|
||||||
if (info_init == 0)
|
if (info_init == 0)
|
||||||
while (info_slaves) _ecore_con_info_slave_free(info_slaves);
|
while (info_slaves)
|
||||||
|
_ecore_con_info_slave_free(info_slaves);
|
||||||
|
|
||||||
return info_init;
|
return info_init;
|
||||||
}
|
}
|
||||||
|
@ -192,7 +193,7 @@ _ecore_fd_close_on_exec(int fd)
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
#else
|
#else
|
||||||
(void) fd;
|
(void)fd;
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -312,7 +312,7 @@ start:
|
||||||
goto fd_ready;
|
goto fd_ready;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
(void) abstract_socket;
|
(void)abstract_socket;
|
||||||
#endif
|
#endif
|
||||||
svr->fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
svr->fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
if (svr->fd < 0)
|
if (svr->fd < 0)
|
||||||
|
@ -346,7 +346,7 @@ start:
|
||||||
goto error_umask;
|
goto error_umask;
|
||||||
|
|
||||||
#ifdef HAVE_SYSTEMD
|
#ifdef HAVE_SYSTEMD
|
||||||
fd_ready:
|
fd_ready:
|
||||||
#endif
|
#endif
|
||||||
svr->path = strdup(buf);
|
svr->path = strdup(buf);
|
||||||
if (!svr->path)
|
if (!svr->path)
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
|
|
||||||
#define BUFSIZE 512
|
#define BUFSIZE 512
|
||||||
|
|
||||||
|
|
||||||
static int _ecore_con_local_init_count = 0;
|
static int _ecore_con_local_init_count = 0;
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -33,7 +32,6 @@ ecore_con_local_shutdown(void)
|
||||||
return _ecore_con_local_init_count;
|
return _ecore_con_local_init_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_ecore_con_local_win32_server_read_client_handler(void *data, Ecore_Win32_Handler *wh)
|
_ecore_con_local_win32_server_read_client_handler(void *data, Ecore_Win32_Handler *wh)
|
||||||
{
|
{
|
||||||
|
@ -356,15 +354,15 @@ _ecore_con_local_win32_client_add(void *data, Ecore_Win32_Handler *wh)
|
||||||
ResumeThread(cl->host_server->thread_read);
|
ResumeThread(cl->host_server->thread_read);
|
||||||
return ECORE_CALLBACK_DONE;
|
return ECORE_CALLBACK_DONE;
|
||||||
|
|
||||||
del_handler_peek:
|
del_handler_peek:
|
||||||
ecore_main_win32_handler_del(handler_peek);
|
ecore_main_win32_handler_del(handler_peek);
|
||||||
close_event_peek:
|
close_event_peek:
|
||||||
CloseHandle(cl->host_server->event_peek);
|
CloseHandle(cl->host_server->event_peek);
|
||||||
del_handler_read:
|
del_handler_read:
|
||||||
ecore_main_win32_handler_del(handler_read);
|
ecore_main_win32_handler_del(handler_read);
|
||||||
close_event_read:
|
close_event_read:
|
||||||
CloseHandle(cl->host_server->event_read);
|
CloseHandle(cl->host_server->event_read);
|
||||||
free_cl:
|
free_cl:
|
||||||
free(cl);
|
free(cl);
|
||||||
|
|
||||||
return ECORE_CALLBACK_CANCEL;
|
return ECORE_CALLBACK_CANCEL;
|
||||||
|
@ -472,11 +470,11 @@ ecore_con_local_listen(Ecore_Con_Server *svr)
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
|
||||||
del_handler:
|
del_handler:
|
||||||
ecore_main_win32_handler_del(handler);
|
ecore_main_win32_handler_del(handler);
|
||||||
close_pipe:
|
close_pipe:
|
||||||
CloseHandle(svr->pipe);
|
CloseHandle(svr->pipe);
|
||||||
free_path:
|
free_path:
|
||||||
free(svr->path);
|
free(svr->path);
|
||||||
svr->path = NULL;
|
svr->path = NULL;
|
||||||
|
|
||||||
|
@ -641,18 +639,18 @@ ecore_con_local_connect(Ecore_Con_Server *svr,
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
|
||||||
del_handler_peek:
|
del_handler_peek:
|
||||||
ecore_main_win32_handler_del(handler_peek);
|
ecore_main_win32_handler_del(handler_peek);
|
||||||
close_event_peek:
|
close_event_peek:
|
||||||
CloseHandle(svr->event_peek);
|
CloseHandle(svr->event_peek);
|
||||||
del_handler_read:
|
del_handler_read:
|
||||||
ecore_main_win32_handler_del(handler_read);
|
ecore_main_win32_handler_del(handler_read);
|
||||||
close_event_read:
|
close_event_read:
|
||||||
CloseHandle(svr->event_read);
|
CloseHandle(svr->event_read);
|
||||||
free_path:
|
free_path:
|
||||||
free(svr->path);
|
free(svr->path);
|
||||||
svr->path = NULL;
|
svr->path = NULL;
|
||||||
close_pipe:
|
close_pipe:
|
||||||
CloseHandle(svr->pipe);
|
CloseHandle(svr->pipe);
|
||||||
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
@ -752,3 +750,4 @@ ecore_con_local_win32_client_flush(Ecore_Con_Client *cl)
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
o X'03' to X'7F' IANA ASSIGNED
|
o X'03' to X'7F' IANA ASSIGNED
|
||||||
o X'80' to X'FE' RESERVED FOR PRIVATE METHODS
|
o X'80' to X'FE' RESERVED FOR PRIVATE METHODS
|
||||||
o X'FF' NO ACCEPTABLE METHODS
|
o X'FF' NO ACCEPTABLE METHODS
|
||||||
*/
|
*/
|
||||||
#define ECORE_CON_SOCKS_V5_METHOD_NONE 0
|
#define ECORE_CON_SOCKS_V5_METHOD_NONE 0
|
||||||
#define ECORE_CON_SOCKS_V5_METHOD_GSSAPI 1
|
#define ECORE_CON_SOCKS_V5_METHOD_GSSAPI 1
|
||||||
#define ECORE_CON_SOCKS_V5_METHOD_USERPASS 2
|
#define ECORE_CON_SOCKS_V5_METHOD_USERPASS 2
|
||||||
|
@ -75,19 +75,19 @@ static int ECORE_CON_SOCKS_V5_METHODS[] =
|
||||||
#define _ecore_con_server_kill(svr) do { \
|
#define _ecore_con_server_kill(svr) do { \
|
||||||
DBG("KILL %p", (svr)); \
|
DBG("KILL %p", (svr)); \
|
||||||
_ecore_con_server_kill((svr)); \
|
_ecore_con_server_kill((svr)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define ECORE_CON_SOCKS_VERSION_CHECK(X) do { \
|
#define ECORE_CON_SOCKS_VERSION_CHECK(X) do { \
|
||||||
if (!(X) || ((X)->version < 4) || ((X)->version > 5)) \
|
if (!(X) || ((X)->version < 4) || ((X)->version > 5)) \
|
||||||
return; \
|
return; \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define ECORE_CON_SOCKS_VERSION_CHECK_RETURN(X, ret) do { \
|
#define ECORE_CON_SOCKS_VERSION_CHECK_RETURN(X, ret) do { \
|
||||||
if (!(X) || ((X)->version < 4) || ((X)->version > 5)) \
|
if (!(X) || ((X)->version < 4) || ((X)->version > 5)) \
|
||||||
return (ret); \
|
return (ret); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define ECORE_CON_SOCKS_CAST(X) \
|
#define ECORE_CON_SOCKS_CAST(X) \
|
||||||
Ecore_Con_Socks_v4 *v4 = NULL; \
|
Ecore_Con_Socks_v4 * v4 = NULL; \
|
||||||
Ecore_Con_Socks_v5 *v5 = NULL; \
|
Ecore_Con_Socks_v5 *v5 = NULL; \
|
||||||
if ((X) && ((X)->version == 4)) \
|
if ((X) && ((X)->version == 4)) \
|
||||||
v4 = (Ecore_Con_Socks_v4 *)(X); \
|
v4 = (Ecore_Con_Socks_v4 *)(X); \
|
||||||
|
@ -116,7 +116,7 @@ _ecore_con_socks_find(unsigned char version, const char *ip, int port, const cha
|
||||||
if (plen != ecs->plen) continue;
|
if (plen != ecs->plen) continue;
|
||||||
if (password && strcmp(ecs->password, password)) continue;
|
if (password && strcmp(ecs->password, password)) continue;
|
||||||
}
|
}
|
||||||
return (Ecore_Con_Socks*)ecs;
|
return (Ecore_Con_Socks *)ecs;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -220,7 +220,8 @@ _ecore_con_socks_svr_init_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5)
|
||||||
if (eina_binbuf_length_get(svr->ecs_recvbuf) != EXACT) return; \
|
if (eina_binbuf_length_get(svr->ecs_recvbuf) != EXACT) return; \
|
||||||
data = eina_binbuf_string_get(svr->ecs_recvbuf); \
|
data = eina_binbuf_string_get(svr->ecs_recvbuf); \
|
||||||
} \
|
} \
|
||||||
else if (num > EXACT) goto error; \
|
else if (num > EXACT) \
|
||||||
|
goto error; \
|
||||||
else \
|
else \
|
||||||
data = buf
|
data = buf
|
||||||
|
|
||||||
|
@ -238,15 +239,19 @@ _ecore_con_socks_read_v4(Ecore_Con_Server *svr, Ecore_Con_Socks_v4 *v4 EINA_UNUS
|
||||||
case 90:
|
case 90:
|
||||||
/* success! */
|
/* success! */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 91:
|
case 91:
|
||||||
ecore_con_event_server_error(svr, "proxy request rejected or failed");
|
ecore_con_event_server_error(svr, "proxy request rejected or failed");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case 92:
|
case 92:
|
||||||
ecore_con_event_server_error(svr, "proxying SOCKS server could not perform authentication");
|
ecore_con_event_server_error(svr, "proxying SOCKS server could not perform authentication");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case 93:
|
case 93:
|
||||||
ecore_con_event_server_error(svr, "proxy request authentication rejected");
|
ecore_con_event_server_error(svr, "proxy request authentication rejected");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ecore_con_event_server_error(svr, "garbage data from proxy");
|
ecore_con_event_server_error(svr, "garbage data from proxy");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -288,8 +293,10 @@ _ecore_con_socks_auth_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5)
|
||||||
case ECORE_CON_SOCKS_V5_METHOD_NONE:
|
case ECORE_CON_SOCKS_V5_METHOD_NONE:
|
||||||
svr->ecs_state = ECORE_CON_PROXY_STATE_REQUEST;
|
svr->ecs_state = ECORE_CON_PROXY_STATE_REQUEST;
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
|
||||||
case ECORE_CON_SOCKS_V5_METHOD_GSSAPI:
|
case ECORE_CON_SOCKS_V5_METHOD_GSSAPI:
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
|
||||||
case ECORE_CON_SOCKS_V5_METHOD_USERPASS:
|
case ECORE_CON_SOCKS_V5_METHOD_USERPASS:
|
||||||
if (!v5->username) return EINA_FALSE;
|
if (!v5->username) return EINA_FALSE;
|
||||||
if (!v5->password) v5->plen = 1;
|
if (!v5->password) v5->plen = 1;
|
||||||
|
@ -307,6 +314,7 @@ _ecore_con_socks_auth_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5)
|
||||||
data[2 + v5->ulen] = 0;
|
data[2 + v5->ulen] = 0;
|
||||||
svr->ecs_buf = eina_binbuf_manage_new_length(data, size);
|
svr->ecs_buf = eina_binbuf_manage_new_length(data, size);
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -321,7 +329,6 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un
|
||||||
DBG("SOCKS: %d bytes", num);
|
DBG("SOCKS: %d bytes", num);
|
||||||
switch (svr->ecs_state)
|
switch (svr->ecs_state)
|
||||||
{
|
{
|
||||||
|
|
||||||
case ECORE_CON_PROXY_STATE_READ:
|
case ECORE_CON_PROXY_STATE_READ:
|
||||||
ECORE_CON_SOCKS_READ(2);
|
ECORE_CON_SOCKS_READ(2);
|
||||||
/* http://en.wikipedia.org/wiki/SOCKS */
|
/* http://en.wikipedia.org/wiki/SOCKS */
|
||||||
|
@ -342,6 +349,7 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un
|
||||||
ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_WRITE);
|
ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_WRITE);
|
||||||
svr->ecs_state = ECORE_CON_PROXY_STATE_AUTH;
|
svr->ecs_state = ECORE_CON_PROXY_STATE_AUTH;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECORE_CON_PROXY_STATE_AUTH:
|
case ECORE_CON_PROXY_STATE_AUTH:
|
||||||
ECORE_CON_SOCKS_READ(2);
|
ECORE_CON_SOCKS_READ(2);
|
||||||
switch (v5->method)
|
switch (v5->method)
|
||||||
|
@ -349,9 +357,11 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un
|
||||||
case ECORE_CON_SOCKS_V5_METHOD_NONE:
|
case ECORE_CON_SOCKS_V5_METHOD_NONE:
|
||||||
CRIT("HOW DID THIS HAPPEN?????????");
|
CRIT("HOW DID THIS HAPPEN?????????");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case ECORE_CON_SOCKS_V5_METHOD_GSSAPI:
|
case ECORE_CON_SOCKS_V5_METHOD_GSSAPI:
|
||||||
/* TODO: this */
|
/* TODO: this */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECORE_CON_SOCKS_V5_METHOD_USERPASS:
|
case ECORE_CON_SOCKS_V5_METHOD_USERPASS:
|
||||||
if (data[0] != 1)
|
if (data[0] != 1)
|
||||||
{
|
{
|
||||||
|
@ -363,9 +373,11 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un
|
||||||
ecore_con_event_server_error(svr, "proxy request authentication rejected");
|
ecore_con_event_server_error(svr, "proxy request authentication rejected");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ECORE_CON_PROXY_STATE_REQUEST:
|
case ECORE_CON_PROXY_STATE_REQUEST:
|
||||||
{
|
{
|
||||||
size_t addrlen, buflen;
|
size_t addrlen, buflen;
|
||||||
|
@ -399,6 +411,7 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un
|
||||||
ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_WRITE);
|
ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_WRITE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ECORE_CON_PROXY_STATE_CONFIRM:
|
case ECORE_CON_PROXY_STATE_CONFIRM:
|
||||||
{
|
{
|
||||||
/* this is ugly because we have to read an exact number of bytes,
|
/* this is ugly because we have to read an exact number of bytes,
|
||||||
|
@ -424,13 +437,16 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un
|
||||||
case 1:
|
case 1:
|
||||||
to_read = 4;
|
to_read = 4;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
to_read = data[1] + 1;
|
to_read = data[1] + 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
to_read = 16;
|
to_read = 16;
|
||||||
/* lazy debugging stub comment */
|
/* lazy debugging stub comment */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ecore_con_event_server_error(svr, "protocol error");
|
ecore_con_event_server_error(svr, "protocol error");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -447,29 +463,38 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
ecore_con_event_server_error(svr, "general proxy failure");
|
ecore_con_event_server_error(svr, "general proxy failure");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
ecore_con_event_server_error(svr, "connection not allowed by ruleset");
|
ecore_con_event_server_error(svr, "connection not allowed by ruleset");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
ecore_con_event_server_error(svr, "network unreachable");
|
ecore_con_event_server_error(svr, "network unreachable");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
ecore_con_event_server_error(svr, "host unreachable");
|
ecore_con_event_server_error(svr, "host unreachable");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
ecore_con_event_server_error(svr, "connection refused by destination host");
|
ecore_con_event_server_error(svr, "connection refused by destination host");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
ecore_con_event_server_error(svr, "TTL expired");
|
ecore_con_event_server_error(svr, "TTL expired");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
ecore_con_event_server_error(svr, "command not supported / protocol error");
|
ecore_con_event_server_error(svr, "command not supported / protocol error");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
ecore_con_event_server_error(svr, "address type not supported");
|
ecore_con_event_server_error(svr, "address type not supported");
|
||||||
|
|
||||||
default:
|
default:
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
@ -488,6 +513,7 @@ _ecore_con_socks_read_v5(Ecore_Con_Server *svr, Ecore_Con_Socks_v5 *v5, const un
|
||||||
INF("PROXY CONNECTED");
|
INF("PROXY CONNECTED");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -613,7 +639,7 @@ ecore_con_socks_init(void)
|
||||||
ecore_con_socks_lookup_set(ecs, lookup);
|
ecore_con_socks_lookup_set(ecs, lookup);
|
||||||
ecore_con_socks_apply_always(ecs);
|
ecore_con_socks_apply_always(ecs);
|
||||||
INF("Added global proxy server %s%s%s:%d - DNS lookup %s",
|
INF("Added global proxy server %s%s%s:%d - DNS lookup %s",
|
||||||
u ?: "", u ? "@" : "", h, port, lookup ? "ENABLED" : "DISABLED");
|
u ? : "", u ? "@" : "", h, port, lookup ? "ENABLED" : "DISABLED");
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -706,11 +732,12 @@ ecore_con_socks4_remote_del(const char *ip, int port, const char *username)
|
||||||
if ((!ip) || (!ip[0]) || (port < -1) || (port > 65535) || (username && (!username[0]))) return;
|
if ((!ip) || (!ip[0]) || (port < -1) || (port > 65535) || (username && (!username[0]))) return;
|
||||||
if (!ecore_con_socks_proxies) return;
|
if (!ecore_con_socks_proxies) return;
|
||||||
|
|
||||||
v4 = (Ecore_Con_Socks_v4*)_ecore_con_socks_find(4, ip, port, username, username ? strlen(username) : 0, NULL, 0);
|
v4 = (Ecore_Con_Socks_v4 *)_ecore_con_socks_find(4, ip, port, username, username ? strlen(username) : 0, NULL, 0);
|
||||||
if (!v4) return;
|
if (!v4) return;
|
||||||
ecore_con_socks_proxies = eina_list_remove(ecore_con_socks_proxies, v4);
|
ecore_con_socks_proxies = eina_list_remove(ecore_con_socks_proxies, v4);
|
||||||
_ecore_con_socks_free((Ecore_Con_Socks*)v4);
|
_ecore_con_socks_free((Ecore_Con_Socks *)v4);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a SOCKS v5 proxy to the proxy list
|
* Add a SOCKS v5 proxy to the proxy list
|
||||||
*
|
*
|
||||||
|
@ -744,8 +771,8 @@ ecore_con_socks5_remote_add(const char *ip, int port, const char *username, cons
|
||||||
/* max length for protocol */
|
/* max length for protocol */
|
||||||
if ((!plen) || (plen > 255)) return NULL;
|
if ((!plen) || (plen > 255)) return NULL;
|
||||||
}
|
}
|
||||||
ecs5 = (Ecore_Con_Socks_v5*)_ecore_con_socks_find(5, ip, port, username, ulen, password, plen);
|
ecs5 = (Ecore_Con_Socks_v5 *)_ecore_con_socks_find(5, ip, port, username, ulen, password, plen);
|
||||||
if (ecs5) return (Ecore_Con_Socks*)ecs5;
|
if (ecs5) return (Ecore_Con_Socks *)ecs5;
|
||||||
|
|
||||||
ecs5 = calloc(1, sizeof(Ecore_Con_Socks_v5));
|
ecs5 = calloc(1, sizeof(Ecore_Con_Socks_v5));
|
||||||
if (!ecs5) return NULL;
|
if (!ecs5) return NULL;
|
||||||
|
@ -758,7 +785,7 @@ ecore_con_socks5_remote_add(const char *ip, int port, const char *username, cons
|
||||||
ecs5->password = eina_stringshare_add(password);
|
ecs5->password = eina_stringshare_add(password);
|
||||||
ecs5->plen = plen;
|
ecs5->plen = plen;
|
||||||
ecore_con_socks_proxies = eina_list_append(ecore_con_socks_proxies, ecs5);
|
ecore_con_socks_proxies = eina_list_append(ecore_con_socks_proxies, ecs5);
|
||||||
return (Ecore_Con_Socks*)ecs5;
|
return (Ecore_Con_Socks *)ecs5;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -805,10 +832,10 @@ ecore_con_socks5_remote_del(const char *ip, int port, const char *username, cons
|
||||||
return;
|
return;
|
||||||
if (!ecore_con_socks_proxies) return;
|
if (!ecore_con_socks_proxies) return;
|
||||||
|
|
||||||
v5 = (Ecore_Con_Socks_v5*)_ecore_con_socks_find(5, ip, port, username, username ? strlen(username) : 0, password, password ? strlen(password) : 0);
|
v5 = (Ecore_Con_Socks_v5 *)_ecore_con_socks_find(5, ip, port, username, username ? strlen(username) : 0, password, password ? strlen(password) : 0);
|
||||||
if (!v5) return;
|
if (!v5) return;
|
||||||
ecore_con_socks_proxies = eina_list_remove(ecore_con_socks_proxies, v5);
|
ecore_con_socks_proxies = eina_list_remove(ecore_con_socks_proxies, v5);
|
||||||
_ecore_con_socks_free((Ecore_Con_Socks*)v5);
|
_ecore_con_socks_free((Ecore_Con_Socks *)v5);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -954,4 +981,5 @@ ecore_con_socks_apply_always(Ecore_Con_Socks *ecs)
|
||||||
{
|
{
|
||||||
_ecore_con_proxy_global = ecs;
|
_ecore_con_proxy_global = ecs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -80,7 +80,7 @@ _gnutls_print_session(const gnutls_datum_t *cert_list, unsigned int cert_list_si
|
||||||
{
|
{
|
||||||
gnutls_x509_crt_init(&crt);
|
gnutls_x509_crt_init(&crt);
|
||||||
gnutls_x509_crt_import(crt, &cert_list[x], GNUTLS_X509_FMT_DER);
|
gnutls_x509_crt_import(crt, &cert_list[x], GNUTLS_X509_FMT_DER);
|
||||||
gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_FULL, (gnutls_datum_t*)&c);
|
gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_FULL, (gnutls_datum_t *)&c);
|
||||||
INF("CERTIFICATE:\n%s", c);
|
INF("CERTIFICATE:\n%s", c);
|
||||||
gnutls_free(c);
|
gnutls_free(c);
|
||||||
gnutls_x509_crt_deinit(crt);
|
gnutls_x509_crt_deinit(crt);
|
||||||
|
@ -97,6 +97,7 @@ _gnutls_log_func(int level,
|
||||||
strncat(buf, str, strlen(str) - 1);
|
strncat(buf, str, strlen(str) - 1);
|
||||||
DBG("|<%d>| %s", level, buf);
|
DBG("|<%d>| %s", level, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
|
@ -151,7 +152,7 @@ _openssl_print_verify_error(int error)
|
||||||
switch (error)
|
switch (error)
|
||||||
{
|
{
|
||||||
#define ERROR(X) \
|
#define ERROR(X) \
|
||||||
case (X): \
|
case (X): \
|
||||||
ERR("%s", #X); \
|
ERR("%s", #X); \
|
||||||
break
|
break
|
||||||
#ifdef X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
|
#ifdef X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
|
||||||
|
@ -339,7 +340,6 @@ _openssl_print_errors(void *conn, int type)
|
||||||
ecore_con_event_client_error(conn, buf);
|
ecore_con_event_client_error(conn, buf);
|
||||||
else
|
else
|
||||||
ecore_con_event_server_error(conn, buf);
|
ecore_con_event_server_error(conn, buf);
|
||||||
|
|
||||||
} while (1);
|
} while (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -381,7 +381,7 @@ _openssl_print_session(SSL *ssl)
|
||||||
{
|
{
|
||||||
/* print session info into DBG */
|
/* print session info into DBG */
|
||||||
SSL_SESSION *s;
|
SSL_SESSION *s;
|
||||||
STACK_OF(X509) *sk;
|
STACK_OF(X509) * sk;
|
||||||
BIO *b;
|
BIO *b;
|
||||||
char log[4096], *p;
|
char log[4096], *p;
|
||||||
int x;
|
int x;
|
||||||
|
@ -430,22 +430,22 @@ static Ecore_Con_Ssl_Error
|
||||||
static Ecore_Con_Ssl_Error
|
static Ecore_Con_Ssl_Error
|
||||||
SSL_SUFFIX(_ecore_con_ssl_shutdown) (void);
|
SSL_SUFFIX(_ecore_con_ssl_shutdown) (void);
|
||||||
|
|
||||||
static Eina_Bool SSL_SUFFIX(_ecore_con_ssl_server_cafile_add) (Ecore_Con_Server * svr, const char *ca_file);
|
static Eina_Bool SSL_SUFFIX(_ecore_con_ssl_server_cafile_add) (Ecore_Con_Server *svr, const char *ca_file);
|
||||||
static Eina_Bool SSL_SUFFIX(_ecore_con_ssl_server_crl_add) (Ecore_Con_Server * svr, const char *crl_file);
|
static Eina_Bool SSL_SUFFIX(_ecore_con_ssl_server_crl_add) (Ecore_Con_Server *svr, const char *crl_file);
|
||||||
static Eina_Bool SSL_SUFFIX(_ecore_con_ssl_server_cert_add) (Ecore_Con_Server * svr, const char *cert);
|
static Eina_Bool SSL_SUFFIX(_ecore_con_ssl_server_cert_add) (Ecore_Con_Server *svr, const char *cert);
|
||||||
static Eina_Bool SSL_SUFFIX(_ecore_con_ssl_server_privkey_add) (Ecore_Con_Server * svr, const char *key_file);
|
static Eina_Bool SSL_SUFFIX(_ecore_con_ssl_server_privkey_add) (Ecore_Con_Server *svr, const char *key_file);
|
||||||
|
|
||||||
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_server_prepare) (Ecore_Con_Server * svr, int ssl_type);
|
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_server_prepare) (Ecore_Con_Server *svr, int ssl_type);
|
||||||
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_server_init) (Ecore_Con_Server * svr);
|
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_server_init) (Ecore_Con_Server *svr);
|
||||||
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_server_shutdown) (Ecore_Con_Server *svr);
|
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_server_shutdown) (Ecore_Con_Server *svr);
|
||||||
static int SSL_SUFFIX(_ecore_con_ssl_server_read) (Ecore_Con_Server *svr, unsigned char *buf, int size);
|
static int SSL_SUFFIX(_ecore_con_ssl_server_read) (Ecore_Con_Server *svr, unsigned char *buf, int size);
|
||||||
static int SSL_SUFFIX(_ecore_con_ssl_server_write) (Ecore_Con_Server *svr, const unsigned char *buf, int size);
|
static int SSL_SUFFIX(_ecore_con_ssl_server_write) (Ecore_Con_Server *svr, const unsigned char *buf, int size);
|
||||||
|
|
||||||
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_client_init) (Ecore_Con_Client * cl);
|
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_client_init) (Ecore_Con_Client *cl);
|
||||||
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_client_shutdown) (Ecore_Con_Client *cl);
|
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_client_shutdown) (Ecore_Con_Client *cl);
|
||||||
static int SSL_SUFFIX(_ecore_con_ssl_client_read) (Ecore_Con_Client * cl,
|
static int SSL_SUFFIX(_ecore_con_ssl_client_read) (Ecore_Con_Client *cl,
|
||||||
unsigned char *buf, int size);
|
unsigned char *buf, int size);
|
||||||
static int SSL_SUFFIX(_ecore_con_ssl_client_write) (Ecore_Con_Client * cl,
|
static int SSL_SUFFIX(_ecore_con_ssl_client_write) (Ecore_Con_Client *cl,
|
||||||
const unsigned char *buf, int size);
|
const unsigned char *buf, int size);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -650,7 +650,7 @@ ecore_con_ssl_server_verify_name_get(Ecore_Con_Server *svr)
|
||||||
ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, __func__);
|
ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, __func__);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return svr->verify_name ?: svr->name;
|
return svr->verify_name ? : svr->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -954,7 +954,6 @@ error:
|
||||||
return ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED;
|
return ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Ecore_Con_Ssl_Error
|
static Ecore_Con_Ssl_Error
|
||||||
_ecore_con_ssl_server_init_gnutls(Ecore_Con_Server *svr)
|
_ecore_con_ssl_server_init_gnutls(Ecore_Con_Server *svr)
|
||||||
{
|
{
|
||||||
|
@ -1070,7 +1069,7 @@ _ecore_con_ssl_server_init_gnutls(Ecore_Con_Server *svr)
|
||||||
SSL_ERROR_CHECK_GOTO_ERROR(gnutls_x509_crt_init(&cert));
|
SSL_ERROR_CHECK_GOTO_ERROR(gnutls_x509_crt_init(&cert));
|
||||||
SSL_ERROR_CHECK_GOTO_ERROR(gnutls_x509_crt_import(cert, &cert_list[0], GNUTLS_X509_FMT_DER));
|
SSL_ERROR_CHECK_GOTO_ERROR(gnutls_x509_crt_import(cert, &cert_list[0], GNUTLS_X509_FMT_DER));
|
||||||
|
|
||||||
SSL_ERROR_CHECK_GOTO_ERROR(!gnutls_x509_crt_check_hostname(cert, svr->verify_name ?: svr->name));
|
SSL_ERROR_CHECK_GOTO_ERROR(!gnutls_x509_crt_check_hostname(cert, svr->verify_name ? : svr->name));
|
||||||
gnutls_x509_crt_deinit(cert);
|
gnutls_x509_crt_deinit(cert);
|
||||||
DBG("SSL certificate verification succeeded!");
|
DBG("SSL certificate verification succeeded!");
|
||||||
return ECORE_CON_SSL_ERROR_NONE;
|
return ECORE_CON_SSL_ERROR_NONE;
|
||||||
|
@ -1396,7 +1395,7 @@ _ecore_con_ssl_client_init_gnutls(Ecore_Con_Client *cl)
|
||||||
|
|
||||||
SSL_ERROR_CHECK_GOTO_ERROR(!gnutls_x509_crt_check_hostname(cert, cl->host_server->name));
|
SSL_ERROR_CHECK_GOTO_ERROR(!gnutls_x509_crt_check_hostname(cert, cl->host_server->name));
|
||||||
gnutls_x509_crt_deinit(cert);
|
gnutls_x509_crt_deinit(cert);
|
||||||
*/
|
*/
|
||||||
DBG("SSL certificate verification succeeded!");
|
DBG("SSL certificate verification succeeded!");
|
||||||
return ECORE_CON_SSL_ERROR_NONE;
|
return ECORE_CON_SSL_ERROR_NONE;
|
||||||
|
|
||||||
|
@ -1412,7 +1411,7 @@ error:
|
||||||
/*
|
/*
|
||||||
if (cert)
|
if (cert)
|
||||||
gnutls_x509_crt_deinit(cert);
|
gnutls_x509_crt_deinit(cert);
|
||||||
*/
|
*/
|
||||||
_ecore_con_ssl_client_shutdown_gnutls(cl);
|
_ecore_con_ssl_client_shutdown_gnutls(cl);
|
||||||
return ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED;
|
return ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED;
|
||||||
}
|
}
|
||||||
|
@ -1681,7 +1680,7 @@ _ecore_con_ssl_server_init_openssl(Ecore_Con_Server *svr)
|
||||||
c = alloca(++clen);
|
c = alloca(++clen);
|
||||||
X509_NAME_get_text_by_NID(X509_get_subject_name(cert), name, c, clen);
|
X509_NAME_get_text_by_NID(X509_get_subject_name(cert), name, c, clen);
|
||||||
INF("CERT NAME: %s\n", c);
|
INF("CERT NAME: %s\n", c);
|
||||||
SSL_ERROR_CHECK_GOTO_ERROR(!_openssl_name_verify(c, svr->verify_name ?: svr->name));
|
SSL_ERROR_CHECK_GOTO_ERROR(!_openssl_name_verify(c, svr->verify_name ? : svr->name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,11 +33,13 @@
|
||||||
// all the types, defines, enums etc. from curl that we actuall USE.
|
// all the types, defines, enums etc. from curl that we actuall USE.
|
||||||
// we have to add to this if we use more things from curl not already
|
// we have to add to this if we use more things from curl not already
|
||||||
// defined here. see culr headers to get them from
|
// defined here. see culr headers to get them from
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
CURLM_CALL_MULTI_PERFORM = -1,
|
CURLM_CALL_MULTI_PERFORM = -1,
|
||||||
CURLM_OK = 0
|
CURLM_OK = 0
|
||||||
} CURLMcode;
|
} CURLMcode;
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
CURLE_OK = 0,
|
CURLE_OK = 0,
|
||||||
CURLE_OPERATION_TIMEDOUT = 28
|
CURLE_OPERATION_TIMEDOUT = 28
|
||||||
} CURLcode;
|
} CURLcode;
|
||||||
|
@ -45,8 +47,9 @@ typedef enum {
|
||||||
#define CURLOPTTYPE_OBJECTPOINT 10000
|
#define CURLOPTTYPE_OBJECTPOINT 10000
|
||||||
#define CURLOPTTYPE_FUNCTIONPOINT 20000
|
#define CURLOPTTYPE_FUNCTIONPOINT 20000
|
||||||
#define CURLOPTTYPE_OFF_T 30000
|
#define CURLOPTTYPE_OFF_T 30000
|
||||||
#define CINIT(na,t,nu) CURLOPT_ ## na = CURLOPTTYPE_ ## t + nu
|
#define CINIT(na, t, nu) CURLOPT_ ## na = CURLOPTTYPE_ ## t + nu
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
CINIT(FILE, OBJECTPOINT, 1),
|
CINIT(FILE, OBJECTPOINT, 1),
|
||||||
CINIT(URL, OBJECTPOINT, 2),
|
CINIT(URL, OBJECTPOINT, 2),
|
||||||
CINIT(PROXY, OBJECTPOINT, 4),
|
CINIT(PROXY, OBJECTPOINT, 4),
|
||||||
|
@ -91,30 +94,37 @@ typedef enum {
|
||||||
#define CURLINFO_SLIST 0x400000
|
#define CURLINFO_SLIST 0x400000
|
||||||
#define CURLINFO_MASK 0x0fffff
|
#define CURLINFO_MASK 0x0fffff
|
||||||
#define CURLINFO_TYPEMASK 0xf00000
|
#define CURLINFO_TYPEMASK 0xf00000
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2,
|
CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2,
|
||||||
} CURLINFO;
|
} CURLINFO;
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
CURLVERSION_FOURTH = 3
|
CURLVERSION_FOURTH = 3
|
||||||
} CURLversion;
|
} CURLversion;
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
CURLMSG_DONE = 1
|
CURLMSG_DONE = 1
|
||||||
} CURLMSG;
|
} CURLMSG;
|
||||||
#undef CINIT
|
#undef CINIT
|
||||||
#define CINIT(name,type,num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
|
#define CINIT(name, type, num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
CINIT(PIPELINING, LONG, 3)
|
CINIT(PIPELINING, LONG, 3)
|
||||||
} CURLMoption;
|
} CURLMoption;
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
CURL_TIMECOND_NONE = 0,
|
CURL_TIMECOND_NONE = 0,
|
||||||
CURL_TIMECOND_IFMODSINCE = 1,
|
CURL_TIMECOND_IFMODSINCE = 1,
|
||||||
CURL_TIMECOND_IFUNMODSINCE = 2
|
CURL_TIMECOND_IFUNMODSINCE = 2
|
||||||
} curl_TimeCond;
|
} curl_TimeCond;
|
||||||
enum {
|
enum
|
||||||
|
{
|
||||||
CURL_HTTP_VERSION_1_0 = 1,
|
CURL_HTTP_VERSION_1_0 = 1,
|
||||||
CURL_HTTP_VERSION_1_1 = 2,
|
CURL_HTTP_VERSION_1_1 = 2,
|
||||||
};
|
};
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
CURLPROXY_HTTP = 0,
|
CURLPROXY_HTTP = 0,
|
||||||
CURLPROXY_SOCKS4 = 4,
|
CURLPROXY_SOCKS4 = 4,
|
||||||
CURLPROXY_SOCKS5 = 5,
|
CURLPROXY_SOCKS5 = 5,
|
||||||
|
@ -122,27 +132,29 @@ typedef enum {
|
||||||
CURLPROXY_SOCKS5_HOSTNAME = 7
|
CURLPROXY_SOCKS5_HOSTNAME = 7
|
||||||
} curl_proxytype;
|
} curl_proxytype;
|
||||||
|
|
||||||
#define CURL_GLOBAL_SSL (1<<0)
|
#define CURL_GLOBAL_SSL (1 << 0)
|
||||||
#define CURL_GLOBAL_WIN32 (1<<1)
|
#define CURL_GLOBAL_WIN32 (1 << 1)
|
||||||
#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
|
#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
|
||||||
#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING
|
#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING
|
||||||
#define CURLOPT_WRITEDATA CURLOPT_FILE
|
#define CURLOPT_WRITEDATA CURLOPT_FILE
|
||||||
#define CURLOPT_READDATA CURLOPT_INFILE
|
#define CURLOPT_READDATA CURLOPT_INFILE
|
||||||
#define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER
|
#define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER
|
||||||
#define CURLVERSION_NOW CURLVERSION_FOURTH
|
#define CURLVERSION_NOW CURLVERSION_FOURTH
|
||||||
#define CURLAUTH_BASIC (((unsigned long)1)<<0)
|
#define CURLAUTH_BASIC (((unsigned long)1) << 0)
|
||||||
#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4)
|
#define CURLAUTH_DIGEST_IE (((unsigned long)1) << 4)
|
||||||
#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE)
|
#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE)
|
||||||
#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE))
|
#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC | CURLAUTH_DIGEST_IE))
|
||||||
#define CURL_READFUNC_ABORT 0x10000000
|
#define CURL_READFUNC_ABORT 0x10000000
|
||||||
|
|
||||||
typedef void CURLM;
|
typedef void CURLM;
|
||||||
typedef void CURL;
|
typedef void CURL;
|
||||||
struct curl_slist {
|
struct curl_slist
|
||||||
|
{
|
||||||
char *data;
|
char *data;
|
||||||
struct curl_slist *next;
|
struct curl_slist *next;
|
||||||
};
|
};
|
||||||
typedef struct {
|
typedef struct
|
||||||
|
{
|
||||||
CURLversion age;
|
CURLversion age;
|
||||||
const char *version;
|
const char *version;
|
||||||
unsigned int version_num;
|
unsigned int version_num;
|
||||||
|
@ -151,23 +163,24 @@ typedef struct {
|
||||||
const char *ssl_version;
|
const char *ssl_version;
|
||||||
long ssl_version_num;
|
long ssl_version_num;
|
||||||
const char *libz_version;
|
const char *libz_version;
|
||||||
const char * const *protocols;
|
const char *const *protocols;
|
||||||
const char *ares;
|
const char *ares;
|
||||||
int ares_num;
|
int ares_num;
|
||||||
const char *libidn;
|
const char *libidn;
|
||||||
int iconv_ver_num;
|
int iconv_ver_num;
|
||||||
const char *libssh_version;
|
const char *libssh_version;
|
||||||
} curl_version_info_data;
|
} curl_version_info_data;
|
||||||
typedef struct {
|
typedef struct
|
||||||
|
{
|
||||||
CURLMSG msg;
|
CURLMSG msg;
|
||||||
CURL *easy_handle;
|
CURL *easy_handle;
|
||||||
union {
|
union
|
||||||
|
{
|
||||||
void *whatever;
|
void *whatever;
|
||||||
CURLcode result;
|
CURLcode result;
|
||||||
} data;
|
} data;
|
||||||
} CURLMsg;
|
} CURLMsg;
|
||||||
|
|
||||||
|
|
||||||
typedef struct _Ecore_Con_Curl Ecore_Con_Curl;
|
typedef struct _Ecore_Con_Curl Ecore_Con_Curl;
|
||||||
|
|
||||||
struct _Ecore_Con_Curl
|
struct _Ecore_Con_Curl
|
||||||
|
@ -176,7 +189,7 @@ struct _Ecore_Con_Curl
|
||||||
|
|
||||||
CURLM *_curlm;
|
CURLM *_curlm;
|
||||||
|
|
||||||
CURLcode (*curl_global_init) (long flags);
|
CURLcode (*curl_global_init)(long flags);
|
||||||
void (*curl_global_cleanup)(void);
|
void (*curl_global_cleanup)(void);
|
||||||
CURLM *(*curl_multi_init)(void);
|
CURLM *(*curl_multi_init)(void);
|
||||||
CURLMcode (*curl_multi_timeout)(CURLM *multi_handle,
|
CURLMcode (*curl_multi_timeout)(CURLM *multi_handle,
|
||||||
|
@ -185,7 +198,7 @@ struct _Ecore_Con_Curl
|
||||||
CURLMcode (*curl_multi_remove_handle)(CURLM *multi_handle,
|
CURLMcode (*curl_multi_remove_handle)(CURLM *multi_handle,
|
||||||
CURL *curl_handle);
|
CURL *curl_handle);
|
||||||
const char *(*curl_multi_strerror)(CURLMcode);
|
const char *(*curl_multi_strerror)(CURLMcode);
|
||||||
CURLMsg *(*curl_multi_info_read)(CURLM *multi_handle,
|
CURLMsg *(*curl_multi_info_read)(CURLM * multi_handle,
|
||||||
int *msgs_in_queue);
|
int *msgs_in_queue);
|
||||||
CURLMcode (*curl_multi_fdset)(CURLM *multi_handle,
|
CURLMcode (*curl_multi_fdset)(CURLM *multi_handle,
|
||||||
fd_set *read_fd_set,
|
fd_set *read_fd_set,
|
||||||
|
@ -268,7 +281,8 @@ _c_init(void)
|
||||||
#endif
|
#endif
|
||||||
if (!_c->mod) goto error;
|
if (!_c->mod) goto error;
|
||||||
|
|
||||||
#define SYM(x) if (!(_c->x = eina_module_symbol_get(_c->mod, #x))) goto error
|
#define SYM(x) if (!(_c->x = eina_module_symbol_get(_c->mod, #x))) \
|
||||||
|
goto error
|
||||||
SYM(curl_global_init);
|
SYM(curl_global_init);
|
||||||
SYM(curl_global_cleanup);
|
SYM(curl_global_cleanup);
|
||||||
SYM(curl_multi_init);
|
SYM(curl_multi_init);
|
||||||
|
@ -431,7 +445,8 @@ ecore_con_url_new(const char *url)
|
||||||
if (_ecore_con_proxy_global->lookup)
|
if (_ecore_con_proxy_global->lookup)
|
||||||
snprintf(host, sizeof(host), "socks5h://%s",
|
snprintf(host, sizeof(host), "socks5h://%s",
|
||||||
_ecore_con_proxy_global->ip);
|
_ecore_con_proxy_global->ip);
|
||||||
else snprintf(host, sizeof(host), "socks5://%s",
|
else
|
||||||
|
snprintf(host, sizeof(host), "socks5://%s",
|
||||||
_ecore_con_proxy_global->ip);
|
_ecore_con_proxy_global->ip);
|
||||||
}
|
}
|
||||||
else if (_ecore_con_proxy_global->version == 4)
|
else if (_ecore_con_proxy_global->version == 4)
|
||||||
|
@ -439,7 +454,8 @@ ecore_con_url_new(const char *url)
|
||||||
if (_ecore_con_proxy_global->lookup)
|
if (_ecore_con_proxy_global->lookup)
|
||||||
snprintf(host, sizeof(host), "socks4a://%s",
|
snprintf(host, sizeof(host), "socks4a://%s",
|
||||||
_ecore_con_proxy_global->ip);
|
_ecore_con_proxy_global->ip);
|
||||||
else snprintf(host, sizeof(host), "socks4://%s",
|
else
|
||||||
|
snprintf(host, sizeof(host), "socks4://%s",
|
||||||
_ecore_con_proxy_global->ip);
|
_ecore_con_proxy_global->ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -549,8 +565,10 @@ ecore_con_url_free(Ecore_Con_Url *url_con)
|
||||||
ECORE_MAGIC_SET(url_con, ECORE_MAGIC_NONE);
|
ECORE_MAGIC_SET(url_con, ECORE_MAGIC_NONE);
|
||||||
|
|
||||||
_c->curl_slist_free_all(url_con->headers);
|
_c->curl_slist_free_all(url_con->headers);
|
||||||
EINA_LIST_FREE(url_con->additional_headers, s) free(s);
|
EINA_LIST_FREE(url_con->additional_headers, s)
|
||||||
EINA_LIST_FREE(url_con->response_headers, s) free(s);
|
free(s);
|
||||||
|
EINA_LIST_FREE(url_con->response_headers, s)
|
||||||
|
free(s);
|
||||||
eina_stringshare_del(url_con->url);
|
eina_stringshare_del(url_con->url);
|
||||||
if (url_con->post_data) free(url_con->post_data);
|
if (url_con->post_data) free(url_con->post_data);
|
||||||
free(url_con);
|
free(url_con);
|
||||||
|
@ -639,7 +657,8 @@ ecore_con_url_additional_headers_clear(Ecore_Con_Url *url_con)
|
||||||
ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, __func__);
|
ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
EINA_LIST_FREE(url_con->additional_headers, s) free(s);
|
EINA_LIST_FREE(url_con->additional_headers, s)
|
||||||
|
free(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void *
|
EAPI void *
|
||||||
|
@ -770,7 +789,8 @@ _ecore_con_url_send(Ecore_Con_Url *url_con, int mode, const void *data, long len
|
||||||
if (url_con->dead) return EINA_FALSE;
|
if (url_con->dead) return EINA_FALSE;
|
||||||
|
|
||||||
/* Free response headers from previous send() calls */
|
/* Free response headers from previous send() calls */
|
||||||
EINA_LIST_FREE(url_con->response_headers, s) free((char *)s);
|
EINA_LIST_FREE(url_con->response_headers, s)
|
||||||
|
free((char *)s);
|
||||||
url_con->response_headers = NULL;
|
url_con->response_headers = NULL;
|
||||||
url_con->status = 0;
|
url_con->status = 0;
|
||||||
|
|
||||||
|
@ -801,7 +821,8 @@ _ecore_con_url_send(Ecore_Con_Url *url_con, int mode, const void *data, long len
|
||||||
else
|
else
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
else _c->curl_easy_setopt(url_con->curl_easy,
|
else
|
||||||
|
_c->curl_easy_setopt(url_con->curl_easy,
|
||||||
CURLOPT_POSTFIELDSIZE, 0);
|
CURLOPT_POSTFIELDSIZE, 0);
|
||||||
if (mode == MODE_POST)
|
if (mode == MODE_POST)
|
||||||
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_POST, 1);
|
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_POST, 1);
|
||||||
|
@ -813,12 +834,14 @@ _ecore_con_url_send(Ecore_Con_Url *url_con, int mode, const void *data, long len
|
||||||
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_TIMECONDITION,
|
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_TIMECONDITION,
|
||||||
CURL_TIMECOND_NONE);
|
CURL_TIMECOND_NONE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECORE_CON_URL_TIME_IFMODSINCE:
|
case ECORE_CON_URL_TIME_IFMODSINCE:
|
||||||
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_TIMECONDITION,
|
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_TIMECONDITION,
|
||||||
CURL_TIMECOND_IFMODSINCE);
|
CURL_TIMECOND_IFMODSINCE);
|
||||||
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_TIMEVALUE,
|
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_TIMEVALUE,
|
||||||
(long)url_con->timestamp);
|
(long)url_con->timestamp);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECORE_CON_URL_TIME_IFUNMODSINCE:
|
case ECORE_CON_URL_TIME_IFUNMODSINCE:
|
||||||
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_TIMECONDITION,
|
_c->curl_easy_setopt(url_con->curl_easy, CURLOPT_TIMECONDITION,
|
||||||
CURL_TIMECOND_IFUNMODSINCE);
|
CURL_TIMECOND_IFUNMODSINCE);
|
||||||
|
@ -1127,11 +1150,13 @@ ecore_con_url_http_version_set(Ecore_Con_Url *url_con, Ecore_Con_Url_Http_Versio
|
||||||
CURLOPT_HTTP_VERSION,
|
CURLOPT_HTTP_VERSION,
|
||||||
CURL_HTTP_VERSION_1_0);
|
CURL_HTTP_VERSION_1_0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECORE_CON_URL_HTTP_VERSION_1_1:
|
case ECORE_CON_URL_HTTP_VERSION_1_1:
|
||||||
res = _c->curl_easy_setopt(url_con->curl_easy,
|
res = _c->curl_easy_setopt(url_con->curl_easy,
|
||||||
CURLOPT_HTTP_VERSION,
|
CURLOPT_HTTP_VERSION,
|
||||||
CURL_HTTP_VERSION_1_1);
|
CURL_HTTP_VERSION_1_1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1157,7 +1182,8 @@ ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy)
|
||||||
}
|
}
|
||||||
if (!url_con->url) return EINA_FALSE;
|
if (!url_con->url) return EINA_FALSE;
|
||||||
if (url_con->dead) return EINA_FALSE;
|
if (url_con->dead) return EINA_FALSE;
|
||||||
if (!proxy) res = _c->curl_easy_setopt(url_con->curl_easy,
|
if (!proxy)
|
||||||
|
res = _c->curl_easy_setopt(url_con->curl_easy,
|
||||||
CURLOPT_PROXY, "");
|
CURLOPT_PROXY, "");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1510,8 +1536,10 @@ _ecore_con_url_curl_clear(void)
|
||||||
Ecore_Fd_Handler *fdh;
|
Ecore_Fd_Handler *fdh;
|
||||||
Ecore_Con_Url *url_con;
|
Ecore_Con_Url *url_con;
|
||||||
|
|
||||||
EINA_LIST_FREE(_fd_hd_list, fdh) ecore_main_fd_handler_del(fdh);
|
EINA_LIST_FREE(_fd_hd_list, fdh)
|
||||||
EINA_LIST_FREE(_url_con_list, url_con) _ecore_con_url_multi_remove(url_con);
|
ecore_main_fd_handler_del(fdh);
|
||||||
|
EINA_LIST_FREE(_url_con_list, url_con)
|
||||||
|
_ecore_con_url_multi_remove(url_con);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -1521,7 +1549,8 @@ _ecore_con_url_fd_handler(void *data EINA_UNUSED, Ecore_Fd_Handler *fd_handler E
|
||||||
long ms;
|
long ms;
|
||||||
|
|
||||||
if (!_c) return ECORE_CALLBACK_CANCEL;
|
if (!_c) return ECORE_CALLBACK_CANCEL;
|
||||||
EINA_LIST_FREE(_fd_hd_list, fdh) ecore_main_fd_handler_del(fdh);
|
EINA_LIST_FREE(_fd_hd_list, fdh)
|
||||||
|
ecore_main_fd_handler_del(fdh);
|
||||||
_c->curl_multi_timeout(_c->_curlm, &ms);
|
_c->curl_multi_timeout(_c->_curlm, &ms);
|
||||||
if ((ms >= CURL_MIN_TIMEOUT) || (ms <= 0)) ms = CURL_MIN_TIMEOUT;
|
if ((ms >= CURL_MIN_TIMEOUT) || (ms <= 0)) ms = CURL_MIN_TIMEOUT;
|
||||||
ecore_timer_interval_set(_curl_timer, (double)ms / 1000.0);
|
ecore_timer_interval_set(_curl_timer, (double)ms / 1000.0);
|
||||||
|
@ -1578,7 +1607,8 @@ _ecore_con_url_timer(void *data EINA_UNUSED)
|
||||||
int still_running;
|
int still_running;
|
||||||
CURLMcode ret;
|
CURLMcode ret;
|
||||||
|
|
||||||
EINA_LIST_FREE(_fd_hd_list, fdh) ecore_main_fd_handler_del(fdh);
|
EINA_LIST_FREE(_fd_hd_list, fdh)
|
||||||
|
ecore_main_fd_handler_del(fdh);
|
||||||
_ecore_con_url_info_read();
|
_ecore_con_url_info_read();
|
||||||
if (!_c) return ECORE_CALLBACK_RENEW;
|
if (!_c) return ECORE_CALLBACK_RENEW;
|
||||||
ret = _c->curl_multi_perform(_c->_curlm, &still_running);
|
ret = _c->curl_multi_perform(_c->_curlm, &still_running);
|
||||||
|
@ -1650,3 +1680,4 @@ _ecore_con_event_url_free(Ecore_Con_Url *url_con, void *ev)
|
||||||
url_con->event_count--;
|
url_con->event_count--;
|
||||||
if (url_con->dead && (!url_con->event_count)) ecore_con_url_free(url_con);
|
if (url_con->dead && (!url_con->event_count)) ecore_con_url_free(url_con);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue