Example #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);
} // }}}
Example #2
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;
} // }}}
Example #3
0
static ssize_t implode_request(machine_t *machine, request_t *request){ // {{{
	implode_userdata      *userdata          = (implode_userdata *)machine->userdata;
	
	request_t r_next[] = {
		{ userdata->buffer, DATA_PTR_HASHT(request) },
		hash_inline(request),
		hash_end
	};
	return machine_pass(machine, r_next);
} // }}}
Example #4
0
static ssize_t try_end_handler(machine_t *machine, request_t *request){ // {{{
	try_userdata         *userdata          = (try_userdata *)machine->userdata;
	try_threaddata       *threaddata        = thread_data_get(&userdata->thread_data);
	
	if(userdata->request == 0){
		threaddata->ret = machine_pass(threaddata->machine, request);
	}else{
		request_t r_next[] = {
			{ userdata->request_out, DATA_PTR_HASHT(request) },
			hash_inline(threaddata->request),
			hash_end
		};
		threaddata->ret = machine_pass(threaddata->machine, r_next);
	}
	return 0;
} // }}}