typedef struct {
char* data;
size_t size;
+ long code;
} response;
int64_t sessionid = 0;
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");
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;
resObj = NULL;
curl_easy_cleanup(curl);
curl = NULL;
+
+ return returnState;
}
void kds_s2000w_handler_close()
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;
}