/**
* @defgroup Ecore_Con_Events_Group Events
- *
- * @li ECORE_CON_CLIENT_ADD: Whenever a client connection is made to an
- * @c Ecore_Con_Server, an event of this type is emitted, allowing the
- * retrieval of the client's ip with @ref ecore_con_client_ip_get and
+ *
+ * @li ECORE_CON_CLIENT_ADD: Whenever a client connection is made to an
+ * @c Ecore_Con_Server, an event of this type is emitted, allowing the
+ * retrieval of the client's ip with @ref ecore_con_client_ip_get and
* associating data with the client using ecore_con_client_data_set.
* @li ECORE_CON_EVENT_CLIENT_DEL: Whenever a client connection to an
* @c Ecore_Con_Server, an event of this type is emitted. The contents of
EAPI extern int ECORE_CON_EVENT_CLIENT_DEL;
/** A server was created */
EAPI extern int ECORE_CON_EVENT_SERVER_ADD;
-/** A server connection was lost */
+/** A server connection was lost */
EAPI extern int ECORE_CON_EVENT_SERVER_DEL;
/** A client connected to the server has sent data */
EAPI extern int ECORE_CON_EVENT_CLIENT_DATA;
* the only example case I've found so far is if a client ssl handshakes
* and then immediately disconnects without sending any further data.
*/
-
+
/* we lost our client! */
Ecore_Con_Event_Client_Del *e;
if (new_fd < 0)
/* error! */
return ECORE_CALLBACK_RENEW;
-
+
if ((svr->client_limit >= 0) && (svr->reject_excess_clients) &&
(svr->client_count >= (unsigned int)svr->client_limit))
goto error;
if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ))
_ecore_con_svr_cl_read(cl);
-
+
else if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_WRITE))
_ecore_con_client_flush(cl);
free(lk);
free(svr);
}
-
{
if (result->ai_canonname)
canonname_len = strlen(result->ai_canonname) + 1;
-
+
tosend_len = sizeof(Ecore_Con_Info) + result->ai_addrlen +
canonname_len;
-
+
if (!(tosend = alloca(tosend_len))) goto on_error;
memset(tosend, 0, tosend_len);
-
+
container = (Ecore_Con_Info *)tosend;
container->size = tosend_len;
-
+
memcpy(&container->info,
result,
sizeof(struct addrinfo));
memcpy(tosend + sizeof(Ecore_Con_Info) + result->ai_addrlen,
result->ai_canonname,
canonname_len);
-
+
if (!getnameinfo(result->ai_addr, result->ai_addrlen,
hbuf, sizeof(hbuf), sbuf, sizeof(sbuf),
NI_NUMERICHOST | NI_NUMERICSERV))
memcpy(container->ip, hbuf, sizeof(container->ip));
memcpy(container->service, sbuf, sizeof(container->service));
}
-
+
err = write(fd[1], tosend, tosend_len);
}
on_error:
if (result)
freeaddrinfo(result);
-
+
err = write(fd[1], "", 1);
close(fd[1]);
#ifdef __USE_ISOC99
_exit(0);
#endif
}
-
+
/* PARENT */
cbdata->handler =
ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _ecore_con_info_exit_handler,
close(fd[0]);
return 0;
}
-
+
info_slaves = (CB_Data *)eina_inlist_append(EINA_INLIST_GET(
info_slaves),
EINA_INLIST_GET(cbdata));
{
torecv_len = container.size;
torecv = malloc(torecv_len);
-
+
memcpy(torecv, &container, sizeof(Ecore_Con_Info));
-
- size = read(ecore_main_fd_handler_fd_get(cbdata->fdh),
+
+ size = read(ecore_main_fd_handler_fd_get(cbdata->fdh),
torecv + sizeof(Ecore_Con_Info),
torecv_len - sizeof(Ecore_Con_Info));
- if ((size > 0) &&
+ if ((size > 0) &&
((size_t)size == torecv_len - sizeof(Ecore_Con_Info)))
{
recv = (Ecore_Con_Info *)torecv;
(torecv + sizeof(Ecore_Con_Info) + recv->info.ai_addrlen);
else
recv->info.ai_canonname = NULL;
-
+
recv->info.ai_next = NULL;
-
+
cbdata->cb_done(cbdata->data, recv);
-
+
free(torecv);
}
else
}
else
cbdata->cb_done(cbdata->data, NULL);
-
+
cbdata->cb_done = NULL;
}
SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_anon_allocate_server_credentials(&svr->anoncred_s));
/* TODO: implement PSK */
// SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_psk_allocate_server_credentials(&svr->pskcred_s));
-
+
gnutls_anon_set_server_dh_params(svr->anoncred_s, svr->dh_params);
gnutls_certificate_set_dh_params(svr->cert, svr->dh_params);
//gnutls_psk_set_server_dh_params(svr->pskcred_s, svr->dh_params);
//SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_psk_allocate_client_credentials(&svr->pskcred_c));
SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_anon_allocate_client_credentials(&svr->anoncred_c));
}
-
+
return ECORE_CON_SSL_ERROR_NONE;
error:
#endif
0
};
- const int mixed_proto[] =
- {
-#ifdef GNUTLS_VERSION_MAX
- GNUTLS_VERSION_MAX,
-#endif
- GNUTLS_TLS1_1,
- GNUTLS_TLS1_0,
- GNUTLS_SSL3,
- 0
+ const int mixed_proto[] =
+ {
+#ifdef GNUTLS_VERSION_MAX
+ GNUTLS_VERSION_MAX,
+#endif
+ GNUTLS_TLS1_1,
+ GNUTLS_TLS1_0,
+ GNUTLS_SSL3,
+ 0
};
if (svr->type & ECORE_CON_USE_SSL2) /* not supported because of security issues */
gnutls_dh_set_prime_bits(svr->session, 512);
gnutls_transport_set_ptr(svr->session, (gnutls_transport_ptr_t)svr->fd);
- do
+ do
{
ret = gnutls_handshake(svr->session);
SSL_ERROR_CHECK_GOTO_ERROR(gnutls_error_is_fatal(ret));
} while (ret < 0);
return ECORE_CON_SSL_ERROR_NONE;
-
+
error:
ERR("gnutls returned with error: %s - %s", gnutls_strerror_name(ret), gnutls_strerror(ret));
_ecore_con_ssl_server_shutdown_gnutls(svr);
#endif
0
};
- const int mixed_proto[] =
- {
-#ifdef GNUTLS_VERSION_MAX
- GNUTLS_VERSION_MAX,
-#endif
- GNUTLS_TLS1_1,
- GNUTLS_TLS1_0,
- GNUTLS_SSL3,
+ const int mixed_proto[] =
+ {
+#ifdef GNUTLS_VERSION_MAX
+ GNUTLS_VERSION_MAX,
+#endif
+ GNUTLS_TLS1_1,
+ GNUTLS_TLS1_0,
+ GNUTLS_SSL3,
0 };
if (cl->host_server->type & ECORE_CON_USE_SSL2) /* not supported because of security issues */
SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_set_default_priority(cl->session));
SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_protocol_set_priority(cl->session, proto));
SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_compression_set_priority(cl->session, compress));
-
+
SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_credentials_set(cl->session, GNUTLS_CRD_ANON, cl->host_server->anoncred_s));
//SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_credentials_set(cl->session, GNUTLS_CRD_PSK, cl->host_server->pskcred_s));
SSL_ERROR_CHECK_GOTO_ERROR(ret = gnutls_credentials_set(cl->session, GNUTLS_CRD_CERTIFICATE, cl->host_server->cert));
gnutls_dh_set_prime_bits(cl->session, 2048);
gnutls_transport_set_ptr(cl->session, (gnutls_transport_ptr_t)cl->fd);
- do
+ do
{
ret = gnutls_handshake(cl->session);
SSL_ERROR_CHECK_GOTO_ERROR(gnutls_error_is_fatal(ret));
_ecore_con_ssl_server_init_openssl(Ecore_Con_Server *svr)
{
int ret = -1;
-
+
SSL_ERROR_CHECK_GOTO_ERROR(!(svr->ssl = SSL_new(svr->ssl_ctx)));
SSL_ERROR_CHECK_GOTO_ERROR(!SSL_set_fd(svr->ssl, svr->fd));
int err = SSL_get_error(cl->ssl, ret);
SSL_ERROR_CHECK_GOTO_ERROR((err == SSL_ERROR_SYSCALL) || (err == SSL_ERROR_SSL));
}
-
+
return ECORE_CON_SSL_ERROR_NONE;
error: