Ejemplo n.º 1
0
static ssize_t morph_handler(machine_t *machine, request_t *request){ // {{{
	ssize_t                ret;
	hash_t                *pipelines;
	morph_userdata        *userdata = (morph_userdata *)machine->userdata;

	if(userdata->running == 0){
		config_t  child_config[] = {
			{ 0, DATA_HASHT(
				hash_inline(request),
				hash_inline(userdata->machine_config),
				hash_end
			)},
			hash_end
		};
		if( (ret = pipelines_new(&pipelines, child_config)) < 0)
			return ret;
		
		userdata->running = 1;
		userdata->machine = pipelines[0].data.ptr;
		data_set_void(&pipelines[0].data);
		hash_free(pipelines);
		
		if(userdata->pass_first == 0)
			return 0;
	}

	return machine_pass(userdata->machine, request);
} // }}}
Ejemplo n.º 2
0
static ssize_t data_fastcall_t_free(data_t *data, fastcall_free *fargs){ // {{{
	fastcall_t            *fdata             = (fastcall_t *)data->ptr;
	
	data_free(&fdata->d_request);
	data_set_void(data);
	return 0;
} // }}}
Ejemplo n.º 3
0
void           data_complexkey_end_t_destroy      (data_t *data){ // {{{
	complexkey_end_t      *fdata             = (complexkey_end_t *)data->ptr;
	
	if(fdata){
		data_free(&fdata->value);
		free(fdata);
	}
	data_set_void(data);
} // }}}
Ejemplo n.º 4
0
static ssize_t iter_list_t_convert_from(hash_t *hash_item, data_t *ctx){ // {{{
	ssize_t                ret;
	list_t                *fdata             = (list_t *)ctx->ptr;
	
	ret = list_t_push(fdata, &hash_item->data);
	data_set_void(&hash_item->data);
	
	return (ret < 0) ? ITER_BREAK : ITER_CONTINUE;
} // }}}
Ejemplo n.º 5
0
static ssize_t try_handler(machine_t *machine, request_t *request){ // {{{
	ssize_t               ret;
	data_t                freeme;
	request_t            *try_request;
	try_userdata         *userdata          = (try_userdata *)machine->userdata;
	try_threaddata       *threaddata        = thread_data_get(&userdata->thread_data);
	
	threaddata->machine  = machine;
	threaddata->request  = request;
	threaddata->ret      = 0;
	
	data_set_void(&freeme);
	
	if(userdata->request == 0){
		try_request = request;
	}else{
		if( (ret = get_hash(hash_data_find(request, userdata->request), &freeme, &try_request)) < 0)
			return ret;
	}
	
	request_t r_next[] = {
		{ userdata->return_to, DATA_MACHINET(userdata->try_end) },
		hash_inline(try_request),
		hash_end
	};
	
	fastcall_query r_query = { { 3, ACTION_QUERY }, r_next };
	if( (ret = data_query(&userdata->machine, &r_query)) < 0){
		if(userdata->request == 0){
			request_t r_pass[] = {
				{ HK(ret), DATA_PTR_SIZET(&ret) },
				hash_inline(request),
				hash_end
			};
			threaddata->ret = machine_pass(machine, r_pass);
		}else{
			request_t r_pass[] = {
				{ HK(ret), DATA_PTR_SIZET(&ret) },
				hash_inline(try_request),
				hash_end
			};
			
			request_t r_next[] = {
				{ HK(ret),               DATA_PTR_SIZET(&ret)   },
				{ userdata->request_out, DATA_PTR_HASHT(r_pass) },
				hash_inline(request),
				hash_end
			};
			threaddata->ret = machine_pass(machine, r_next);
		}
	}
	
	data_free(&freeme);
	return threaddata->ret;
} // }}}
Ejemplo n.º 6
0
static ssize_t data_uint16_t_view(data_t *data, fastcall_view *fargs){ // {{{
	switch(fargs->format){
		case FORMAT(native):;
			fargs->ptr    = &data->ptr;
			fargs->length = sizeof(uint16_t);
			data_set_void(&fargs->freeit);
			return 0;
			
		default:
			break;
	}
	return data_default_view(data, fargs);
} // }}}
Ejemplo n.º 7
0
static ssize_t data_machine_t_convert_from(data_t *dst, fastcall_convert_from *fargs){ // {{{
	ssize_t                ret;
	char                   buffer[DEF_BUFFER_SIZE];
	
	if(fargs->src == NULL)
		return -EINVAL;
	
	switch(fargs->format){
		case FORMAT(native):;
			if(fargs->src->type != TYPE_MACHINET)
				return -EFAULT;
			dst->ptr = fargs->src->ptr;
			machine_acquire(dst->ptr);
			return 0;

		case FORMAT(hash):;
			hash_t                *config;
			hash_t                *pipelines;
			
			data_get(ret, TYPE_HASHT, config, fargs->src);
			if(ret != 0)
				return -EINVAL;
			
			if( (ret = pipelines_new(&pipelines, config)) < 0)
				return ret;
			
			*dst = pipelines[0].data;
			data_set_void(&pipelines[0].data);
			hash_free(pipelines);
			goto check;
		
		case FORMAT(config):;
		case FORMAT(human):;      // TODO data_convert call with FORMAT(native) :(
		default:;
			fastcall_read r_read = { { 5, ACTION_READ }, 0, &buffer, sizeof(buffer) - 1 };
			if(data_query(fargs->src, &r_read) != 0)
				return -EFAULT;
			
			buffer[r_read.buffer_size] = '\0';
			
			dst->ptr = machine_find(buffer);
			goto check;
	}

check:
	if(dst->ptr != NULL)
		return 0;
	
	return -EFAULT;
} // }}}
Ejemplo n.º 8
0
static ssize_t pcre_t_new(pcre_t **pfdata, config_t *config){ // {{{
	ssize_t                ret;
	char                  *cfg_regexp        = NULL;
	int                    options           = 0;
	int                    erroffset;
	const char            *errmsg;
	pcre_t                *fdata;
	
	if( (fdata = calloc(1, sizeof(pcre_t))) == NULL)
		return error("calloc returns null");
	
	hash_data_convert(ret, TYPE_STRINGT, cfg_regexp, config, HDK(regexp));
	if(ret != 0){
		ret = error("regexp not supplied");
		goto error;
	}
	
	if( (fdata->re = pcre_compile(
		cfg_regexp,
		options,
		&errmsg,
		&erroffset,
		NULL)) == NULL
	){
		ret = error("regexp compile failed");
		goto error;
	}
	
	fdata->options = 0;
	fdata->data    = NULL;
	data_set_void(&fdata->freeit);
	
	*pfdata = fdata;
	free(cfg_regexp);
	return 0;
	
error:
	free(fdata);
	return ret;
} // }}}
Ejemplo n.º 9
0
ssize_t       data_default_view          (data_t *data, fastcall_view *fargs){ // {{{
	ssize_t                ret;
	
	switch(fargs->format){
		case FORMAT(native):;
			if(data->ptr == NULL)
				return -EINVAL;
			
			fastcall_length r_len = { { 3, ACTION_LENGTH }, 0, FORMAT(native) };
			data_query(data, &r_len);
			
			fargs->ptr    = data->ptr;
			fargs->length = r_len.length;
			data_set_void(&fargs->freeit);
			return 0;
			
		default:;
			data_t           d_view         = DATA_RAWT_EMPTY();
			
			fastcall_convert_to r_convert = { { 5, ACTION_CONVERT_TO }, &d_view, fargs->format };
			if( (ret = data_query(data, &r_convert)) < 0)
				return ret;
			
			fastcall_view       r_view    = { { 6, ACTION_VIEW }, FORMAT(native) };
			if( (ret = data_query(&d_view, &r_view)) < 0){
				data_free(&d_view);
				return ret;
			}
			
			fargs->ptr    = r_view.ptr;
			fargs->length = r_view.length;
			fargs->freeit = d_view;
			return 0;
	}
	return -ENOSYS;
} // }}}
Ejemplo n.º 10
0
static ssize_t data_uint16_t_free(data_t *data, fastcall_free *fargs){ // {{{
	if(data->ptr != NULL)
		free(data->ptr);
	data_set_void(data);
	return 0;
} // }}}
Ejemplo n.º 11
0
static ssize_t data_complexkey_end_uint_t_free(data_t *data, fastcall_free *fargs){ // {{{
	data_set_void(data);
	return 0;
} // }}}
Ejemplo n.º 12
0
static ssize_t data_list_t_convert_from(data_t *dst, fastcall_convert_from *fargs){ // {{{
	ssize_t                ret               = 0;
	list_t                *fdata;
	uintmax_t              transfered        = 0;
	data_t                 sl_input          = DATA_SLIDERT(fargs->src, 0);
	
	switch(fargs->format){
		case FORMAT(native):
		case FORMAT(human):
		case FORMAT(config):;
			return data_list_t(dst);
			
		case FORMAT(hash):;
			hash_t                *config;
			
			data_get(ret, TYPE_HASHT, config, fargs->src);
			if(ret != 0)
				return -EINVAL;
			
			if((fdata = dst->ptr) == NULL){
				if( (fdata = dst->ptr = list_t_alloc()) == NULL)
					return -ENOMEM;
			}

			if(hash_iter(config, (hash_iterator)&iter_list_t_convert_from, dst, 0) != ITER_OK){
				list_t_free(dst->ptr);
				return -EFAULT;
			}
			return 0;
			
		case FORMAT(packed):;
			data_t                 item;
			data_t                 d_item    = DATA_PTR_DATAT(&item);
			
			if((fdata = dst->ptr) == NULL){
				if( (fdata = dst->ptr = list_t_alloc()) == NULL)
					return -ENOMEM;
			}
			
			while(1){
				data_set_void(&item);
				
				fastcall_convert_from r_convert = { { 5, ACTION_CONVERT_FROM }, &sl_input, FORMAT(packed) };
				if( (ret = data_query(&d_item, &r_convert)) < 0)
					break;
				
				data_slider_t_set_offset(&sl_input, r_convert.transfered, SEEK_CUR);
				
				if(item.type == TYPE_LISTENDT)
					break;
				
				if( (ret = list_t_push(fdata, &item)) < 0)
					break;
			}
			transfered = data_slider_t_get_offset(&sl_input);
			break;

		default:
			return -ENOSYS;
	};
	if(fargs->header.nargs >= 5)
		fargs->transfered = transfered;
	
	return ret;
} // }}}
Ejemplo n.º 13
0
Archivo: api.c Proyecto: samuell/frozen
ssize_t     action_crud_copy_output(fastcall_crud *src, fastcall_crud *dest){ // {{{
	// FIXME change to holder_consume
	*dest->key   = *src->key;   data_set_void(src->key);
	*dest->value = *src->value; data_set_void(src->value);
	return 0;
} // }}}
Ejemplo n.º 14
0
Archivo: api.c Proyecto: samuell/frozen
ssize_t     action_enum_copy_output(fastcall_enum *src, fastcall_enum *dest){ // {{{
	// FIXME change to holder_consume
	*dest->dest = *src->dest; data_set_void(src->dest);
	return 0;
} // }}}
Ejemplo n.º 15
0
Archivo: api.c Proyecto: samuell/frozen
ssize_t     action_pop_copy_output(fastcall_pop *src, fastcall_pop *dest){ // {{{
	// FIXME change to holder_consume
	*dest->data = *src->data; data_set_void(src->data);
	return 0;
} // }}}
Ejemplo n.º 16
0
static ssize_t data_triplet_format_t_free(data_t *data, fastcall_free *fargs) { // {{{
    data_triplet_format_t_destroy(data);
    data_set_void(data);
    return 0;
} // }}}