1
/* Gearman server and library
2
* Copyright (C) 2008 Brian Aker, Eric Day
5
* Use and distribution licensed under the BSD license. See
6
* the COPYING file in the parent directory for full text.
11
* @brief Gearman core definitions
17
* Private declarations
21
* @addtogroup gearman_private Private Functions
27
* Names of the verbose levels provided.
29
static const char *_verbose_name[GEARMAN_VERBOSE_MAX]=
44
const char *gearman_version(void)
46
return PACKAGE_VERSION;
49
const char *gearman_bugreport(void)
51
return PACKAGE_BUGREPORT;
54
const char *gearman_verbose_name(gearman_verbose_t verbose)
56
if (verbose >= GEARMAN_VERBOSE_MAX)
59
return _verbose_name[verbose];
62
gearman_st *gearman_create(gearman_st *gearman)
66
gearman= malloc(sizeof(gearman_st));
70
gearman->options= GEARMAN_ALLOCATED;
76
gearman->con_count= 0;
77
gearman->job_count= 0;
78
gearman->task_count= 0;
79
gearman->packet_count= 0;
80
gearman->pfds_size= 0;
82
gearman->last_errno= 0;
83
gearman->con_list= NULL;
84
gearman->job_list= NULL;
85
gearman->task_list= NULL;
86
gearman->packet_list= NULL;
88
gearman->log_fn= NULL;
89
gearman->log_fn_arg= NULL;
90
gearman->event_watch= NULL;
91
gearman->event_watch_arg= NULL;
92
gearman->workload_malloc= NULL;
93
gearman->workload_malloc_arg= NULL;
94
gearman->workload_free= NULL;
95
gearman->workload_free_arg= NULL;
96
gearman->task_fn_arg_free_fn= NULL;
97
gearman->queue_fn_arg= NULL;
98
gearman->queue_add_fn= NULL;
99
gearman->queue_flush_fn= NULL;
100
gearman->queue_done_fn= NULL;
101
gearman->queue_replay_fn= NULL;
102
gearman->last_error[0]= 0;
107
gearman_st *gearman_clone(gearman_st *gearman, gearman_st *from)
111
gearman= gearman_create(gearman);
115
gearman->options|= (from->options & (gearman_options_t)~GEARMAN_ALLOCATED);
117
for (con= from->con_list; con != NULL; con= con->next)
119
if (gearman_con_clone(gearman, NULL, con) == NULL)
121
gearman_free(gearman);
126
/* Don't clone job or packet information, this is state information for
127
old and active jobs/connections. */
132
void gearman_free(gearman_st *gearman)
136
gearman_task_st *task;
137
gearman_packet_st *packet;
139
for (con= gearman->con_list; con != NULL; con= gearman->con_list)
140
gearman_con_free(con);
142
for (job= gearman->job_list; job != NULL; job= gearman->job_list)
143
gearman_job_free(job);
145
for (task= gearman->task_list; task != NULL; task= gearman->task_list)
146
gearman_task_free(task);
148
for (packet= gearman->packet_list; packet != NULL;
149
packet= gearman->packet_list)
151
gearman_packet_free(packet);
154
if (gearman->pfds != NULL)
157
if (gearman->options & GEARMAN_ALLOCATED)
161
const char *gearman_error(gearman_st *gearman)
163
return (const char *)(gearman->last_error);
166
int gearman_errno(gearman_st *gearman)
168
return gearman->last_errno;
171
void gearman_set_options(gearman_st *gearman, gearman_options_t options,
175
gearman->options |= options;
177
gearman->options &= ~options;
180
void gearman_set_log(gearman_st *gearman, gearman_log_fn log_fn,
181
void *log_fn_arg, gearman_verbose_t verbose)
183
gearman->log_fn= log_fn;
184
gearman->log_fn_arg= log_fn_arg;
185
gearman->verbose= verbose;
188
void gearman_set_event_watch(gearman_st *gearman,
189
gearman_event_watch_fn *event_watch,
190
void *event_watch_arg)
192
gearman->event_watch= event_watch;
193
gearman->event_watch_arg= event_watch_arg;
196
void gearman_set_workload_malloc(gearman_st *gearman,
197
gearman_malloc_fn *workload_malloc,
198
const void *workload_malloc_arg)
200
gearman->workload_malloc= workload_malloc;
201
gearman->workload_malloc_arg= workload_malloc_arg;
204
void gearman_set_workload_free(gearman_st *gearman,
205
gearman_free_fn *workload_free,
206
const void *workload_free_arg)
208
gearman->workload_free= workload_free;
209
gearman->workload_free_arg= workload_free_arg;
212
void gearman_set_task_fn_arg_free(gearman_st *gearman,
213
gearman_task_fn_arg_free_fn *free_fn)
215
gearman->task_fn_arg_free_fn= free_fn;
218
void *gearman_queue_fn_arg(gearman_st *gearman)
220
return (void *)gearman->queue_fn_arg;
223
void gearman_set_queue_fn_arg(gearman_st *gearman, const void *fn_arg)
225
gearman->queue_fn_arg= fn_arg;
228
void gearman_set_queue_add(gearman_st *gearman, gearman_queue_add_fn *add_fn)
230
gearman->queue_add_fn= add_fn;
233
void gearman_set_queue_flush(gearman_st *gearman,
234
gearman_queue_flush_fn *flush_fn)
236
gearman->queue_flush_fn= flush_fn;
239
void gearman_set_queue_done(gearman_st *gearman,
240
gearman_queue_done_fn *done_fn)
242
gearman->queue_done_fn= done_fn;
245
void gearman_set_queue_replay(gearman_st *gearman,
246
gearman_queue_replay_fn *replay_fn)
248
gearman->queue_replay_fn= replay_fn;
251
gearman_return_t gearman_parse_servers(const char *servers, void *data,
252
gearman_parse_server_fn *server_fn)
254
const char *ptr= servers;
256
char host[NI_MAXHOST];
257
char port[NI_MAXSERV];
258
gearman_return_t ret;
261
return (*server_fn)(NULL, 0, data);
267
while (*ptr != 0 && *ptr != ',' && *ptr != ':')
269
if (x < (NI_MAXHOST - 1))
282
while (*ptr != 0 && *ptr != ',')
284
if (x < (NI_MAXSERV - 1))
295
ret= (*server_fn)(host, (in_port_t)atoi(port), data);
296
if (ret != GEARMAN_SUCCESS)
305
return GEARMAN_SUCCESS;