static void clientIoGet(const char* dntoken) { const char text[] = "Hello, world!"; char* url = Qiniu_String_Concat("http://", domain, "/", key, "?token=", dntoken, NULL); long code, httpCode; CURL* curl = curl_easy_init(); Qiniu_Buffer resp; Qiniu_Buffer respHeader; Qiniu_Buffer_Init(&resp, 1024); Qiniu_Buffer_Init(&respHeader, 1024); printf("url: %s\n", url); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Qiniu_Buffer_Fwrite); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &resp); curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, Qiniu_Buffer_Fwrite); curl_easy_setopt(curl, CURLOPT_HEADERDATA, &respHeader); code = curl_easy_perform(curl); printf("\n%s", Qiniu_Buffer_CStr(&respHeader)); CU_ASSERT(code == 0); curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode); CU_ASSERT(httpCode == 200); CU_ASSERT_STRING_EQUAL(Qiniu_Buffer_CStr(&resp), text); curl_easy_cleanup(curl); }
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; }
static Qiniu_Error Qiniu_Mac_Auth( void* self, Qiniu_Header** header, const char* url, const char* addition, size_t addlen) { Qiniu_Error err; char* auth; char* enc_digest; char digest[EVP_MAX_MD_SIZE + 1]; unsigned int dgtlen = sizeof(digest); HMAC_CTX ctx; Qiniu_Mac mac; char const* path = strstr(url, "://"); if (path != NULL) { path = strchr(path + 3, '/'); } if (path == NULL) { err.code = 400; err.message = "invalid url"; return err; } if (self) { mac = *(Qiniu_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, path, strlen(path)); HMAC_Update(&ctx, "\n", 1); if (addlen > 0) { HMAC_Update(&ctx, addition, addlen); } HMAC_Final(&ctx, digest, &dgtlen); HMAC_CTX_cleanup(&ctx); enc_digest = Qiniu_Memory_Encode(digest, dgtlen); auth = Qiniu_String_Concat("Authorization: QBox ", mac.accessKey, ":", enc_digest, NULL); free(enc_digest); *header = curl_slist_append(*header, auth); free(auth); return Qiniu_OK; }
char* Qiniu_RS_MakeBaseUrl(const char* domain, const char* key) { Qiniu_Bool fesc; char* baseUrl; char* escapedKey = Qiniu_PathEscape(key, &fesc); baseUrl = Qiniu_String_Concat("http://", domain, "/", escapedKey, NULL); if (fesc) { Qiniu_Free(escapedKey); } return baseUrl; }
static void clientIoGet(const char* dntoken) { Qiniu_Eq eq; Qiniu_Seq seq; Qiniu_Int64 fsize = testFsize; Qiniu_Reader in = Qiniu_SeqReader(&seq, fsize, 10, '0', 0); Qiniu_Writer w = Qiniu_EqWriter(&eq, in); char* url = Qiniu_String_Concat("http://", domain, "/", key, "?token=", dntoken, NULL); long code, httpCode; CURL* curl = curl_easy_init(); Qiniu_Buffer respHeader; Qiniu_Buffer_Init(&respHeader, 1024); printf("url: %s\n", url); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, w.Write); curl_easy_setopt(curl, CURLOPT_WRITEDATA, w.self); curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, Qiniu_Buffer_Fwrite); curl_easy_setopt(curl, CURLOPT_HEADERDATA, &respHeader); code = curl_easy_perform(curl); printf("\n%s", Qiniu_Buffer_CStr(&respHeader)); printf("\ncurl.code: %d, eq.result: %d\n", (int)code, eq.result); CU_ASSERT(code == 0); curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode); CU_ASSERT(httpCode == 200); CU_ASSERT(Qiniu_Is(&eq)); curl_easy_cleanup(curl); }