From 6e9342977913f8759e498b086c4c5c3dbd7cf2e9 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Wed, 24 Jan 2024 20:23:33 +0100 Subject: [PATCH] add current state struct --- src/kds_s2000w_handler.c | 30 ++++++++++++++++++------------ src/kds_s2000w_handler.h | 7 ++++++- src/kds_s2000w_net.c | 6 +++--- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index bd69b8e..c963630 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -7,8 +7,8 @@ #include "kds_s2000w_handler.h" #include "kds_s2000w_client.h" -int64_t _sessionid = 0; json_object* _all_options = NULL; +current_state* state; void _get_all_options() { @@ -23,52 +23,58 @@ void _get_all_options() resp = NULL; } -device_state kds_s2000w_handler_open() +current_state* kds_s2000w_handler_open() { - device_state return_state = NOTCONNECTED; + state = malloc(sizeof(current_state)); + state->sessionid = 0; + state->state = NOTCONNECTED; + + state->state = NOTCONNECTED; CURL *curl = curl_easy_init(); if(!curl) - return NOTCONNECTED; + return state; response* resp = kds_s2000w_client_response_init(); int result = kds_s2000w_client_open_session("hhaalo", resp); if (result != 0 || resp->code == 404) - return_state = NOTCONNECTED; + return state; if (resp->code == 423) - return_state = BUSY; + state->state = BUSY; json_object* resObj = NULL; 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); + state->sessionid = json_object_get_int64(valueObj); valueObj = NULL; - return_state = OPENED; + state->state = OPENED; } json_object_put(resObj); resObj = NULL; kds_s2000w_client_response_free(resp); - return return_state; + return state; } void kds_s2000w_handler_close() { - if (_sessionid == 0) + if (state == NULL || state->sessionid == 0) return; CURL *curl = curl_easy_init(); if(!curl) return; - kds_s2000w_client_close_session(_sessionid); - _sessionid = 0; + kds_s2000w_client_close_session(state->sessionid); + state->sessionid = 0; json_object_put(_all_options); _all_options = NULL; + free(state); + state = NULL; } void kds_s2000w_handler_get_option(int option, void* value) diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index bed32ea..292f49d 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -5,7 +5,12 @@ typedef enum { BUSY } device_state; -device_state kds_s2000w_handler_open(); +typedef struct { + int64_t sessionid; + device_state state; +} current_state; + +current_state* kds_s2000w_handler_open(); void kds_s2000w_handler_close(); void kds_s2000w_handler_get_option(int option, void* value); void kds_s2000w_handler_set_option(int option, void* value); diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 002c067..c275de8 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -53,11 +53,11 @@ SANE_Status _sane_kds_s2000w_net_open(SANE_String_Const devicename, if (strcmp(devicename, "kds_s2000w_net") != 0) return SANE_STATUS_INVAL; - device_state state = kds_s2000w_handler_open(); - if (state == BUSY) + current_state* state = kds_s2000w_handler_open(); + if (state->state == BUSY) return SANE_STATUS_DEVICE_BUSY; - if (state == NOTCONNECTED) + if (state->state == NOTCONNECTED) return SANE_STATUS_IO_ERROR; return SANE_STATUS_GOOD; -- 2.39.5