char* t_send_http_json(const char *url, const char *meth, char *bufResp, int iMaxLen, int &iRespContentLen, const char *pContent) { char bufReq[1024]; static int x = 2; //random snprintf(bufReq, sizeof(bufReq)-10, "%s%s", provisioningLink, url); return download_page2Loc(bufReq, bufResp, iMaxLen, iRespContentLen, dummy_cb, &x, meth, pContent); }
static int getToken(const char *pLink, char *resp, int iMaxLen, void (*cb)(void *p, int ok, const char *pMsg), void *cbRet, const char *pReq="GET", const char *pContent=NULL){ int iRespContentLen=0; int l; char bufResp[4096]; char bufJSonValue[1024]; #if 0 const char *pTest="{\"api_key\": \"z46d3856f8ff292f2eb8dab4e5e51edf5b951fb6e6eb01c80662157z\", \"result\": \"success\"}"; iRespContentLen=strlen(pTest); l=findJSonToken(pTest,iRespContentLen,"api_key",&bufResp[0],1023); if(l>0)printf("token=[%.*s]\n",l,bufResp); l=findJSonToken(pTest,iRespContentLen,"result",&bufResp[0],4095); if(l>0)printf("token=[%.*s]\n",l,bufResp); exit(1); #endif memset(bufResp,0,sizeof(bufResp)); char *p=download_page2Loc(pLink, &bufResp[0], sizeof(bufResp)-50, iRespContentLen,cb,cbRet, pReq, pContent); if(!p){ cb(cbRet,0,"Please check network connection.");//download json fail return -1; } #ifdef PROV_TEST printf("rec[%.*s]\n",iRespContentLen,p);//rem printf("rec-t[%s]\n",bufResp);//rem #endif l=findJSonToken(p,iRespContentLen,"result",&bufJSonValue[0],1023); if(l<=0){ cb(cbRet,0,"ERR: Result is not found"); return -1; } if(strcmp(&bufJSonValue[0],"success")){ l=findJSonToken(p,iRespContentLen,"error_msg",&bufJSonValue[0],1023); if(l>0) cb(cbRet,-1,&bufJSonValue[0]); else{ cb(cbRet,-1,"Could not download configuration!"); } return -1; } l=findJSonToken(p,iRespContentLen,"api_key",&bufJSonValue[0],1023); if(l<=0 || l>256 || l>iMaxLen){ cb(cbRet,0,"ERR: Find api_key failed"); return -1; } int ret=snprintf(resp,iMaxLen,"%s",&bufJSonValue[0]); resp[iMaxLen]=0; #if defined(__APPLE__) int storeAPIKeyToKC(const char *p); storeAPIKeyToKC(resp); #endif return ret; }
char* download_page2(const char *url, char *buf, int iMaxLen, int &iRespContentLen, void (*cb)(void *p, int ok, const char *pMsg), void *cbRet) { return download_page2Loc(url, buf, iMaxLen, iRespContentLen, cb, cbRet, "GET", NULL); }
int createUserOnWeb(const char *pUN, const char *pPWD, const char *pEM, const char *pFN, const char *pLN, void (*cb)(void *p, int ok, const char *pMsg), void *cbRet){ int c, l = 0; int iRespContentLen=0; char bufResp[4096]; char bufBody[4096]; char url[1024]; int ul = snprintf(url,sizeof(url)-10,"%s/v1/user/",provisioningLink); ul+=fixPostEncodingToken(&url[ul],sizeof(url)-10-ul,pUN,strlen(pUN)); url[ul] = '/'; ul++; url[ul]=0; bufBody[0]='{';l = 1; c = t_addJSON(1, &bufBody[l], sizeof(bufBody)-l, "username", pUN); if(!c){ cb(cbRet,0,"Please check Username field."); return -1; } l+=c; c = t_addJSON(0 , &bufBody[l], sizeof(bufBody)-l, "password", pPWD); if(!c){ cb(cbRet,0,"Please check Password field."); return -1; } l+=c; c = t_addJSON(1 , &bufBody[l], sizeof(bufBody)-l, "email", pEM); if(!c){ cb(cbRet,0,"Please check Email field."); return -1; } l+=c; c = t_addJSON(1 , &bufBody[l], sizeof(bufBody)-l, "first_name", pFN); l+=c; c = t_addJSON(1 , &bufBody[l], sizeof(bufBody)-l, "last_name", pLN); l+=c; bufBody[l - 1] = '}';//remove last , from JSON memset(bufResp,0,sizeof(bufResp)); char *p=download_page2Loc(url, &bufResp[0], sizeof(bufResp)-50, iRespContentLen,cb,cbRet, "PUT", bufBody); if(!p){ cb(cbRet,0,"Please check network connection.");//download json fail return -1; } #ifdef PROV_TEST printf("rec[%.*s]\n",iRespContentLen,p);//rem printf("rec-t[%s]\n",bufResp);//rem #endif /* {"last_name": "N", "hash": "7c4219a8bcdbfe71aaa7381a72c0b57d3471ee39", "keys": [], "active_st_device": null, "country_code": "", "silent_text": true, "subscription": {"expires": "1900-01-01T00:00:00Z", "has_expired": true}, "first_name": "J", "display_name": "J N", "avatar_url": null, "silent_phone": false, "force_password_change": false, "permissions": {"can_send_media": true, "silent_text": true, "can_receive_voicemail": false, "silent_desktop": false, "silent_phone": false, "conference_create" */ char bufJSonValue[1024]; l=findJSonToken(p,iRespContentLen,"result",&bufJSonValue[0],1023); if(l<=0){ cb(cbRet,0,"ERR: Result is not found"); return -1; } if(strcmp(&bufJSonValue[0],"success")){ l=findJSonToken(p,iRespContentLen,"error_msg",&bufJSonValue[0],1023); if(l>0) cb(cbRet,-1,&bufJSonValue[0]); else{ cb(cbRet,-1,"Could not download configuration!"); } return -1; } void saveCfgFile(const char *fn, void *p, int iLen); saveCfgFile("userData.json", bufResp, iRespContentLen); return 0; }
char* t_post_json(const char *url, char *bufResp, int iMaxLen, int &iRespContentLen, const char *pContent) { static int x = 1; //random return download_page2Loc(url, bufResp, iMaxLen, iRespContentLen, dummy_cb, &x, "POST", pContent); }