void oss_list_multipart_uploads_contents_parse(aos_pool_t *p, xmlDocPtr doc, const char *xml_path, aos_list_t *upload_list) { int i = 0; xmlNodePtr cur_node; xmlNodeSetPtr nodeset = NULL; oss_list_multipart_upload_content_t *content; xmlChar *xpath; xmlXPathObjectPtr result; xpath = (xmlChar*) xml_path; result = get_nodeset(doc, xpath); if (result == NULL) { return; } nodeset = result->nodesetval; for ( ; i < nodeset->nodeNr; ++i) { content = oss_create_list_multipart_upload_content(p); cur_node = nodeset->nodeTab[i]->xmlChildrenNode; oss_list_multipart_uploads_content_parse(p, cur_node, content); aos_list_add_tail(&content->node, upload_list); } xmlXPathFreeObject(result); }
void append_object_from_buffer() { aos_pool_t *p = NULL; aos_string_t bucket; aos_string_t object; char *str = "test oss c sdk"; aos_status_t *s = NULL; int is_cname = 0; int64_t position = 0; aos_table_t *headers1 = NULL; aos_table_t *headers2 = NULL; aos_table_t *resp_headers = NULL; oss_request_options_t *options = NULL; aos_list_t buffer; aos_buf_t *content = NULL; char *next_append_position = NULL; char *object_type = NULL; aos_pool_create(&p, NULL); options = oss_request_options_create(p); init_sample_request_options(options, is_cname); headers1 = aos_table_make(p, 0); aos_str_set(&bucket, BUCKET_NAME); aos_str_set(&object, OBJECT_NAME); s = oss_head_object(options, &bucket, &object, headers1, &resp_headers); if (aos_status_is_ok(s)) { object_type = (char*)(apr_table_get(resp_headers, OSS_OBJECT_TYPE)); if (0 != strncmp(OSS_OBJECT_TYPE_APPENDABLE, object_type, strlen(OSS_OBJECT_TYPE_APPENDABLE))) { printf("object[%s]'s type[%s] is not Appendable\n", OBJECT_NAME, object_type); aos_pool_destroy(p); return; } next_append_position = (char*)(apr_table_get(resp_headers, OSS_NEXT_APPEND_POSITION)); position = atoi(next_append_position); } headers2 = aos_table_make(p, 0); aos_list_init(&buffer); content = aos_buf_pack(p, str, strlen(str)); aos_list_add_tail(&content->node, &buffer); s = oss_append_object_from_buffer(options, &bucket, &object, position, &buffer, headers2, &resp_headers); if (aos_status_is_ok(s)) { printf("append object from buffer succeeded\n"); } else { printf("append object from buffer failed\n"); } aos_pool_destroy(p); }
void make_random_body(aos_pool_t *p, int count, aos_list_t *bc) { int i = 0; int len; aos_buf_t *b; for (; i < count; ++i) { len = random() % 4096; b = make_random_buf(p, len); aos_list_add_tail(&b->node, bc); } }
void oss_list_multipart_uploads_contents_parse(aos_pool_t *p, mxml_node_t *root, const char *xml_path, aos_list_t *upload_list) { mxml_node_t *content_node; oss_list_multipart_upload_content_t *content; content_node = mxmlFindElement(root, root, xml_path, NULL, NULL, MXML_DESCEND); for ( ; content_node != NULL; ) { content = oss_create_list_multipart_upload_content(p); oss_list_multipart_uploads_content_parse(p, content_node, content); aos_list_add_tail(&content->node, upload_list); content_node = mxmlFindElement(content_node, root, xml_path, NULL, NULL, MXML_DESCEND); } }
void oss_list_objects_common_prefix_parse(aos_pool_t *p, mxml_node_t *xml_node, const char *xml_path, aos_list_t *common_prefix_list) { mxml_node_t *node; oss_list_object_common_prefix_t *common_prefix; node = mxmlFindElement(xml_node, xml_node, xml_path, NULL, NULL, MXML_DESCEND); for ( ; node != NULL; ) { common_prefix = oss_create_list_object_common_prefix(p); oss_list_objects_prefix_parse(p, node, common_prefix); aos_list_add_tail(&common_prefix->node, common_prefix_list); node = mxmlFindElement(node, xml_node, xml_path, NULL, NULL, MXML_DESCEND); } }
aos_status_t *create_test_object(const oss_request_options_t *options, const char *bucket_name, const char *object_name, const char *data, aos_table_t *headers) { aos_string_t bucket; aos_string_t object; aos_table_t *resp_headers; aos_list_t buffer; aos_buf_t *content; aos_status_t * s; test_object_base(); aos_list_init(&buffer); content = aos_buf_pack(options->pool, data, strlen(data)); aos_list_add_tail(&content->node, &buffer); s = oss_put_object_from_buffer(options, &bucket, &object, &buffer, headers, &resp_headers); return s; }
aos_status_t *log_post_logs_with_sts_token(aos_pool_t *p, const char *endpoint, const char * accesskeyId, const char *accessKey, const char *stsToken, const char *project, const char *logstore, cJSON *root) { aos_string_t project_name, logstore_name; aos_table_t *headers = NULL; aos_table_t *resp_headers = NULL; log_request_options_t *options = NULL; aos_list_t buffer; unsigned char *md5 = NULL; char *buf = NULL; int64_t buf_len; char *b64_value = NULL; aos_buf_t *content = NULL; aos_status_t *s = NULL; options = log_request_options_create(p); options->config = log_config_create(options->pool); aos_str_set(&(options->config->endpoint), endpoint); aos_str_set(&(options->config->access_key_id), accesskeyId); aos_str_set(&(options->config->access_key_secret), accessKey); if(stsToken != NULL) { aos_str_set(&(options->config->sts_token), stsToken); } options->ctl = aos_http_controller_create(options->pool, 0); headers = aos_table_make(p, 5); apr_table_set(headers, LOG_API_VERSION, "0.6.0"); apr_table_set(headers, LOG_COMPRESS_TYPE, "lz4"); apr_table_set(headers, LOG_SIGNATURE_METHOD, "hmac-sha1"); apr_table_set(headers, LOG_CONTENT_TYPE, "application/json"); aos_str_set(&project_name, project); aos_str_set(&logstore_name, logstore); aos_list_init(&buffer); char *body = cJSON_PrintUnformatted(root); if(body == NULL) { s = aos_status_create(options->pool); aos_status_set(s, 400, AOS_CLIENT_ERROR_CODE, "fail to format cJSON data"); return s; } int org_body_size = strlen(body); apr_table_set(headers, LOG_BODY_RAW_SIZE, apr_itoa(options->pool, org_body_size)); int compress_bound = LZ4_compressBound(org_body_size); char *compress_data = aos_pcalloc(options->pool, compress_bound); int compressed_size = LZ4_compress(body, compress_data, org_body_size); if(compressed_size <= 0) { s = aos_status_create(options->pool); aos_status_set(s, 400, AOS_CLIENT_ERROR_CODE, "fail to compress json data"); return s; } content = aos_buf_pack(options->pool, compress_data, compressed_size); aos_list_add_tail(&content->node, &buffer); //add Content-MD5 buf_len = aos_buf_list_len(&buffer); buf = aos_buf_list_content(options->pool, &buffer); md5 = aos_md5(options->pool, buf, (apr_size_t)buf_len); b64_value = aos_pcalloc(options->pool, 50); int loop = 0; for(; loop < 16; ++loop) { unsigned char a = ((*md5)>>4) & 0xF, b = (*md5) & 0xF; b64_value[loop<<1] = a > 9 ? (a - 10 + 'A') : (a + '0'); b64_value[(loop<<1)|1] = b > 9 ? (b - 10 + 'A') : (b + '0'); ++md5; } b64_value[loop<<1] = '\0'; apr_table_set(headers, LOG_CONTENT_MD5, b64_value); s = log_post_logs_from_buffer(options, &project_name, &logstore_name, &buffer, headers, &resp_headers); free(body); return s; }