h = NULL;
}
+void reset_handler(handler* h)
+{
+ debug_printf(ALL, "reset handler");
+ free(h->pnm_image->data);
+ h->pnm_image->data = NULL;
+ free(h->jpg_image->data);
+ h->jpg_image->data = NULL;
+
+ h->state = NOTCONNECTED;
+ h->current_scan_status->current_image_number = 1;
+ h->current_scan_status->available_images = 0;
+ h->current_scan_status->downloaded_images = 0;
+ h->current_scan_status->complete_scanned = 0;
+ h->current_metadata->format = 1;
+ h->current_metadata->channels = 3;
+ h->current_metadata->is_last = 1;
+ h->current_metadata->bytes_per_line = 0;
+ h->current_metadata->pixels_per_line = 0;
+ h->current_metadata->lines = 0;
+ h->current_metadata->depth = 8;
+ h->current_metadata->valid = 0;
+ h->current_metadata->scanned_all_complete = 0;
+ h->read_info->scan_started = 0;
+ h->read_info->cancel = 0;
+ h->read_info->read_size = 0;
+ h->read_info->readed_bytes_per_line = 0;
+ h->read_info->readed_lines = 0;
+}
+
void kds_s2000w_handler_recreate_session(handler* h)
{
kds_s2000w_client_close_session(h->sessionid);
debug_printf(ALL, "sane_kds_s2000w_net_get_parameters");
handler* h = (handler*) handle;
- if (h->read_info->cancel)
- return SANE_STATUS_GOOD;
+ if (h->read_info->cancel) {
+ reset_handler(h);
+ return SANE_STATUS_CANCELLED;
+ }
params->format = h->current_metadata->format;
params->last_frame = h->current_metadata->is_last;
debug_printf(ALL, "sane_kds_s2000w_net_start");
handler* h = (handler*) handle;
+ if (h->read_info->cancel) {
+ reset_handler(h);
+ return SANE_STATUS_CANCELLED;
+ }
+
if (!h->read_info->scan_started) {
h->read_info->cancel = 0;
h->read_info->scan_started = 1;
kds_s2000w_handler_start_scan(h);
}
- if (h->read_info->cancel)
- return SANE_STATUS_GOOD;
-
for (int i = 0; i < 200; i++) {
usleep(500000);
kds_s2000w_handler_get_parameters(h);
// cancel
if (h->read_info->cancel) {
+ reset_handler(h);
*length = 0;
- h->read_info->cancel = 0;
- h->current_scan_status->current_image_number = 1;
- h->current_scan_status->available_images = 0;
- h->current_scan_status->downloaded_images = 0;
- h->current_scan_status->complete_scanned = 0;
- h->current_metadata->pixels_per_line = 0;
- h->current_metadata->lines = 0;
- h->current_metadata->valid = 0;
- h->current_metadata->scanned_all_complete = 0;
- h->read_info->scan_started = 0;
- h->read_info->read_size = 0;
- h->read_info->readed_bytes_per_line = 0;
- h->read_info->readed_lines = 0;
- free(h->jpg_image->data);
- h->jpg_image->data = NULL;
- h->jpg_image->size = 0;
- free(h->pnm_image->data);
- h->pnm_image->data = NULL;
- h->pnm_image->size = 0;
- kds_s2000w_handler_recreate_session(h);
return SANE_STATUS_CANCELLED;
}
handler* h = init_handler();
h->read_info->scan_started = 1;
h->read_info->cancel = 1;
- h->sessionid = 123123;
- h->current_scan_status->current_image_number = 5;
- h->current_scan_status->available_images = 20;
- h->current_scan_status->downloaded_images = 4;
- h->current_scan_status->complete_scanned = 1;
- h->current_metadata->pixels_per_line = 1920;
- h->current_metadata->lines = 1080;
- h->current_metadata->valid = 1;
- h->current_metadata->scanned_all_complete = 1;
- h->read_info->scan_started = 1;
- h->read_info->read_size = 10240;
- h->read_info->readed_bytes_per_line = 1085;
- h->read_info->readed_lines = 150;
- h->jpg_image->data = malloc(sizeof(char) * 50);
- h->jpg_image->size = 50;
- h->jpg_image->data = memset(h->jpg_image->data, 15, h->jpg_image->size);
- h->pnm_image->data = malloc(sizeof(char) * 100);
- h->pnm_image->size = 100;
- h->pnm_image->data = memset(h->pnm_image->data, 66, h->pnm_image->size);
int* length = malloc(sizeof(int));
*length = 0;
- response* resp_open_session = kds_s2000w_client_response_init();
- resp_open_session->data = realloc(resp_open_session->data, 25);
- const char* session_data = "{\"SessionId\":\"8154711\"}\0";
- memcpy(resp_open_session->data, session_data, 25);
- resp_open_session->code = 200;
- resp_open_session->size = 25;
- will_return(mock_response, resp_open_session);
- will_return(__wrap_kds_s2000w_client_open_session, 0);
- response* resp_set_option = kds_s2000w_client_response_init();
- resp_set_option->code = 200;
- will_return(mock_response, resp_set_option);
- will_return(__wrap_kds_s2000w_client_set_option, 0);
- expect_function_call(__wrap_kds_s2000w_client_close_session);
- expect_function_call(__wrap_kds_s2000w_client_open_session);
- expect_function_call(__wrap_kds_s2000w_client_set_option);
SANE_Status status = _sane_kds_s2000w_net_read(h, NULL, 0, length);
assert_int_equal(h->read_info->cancel, 0);
- assert_int_equal(status, SANE_STATUS_CANCELLED);
- assert_int_equal(h->sessionid, 8154711);
- assert_int_equal(h->current_scan_status->current_image_number, 1);
- assert_int_equal(h->current_scan_status->available_images, 0);
- assert_int_equal(h->current_scan_status->downloaded_images, 0);
- assert_int_equal(h->current_scan_status->complete_scanned, 0);
- assert_int_equal(h->current_metadata->pixels_per_line, 0);
- assert_int_equal(h->current_metadata->lines, 0);
- assert_int_equal(h->current_metadata->valid, 0);
- assert_int_equal(h->current_metadata->scanned_all_complete, 0);
assert_int_equal(h->read_info->scan_started, 0);
- assert_int_equal(h->read_info->read_size, 0);
- assert_int_equal(h->read_info->readed_bytes_per_line, 0);
- assert_int_equal(h->read_info->readed_lines, 0);
- assert_null(h->jpg_image->data);
- assert_int_equal(h->jpg_image->size, 0);
- assert_null(h->pnm_image->data);
- assert_int_equal(h->pnm_image->size, 0);
+ assert_int_equal(status, SANE_STATUS_CANCELLED);
free(length);
length = NULL;
- kds_s2000w_client_response_free(resp_open_session);
- resp_open_session = NULL;
- kds_s2000w_client_response_free(resp_set_option);
- resp_set_option = NULL;
free_handler(h);
h = NULL;
}
void sane_kds_s2000w_net_start_cancel()
{
handler* h = init_handler();
- h->read_info->scan_started = 1;
h->read_info->cancel = 1;
SANE_Status status = _sane_kds_s2000w_net_start(h);
- assert_int_equal(h->read_info->cancel, 1);
- assert_int_equal(status, SANE_STATUS_GOOD);
+ assert_int_equal(h->read_info->cancel, 0);
+ assert_int_equal(status, SANE_STATUS_CANCELLED);
free_handler(h);
h = NULL;
SANE_Status status = _sane_kds_s2000w_net_get_parameters(h, NULL);
- assert_int_equal(h->read_info->cancel, 1);
- assert_int_equal(status, SANE_STATUS_GOOD);
+ assert_int_equal(h->read_info->cancel, 0);
+ assert_int_equal(status, SANE_STATUS_CANCELLED);
free_handler(h);
h = NULL;