166 lines
3.3 KiB
C
166 lines
3.3 KiB
C
|
|
/*
|
|
* Copyright (C) Igor Sysoev
|
|
* Copyright (C) NGINX, Inc.
|
|
*/
|
|
|
|
#include <nxt_main.h>
|
|
|
|
|
|
static const nxt_service_t nxt_services[] = {
|
|
|
|
#if (NXT_HAVE_KQUEUE)
|
|
{ "engine", "kqueue", &nxt_kqueue_engine },
|
|
#endif
|
|
|
|
#if (NXT_HAVE_EPOLL_EDGE)
|
|
{ "engine", "epoll", &nxt_epoll_edge_engine },
|
|
{ "engine", "epoll_edge", &nxt_epoll_edge_engine },
|
|
{ "engine", "epoll_level", &nxt_epoll_level_engine },
|
|
|
|
#elif (NXT_HAVE_EPOLL)
|
|
{ "engine", "epoll", &nxt_epoll_level_engine },
|
|
{ "engine", "epoll_level", &nxt_epoll_level_engine },
|
|
#endif
|
|
|
|
#if (NXT_HAVE_EVENTPORT)
|
|
{ "engine", "eventport", &nxt_eventport_engine },
|
|
#endif
|
|
|
|
#if (NXT_HAVE_DEVPOLL)
|
|
{ "engine", "devpoll", &nxt_devpoll_engine },
|
|
{ "engine", "/dev/poll", &nxt_devpoll_engine },
|
|
#endif
|
|
|
|
#if (NXT_HAVE_POLLSET)
|
|
{ "engine", "pollset", &nxt_pollset_engine },
|
|
#endif
|
|
|
|
{ "engine", "poll", &nxt_poll_engine },
|
|
{ "engine", "select", &nxt_select_engine },
|
|
|
|
#if (NXT_HAVE_OPENSSL)
|
|
{ "SSL/TLS", "OpenSSL", &nxt_openssl_lib },
|
|
{ "SSL/TLS", "openssl", &nxt_openssl_lib },
|
|
#endif
|
|
|
|
#if (NXT_HAVE_GNUTLS)
|
|
{ "SSL/TLS", "GnuTLS", &nxt_gnutls_lib },
|
|
{ "SSL/TLS", "gnutls", &nxt_gnutls_lib },
|
|
#endif
|
|
|
|
#if (NXT_HAVE_CYASSL)
|
|
{ "SSL/TLS", "CyaSSL", &nxt_cyassl_lib },
|
|
{ "SSL/TLS", "cyassl", &nxt_cyassl_lib },
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
nxt_array_t *
|
|
nxt_services_init(nxt_mp_t *mp)
|
|
{
|
|
nxt_uint_t n;
|
|
nxt_array_t *services;
|
|
nxt_service_t *s;
|
|
const nxt_service_t *service;
|
|
|
|
services = nxt_array_create(mp, 32, sizeof(nxt_service_t));
|
|
|
|
if (nxt_fast_path(services != NULL)) {
|
|
|
|
service = nxt_services;
|
|
n = nxt_nitems(nxt_services);
|
|
|
|
while (n != 0) {
|
|
s = nxt_array_add(services);
|
|
if (nxt_slow_path(s == NULL)) {
|
|
return NULL;
|
|
}
|
|
|
|
*s = *service;
|
|
|
|
service++;
|
|
n--;
|
|
}
|
|
}
|
|
|
|
return services;
|
|
}
|
|
|
|
|
|
nxt_int_t
|
|
nxt_service_add(nxt_array_t *services, const nxt_service_t *service)
|
|
{
|
|
nxt_uint_t n;
|
|
nxt_service_t *s;
|
|
|
|
s = services->elts;
|
|
n = services->nelts;
|
|
|
|
while (n != 0) {
|
|
if (nxt_strcmp(s->type, service->type) != 0) {
|
|
goto next;
|
|
}
|
|
|
|
if (nxt_strcmp(s->name, service->name) != 0) {
|
|
goto next;
|
|
}
|
|
|
|
nxt_thread_log_alert("service \"%s:%s\" is duplicate",
|
|
service->type, service->name);
|
|
return NXT_ERROR;
|
|
|
|
next:
|
|
|
|
s++;
|
|
n--;
|
|
}
|
|
|
|
s = nxt_array_add(services);
|
|
if (nxt_fast_path(s != NULL)) {
|
|
*s = *service;
|
|
return NXT_OK;
|
|
}
|
|
|
|
return NXT_ERROR;
|
|
}
|
|
|
|
|
|
const void *
|
|
nxt_service_get(nxt_array_t *services, const char *type, const char *name)
|
|
{
|
|
nxt_uint_t n;
|
|
const nxt_service_t *s;
|
|
|
|
if (services != NULL) {
|
|
s = services->elts;
|
|
n = services->nelts;
|
|
|
|
} else {
|
|
s = nxt_services;
|
|
n = nxt_nitems(nxt_services);
|
|
}
|
|
|
|
while (n != 0) {
|
|
if (nxt_strcmp(s->type, type) == 0) {
|
|
|
|
if (name == NULL) {
|
|
return s->service;
|
|
}
|
|
|
|
if (nxt_strcmp(s->name, name) == 0) {
|
|
return s->service;
|
|
}
|
|
}
|
|
|
|
s++;
|
|
n--;
|
|
}
|
|
|
|
nxt_thread_log_alert("service \"%s%s%s\" not found",
|
|
type, (name != NULL) ? ":" : "", name);
|
|
|
|
return NULL;
|
|
}
|