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