417
virtual gearman_return_t success(gearman_connection_st*)= 0;
422
class EchoCheck : public Check {
424
EchoCheck(gearman_universal_st& universal_,
425
const void *workload_, const size_t workload_size_) :
423
EchoCheck::EchoCheck(gearman_universal_st& universal_,
424
const void *workload_, const size_t workload_size_) :
426
425
_universal(universal_),
427
426
_workload(workload_),
428
427
_workload_size(workload_size_)
432
gearman_return_t success(gearman_connection_st* con)
434
if (con->_packet.command != GEARMAN_COMMAND_ECHO_RES)
436
return gearman_error(_universal, GEARMAN_INVALID_COMMAND, "Wrong command sent in response to ECHO request");
439
if (con->_packet.data_size != _workload_size or
440
memcmp(_workload, con->_packet.data, _workload_size))
442
return gearman_error(_universal, GEARMAN_ECHO_DATA_CORRUPTION, "corruption during echo");
445
return GEARMAN_SUCCESS;
449
gearman_universal_st& _universal;
450
const void *_workload;
451
const size_t _workload_size;
454
class OptionCheck : public Check {
456
OptionCheck(gearman_universal_st& universal_):
431
gearman_return_t EchoCheck::success(gearman_connection_st* con)
433
if (con->_packet.command != GEARMAN_COMMAND_ECHO_RES)
435
return gearman_error(_universal, GEARMAN_INVALID_COMMAND, "Wrong command sent in response to ECHO request");
438
if (con->_packet.data_size != _workload_size or
439
memcmp(_workload, con->_packet.data, _workload_size))
441
return gearman_error(_universal, GEARMAN_ECHO_DATA_CORRUPTION, "corruption during echo");
444
return GEARMAN_SUCCESS;
447
OptionCheck::OptionCheck(gearman_universal_st& universal_):
457
448
_universal(universal_)
460
gearman_return_t success(gearman_connection_st* con)
452
gearman_return_t OptionCheck::success(gearman_connection_st* con)
454
if (con->_packet.command == GEARMAN_COMMAND_ERROR)
462
if (con->_packet.command == GEARMAN_COMMAND_ERROR)
464
return gearman_error(_universal, GEARMAN_INVALID_ARGUMENT, "invalid server option");
467
return GEARMAN_SUCCESS;
456
return gearman_error(_universal, GEARMAN_INVALID_SERVER_OPTION, "invalid server option");
471
gearman_universal_st& _universal;
459
return GEARMAN_SUCCESS;
474
462
static gearman_return_t connection_loop(gearman_universal_st& universal,
475
463
const gearman_packet_st& message,
574
562
bool gearman_request_option(gearman_universal_st &universal,
575
563
gearman_string_t &option)
577
const void *args[]= { gearman_c_str(option) };
578
size_t args_size[]= { gearman_size(option) };
580
gearman_packet_st message;
581
gearman_return_t ret= gearman_packet_create_args(universal, message, GEARMAN_MAGIC_REQUEST,
582
GEARMAN_COMMAND_OPTION_REQ,
585
if (gearman_success(ret))
587
PUSH_BLOCKING(universal);
589
OptionCheck check(universal);
590
ret= connection_loop(universal, message, check);
594
gearman_packet_free(&message);
595
gearman_error(universal, GEARMAN_MEMORY_ALLOCATION_FAILURE, "gearman_packet_create_args()");
599
gearman_packet_free(&message);
601
return gearman_success(ret);
565
char* option_str_cpy = (char*) malloc(gearman_size(option));
567
if (option_str_cpy == NULL)
569
gearman_error(universal, GEARMAN_MEMORY_ALLOCATION_FAILURE, "malloc()");
573
strncpy(option_str_cpy, gearman_c_str(option), gearman_size(option));
575
gearman_server_options_st *server_options = new (std::nothrow) gearman_server_options_st(universal, option_str_cpy, gearman_size(option));
576
if (server_options == NULL)
578
free(option_str_cpy);
579
gearman_error(universal, GEARMAN_MEMORY_ALLOCATION_FAILURE, "new gearman_server_options_st()");
604
586
void gearman_free_all_packets(gearman_universal_st &universal)