Changeset 371


Ignore:
Timestamp:
Feb 6, 2019, 9:21:56 PM (5 years ago)
Author:
coas-nagasima
Message:

認証情報をSDカードのclient_secret.jsonから読み込むよう更新

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src/client.c

    r368 r371  
    3333 *  の責任を負わない.
    3434 *
    35  *  @(#) $Id$
     35 *  @(#) $Id: client.c 1729 2019-01-09 14:44:36Z coas-nagasima $
    3636 */
    3737#include <lib/curl_config.h>
     
    6262google_drive_t google_drive;
    6363
     64int read_client_info(google_drive_t *gd, const char *fname);
    6465void curl_setopt_common(CURL *curl);
    6566int google_drive_error_callback(jsonsl_t jsn, jsonsl_error_t err,
     
    7172{
    7273        google_drive_t *gd = &google_drive;
    73         jsonsl_t jsn;
    7474
    7575        memset(gd, 0, sizeof(google_drive_t));
    7676        memcpy(gd->fname, "1:/log/20160101000000.log", sizeof(gd->fname));
    7777
    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
     83size_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
     101void 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
     191void client_info_state_end(google_drive_t *gd, struct jsonsl_state_st *state, const char *buf)
     192{
     193}
     194
     195int 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
    79204        jsn->data = gd;
    80205        jsn->error_callback = google_drive_error_callback;
     
    82207        jsonsl_enable_all_callbacks(jsn);
    83208
    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;
     239error:
     240        gd->jsn = NULL;
     241        jsonsl_destroy(jsn);
     242
     243        return ret;
    105244}
    106245
     
    192331        size_t len;
    193332        char *postdata;
    194         jsonsl_t jsn = gd->jsn;
    195333
    196334        len = strnlen(client_info->client_id, sizeof(client_info->client_id));
     
    198336                return -1;
    199337
     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
    200344        gd->jsn_buf_pos = -1;
    201 
    202         jsonsl_reset(jsn);
    203345        gd->start = get_device_id_state_start;
    204346        gd->end = get_device_id_state_end;
     347        gd->state = psRoot;
    205348
    206349        slist1 = NULL;
     
    236379        curl_slist_free_all(slist1);
    237380        slist1 = NULL;
     381
     382        gd->jsn = NULL;
     383        jsonsl_destroy(jsn);
    238384
    239385        return (int)ret;
     
    327473        size_t len;
    328474        char *postdata;
    329         jsonsl_t jsn = gd->jsn;
    330475
    331476        len = strlen(credential->device_code);
     
    333478                return -1;
    334479
     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
    335486        gd->jsn_buf_pos = -1;
    336 
    337         jsonsl_reset(jsn);
    338487        gd->start = get_access_token_state_start;
    339488        gd->end = get_access_token_state_end;
     489        gd->state = psRoot;
    340490
    341491        slist1 = NULL;
     
    375525        curl_slist_free_all(slist1);
    376526        slist1 = NULL;
     527
     528        gd->jsn = NULL;
     529        jsonsl_destroy(jsn);
    377530
    378531        return (int)ret;
     
    457610        size_t len;
    458611        char *postdata;
    459         jsonsl_t jsn = gd->jsn;
    460612
    461613        len = strlen(credential->refresh_token);
     
    463615                return -1;
    464616
     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
    465623        gd->jsn_buf_pos = -1;
    466 
    467         jsonsl_reset(jsn);
    468624        gd->start = update_access_token_state_start;
    469625        gd->end = update_access_token_state_end;
     626        gd->state = psRoot;
    470627
    471628        slist1 = NULL;
     
    504661        curl_slist_free_all(slist1);
    505662        slist1 = NULL;
     663
     664        gd->jsn = NULL;
     665        jsonsl_destroy(jsn);
    506666
    507667        return (int)ret;
     
    525685        struct curl_slist *slist1;
    526686        char *postdata;
    527         jsonsl_t jsn = gd->jsn;
    528687
    529688        len = strlen(credential->access_token);
     
    531690                return -1;
    532691
     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
    533698        gd->jsn_buf_pos = -1;
    534 
    535         jsonsl_reset(jsn);
    536699        gd->start = revoke_device_state_start;
    537700        gd->end = revoke_device_state_end;
     701        gd->state = psRoot;
    538702
    539703        slist1 = NULL;
     
    563727        curl_slist_free_all(slist1);
    564728        slist1 = NULL;
     729
     730        gd->jsn = NULL;
     731        jsonsl_destroy(jsn);
     732
     733        memset(credential, 0, sizeof(*credential));
    565734
    566735        return (int)ret;
     
    707876        char *postdata, *authorization;
    708877        static const char buf[] = "Expect:";
    709         jsonsl_t jsn = gd->jsn;
    710878        FIL file;
    711879        FRESULT fret;
    712880
     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
    713891        gd->jsn_buf_pos = -1;
    714 
    715         jsonsl_reset(jsn);
    716892        gd->start = upload_file_state_start;
    717893        gd->end = upload_file_state_end;
     894        gd->state = psRoot;
    718895
    719896        fret = f_open(&file, localfilepath, FA_READ);
    720897        if (fret != FR_OK) {
    721898                printf("log file open error %d\n", fret);
    722                 return -1;
     899                ret = -1;
     900                goto error;
    723901        }
    724902
     
    770948
    771949        f_close(&file);
     950
     951error:
     952        gd->jsn = NULL;
     953        jsonsl_destroy(jsn);
    772954
    773955        return (int)ret;
     
    11331315void client_final(void)
    11341316{
    1135         google_drive_t *gd = &google_drive;
    1136         jsonsl_t jsn = gd->jsn;
    1137 
    11381317        curl_global_cleanup();
    1139         jsonsl_destroy(jsn);
    1140 }
     1318}
  • asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src/client.h

    r364 r371  
    3333 *  の責任を負わない.
    3434 *
    35  *  @(#) $Id$
     35 *  @(#) $Id: client.h 1784 2019-02-06 01:11:25Z coas-nagasima $
    3636 */
    3737
     
    4141typedef struct client_info_t {
    4242        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];
    4347        char client_secret[32];
     48        char redirect_uris[2][32];
    4449} client_info_t;
    4550
     
    7075typedef enum google_drive_parse_state_t {
    7176        psRoot,
     77        psInstalled,
     78        psClientId,
     79        psProjectId,
     80        psAuthUri,
     81        psTokenUri,
     82        psAuthProviderX509CertUrl,
     83        psClientSecret,
     84        psRedirectUris,
    7285        psDeviceCode,
    7386        psUserCode,
     
    99112        jsonsl_t jsn;
    100113        google_drive_parse_state_t state;
     114        int index;
    101115        char fname[sizeof("1:/log/20160101000000.log")];
    102116        char jsn_buf[256];
  • asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src/main.c

    r364 r371  
    242242        }
    243243
     244        ether_set_link_callback(netif_link_callback);
     245
     246        /* 初期化 */
     247        ffarch_init();
     248
    244249        /* libcurlとWolfSSLの初期化 */
    245250        client_init();
    246 
    247         ether_set_link_callback(netif_link_callback);
    248 
    249         /* 初期化 */
    250         ffarch_init();
    251251
    252252        gpio_write(&led_green, 0);
  • asp3_tinet_ecnl_rx/trunk/app1_usb_watt_meter/src/client.c

    r368 r371  
    3333 *  の責任を負わない.
    3434 *
    35  *  @(#) $Id$
     35 *  @(#) $Id: client.c 1729 2019-01-09 14:44:36Z coas-nagasima $
    3636 */
    3737#include <lib/curl_config.h>
     
    6262google_drive_t google_drive;
    6363
     64int read_client_info(google_drive_t *gd, const char *fname);
    6465void curl_setopt_common(CURL *curl);
    6566int google_drive_error_callback(jsonsl_t jsn, jsonsl_error_t err,
     
    7172{
    7273        google_drive_t *gd = &google_drive;
    73         jsonsl_t jsn;
    7474
    7575        memset(gd, 0, sizeof(google_drive_t));
    7676        memcpy(gd->fname, "1:/log/20160101000000.log", sizeof(gd->fname));
    7777
    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
     83size_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
     101void 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
     191void client_info_state_end(google_drive_t *gd, struct jsonsl_state_st *state, const char *buf)
     192{
     193}
     194
     195int 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
    79204        jsn->data = gd;
    80205        jsn->error_callback = google_drive_error_callback;
     
    82207        jsonsl_enable_all_callbacks(jsn);
    83208
    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;
     239error:
     240        gd->jsn = NULL;
     241        jsonsl_destroy(jsn);
     242
     243        return ret;
    105244}
    106245
     
    192331        size_t len;
    193332        char *postdata;
    194         jsonsl_t jsn = gd->jsn;
    195333
    196334        len = strnlen(client_info->client_id, sizeof(client_info->client_id));
     
    198336                return -1;
    199337
     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
    200344        gd->jsn_buf_pos = -1;
    201 
    202         jsonsl_reset(jsn);
    203345        gd->start = get_device_id_state_start;
    204346        gd->end = get_device_id_state_end;
     347        gd->state = psRoot;
    205348
    206349        slist1 = NULL;
     
    236379        curl_slist_free_all(slist1);
    237380        slist1 = NULL;
     381
     382        gd->jsn = NULL;
     383        jsonsl_destroy(jsn);
    238384
    239385        return (int)ret;
     
    327473        size_t len;
    328474        char *postdata;
    329         jsonsl_t jsn = gd->jsn;
    330475
    331476        len = strlen(credential->device_code);
     
    333478                return -1;
    334479
     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
    335486        gd->jsn_buf_pos = -1;
    336 
    337         jsonsl_reset(jsn);
    338487        gd->start = get_access_token_state_start;
    339488        gd->end = get_access_token_state_end;
     489        gd->state = psRoot;
    340490
    341491        slist1 = NULL;
     
    375525        curl_slist_free_all(slist1);
    376526        slist1 = NULL;
     527
     528        gd->jsn = NULL;
     529        jsonsl_destroy(jsn);
    377530
    378531        return (int)ret;
     
    457610        size_t len;
    458611        char *postdata;
    459         jsonsl_t jsn = gd->jsn;
    460612
    461613        len = strlen(credential->refresh_token);
     
    463615                return -1;
    464616
     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
    465623        gd->jsn_buf_pos = -1;
    466 
    467         jsonsl_reset(jsn);
    468624        gd->start = update_access_token_state_start;
    469625        gd->end = update_access_token_state_end;
     626        gd->state = psRoot;
    470627
    471628        slist1 = NULL;
     
    504661        curl_slist_free_all(slist1);
    505662        slist1 = NULL;
     663
     664        gd->jsn = NULL;
     665        jsonsl_destroy(jsn);
    506666
    507667        return (int)ret;
     
    525685        struct curl_slist *slist1;
    526686        char *postdata;
    527         jsonsl_t jsn = gd->jsn;
    528687
    529688        len = strlen(credential->access_token);
     
    531690                return -1;
    532691
     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
    533698        gd->jsn_buf_pos = -1;
    534 
    535         jsonsl_reset(jsn);
    536699        gd->start = revoke_device_state_start;
    537700        gd->end = revoke_device_state_end;
     701        gd->state = psRoot;
    538702
    539703        slist1 = NULL;
     
    563727        curl_slist_free_all(slist1);
    564728        slist1 = NULL;
     729
     730        gd->jsn = NULL;
     731        jsonsl_destroy(jsn);
     732
     733        memset(credential, 0, sizeof(*credential));
    565734
    566735        return (int)ret;
     
    707876        char *postdata, *authorization;
    708877        static const char buf[] = "Expect:";
    709         jsonsl_t jsn = gd->jsn;
    710878        FIL file;
    711879        FRESULT fret;
    712880
     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
    713891        gd->jsn_buf_pos = -1;
    714 
    715         jsonsl_reset(jsn);
    716892        gd->start = upload_file_state_start;
    717893        gd->end = upload_file_state_end;
     894        gd->state = psRoot;
    718895
    719896        fret = f_open(&file, localfilepath, FA_READ);
    720897        if (fret != FR_OK) {
    721898                printf("log file open error %d\n", fret);
    722                 return -1;
     899                ret = -1;
     900                goto error;
    723901        }
    724902
     
    770948
    771949        f_close(&file);
     950
     951error:
     952        gd->jsn = NULL;
     953        jsonsl_destroy(jsn);
    772954
    773955        return (int)ret;
     
    11331315void client_final(void)
    11341316{
    1135         google_drive_t *gd = &google_drive;
    1136         jsonsl_t jsn = gd->jsn;
    1137 
    11381317        curl_global_cleanup();
    1139         jsonsl_destroy(jsn);
    1140 }
     1318}
  • asp3_tinet_ecnl_rx/trunk/app1_usb_watt_meter/src/client.h

    r364 r371  
    3333 *  の責任を負わない.
    3434 *
    35  *  @(#) $Id$
     35 *  @(#) $Id: client.h 1784 2019-02-06 01:11:25Z coas-nagasima $
    3636 */
    3737
     
    4141typedef struct client_info_t {
    4242        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];
    4347        char client_secret[32];
     48        //char redirect_uris[2][32];
    4449} client_info_t;
    4550
     
    7075typedef enum google_drive_parse_state_t {
    7176        psRoot,
     77        psInstalled,
     78        psClientId,
     79        psProjectId,
     80        psAuthUri,
     81        psTokenUri,
     82        psAuthProviderX509CertUrl,
     83        psClientSecret,
     84        psRedirectUris,
    7285        psDeviceCode,
    7386        psUserCode,
     
    99112        jsonsl_t jsn;
    100113        google_drive_parse_state_t state;
     114        int index;
    101115        char fname[sizeof("1:/log/20160101000000.log")];
    102116        char jsn_buf[256];
  • asp3_tinet_ecnl_rx/trunk/app1_usb_watt_meter/src/main.c

    r364 r371  
    238238        }
    239239
     240        ether_set_link_callback(netif_link_callback);
     241
     242        /* 初期化 */
     243        ffarch_init();
     244
    240245        /* libcurlとWolfSSLの初期化 */
    241246        client_init();
    242 
    243         ether_set_link_callback(netif_link_callback);
    244 
    245         /* 初期化 */
    246         ffarch_init();
    247247
    248248        gpio_write(&led_green, 0);
Note: See TracChangeset for help on using the changeset viewer.