Пример #1
0
static Qiniu_Error Qiniu_Io_call(
	Qiniu_Client* self, Qiniu_Io_PutRet* ret, struct curl_httppost* formpost)
{
	Qiniu_Error err;

	CURL* curl = Qiniu_Client_reset(self);
	struct curl_slist* headers = curl_slist_append(NULL, "Expect:");

	curl_easy_setopt(curl, CURLOPT_URL, QINIU_UP_HOST);
	curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
	curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

	err = Qiniu_callex(curl, &self->b, &self->root, Qiniu_False, &self->respHeader);
	if (err.code == 200 && ret != NULL) {
		ret->hash = Qiniu_Json_GetString(self->root, "hash", NULL);
		ret->key = Qiniu_Json_GetString(self->root, "key", NULL);
	}

	curl_formfree(formpost);
	/*
	 * Bug No.(4718) Wang Xiaotao 2013\10\17 17:46:07
	 * Change for : free  variable 'headers'
	 * Reason     : memory leak!
	 */
	curl_slist_free_all(headers);
	return err;
}
Пример #2
0
Файл: rs.c Проект: AlunYou/c-sdk
Qiniu_Error Qiniu_RS_Stat(
	Qiniu_Client* self, Qiniu_RS_StatRet* ret, const char* tableName, const char* key)
{
	Qiniu_Error err;
	cJSON* root;

	char* entryURI = Qiniu_String_Concat3(tableName, ":", key);
	char* entryURIEncoded = Qiniu_String_Encode(entryURI);
	char* url = Qiniu_String_Concat3(QINIU_RS_HOST, "/stat/", entryURIEncoded);

	Qiniu_Free(entryURI);
	Qiniu_Free(entryURIEncoded);

	err = Qiniu_Client_Call(self, &root, url);
	Qiniu_Free(url);

	if (err.code == 200) {
		ret->hash = Qiniu_Json_GetString(root, "hash", 0);
		ret->mimeType = Qiniu_Json_GetString(root, "mimeType", 0);
		ret->fsize = Qiniu_Json_GetInt64(root, "fsize", 0);
		ret->putTime = Qiniu_Json_GetInt64(root, "putTime", 0);
	}
	return err;
}
Пример #3
0
Qiniu_Error Qiniu_callex(CURL* curl, Qiniu_Buffer *resp, Qiniu_Json** ret, Qiniu_Bool simpleError, Qiniu_Buffer *resph)
{
	Qiniu_Error err;
	CURLcode curlCode;
	long httpCode;
	Qiniu_Json* root;

	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Qiniu_Buffer_Fwrite);
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp);
	if (resph != NULL) {
		curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, Qiniu_Buffer_Fwrite);
		curl_easy_setopt(curl, CURLOPT_WRITEHEADER, resph);
	}

	curlCode = curl_easy_perform(curl);

	if (curlCode == 0) {
		curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode);
		if (Qiniu_Buffer_Len(resp) != 0) {
			root = cJSON_Parse(Qiniu_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 = Qiniu_Json_GetString(root, "error", g_statusCodeError);
			}
		} else {
			err.message = "OK";
		}
	} else {
		*ret = NULL;
		err.code = curlCode;
		err.message = "curl_easy_perform error";
	}

	printf("code %d\n", err.code);

	return err;
}
Пример #4
0
Файл: rs.c Проект: AlunYou/c-sdk
Qiniu_Error Qiniu_RS_BatchCopy(
	Qiniu_Client* self, Qiniu_RS_BatchItemRet* rets,
	Qiniu_RS_EntryPathPair* entryPairs, Qiniu_ItemCount entryCount)
{
	int code;
	Qiniu_Error err;
	cJSON *root, *arrayItem, *dataItem;
	char *body = NULL, *bodyTmp = NULL;
	char *entryURISrc, *entryURISrcEncoded, *opBody;
	char *entryURIDest, *entryURIDestEncoded, *bodyPart;
	Qiniu_ItemCount curr = 0;
	Qiniu_ItemCount retSize = 0;
	Qiniu_RS_EntryPathPair* entryPair = entryPairs;
	char* url = Qiniu_String_Concat2(QINIU_RS_HOST, "/batch");

	curr = 0;
	while (curr < entryCount) {
		entryURISrc = Qiniu_String_Concat3(entryPair->src.bucket, ":", entryPair->src.key);
		entryURISrcEncoded = Qiniu_String_Encode(entryURISrc);
		entryURIDest = Qiniu_String_Concat3(entryPair->dest.bucket, ":", entryPair->dest.key);
		entryURIDestEncoded = Qiniu_String_Encode(entryURIDest);
		
		bodyPart = Qiniu_String_Concat3(entryURISrcEncoded, "/", entryURIDestEncoded);
		opBody = Qiniu_String_Concat2("op=/copy/", bodyPart);
		free(entryURISrc);
		free(entryURISrcEncoded);
		free(entryURIDest);
		free(entryURIDestEncoded);
		free(bodyPart);

		if (!body) {
			bodyTmp = opBody;
		} else {
			bodyTmp = Qiniu_String_Concat3(body, "&", opBody);
			free(opBody);
		}
		free(body);
		body = bodyTmp;
		curr++;
		entryPair = &entryPairs[curr];
	}

	err = Qiniu_Client_CallWithBuffer(self, &root, 
	url, body, strlen(body), "application/x-www-form-urlencoded");
	free(url);
	/*
	 * Bug No.(4672) Wang Xiaotao  2013\10\15 17:56:00 
	 * Change for : free  var 'body'
	 * Reason     : memory leak!
	 */
	free(body);

	retSize = cJSON_GetArraySize(root);
	
	curr = 0;
	while (curr < retSize) {
		arrayItem = cJSON_GetArrayItem(root, curr);
		code = (int)Qiniu_Json_GetInt64(arrayItem, "code", 0);
		dataItem = cJSON_GetObjectItem(arrayItem, "data");

		rets[curr].code = code;

		if (code != 200) {
			rets[curr].error = Qiniu_Json_GetString(dataItem, "error", 0);
		}
		curr++;
	}

	return err;
}
Пример #5
0
Файл: rs.c Проект: AlunYou/c-sdk
Qiniu_Error Qiniu_RS_BatchStat(
	Qiniu_Client* self, Qiniu_RS_BatchStatRet* rets,
	Qiniu_RS_EntryPath* entries, Qiniu_ItemCount entryCount)
{
	int code;
	Qiniu_Error err;
	cJSON *root, *arrayItem, *dataItem;
	char *body = NULL, *bodyTmp = NULL;
	char *entryURI, *entryURIEncoded, *opBody;
	Qiniu_RS_EntryPath* entry = entries;
	Qiniu_ItemCount curr = 0;
	Qiniu_ItemCount retSize = 0;
	char* url = Qiniu_String_Concat2(QINIU_RS_HOST, "/batch");

	while (curr < entryCount) {
		entryURI = Qiniu_String_Concat3(entry->bucket, ":", entry->key);
		entryURIEncoded = Qiniu_String_Encode(entryURI);
		opBody = Qiniu_String_Concat2("op=/stat/", entryURIEncoded);
		free(entryURI);
		free(entryURIEncoded);

		if (!body) {
			bodyTmp = opBody;
		} else {
			bodyTmp = Qiniu_String_Concat3(body, "&", opBody);
			free(opBody);
		}
		free(body);
		body = bodyTmp;
		curr++;
		entry = &entries[curr];
	}

	err = Qiniu_Client_CallWithBuffer(self, &root, 
	url, body, strlen(body), "application/x-www-form-urlencoded");
	free(url);
	/*
	 * Bug No.(4672) Wang Xiaotao  2013\10\15 17:56:00 
	 * Change for : free  var 'body'
	 * Reason     : memory leak!
	 */
	free(body);

	retSize = cJSON_GetArraySize(root);
	
	curr = 0;
	while (curr < retSize) {
		arrayItem = cJSON_GetArrayItem(root, curr);
		code = (int)Qiniu_Json_GetInt64(arrayItem, "code", 0);
		dataItem = cJSON_GetObjectItem(arrayItem, "data");

		rets[curr].code = code;

		if (code != 200) {
			rets[curr].error = Qiniu_Json_GetString(dataItem, "error", 0);
		} else {
			rets[curr].data.hash = Qiniu_Json_GetString(dataItem, "hash", 0);
			rets[curr].data.mimeType = Qiniu_Json_GetString(dataItem, "mimeType", 0);
			rets[curr].data.fsize = Qiniu_Json_GetInt64(dataItem, "fsize", 0);
			rets[curr].data.putTime = Qiniu_Json_GetInt64(dataItem, "putTime", 0);
		}
		curr++;
	}

	return err;
}