From: Bastian Dehn Date: Mon, 20 Oct 2025 18:46:19 +0000 (+0200) Subject: change connect to scanner extra method X-Git-Tag: v1.1.15^2~5 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=3ed1a9888e21dc50f6229e81364c8c1430c0ecc3;p=sane-kds-s2000w-net.git change connect to scanner extra method --- diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 794b60c..b0f36b9 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -136,6 +136,55 @@ void _kds_s2000w_handler_set_default_metadata(metadata_t* params) params->depth = 8; } +connection_state_t _kds_s2000w_handler_connect(handler_t* h) +{ + response_t* resp = NULL; + uint8_t result = 0; + connection_state_t connection_state = NOTCONNECTED; + for (uint32_t i = 0; i < ATTEMPT; i++) { + kds_s2000w_client_response_free(resp); + resp = NULL; + resp = kds_s2000w_client_response_init(); + result = kds_s2000w_client_open_session(resp); + + if (result != 0) { + connection_state = NOTCONNECTED; + break; + } + + if (resp->code == 200) { + connection_state = OPENED; + break; + } + + if (resp->code == 423) { + connection_state = BUSY; + break; + } + + sleep(1); + } + + if (result != 0 || resp->code != 200) { + kds_s2000w_client_response_free(resp); + resp = NULL; + kds_s2000w_client_free(); + return connection_state; + } + + json_object* session_json = json_tokener_parse(resp->data); + json_object* value_object = json_object_object_get(session_json, "SessionId"); + h->sessionid = json_object_get_int64(value_object); + kds_s2000w_debug_printf_long(INFO, "SessionId", h->sessionid); + + json_object_put(session_json); + session_json = NULL; + kds_s2000w_client_response_free(resp); + resp = NULL; + + return connection_state; +} + handler_t* kds_s2000w_handler_init() { kds_s2000w_debug_printf(ALL, "init handler"); @@ -219,52 +268,7 @@ connection_state_t kds_s2000w_handler_open(const char* devicename, void** handle _kds_s2000w_handler_load_config(h); kds_s2000w_debug_printf_version(INFO, DEVICE_NAME, MAJOR, MINOR, PATCH); - /* status code 408 request timeout waking up repeat open session */ - response_t* resp = NULL; - uint8_t result = 0; - uint8_t connection_state = NOTCONNECTED; - for (uint32_t i = 0; i < ATTEMPT; i++) { - kds_s2000w_client_response_free(resp); - resp = NULL; - resp = kds_s2000w_client_response_init(); - result = kds_s2000w_client_open_session(resp); - - if (result != 0) { - connection_state = NOTCONNECTED; - break; - } - - if (resp->code == 200) { - connection_state = OPENED; - break; - } - - if (resp->code == 423) { - connection_state = BUSY; - break; - } - - sleep(1); - } - - if (result != 0 || resp->code != 200) { - kds_s2000w_client_response_free(resp); - resp = NULL; - kds_s2000w_client_free(); - return connection_state; - } - - json_object* session_json = json_tokener_parse(resp->data); - json_object* value_object = json_object_object_get(session_json, "SessionId"); - h->sessionid = json_object_get_int64(value_object); - kds_s2000w_debug_printf_long(INFO, "SessionId", h->sessionid); - - json_object_put(session_json); - session_json = NULL; - kds_s2000w_client_response_free(resp); - resp = NULL; - - return connection_state; + return _kds_s2000w_handler_connect(h); } void kds_s2000w_handler_close(handler_t* h)