Пример #1
0
Файл: rs.c Проект: AlunYou/c-sdk
Qiniu_Error Qiniu_RS_Copy(Qiniu_Client* self, 
	const char* tableNameSrc, const char* keySrc,
	const char* tableNameDest, const char* keyDest)
{
	Qiniu_Error err;

	char* entryURISrc = Qiniu_String_Concat3(tableNameSrc, ":", keySrc);
	char* entryURISrcEncoded = Qiniu_String_Encode(entryURISrc);
	char* entryURIDest = Qiniu_String_Concat3(tableNameDest, ":", keyDest);
	char* entryURIDestEncoded = Qiniu_String_Encode(entryURIDest);
	char* urlPart = Qiniu_String_Concat3(entryURISrcEncoded, "/", entryURIDestEncoded);

	char* url = Qiniu_String_Concat3(QINIU_RS_HOST, "/copy/", urlPart);

	free(entryURISrc);
	free(entryURISrcEncoded);
	free(entryURIDest);
	free(entryURIDestEncoded);
	free(urlPart);

	err = Qiniu_Client_CallNoRet(self, url);
	free(url);

	return err;
}
Пример #2
0
char* Qiniu_Mac_SignToken(Qiniu_Mac* self, char* policy_str)
{
	char* token;
	char* encoded_digest;
	char digest[EVP_MAX_MD_SIZE + 1];
	unsigned int dgtlen = sizeof(digest);
	HMAC_CTX ctx;
	Qiniu_Mac mac;

	char* encoded_policy_str = Qiniu_String_Encode(policy_str);

	if (self) {
		mac = *self;
	} else {
		mac.accessKey = QINIU_ACCESS_KEY;
		mac.secretKey = QINIU_SECRET_KEY;
	}

	HMAC_CTX_init(&ctx);
	HMAC_Init_ex(&ctx, mac.secretKey, strlen(mac.secretKey), EVP_sha1(), NULL);
	HMAC_Update(&ctx, encoded_policy_str, strlen(encoded_policy_str));
	HMAC_Final(&ctx, digest, &dgtlen);
	HMAC_CTX_cleanup(&ctx);

	encoded_digest = Qiniu_Memory_Encode(digest, dgtlen);
	token = Qiniu_String_Concat(mac.accessKey, ":", encoded_digest, ":", encoded_policy_str, NULL);
	free(encoded_policy_str);
	free(encoded_digest);

	return token;
}
Пример #3
0
Файл: rs.c Проект: AlunYou/c-sdk
Qiniu_Error Qiniu_RS_Delete(Qiniu_Client* self, const char* tableName, const char* key)
{
	Qiniu_Error err;

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

	Qiniu_Free(entryURI);
	Qiniu_Free(entryURIEncoded);

	err = Qiniu_Client_CallNoRet(self, url);
	Qiniu_Free(url);

	return err;
}
Пример #4
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;
}
Пример #5
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;
}
Пример #6
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;
}