static bool HHVM_METHOD(EventHttp, addServerAlias, const String &alias) {
     EventHttpResourceData *resource_data = FETCH_RESOURCE(this_, EventHttpResourceData, s_event_http);
     return evhttp_add_server_alias((evhttp_t *)resource_data->getInternalResourceData(), alias.c_str()) == 0;
 }
Beispiel #2
0
void *http_server(apr_thread_t* t, void* d)
{
	http_server_data_t *server_data = d;
	struct event_config *cfg = event_config_new();
	struct event_base *base = NULL;
	struct evhttp *http = NULL;
	int i = 0;

	event_config_set_flag(cfg, EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST);

	base = event_base_new_with_config(cfg);
	if (!base)
	{
		LOG4C_ERROR(logger, "Couldn't create an event_base: exiting");
		goto done;
	}

	event_config_free(cfg);

	/* Create a new evhttp object to handle requests. */
	http = evhttp_new(base);
	if (!http)
	{
	    LOG4C_ERROR(logger, "couldn't create evhttp. Exiting.");
		goto done;
	}

	evhttp_add_server_alias(http, "TVersity-Virtual-STB");

	for (i = 0; i < server_data->num_handlers; i++)
	{
		evhttp_set_cb(http, server_data->handlers[i].uri, http_request_cb, &(server_data->handlers[i]));
	}

	//set up static file handler
	if (server_data->static_root)
	{
	    evhttp_set_gencb(http, static_files_cb, (void *) server_data->static_root);
	}

	struct evhttp_bound_socket *handle = evhttp_accept_socket_with_handle(http, server_data->sock);
	if (!handle)
	{
        LOG4C_ERROR(logger, "could not accept on socket");
		goto done;
	}

	server_base[server_data->server_index] = base;

	event_base_dispatch(base);

done:
    if(server_data)
        free(server_data);
    if(http)
    {
        evhttp_free(http);
    }
	if (base)
	{
        server_base[server_data->server_index] = NULL;
	    event_base_free(base);
	}

	apr_atomic_dec32(&num_servers);

	return NULL;
}