Changeset 371 for asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src
- Timestamp:
- Feb 6, 2019, 9:21:56 PM (5 years ago)
- Location:
- asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src/client.c
r368 r371 33 33 * の責任を負わない. 34 34 * 35 * @(#) $Id $35 * @(#) $Id: client.c 1729 2019-01-09 14:44:36Z coas-nagasima $ 36 36 */ 37 37 #include <lib/curl_config.h> … … 62 62 google_drive_t google_drive; 63 63 64 int read_client_info(google_drive_t *gd, const char *fname); 64 65 void curl_setopt_common(CURL *curl); 65 66 int google_drive_error_callback(jsonsl_t jsn, jsonsl_error_t err, … … 71 72 { 72 73 google_drive_t *gd = &google_drive; 73 jsonsl_t jsn;74 74 75 75 memset(gd, 0, sizeof(google_drive_t)); 76 76 memcpy(gd->fname, "1:/log/20160101000000.log", sizeof(gd->fname)); 77 77 78 jsn = gd->jsn = jsonsl_new(3); 78 read_client_info(gd, "1:/client_secret.json"); 79 80 curl_global_init(CURL_GLOBAL_DEFAULT); 81 } 82 83 size_t write_callback(void *buffer, size_t size, size_t nmemb, void *arg) 84 { 85 google_drive_t *gd = (google_drive_t *)arg; 86 jsonsl_t jsn = gd->jsn; 87 size_t len = size * nmemb, pos; 88 jsonsl_char_t data; 89 90 for (pos = 0; pos < len; pos++) { 91 data = *((jsonsl_char_t *)&((uint8_t *)buffer)[pos]); 92 93 if ((gd->jsn_buf_pos >= 0) && (gd->jsn_buf_pos < sizeof(gd->jsn_buf))) 94 gd->jsn_buf[gd->jsn_buf_pos++] = data; 95 jsonsl_feed(jsn, &data, 1); 96 } 97 98 return len; 99 } 100 101 void client_info_state_start(google_drive_t *gd, struct jsonsl_state_st *state, const char *buf) 102 { 103 switch (gd->state) { 104 case psRoot: 105 if (state->level != 2) { 106 break; 107 } 108 else if (strcmp(buf, "installed") == 0) { 109 gd->state = psInstalled; 110 } 111 break; 112 case psInstalled: 113 if (state->level == 2) { 114 gd->state = psRoot; 115 break; 116 } 117 if (state->level != 3) { 118 break; 119 } 120 else if (strcmp(buf, "client_id") == 0) { 121 gd->state = psClientId; 122 } 123 else if (strcmp(buf, "project_id") == 0) { 124 gd->state = psProjectId; 125 } 126 else if (strcmp(buf, "auth_uri") == 0) { 127 gd->state = psAuthUri; 128 } 129 else if (strcmp(buf, "token_uri") == 0) { 130 gd->state = psTokenUri; 131 } 132 else if (strcmp(buf, "auth_provider_x509_cert_url") == 0) { 133 gd->state = psAuthProviderX509CertUrl; 134 } 135 else if (strcmp(buf, "client_secret") == 0) { 136 gd->state = psClientSecret; 137 } 138 else if (strcmp(buf, "redirect_uris") == 0) { 139 gd->state = psRedirectUris; 140 gd->index = 0; 141 } 142 break; 143 case psClientId: 144 if (state->type == JSONSL_T_STRING) { 145 strlcpy(gd->client_info.client_id, buf, sizeof(gd->client_info.client_id)); 146 gd->state = psInstalled; 147 } 148 break; 149 case psProjectId: 150 if (state->type == JSONSL_T_STRING) { 151 strlcpy(gd->client_info.project_id, buf, sizeof(gd->client_info.project_id)); 152 gd->state = psInstalled; 153 } 154 break; 155 case psAuthUri: 156 if (state->type == JSONSL_T_STRING) { 157 strlcpy(gd->client_info.auth_uri, buf, sizeof(gd->client_info.auth_uri)); 158 gd->state = psInstalled; 159 } 160 break; 161 case psTokenUri: 162 if (state->type == JSONSL_T_STRING) { 163 strlcpy(gd->client_info.token_uri, buf, sizeof(gd->client_info.token_uri)); 164 gd->state = psInstalled; 165 } 166 break; 167 case psAuthProviderX509CertUrl: 168 if (state->type == JSONSL_T_STRING) { 169 strlcpy(gd->client_info.auth_provider_x509_cert_url, buf, sizeof(gd->client_info.auth_provider_x509_cert_url)); 170 gd->state = psInstalled; 171 } 172 break; 173 case psClientSecret: 174 if (state->type == JSONSL_T_STRING) { 175 strlcpy(gd->client_info.client_secret, buf, sizeof(gd->client_info.client_secret)); 176 gd->state = psInstalled; 177 } 178 break; 179 case psRedirectUris: 180 if (state->type == JSONSL_T_STRING) { 181 strlcpy(gd->client_info.redirect_uris[gd->index], buf, sizeof(gd->client_info.redirect_uris[0])); 182 gd->index++; 183 if (gd->index == 2) { 184 gd->state = psInstalled; 185 } 186 } 187 break; 188 } 189 } 190 191 void client_info_state_end(google_drive_t *gd, struct jsonsl_state_st *state, const char *buf) 192 { 193 } 194 195 int read_client_info(google_drive_t *gd, const char *fname) 196 { 197 FIL file; 198 FRESULT ret; 199 jsonsl_t jsn = gd->jsn = jsonsl_new(5); 200 char buffer[16]; 201 size_t len, pos; 202 jsonsl_char_t data; 203 79 204 jsn->data = gd; 80 205 jsn->error_callback = google_drive_error_callback; … … 82 207 jsonsl_enable_all_callbacks(jsn); 83 208 84 //uITRON4_minit(ITRON_POOL_SIZE); 85 86 curl_global_init(CURL_GLOBAL_DEFAULT); 87 } 88 89 size_t write_callback(void *buffer, size_t size, size_t nmemb, void *arg) 90 { 91 google_drive_t *gd = (google_drive_t *)arg; 92 jsonsl_t jsn = gd->jsn; 93 size_t len = size * nmemb, pos; 94 jsonsl_char_t data; 95 96 for (pos = 0; pos < len; pos++) { 97 data = *((jsonsl_char_t *)&((uint8_t *)buffer)[pos]); 98 99 if ((gd->jsn_buf_pos >= 0) && (gd->jsn_buf_pos < sizeof(gd->jsn_buf))) 100 gd->jsn_buf[gd->jsn_buf_pos++] = data; 101 jsonsl_feed(jsn, &data, 1); 102 } 103 104 return len; 209 gd->jsn_buf_pos = -1; 210 gd->start = client_info_state_start; 211 gd->end = client_info_state_end; 212 gd->state = psRoot; 213 214 ret = f_open(&file, fname, FA_READ); 215 if (ret != FR_OK) { 216 printf("not open %s file %d\n", fname, ret); 217 ret = -1; 218 goto error; 219 } 220 221 for (;;) { 222 len = 0; 223 ret = f_read(&file, buffer, sizeof(buffer), &len); 224 if ((ret != FR_OK) || (len <= 0)) 225 break; 226 227 for (pos = 0; pos < len; pos++) { 228 data = *((jsonsl_char_t *)&((uint8_t *)buffer)[pos]); 229 230 if ((gd->jsn_buf_pos >= 0) && (gd->jsn_buf_pos < sizeof(gd->jsn_buf))) 231 gd->jsn_buf[gd->jsn_buf_pos++] = data; 232 jsonsl_feed(jsn, &data, 1); 233 } 234 } 235 236 f_close(&file); 237 238 ret = 0; 239 error: 240 gd->jsn = NULL; 241 jsonsl_destroy(jsn); 242 243 return ret; 105 244 } 106 245 … … 192 331 size_t len; 193 332 char *postdata; 194 jsonsl_t jsn = gd->jsn;195 333 196 334 len = strnlen(client_info->client_id, sizeof(client_info->client_id)); … … 198 336 return -1; 199 337 338 jsonsl_t jsn = gd->jsn = jsonsl_new(3); 339 jsn->data = gd; 340 jsn->error_callback = google_drive_error_callback; 341 jsn->action_callback = google_drive_state_callback; 342 jsonsl_enable_all_callbacks(jsn); 343 200 344 gd->jsn_buf_pos = -1; 201 202 jsonsl_reset(jsn);203 345 gd->start = get_device_id_state_start; 204 346 gd->end = get_device_id_state_end; 347 gd->state = psRoot; 205 348 206 349 slist1 = NULL; … … 236 379 curl_slist_free_all(slist1); 237 380 slist1 = NULL; 381 382 gd->jsn = NULL; 383 jsonsl_destroy(jsn); 238 384 239 385 return (int)ret; … … 327 473 size_t len; 328 474 char *postdata; 329 jsonsl_t jsn = gd->jsn;330 475 331 476 len = strlen(credential->device_code); … … 333 478 return -1; 334 479 480 jsonsl_t jsn = gd->jsn = jsonsl_new(3); 481 jsn->data = gd; 482 jsn->error_callback = google_drive_error_callback; 483 jsn->action_callback = google_drive_state_callback; 484 jsonsl_enable_all_callbacks(jsn); 485 335 486 gd->jsn_buf_pos = -1; 336 337 jsonsl_reset(jsn);338 487 gd->start = get_access_token_state_start; 339 488 gd->end = get_access_token_state_end; 489 gd->state = psRoot; 340 490 341 491 slist1 = NULL; … … 375 525 curl_slist_free_all(slist1); 376 526 slist1 = NULL; 527 528 gd->jsn = NULL; 529 jsonsl_destroy(jsn); 377 530 378 531 return (int)ret; … … 457 610 size_t len; 458 611 char *postdata; 459 jsonsl_t jsn = gd->jsn;460 612 461 613 len = strlen(credential->refresh_token); … … 463 615 return -1; 464 616 617 jsonsl_t jsn = gd->jsn = jsonsl_new(3); 618 jsn->data = gd; 619 jsn->error_callback = google_drive_error_callback; 620 jsn->action_callback = google_drive_state_callback; 621 jsonsl_enable_all_callbacks(jsn); 622 465 623 gd->jsn_buf_pos = -1; 466 467 jsonsl_reset(jsn);468 624 gd->start = update_access_token_state_start; 469 625 gd->end = update_access_token_state_end; 626 gd->state = psRoot; 470 627 471 628 slist1 = NULL; … … 504 661 curl_slist_free_all(slist1); 505 662 slist1 = NULL; 663 664 gd->jsn = NULL; 665 jsonsl_destroy(jsn); 506 666 507 667 return (int)ret; … … 525 685 struct curl_slist *slist1; 526 686 char *postdata; 527 jsonsl_t jsn = gd->jsn;528 687 529 688 len = strlen(credential->access_token); … … 531 690 return -1; 532 691 692 jsonsl_t jsn = gd->jsn = jsonsl_new(3); 693 jsn->data = gd; 694 jsn->error_callback = google_drive_error_callback; 695 jsn->action_callback = google_drive_state_callback; 696 jsonsl_enable_all_callbacks(jsn); 697 533 698 gd->jsn_buf_pos = -1; 534 535 jsonsl_reset(jsn);536 699 gd->start = revoke_device_state_start; 537 700 gd->end = revoke_device_state_end; 701 gd->state = psRoot; 538 702 539 703 slist1 = NULL; … … 563 727 curl_slist_free_all(slist1); 564 728 slist1 = NULL; 729 730 gd->jsn = NULL; 731 jsonsl_destroy(jsn); 732 733 memset(credential, 0, sizeof(*credential)); 565 734 566 735 return (int)ret; … … 707 876 char *postdata, *authorization; 708 877 static const char buf[] = "Expect:"; 709 jsonsl_t jsn = gd->jsn;710 878 FIL file; 711 879 FRESULT fret; 712 880 881 len = strnlen(gd->credential.access_token, sizeof(gd->credential.access_token)); 882 if (len <= 0) 883 return -1; 884 885 jsonsl_t jsn = gd->jsn = jsonsl_new(3); 886 jsn->data = gd; 887 jsn->error_callback = google_drive_error_callback; 888 jsn->action_callback = google_drive_state_callback; 889 jsonsl_enable_all_callbacks(jsn); 890 713 891 gd->jsn_buf_pos = -1; 714 715 jsonsl_reset(jsn);716 892 gd->start = upload_file_state_start; 717 893 gd->end = upload_file_state_end; 894 gd->state = psRoot; 718 895 719 896 fret = f_open(&file, localfilepath, FA_READ); 720 897 if (fret != FR_OK) { 721 898 printf("log file open error %d\n", fret); 722 return -1; 899 ret = -1; 900 goto error; 723 901 } 724 902 … … 770 948 771 949 f_close(&file); 950 951 error: 952 gd->jsn = NULL; 953 jsonsl_destroy(jsn); 772 954 773 955 return (int)ret; … … 1133 1315 void client_final(void) 1134 1316 { 1135 google_drive_t *gd = &google_drive;1136 jsonsl_t jsn = gd->jsn;1137 1138 1317 curl_global_cleanup(); 1139 jsonsl_destroy(jsn); 1140 } 1318 } -
asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src/client.h
r364 r371 33 33 * の責任を負わない. 34 34 * 35 * @(#) $Id $35 * @(#) $Id: client.h 1784 2019-02-06 01:11:25Z coas-nagasima $ 36 36 */ 37 37 … … 41 41 typedef struct client_info_t { 42 42 char client_id[80]; 43 char project_id[32]; 44 char auth_uri[64]; 45 char token_uri[48]; 46 char auth_provider_x509_cert_url[48]; 43 47 char client_secret[32]; 48 char redirect_uris[2][32]; 44 49 } client_info_t; 45 50 … … 70 75 typedef enum google_drive_parse_state_t { 71 76 psRoot, 77 psInstalled, 78 psClientId, 79 psProjectId, 80 psAuthUri, 81 psTokenUri, 82 psAuthProviderX509CertUrl, 83 psClientSecret, 84 psRedirectUris, 72 85 psDeviceCode, 73 86 psUserCode, … … 99 112 jsonsl_t jsn; 100 113 google_drive_parse_state_t state; 114 int index; 101 115 char fname[sizeof("1:/log/20160101000000.log")]; 102 116 char jsn_buf[256]; -
asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src/main.c
r364 r371 242 242 } 243 243 244 ether_set_link_callback(netif_link_callback); 245 246 /* 初期化 */ 247 ffarch_init(); 248 244 249 /* libcurlとWolfSSLの初期化 */ 245 250 client_init(); 246 247 ether_set_link_callback(netif_link_callback);248 249 /* 初期化 */250 ffarch_init();251 251 252 252 gpio_write(&led_green, 0);
Note:
See TracChangeset
for help on using the changeset viewer.