1 /*
2 * Copyright (C) 2015-2018 Alibaba Group Holding Limited
3 */
4
5 #include <stdio.h>
6 #include <string.h>
7 #include "ulog/ulog.h"
8 #include "aos/kernel.h"
9 #include "ucloud_ai_common.h"
10
11 #define TAG "UCLOUD_AI_SERVICE"
12
13 #include <httpclient.h>
14
15 #define HEAD_SIZE 2048
16 #define BODY_SZIE (1024 * 128 + 1)
17
18 httpclient_t ai_client = { 0 };
19 httpclient_data_t ai_client_data = {0};
20 static ucloud_ai_model_t ai_model = UCLOUD_AI_MODEL_MAX;
21 static char g_oss_bucket[64];
22 static char g_oss_endpoint[64];
23
ucloud_ai_set_oss_bucket(char * bucket)24 void ucloud_ai_set_oss_bucket(char *bucket)
25 {
26 int32_t len;
27
28 if (bucket) {
29 strcpy(g_oss_bucket, bucket);
30 len = strlen(bucket);
31 g_oss_bucket[len] = '\0';
32 printf("g_oss_bucket: %s\n", g_oss_bucket);
33 }
34 }
35
ucloud_ai_set_oss_endpoint(char * endpoint)36 void ucloud_ai_set_oss_endpoint(char *endpoint)
37 {
38 int32_t len;
39
40 if (endpoint) {
41 strcpy(g_oss_endpoint, endpoint);
42 len = strlen(endpoint);
43 g_oss_endpoint[len] = '\0';
44 }
45 }
46
ucloud_ai_upload_file(char * path)47 uint8_t *ucloud_ai_upload_file(char *path)
48 {
49 char *tmp_upload_url, *p_upload_url;
50 char *access_key = getAccessKey();
51 char *access_secret = getAccessSecret();
52
53 /*update capture.jpg to oss*/
54 tmp_upload_url = oss_upload_local_file(access_key, \
55 (char *)access_secret, g_oss_endpoint, g_oss_bucket, path);
56 if (!tmp_upload_url) {
57 LOGE(TAG, "url is null\n");
58 return NULL;
59 }
60 p_upload_url = strdup(tmp_upload_url);
61 return p_upload_url;
62 }
63
ucloud_ai_set_key_secret(char * key,char * secret)64 void ucloud_ai_set_key_secret(char *key, char *secret)
65 {
66 setAccesskeyAndSecret(key, secret);
67 }
68
ucloud_ai_init(void)69 int32_t ucloud_ai_init(void)
70 {
71 int32_t ret;
72 char *customer_header = "Accept: */*\r\n";
73
74 ret = httpclient_prepare(&ai_client_data, HEAD_SIZE, BODY_SZIE);
75 if (ret != HTTP_SUCCESS)
76 return -1;
77
78 ai_client.is_http = true;
79 httpclient_set_custom_header(&ai_client, customer_header);
80
81 return ret;
82 }
83
ucloud_ai_uninit(void)84 int32_t ucloud_ai_uninit(void)
85 {
86 return httpclient_unprepare(&ai_client_data);
87 }
88
ucloud_ai_connect(char * url)89 int32_t ucloud_ai_connect(char *url)
90 {
91 int32_t ret;
92
93 ret = httpclient_conn(&ai_client, (const char *)url);
94 if (HTTP_SUCCESS != ret) {
95 LOGE(TAG, "http connect failed");
96 return -1;
97 }
98 return ret;
99 }
100
ucloud_ai_disconnect(void)101 void ucloud_ai_disconnect(void)
102 {
103 httpclient_clse(&ai_client);
104 }
105
ucloud_ai_get_stream(char * url,char ** stream)106 int32_t ucloud_ai_get_stream(char *url, char **stream)
107 {
108 int ret;
109 int recv_len = 0;
110
111 httpclient_reset(&ai_client_data);
112 ret = httpclient_send(&ai_client, (const char *)url, HTTP_GET, &ai_client_data);
113 if (HTTP_SUCCESS != ret) {
114 LOGE(TAG, "http send request failed");
115 return -1;
116 }
117 do {
118 ret = httpclient_recv(&ai_client, &ai_client_data);
119 if (ret < 0)
120 break;
121 *stream = ai_client_data.response_buf;
122 recv_len = ai_client_data.response_content_len;
123 } while (ret == HTTP_EAGAIN);
124 return recv_len;
125 }
126
ucloud_ai_get_token_id(const char * domain,const char * region_id)127 char *ucloud_ai_get_token_id(const char *domain, const char *region_id)
128 {
129 return getTokenId(domain, region_id);
130 }
131
132