@@ -38,32 +38,30 @@ void msgCallback(char* topic, uint8_t* payload, unsigned int length) {
3838
3939bool MicroGear::clientReadln (Client* client, char *buffer, size_t buflen) {
4040 size_t pos = 0 ;
41+
4142 while (true ) {
42- while (true ) {
43- uint8_t byte = client->read ();
44- if (byte == ' \n ' ) {
45- // EOF found.
46- if (pos < buflen) {
47- if (pos > 0 && buffer[pos - 1 ] == ' \r ' )
48- pos--;
49- buffer[pos] = ' \0 ' ;
50- }
51- else {
52- buffer[buflen - 1 ] = ' \0 ' ;
53- }
54- return true ;
43+ uint8_t byte = client->read ();
44+ if (byte == ' \n ' ) {
45+ // EOF found.
46+ if (pos < buflen) {
47+ if (pos > 0 && buffer[pos - 1 ] == ' \r ' )
48+ pos--;
49+ buffer[pos] = ' \0 ' ;
5550 }
56-
57- if (byte != 255 ) {
58- if (pos < buflen) buffer[pos++] = byte;
51+ else {
52+ buffer[buflen - 1 ] = ' \0 ' ;
5953 }
60- else {
61- buffer[pos++] = ' \0 ' ;
62- return true ;
63- }
54+ return true ;
55+ }
56+
57+ if (byte != 255 ) {
58+ if (pos < buflen) buffer[pos++] = byte;
6459 }
60+ else {
61+ buffer[pos++] = ' \0 ' ;
62+ return false ;
63+ }
6564 }
66- return false ;
6765}
6866
6967int MicroGear::getHTTPReply (Client *client, char *buff, size_t buffsize) {
@@ -184,7 +182,7 @@ void MicroGear::syncTime(Client *client, unsigned long *bts) {
184182
185183MicroGear::MicroGear (Client& netclient ) {
186184 sockclient = &netclient;
187- constate = CLIENT_NOTCONNECT ;
185+ constate = MQTTCLIENT_NOTCONNECTED ;
188186 authclient = NULL ;
189187 mqttclient = NULL ;
190188
@@ -282,7 +280,7 @@ void MicroGear::resetToken() {
282280}
283281
284282
285- void MicroGear::getToken (char *gkey, char *galias, char * token, char * tokensecret, char *endpoint) {
283+ bool MicroGear::getToken (char *gkey, char *galias, char * token, char * tokensecret, char *endpoint) {
286284 char state[2 ], tstate[2 ];
287285 int authstatus = 0 ;
288286
@@ -346,7 +344,8 @@ void MicroGear::getToken(char *gkey, char *galias, char* token, char* tokensecre
346344 #ifdef DEBUG_H
347345 Serial.println (" authclient is disconnected" );
348346 #endif
349- delay (2000 );
347+ // delay(2000);
348+ return false ;
350349 }
351350 } while (!authstatus);
352351 }
@@ -431,7 +430,7 @@ void MicroGear::getToken(char *gkey, char *galias, char* token, char* tokensecre
431430 }
432431 }
433432 }while (*state == EEPROM_STATE_REQ);
434- // reset accesstoken retry counter
433+ // reset accesstoken retry counter
435434 retry = RETRY;
436435 #ifdef DEBUG_H
437436 Serial.println (authstatus); Serial.println (token); Serial.println (tokensecret); Serial.println (endpoint);
@@ -444,24 +443,28 @@ void MicroGear::getToken(char *gkey, char *galias, char* token, char* tokensecre
444443 readEEPROM (tokensecret,EEPROM_TOKENSECRETOFFSET,TOKENSECRETSIZE);
445444 readEEPROM (endpoint,EEPROM_ENDPOINTSOFFSET,MAXENDPOINTLENGTH);
446445 }
446+
447+ authclient->stop ();
447448
448449 if (*state != EEPROM_STATE_ACC) {
449450 #ifdef DEBUG_H
450451 Serial.println (" Fail to get a token." );
451452 #endif
452- delay (2000 );
453+ // delay(2000);
454+ return false ;
453455 }
454- authclient-> stop () ;
456+ return true ;
455457}
456458
457- bool MicroGear::connectBroker (char * appid) {
459+ int MicroGear::connectBroker (char * appid) {
458460 char username[USERNAMESIZE+1 ];
459461 char password[PASSWORDSIZE+1 ];
460462 char buff[2 *TOKENSECRETSIZE+2 ];
461463 char token[TOKENSIZE+1 ];
462464 char tokensecret[TOKENSECRETSIZE+1 ];
463465 char endpoint[MAXENDPOINTLENGTH+1 ];
464466 int gbport;
467+ bool tokenOK;
465468
466469 do {
467470 syncTime (sockclient, &bootts);
@@ -486,20 +489,22 @@ bool MicroGear::connectBroker(char* appid) {
486489 if (authclient) delete (authclient);
487490 authclient = new AuthClient (*sockclient);
488491 authclient->init (appid,scope,bootts);
489- getToken (this ->gearkey ,this ->gearalias ,token,tokensecret,endpoint);
492+
493+ tokenOK = getToken (this ->gearkey ,this ->gearalias ,token,tokensecret,endpoint);
490494 delete (authclient);
491495 authclient = NULL ;
496+
497+ if (tokenOK && *token && *tokensecret) {
492498
493- /* if endpoint is empty, request a new one */
494- initEndpoint (sockclient, endpoint);
499+ /* if endpoint is empty, request a new one */
500+ initEndpoint (sockclient, endpoint);
501+
502+ /* generate one-time user/password */
503+ sprintf (username," %s%%%s%%%lu" ,token,gearkey,bootts+millis ()/1000 );
504+ sprintf (buff," %s&%s" ,tokensecret,gearsecret);
505+ Sha1.initHmac ((uint8_t *)buff,strlen (buff));
506+ Sha1.HmacBase64 (password, username);
495507
496- /* generate one-time user/password */
497- sprintf (username," %s%%%s%%%lu" ,token,gearkey,bootts+millis ()/1000 );
498- sprintf (buff," %s&%s" ,tokensecret,gearsecret);
499- Sha1.initHmac ((uint8_t *)buff,strlen (buff));
500- Sha1.HmacBase64 (password, username);
501-
502- if (*token && *tokensecret) {
503508 #ifdef DEBUG_H
504509 Serial.println (" Going to connect to MQTT broker" );
505510 Serial.println (token);
@@ -530,7 +535,7 @@ bool MicroGear::connectBroker(char* appid) {
530535
531536 constate = this ->mqttclient ->connect (token,username+TOKENSIZE+1 ,password);
532537 switch (constate) {
533- case CLIENT_CONNECTED :
538+ case MQTTCLIENT_CONNECTED :
534539 backoff = MINBACKOFFTIME;
535540 if (cb_present)
536541 subscribe (" /&present" );
@@ -542,23 +547,24 @@ bool MicroGear::connectBroker(char* appid) {
542547
543548 if (cb_connected)
544549 cb_connected (NULL ,NULL ,0 );
545- break ;
546- case CLIENT_NOTCONNECT :
550+
551+ return NETPIECLIENT_CONNECTED;
552+
553+ case MQTTCLIENT_NOTCONNECTED :
547554 if (backoff < MAXBACKOFFTIME) backoff = 2 *backoff;
548555 delay (backoff);
549- break ;
556+ return NETPIECLIENT_NOTCONNECTED ;
550557 }
551- return constate;
552558 }
553- else return false ;
559+ else return NETPIECLIENT_TOKENERROR ;
554560}
555561
556562void MicroGear::useTLS (bool usetls) {
557563 this ->securemode = usetls;
558564}
559565
560- bool MicroGear::connect (char * appid) {
561- connectBroker (appid);
566+ int MicroGear::connect (char * appid) {
567+ return connectBroker (appid);
562568}
563569
564570bool MicroGear::connected () {
0 commit comments