Example #1
0
result_t libwrap_del_evt_listener(int32 mask, int32 listener_idx)
{
	int32 count = 0;
	result_t rc = RESULT_OK;
	listener_t *header = NULL;

	rc = get_listeners(mask, &header);
	if (rc != RESULT_OK) {
		return rc;
	}

	if (header == NULL)
		return RESULT_NONE_POINTER;

	if (listener_idx < 1)
		return RESULT_NO_NODE;
	else
		listener_idx--;

	while (listener_idx) {
		header = header->pnext;
		listener_idx--;
	}

	if (header)
		rc = del_listener(header->url);

	free_listeners(header);

	return rc;

}
Example #2
0
static void free_listeners(qpos_t *listener)
{
	if (listener) 
	{
		free_listeners(listener->next);
		close(*listener->cfd);
		free(listener->cfd);
		free(listener);
	}
}
Example #3
0
result_t libwrap_get_evt_listeners_count(int32 mask, int32 *count)
{
	listener_t *header = NULL;
	listener_t *orig_header;
	result_t rc = RESULT_OK;

	*count = 0;
	rc = get_listeners(mask, &header);
	orig_header = header;
	while (header) {
		*count = *count + 1;
		header = header->pnext;
	}
	free_listeners(orig_header);

	return rc;
}
Example #4
0
result_t libwrap_get_evt_listener(int32 mask, evt_listener_t *listener, int32 listener_idx)
{
	int32 count = 0;
	result_t rc = RESULT_OK;
	listener_t *header = NULL;

	rc = get_listeners(mask, &header);
	if (rc != RESULT_OK) {
		return rc;
	}

	if (header == NULL)
		return RESULT_NONE_POINTER;

	if (listener_idx < 1)
		return RESULT_NO_NODE;
	else
		listener_idx--;

	while (listener_idx) {
		header = header->pnext;
		listener_idx--;
	}

	if (header) {
		memcpy_s(listener->url, sizeof(listener->url), header->url, sizeof(listener->url));
		memcpy_s(listener->event_types, sizeof(listener->event_types), header->event_types, sizeof(listener->event_types));
		memcpy_s(listener->context, sizeof(listener->context), header->context, sizeof(listener->context));
		memcpy_s(listener->protocol, sizeof(listener->protocol), header->protocol, sizeof(listener->protocol));
		memcpy_s(listener->name, sizeof(listener->name), header->name, sizeof(listener->name));
		memcpy_s(listener->description, sizeof(listener->description), header->description, sizeof(listener->description));
		listener->evt_index = header->evt_index;
	}

	free_listeners(header);

	return rc;
}
Example #5
0
/*
* Main
*/
int main(int argc, char* argv[])
{
	if (argc == 1) 
	{
		printf("no port is given.\n");
	}
	else
	{
		printf("Server: initilizing...\n");
		//initialization
		mpos = 0;
		qpos_list = NULL;
		listener_count = 0;
		pthread_rwlock_init(&global_lock, NULL);
		size_t qi;
		for (qi = 0; qi < QUEUE_BACKLOG; qi++)
		{
			messages[qi].msg = (char*)malloc(MESSAGE_LIMIT * sizeof(char));
			pthread_mutex_init(&messages[qi].mutex, NULL);
		}
		//start listening
		int i, rc;
		pthread_t handler_tid[argc - 1];
		in_port_t port[argc - 1];
	   	pthread_attr_t attr;
	    pthread_attr_init(&attr);
 	    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
		for (i = 0; i < argc - 1; i++) 
		{
	    	port[i] = htons(atoi(argv[i + 1]));
	    	rc = pthread_create(&handler_tid[i], &attr, accept_connection, (void*)&port[i]);
	    	printf("Server: start listening port: %hu\n", ntohs(port[i]));
	    	if (rc == -1) 	
	    	{
	    		printf("failed to start accepting connection pthread_create() is %d\n", rc);
         		exit(-1);
	    	}
	    }
	    pthread_attr_destroy(&attr);
	    for (i = 0; i < argc - 1; i++) 
	    {
	    	rc = pthread_join(handler_tid[i], NULL);
	    	if (rc == -1) 
	    	{
	    		printf("failed to join handler pthread_join() is %d\n", rc);
         		exit(-1);
	    	}
	    	 printf("Server: completed join %d handler on port %hu.", i, ntohs(port[i]));
	    }
	    printf("Server: program completed. Free resources.\n");
	    // free resources
	    for (qi = 0; qi < QUEUE_BACKLOG; qi++)
		{
			free(messages[qi].msg);
			pthread_mutex_destroy(&messages[qi].mutex);
		}
	    free_listeners(qpos_list);
	    pthread_rwlock_destroy(&global_lock);
	    pthread_exit(NULL);
	}
    return 0;
}