Example #1
0
static Qiniu_Error Qiniu_Client_callWithBody(
	Qiniu_Client* self, Qiniu_Json** ret, const char* url,
	const char* body, Qiniu_Int64 bodyLen, const char* mimeType)
{
	int retCode = 0;
	Qiniu_Error err;
	const char* ctxType;
	char ctxLength[64];
	Qiniu_Header* headers = NULL;
	CURL* curl = (CURL*)self->curl;

	// Bind the NIC for sending packets.
	if (self->boundNic != NULL) {
		retCode = curl_easy_setopt(curl, CURLOPT_INTERFACE, self->boundNic);
		if (retCode == CURLE_INTERFACE_FAILED) {
			err.code = 9994;
			err.message = "Can not bind the given NIC";
			return err;
		}
	}

	curl_easy_setopt(curl, CURLOPT_POST, 1);

	if (mimeType == NULL) {
		ctxType = "Content-Type: application/octet-stream";
	} else {
		ctxType = Qiniu_String_Concat2("Content-Type: ", mimeType);
	}

	Qiniu_snprintf(ctxLength, 64, "Content-Length: %lld", bodyLen);
	headers = curl_slist_append(NULL, ctxLength);
	headers = curl_slist_append(headers, ctxType);

	if (self->auth.itbl != NULL) {
		if (body == NULL) {
			err = self->auth.itbl->Auth(self->auth.self, &headers, url, NULL, 0);
		} else {
			err = self->auth.itbl->Auth(self->auth.self, &headers, url, body, (size_t)bodyLen);
		}

		if (err.code != 200) {
			return err;
		}
	}

	curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

	err = Qiniu_callex(curl, &self->b, &self->root, Qiniu_False, &self->respHeader);

	curl_slist_free_all(headers);
	if (mimeType != NULL) {
		free((void*)ctxType);
	}

	*ret = self->root;
	return err;
}
Example #2
0
int main(int argc, char * argv[])
{
	Qiniu_Client client;
	Qiniu_Mac    mac;

	char * bucketName = "test";
	char * file_path = "./local.txt";

	mac.accessKey = "Hw_2_emX0FV5fe26brBCemk3Yhdzd5l86UwfI9_n";
	mac.secretKey = "V09N6hmt3Z4vieC7Ps3g6HAyQ136cGSmAj7UtjWv";

	Qiniu_Servend_Init(-1);
	Qiniu_Client_InitNoAuth(&client, 1024);

#if 0 //upload
	Qiniu_RS_PutPolicy putPolicy;
	Qiniu_Zero(putPolicy);
	putPolicy.scope = "test";
	char * uploadtoken = Qiniu_RS_PutPolicy_Token(&putPolicy, &mac);
	
	Qiniu_Io_PutRet putRet;
	Qiniu_Error error = Qiniu_Io_PutFile(&client, &putRet, uploadtoken, "local.txt", "./local.txt", NULL);
	if (error.code != 200) 
	{
		printf("!200 ERROR\n");
	}
	else
    	{
		printf("200  OK\n");
    	}

    	Qiniu_Free(uploadtoken);
#endif

#if 1 //download
	Qiniu_RS_GetPolicy getPolicy;
	Qiniu_Zero(getPolicy);

	//char* domain = Qiniu_String_Concat2("heenbo-test", "o9mmpvxgk.bkt.clouddn.com");
	char* domain = Qiniu_String_Concat2("", "o9mmpvxgk.bkt.clouddn.com");
	printf("domain:%s\n", domain);

	char * baseUrl = Qiniu_RS_MakeBaseUrl(domain, "a.txt");
	printf("baseUrl: %s\n", baseUrl);

	char * url = Qiniu_RS_GetPolicy_MakeRequest(&getPolicy, baseUrl, &mac);
	printf("url:%s\n", url);
	
	Qiniu_Free(baseUrl);
	Qiniu_Free(url);
	Qiniu_Free(domain);





#endif

	Qiniu_Client_Cleanup(&client);
	Qiniu_Servend_Cleanup();

	return 0;
}
Example #3
0
File: rs.c Project: 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;
}
Example #4
0
File: rs.c Project: 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;
}