#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()
{
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)
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);
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;