00001 /* Gearman server and library 00002 * Copyright (C) 2008 Brian Aker, Eric Day 00003 * All rights reserved. 00004 * 00005 * Use and distribution licensed under the BSD license. See 00006 * the COPYING file in the parent directory for full text. 00007 */ 00008 00014 #ifndef __GEARMAN_STRUCTS_H__ 00015 #define __GEARMAN_STRUCTS_H__ 00016 00017 #ifdef __cplusplus 00018 extern "C" { 00019 #endif 00020 00024 struct gearman_st 00025 { 00026 gearman_options_t options; 00027 gearman_verbose_t verbose; 00028 uint32_t con_count; 00029 uint32_t packet_count; 00030 uint32_t pfds_size; 00031 uint32_t sending; 00032 int last_errno; 00033 int timeout; 00034 gearman_con_st *con_list; 00035 gearman_packet_st *packet_list; 00036 struct pollfd *pfds; 00037 gearman_log_fn *log_fn; 00038 const void *log_context; 00039 gearman_event_watch_fn *event_watch_fn; 00040 const void *event_watch_context; 00041 gearman_malloc_fn *workload_malloc_fn; 00042 const void *workload_malloc_context; 00043 gearman_free_fn *workload_free_fn; 00044 const void *workload_free_context; 00045 char last_error[GEARMAN_MAX_ERROR_SIZE]; 00046 }; 00047 00051 struct gearman_packet_st 00052 { 00053 gearman_packet_options_t options; 00054 gearman_magic_t magic; 00055 gearman_command_t command; 00056 uint8_t argc; 00057 size_t args_size; 00058 size_t data_size; 00059 gearman_st *gearman; 00060 gearman_packet_st *next; 00061 gearman_packet_st *prev; 00062 uint8_t *args; 00063 const void *data; 00064 uint8_t *arg[GEARMAN_MAX_COMMAND_ARGS]; 00065 size_t arg_size[GEARMAN_MAX_COMMAND_ARGS]; 00066 uint8_t args_buffer[GEARMAN_ARGS_BUFFER_SIZE]; 00067 }; 00068 00072 struct gearman_command_info_st 00073 { 00074 const char *name; 00075 const uint8_t argc; 00076 const bool data; 00077 }; 00078 00082 struct gearman_con_st 00083 { 00084 gearman_con_options_t options; 00085 gearman_con_state_t state; 00086 gearman_con_send_state_t send_state; 00087 gearman_con_recv_state_t recv_state; 00088 in_port_t port; 00089 short events; 00090 short revents; 00091 int fd; 00092 uint32_t created_id; 00093 uint32_t created_id_next; 00094 size_t send_buffer_size; 00095 size_t send_data_size; 00096 size_t send_data_offset; 00097 size_t recv_buffer_size; 00098 size_t recv_data_size; 00099 size_t recv_data_offset; 00100 gearman_st *gearman; 00101 gearman_con_st *next; 00102 gearman_con_st *prev; 00103 const void *context; 00104 struct addrinfo *addrinfo; 00105 struct addrinfo *addrinfo_next; 00106 uint8_t *send_buffer_ptr; 00107 gearman_packet_st *recv_packet; 00108 uint8_t *recv_buffer_ptr; 00109 const void *protocol_context; 00110 gearman_con_protocol_context_free_fn *protocol_context_free_fn; 00111 gearman_packet_pack_fn *packet_pack_fn; 00112 gearman_packet_unpack_fn *packet_unpack_fn; 00113 gearman_packet_st packet; 00114 char host[NI_MAXHOST]; 00115 uint8_t send_buffer[GEARMAN_SEND_BUFFER_SIZE]; 00116 uint8_t recv_buffer[GEARMAN_RECV_BUFFER_SIZE]; 00117 }; 00118 00122 struct gearman_task_st 00123 { 00124 gearman_task_options_t options; 00125 gearman_task_state_t state; 00126 bool is_known; 00127 bool is_running; 00128 uint32_t created_id; 00129 uint32_t numerator; 00130 uint32_t denominator; 00131 gearman_client_st *client; 00132 gearman_task_st *next; 00133 gearman_task_st *prev; 00134 const void *context; 00135 gearman_con_st *con; 00136 gearman_packet_st *recv; 00137 gearman_packet_st send; 00138 char job_handle[GEARMAN_JOB_HANDLE_SIZE]; 00139 }; 00140 00144 struct gearman_job_st 00145 { 00146 gearman_job_options_t options; 00147 gearman_worker_st *worker; 00148 gearman_job_st *next; 00149 gearman_job_st *prev; 00150 gearman_con_st *con; 00151 gearman_packet_st assigned; 00152 gearman_packet_st work; 00153 }; 00154 00158 struct gearman_client_st 00159 { 00160 gearman_client_options_t options; 00161 gearman_client_state_t state; 00162 gearman_return_t do_ret; 00163 uint32_t new_tasks; 00164 uint32_t running_tasks; 00165 uint32_t task_count; 00166 size_t do_data_size; 00167 gearman_st *gearman; 00168 const void *context; 00169 gearman_con_st *con; 00170 gearman_task_st *task; 00171 gearman_task_st *task_list; 00172 gearman_task_context_free_fn *task_context_free_fn; 00173 void *do_data; 00174 gearman_workload_fn *workload_fn; 00175 gearman_created_fn *created_fn; 00176 gearman_data_fn *data_fn; 00177 gearman_warning_fn *warning_fn; 00178 gearman_status_fn *status_fn; 00179 gearman_complete_fn *complete_fn; 00180 gearman_exception_fn *exception_fn; 00181 gearman_fail_fn *fail_fn; 00182 gearman_st gearman_static; 00183 gearman_task_st do_task; 00184 }; 00185 00189 struct gearman_worker_st 00190 { 00191 gearman_worker_options_t options; 00192 gearman_worker_state_t state; 00193 gearman_worker_work_state_t work_state; 00194 uint32_t function_count; 00195 uint32_t job_count; 00196 size_t work_result_size; 00197 gearman_st *gearman; 00198 const void *context; 00199 gearman_con_st *con; 00200 gearman_job_st *job; 00201 gearman_job_st *job_list; 00202 gearman_worker_function_st *function; 00203 gearman_worker_function_st *function_list; 00204 gearman_worker_function_st *work_function; 00205 void *work_result; 00206 gearman_st gearman_static; 00207 gearman_packet_st grab_job; 00208 gearman_packet_st pre_sleep; 00209 gearman_job_st work_job; 00210 }; 00211 00215 struct gearman_worker_function_st 00216 { 00217 gearman_worker_function_options_t options; 00218 gearman_worker_function_st *next; 00219 gearman_worker_function_st *prev; 00220 char *function_name; 00221 gearman_worker_fn *worker_fn; 00222 const void *context; 00223 gearman_packet_st packet; 00224 }; 00225 00226 #ifdef __cplusplus 00227 } 00228 #endif 00229 00230 #endif /* __GEARMAN_STRUCTS_H__ */