]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add open state
authorBastian Dehn <hhaalo@arcor.de>
Sun, 21 Jan 2024 13:45:04 +0000 (14:45 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 21 Jan 2024 13:45:04 +0000 (14:45 +0100)
src/kds_s2000w_handler.c
src/kds_s2000w_handler.h
src/kds_s2000w_net.c

index 7a8b038e645f2f2ba989ce79800def1e22946bb5..e9bfab558dc3ed9824b3e24e9841afc2fba075bc 100644 (file)
@@ -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()
index 33c8b5c5c853060cd112652f98015e04545f2b29..4f632399157b9730b9245ef66683b5da764bb72e 100644 (file)
@@ -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
index c774f149f8b490bc2bbbc39d820853739e367908..219ebacecea01d9a244e58a9b22b2c62e3a1cea2 100644 (file)
@@ -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;
 }