From: Bastian Dehn Date: Sun, 21 Jan 2024 13:45:04 +0000 (+0100) Subject: add open state X-Git-Tag: v1.0.0^2~494 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=760ab297008570ac290faae90e496015c0db0a4c;p=sane-kds-s2000w-net.git add open state --- diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 7a8b038..e9bfab5 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -9,6 +9,7 @@ typedef struct { char* data; size_t size; + long code; } response; int64_t sessionid = 0; @@ -28,11 +29,12 @@ size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) return fullsize; } -void kds_s2000w_handler_open() +device_state kds_s2000w_handler_open() { + device_state returnState = NOTCONNECTED; CURL *curl = curl_easy_init(); if(!curl) - return; + return NOTCONNECTED; response resp = {0}; curl_easy_setopt(curl, CURLOPT_URL, "http://scanner.lan.hhaalo.de/api/session"); @@ -40,12 +42,23 @@ void kds_s2000w_handler_open() curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"OCPUserName\":\"hhaalo\"}"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*) &resp); - curl_easy_perform(curl); + curl_easy_setopt(curl, CURLINFO_RESPONSE_CODE, &resp.code); + CURLcode result = curl_easy_perform(curl); + + json_object* resObj; + if (result != CURLE_OK || resp.code == 404) + returnState = NOTCONNECTED; - json_object* resObj = json_tokener_parse(resp.data); - json_object* valueObj = NULL; - json_object_object_get_ex(resObj, "SessionId", &valueObj); - sessionid = json_object_get_int64(valueObj); + if (resp.code == 423) + returnState = BUSY; + + if (resp.code == 200) { + resObj = json_tokener_parse(resp.data); + json_object* valueObj = NULL; + json_object_object_get_ex(resObj, "SessionId", &valueObj); + sessionid = json_object_get_int64(valueObj); + returnState = OPENED; + } free(resp.data); resp.data = NULL; @@ -53,6 +66,8 @@ void kds_s2000w_handler_open() resObj = NULL; curl_easy_cleanup(curl); curl = NULL; + + return returnState; } void kds_s2000w_handler_close() diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index 33c8b5c..4f63239 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -1,4 +1,10 @@ #ifndef KDS_S2000W_HANDLER_H -void kds_s2000w_handler_open(); +typedef enum { + NOTCONNECTED, + OPENED, + BUSY +} device_state; + +device_state kds_s2000w_handler_open(); void kds_s2000w_handler_close(); #endif \ No newline at end of file diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index c774f14..219ebac 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -43,7 +43,12 @@ SANE_Status _sane_kds_s2000w_net_open(SANE_String_Const devicename, if (strcmp(devicename, "kds_s2000w_net") != 0) return SANE_STATUS_INVAL; - kds_s2000w_handler_open(); + device_state state = kds_s2000w_handler_open(); + if (state == BUSY) + return SANE_STATUS_DEVICE_BUSY; + + if (state == NOTCONNECTED) + return SANE_STATUS_INVAL; return SANE_STATUS_UNSUPPORTED; }