From: Bastian Dehn Date: Sat, 4 Jan 2025 10:25:21 +0000 (+0100) Subject: refactor open handler X-Git-Tag: v1.0.23^2~9 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=a6ef98cc32d89187159a725512741c87e63cf8ad;p=sane-kds-s2000w-net.git refactor open handler --- diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index ad6fe6f..f6cf7ec 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -283,40 +283,40 @@ void kds_s2000w_handler_open(const char* devicename, void** handle) kds_s2000w_client_init(); response* resp = kds_s2000w_client_response_init(); - int result = kds_s2000w_client_open_session(resp); - - if (resp->code == 408) { - kds_s2000w_client_response_free(resp); - resp = NULL; - sleep(1); - resp = kds_s2000w_client_response_init(); + int result = 0; + for (int i = 0; i < 30; i++) { result = kds_s2000w_client_open_session(resp); - } - if (result != 0 || resp->code == 404) { + if (result != 0) { + h->state = NOTCONNECTED; + break; + } + + if (resp->code == 200) { + h->state = OPENED; + break; + } + + if (resp->code == 423) { + h->state = BUSY; + break; + } + kds_s2000w_client_response_free(resp); resp = NULL; - return; + sleep(1); } - if (resp->code == 423) - h->state = BUSY; - - if (resp->code != 200) { + if (result != 0 || resp->code != 200) { kds_s2000w_client_response_free(resp); resp = NULL; - return; } - h->image->size = 0; - h->image->data = NULL; - h->current_scanner_config = json_tokener_parse(resp->data); json_object* value_object = NULL; json_object_object_get_ex(h->current_scanner_config, "SessionId", &value_object); h->sessionid = json_object_get_int64(value_object); - h->state = OPENED; debug_printf_long(INFO, "SessionId", h->sessionid); value_object = NULL; diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 00ad2fb..dd57a81 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -52,15 +52,16 @@ SANE_Status _sane_kds_s2000w_net_open(SANE_String_Const devicename, if (strcmp(devicename, "kds_s2000w_net") != 0) return SANE_STATUS_INVAL; - kds_s2000w_option_descriptor_init_option_descriptors(); kds_s2000w_handler_open(devicename, handle); handler* h = (handler*) *handle; - if (h->state == BUSY) - return SANE_STATUS_DEVICE_BUSY; if (h->state == NOTCONNECTED) return SANE_STATUS_IO_ERROR; + if (h->state == BUSY) + return SANE_STATUS_DEVICE_BUSY; + + kds_s2000w_option_descriptor_init_option_descriptors(); return SANE_STATUS_GOOD; } diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index d1620bb..e099c85 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -576,7 +576,6 @@ void sane_kds_s2000w_net_open() assert_int_equal(h->sessionid, 1251877821); assert_int_equal(status, SANE_STATUS_GOOD); - kds_s2000w_option_descriptor_free_option_descriptors(); free_handler(h); h = NULL; kds_s2000w_client_response_free(resp); @@ -601,7 +600,6 @@ void sane_kds_s2000w_net_open_busy_device() assert_int_equal(h->state, BUSY); assert_int_equal(status, SANE_STATUS_DEVICE_BUSY); - kds_s2000w_option_descriptor_free_option_descriptors(); free_handler(h); h = NULL; kds_s2000w_client_response_free(resp); @@ -627,7 +625,7 @@ void sane_kds_s2000w_net_open_not_connected() response* resp = kds_s2000w_client_response_init(); resp->code = 0; will_return(mock_response, resp); - will_return(__wrap_kds_s2000w_client_open_session, 0); + will_return(__wrap_kds_s2000w_client_open_session, 1); expect_function_call(__wrap_kds_s2000w_client_open_session); void** hlist = malloc(sizeof(void*));