static void QBox_Token_ret(QBox_Token* self, QBox_Json* root, QBox_Error* err) { QBox_Int64 expiry; const char* accessToken = QBox_Json_GetString(root, "access_token", NULL); const char* refreshToken = QBox_Json_GetString(root, "refresh_token", NULL); if (accessToken == NULL || refreshToken == NULL) { err->code = 9998; err->message = "unexcepted response"; } else { expiry = QBox_Seconds() + QBox_Json_GetInt64(root, "expires_in", 0); QBox_Token_set(self, accessToken, refreshToken, expiry); } }
static QBox_Error QBox_callex(CURL* curl, QBox_Buffer *resp, QBox_Json** ret, QBox_Bool simpleError) { QBox_Error err; CURLcode curlCode; long httpCode; QBox_Json* root; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, QBox_Buffer_Fwrite); curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp); curlCode = curl_easy_perform(curl); if (curlCode == 0) { curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode); if (QBox_Buffer_Len(resp) != 0) { root = cJSON_Parse(QBox_Buffer_CStr(resp)); } else { root = NULL; } *ret = root; err.code = (int)httpCode; if (httpCode / 100 != 2) { if (simpleError) { err.message = g_statusCodeError; } else { err.message = QBox_Json_GetString(root, "error", g_statusCodeError); } } else { err.message = "OK"; } } else { *ret = NULL; err.code = curlCode; err.message = "curl_easy_perform error"; } return err; }
static QBox_Error QBox_Io_call( QBox_Client* self, QBox_Io_PutRet* ret, struct curl_httppost* formpost, char* action) { QBox_Error err; CURL* curl = QBox_Client_reset(self); char* url = QBox_String_Concat2(QBOX_UP_HOST, "/upload"); struct curl_slist* headers = curl_slist_append(NULL, "Expect:"); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); err = QBox_callex(curl, &self->b, &self->root, QBox_False, &self->respHeader); if (err.code == 200 && ret != NULL) { ret->hash = QBox_Json_GetString(self->root, "hash", NULL); } curl_formfree(formpost); free(action); free(url); return err; }