bool as_event_command_parse_result(as_event_command* cmd) { as_msg* msg = (as_msg*)cmd->buf; as_msg_swap_header_from_be(msg); uint8_t* p = cmd->buf + sizeof(as_msg); as_status status = msg->result_code; switch (status) { case AEROSPIKE_OK: { as_record rec; if (msg->n_ops < 1000) { as_record_inita(&rec, msg->n_ops); } else { as_record_init(&rec, msg->n_ops); } rec.gen = msg->generation; rec.ttl = cf_server_void_time_to_ttl(msg->record_ttl); p = as_command_ignore_fields(p, msg->n_fields); as_command_parse_bins(&rec, p, msg->n_ops, cmd->deserialize); as_event_response_complete(cmd); ((as_async_record_command*)cmd)->listener(0, &rec, cmd->udata, cmd->event_loop); as_event_command_release(cmd); as_record_destroy(&rec); break; } case AEROSPIKE_ERR_UDF: { as_error err; as_command_parse_udf_failure(p, &err, msg, status); as_event_response_error(cmd, &err); break; } default: { as_error err; as_error_set_message(&err, status, as_error_string(status)); as_event_response_error(cmd, &err); break; } } return true; }
static bool as_scan_parse_records_async(as_event_command* cmd) { as_error err; as_event_executor* executor = cmd->udata; // udata is overloaded to contain executor. uint8_t* p = cmd->buf; uint8_t* end = p + cmd->len; while (p < end) { as_msg* msg = (as_msg*)p; as_msg_swap_header_from_be(msg); if (msg->result_code) { // Special case - if we scan a set name that doesn't exist on a // node, it will return "not found". if (msg->result_code == AEROSPIKE_ERR_RECORD_NOT_FOUND) { as_event_query_complete(cmd); return true; } as_error_set_message(&err, msg->result_code, as_error_string(msg->result_code)); as_event_response_error(cmd, &err); return true; } p += sizeof(as_msg); if (msg->info3 & AS_MSG_INFO3_LAST) { as_event_query_complete(cmd); return true; } if (! executor->valid) { as_error_set_message(&err, AEROSPIKE_ERR_CLIENT_ABORT, ""); as_event_response_error(cmd, &err); return true; } if (as_scan_parse_record_async(cmd, &p, msg, &err) != AEROSPIKE_OK) { as_event_response_error(cmd, &err); return true; } } return false; }
bool as_event_command_parse_success_failure(as_event_command* cmd) { as_msg* msg = (as_msg*)cmd->buf; as_msg_swap_header_from_be(msg); uint8_t* p = cmd->buf + sizeof(as_msg); as_status status = msg->result_code; switch (status) { case AEROSPIKE_OK: { as_error err; as_val* val = 0; status = as_command_parse_success_failure_bins(&p, &err, msg, &val); if (status == AEROSPIKE_OK) { as_event_response_complete(cmd); ((as_async_value_command*)cmd)->listener(0, val, cmd->udata, cmd->event_loop); as_event_command_release(cmd); as_val_destroy(val); } else { as_event_response_error(cmd, &err); } break; } case AEROSPIKE_ERR_UDF: { as_error err; as_command_parse_udf_failure(p, &err, msg, status); as_event_response_error(cmd, &err); break; } default: { as_error err; as_error_set_message(&err, status, as_error_string(status)); as_event_response_error(cmd, &err); break; } } return true; }
bool as_event_command_parse_header(as_event_command* cmd) { as_msg* msg = (as_msg*)cmd->buf; if (msg->result_code == AEROSPIKE_OK) { as_event_response_complete(cmd); ((as_async_write_command*)cmd)->listener(0, cmd->udata, cmd->event_loop); as_event_command_release(cmd); } else { as_error err; as_error_set_message(&err, msg->result_code, as_error_string(msg->result_code)); as_event_response_error(cmd, &err); } return true; }