/*
 *  Client creation and destruction interfaces for JACK engine.
 *
 *  Copyright (C) 2001-2003 Paul Davis
 *  Copyright (C) 2004 Jack O'Quin
 *  
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License as
 *  published by the Free Software Foundation; either version 2 of the
 *  License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

static inline int 
jack_client_is_internal (jack_client_internal_t *client)
{
	return (client->control->type == ClientInternal) ||
		(client->control->type == ClientDriver);
}

static inline char *
jack_client_state_name (jack_client_internal_t *client)
{
	static char *client_state_names[] = {
		"Not triggered",
		"Triggered",
		"Running",
		"Finished"
	};

	return client_state_names[client->control->state];
}

#define JACK_ERROR_WITH_SOCKETS 10000000

int	jack_client_activate (jack_engine_t *engine, jack_uuid_t id);
int	jack_client_deactivate (jack_engine_t *engine, jack_uuid_t id);
int	jack_client_create (jack_engine_t *engine, int client_fd);
void	jack_client_delete (jack_engine_t *engine,
			    jack_client_internal_t *client);
int	jack_mark_client_socket_error (jack_engine_t *engine, int fd);
jack_client_internal_t *
	jack_create_driver_client (jack_engine_t *engine, char *name);
void	jack_intclient_handle_request (jack_engine_t *engine,
				       jack_request_t *req);
void	jack_intclient_load_request (jack_engine_t *engine,
				     jack_request_t *req);
void	jack_intclient_name_request (jack_engine_t *engine,
				     jack_request_t *req);
void	jack_intclient_unload_request (jack_engine_t *engine,
				       jack_request_t *req);
int	jack_check_clients (jack_engine_t* engine, int with_timeout_check);
void	jack_remove_clients (jack_engine_t* engine, int* exit_freewheeling);
void    jack_client_registration_notify (jack_engine_t *engine,
					 const char* name, int yn);
void jack_property_change_notify (jack_engine_t *engine, jack_property_change_t change, jack_uuid_t uuid, const char* key);

void jack_remove_client (jack_engine_t *engine, jack_client_internal_t *client);
