size_t MonitorHandleData(void *buffer, size_t size, size_t nmemb, void *userp)
{
int ret = -1;
struct json_object *new_obj;
debug_green("MonitorHandleData file:%s,size:%d,nmemb:%d\n", (char *)buffer, size, nmemb);
new_obj = json_tokener_parse(buffer);
if (!new_obj)
{
ret = -1;
goto err_json_parse;
}
json_object_object_foreach(new_obj, key, val)
{
if(strstr(key, "result") != NULL) {
debug_blue("\t%s: %s\n", key, json_object_to_json_string(val));
if(strstr(json_object_to_json_string(val), "\"false\"") != NULL) {
ret = -1;
goto err_billupload;
}
}
if(strstr(key, "msg") != NULL) {
debug_blue("\t%s: %s\n", key, json_object_to_json_string(val));
}
}
return (size*nmemb);
err_billupload:
json_object_put(new_obj);
err_json_parse:
return 0;
}
int MonitorinfoUpload(void)
{
CURL *curl;
CURLM *multi_handle;
char *monitorinfo="{\"mac\": \"12:34:56:78:90:06\", \"Posstate\": \"0\" , \"Gtsversion\": \"1\", \"Gtsupversion\": \"2\",\
\"Opencomputertime\": \"3\", \"Errormsg\": \"4\", \"Msg\": \"5\",\"billcaptruerVer\": \"6\",\"ConverImageVer\": \"7\",\
\"PortMonVer\": \"8\", \"updateVer\": \"9\",\"iniVer\": \"10\",\"webSocket\": \"11\", \"webSocketstate\": \"12\" }";
int still_running;
struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
struct curl_slist *headerlist = NULL;
static const char buf[] = "Expect:";
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "mac", CURLFORM_COPYCONTENTS, LocalMac, CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "devicetype", CURLFORM_COPYCONTENTS, "未知", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "monitorinfo", CURLFORM_COPYCONTENTS, monitorinfo, CURLFORM_END);
curl = curl_easy_init();
multi_handle = curl_multi_init();
headerlist = curl_slist_append(headerlist, buf);
if(curl && multi_handle) {
curl_easy_setopt(curl, CURLOPT_URL, DeviceMonitorUrl);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, MonitorHandleData);
// curl_easy_setopt(curl, CURLOPT_WRITEDATA, monitorinfo);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
curl_multi_add_handle(multi_handle, curl);
curl_multi_perform(multi_handle, &still_running);
while(still_running) {
struct timeval timeout;
int rc;
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
int maxfd = -1;
long curl_timeo = -1;
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
timeout.tv_sec = 1;
timeout.tv_usec = 0;
curl_multi_timeout(multi_handle, &curl_timeo);
if(curl_timeo >= 0) {
timeout.tv_sec = curl_timeo / 1000;
if(timeout.tv_sec > 1)
timeout.tv_sec = 1;
else
timeout.tv_usec = (curl_timeo % 1000) * 1000;
}
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
switch(rc) {
case -1:
// select error
LOGD("MonitorInfoUpload perform error\n");
break;
case 0:
default:
debug_yellow("MonitorInfoUpload perform!\n");
curl_multi_perform(multi_handle, &still_running);
LOGI("MonitorInfoUpload running: %d!\n", still_running);
break;
}
}
curl_multi_cleanup(multi_handle);
curl_easy_cleanup(curl);
curl_formfree(formpost);
curl_slist_free_all(headerlist);
}
debug_green("remove MonitorInfoUpload:%s\n", monitorinfo);
return 0;
}
static void *__MonitorinfoUpload(void *reg)
{
int ret;
while(1)
{
ret=MonitorinfoUpload();
if(ret==0)
{
debug_yellow("监控信息上传一次\n");
sleep(Shop_info.monitoringintervaltime);
}
else{
debug_red("监控信息上传Failed!!!\n");
break;
}
}
return NULL;
{
int ret = -1;
struct json_object *new_obj;
debug_green("MonitorHandleData file:%s,size:%d,nmemb:%d\n", (char *)buffer, size, nmemb);
new_obj = json_tokener_parse(buffer);
if (!new_obj)
{
ret = -1;
goto err_json_parse;
}
json_object_object_foreach(new_obj, key, val)
{
if(strstr(key, "result") != NULL) {
debug_blue("\t%s: %s\n", key, json_object_to_json_string(val));
if(strstr(json_object_to_json_string(val), "\"false\"") != NULL) {
ret = -1;
goto err_billupload;
}
}
if(strstr(key, "msg") != NULL) {
debug_blue("\t%s: %s\n", key, json_object_to_json_string(val));
}
}
return (size*nmemb);
err_billupload:
json_object_put(new_obj);
err_json_parse:
return 0;
}
int MonitorinfoUpload(void)
{
CURL *curl;
CURLM *multi_handle;
char *monitorinfo="{\"mac\": \"12:34:56:78:90:06\", \"Posstate\": \"0\" , \"Gtsversion\": \"1\", \"Gtsupversion\": \"2\",\
\"Opencomputertime\": \"3\", \"Errormsg\": \"4\", \"Msg\": \"5\",\"billcaptruerVer\": \"6\",\"ConverImageVer\": \"7\",\
\"PortMonVer\": \"8\", \"updateVer\": \"9\",\"iniVer\": \"10\",\"webSocket\": \"11\", \"webSocketstate\": \"12\" }";
int still_running;
struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
struct curl_slist *headerlist = NULL;
static const char buf[] = "Expect:";
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "mac", CURLFORM_COPYCONTENTS, LocalMac, CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "devicetype", CURLFORM_COPYCONTENTS, "未知", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "monitorinfo", CURLFORM_COPYCONTENTS, monitorinfo, CURLFORM_END);
curl = curl_easy_init();
multi_handle = curl_multi_init();
headerlist = curl_slist_append(headerlist, buf);
if(curl && multi_handle) {
curl_easy_setopt(curl, CURLOPT_URL, DeviceMonitorUrl);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, MonitorHandleData);
// curl_easy_setopt(curl, CURLOPT_WRITEDATA, monitorinfo);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
curl_multi_add_handle(multi_handle, curl);
curl_multi_perform(multi_handle, &still_running);
while(still_running) {
struct timeval timeout;
int rc;
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
int maxfd = -1;
long curl_timeo = -1;
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
timeout.tv_sec = 1;
timeout.tv_usec = 0;
curl_multi_timeout(multi_handle, &curl_timeo);
if(curl_timeo >= 0) {
timeout.tv_sec = curl_timeo / 1000;
if(timeout.tv_sec > 1)
timeout.tv_sec = 1;
else
timeout.tv_usec = (curl_timeo % 1000) * 1000;
}
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
switch(rc) {
case -1:
// select error
LOGD("MonitorInfoUpload perform error\n");
break;
case 0:
default:
debug_yellow("MonitorInfoUpload perform!\n");
curl_multi_perform(multi_handle, &still_running);
LOGI("MonitorInfoUpload running: %d!\n", still_running);
break;
}
}
curl_multi_cleanup(multi_handle);
curl_easy_cleanup(curl);
curl_formfree(formpost);
curl_slist_free_all(headerlist);
}
debug_green("remove MonitorInfoUpload:%s\n", monitorinfo);
return 0;
}
static void *__MonitorinfoUpload(void *reg)
{
int ret;
while(1)
{
ret=MonitorinfoUpload();
if(ret==0)
{
debug_yellow("监控信息上传一次\n");
sleep(Shop_info.monitoringintervaltime);
}
else{
debug_red("监控信息上传Failed!!!\n");
break;
}
}
return NULL;
}