Changeset 399 for azure_iot_hub/trunk/azure_iothub
- Timestamp:
- Jun 5, 2019, 2:23:55 PM (5 years ago)
- Location:
- azure_iot_hub/trunk/azure_iothub/umqtt
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_codec.h
r389 r399 28 28 MOCKABLE_FUNCTION(, void, mqtt_codec_destroy, MQTTCODEC_HANDLE, handle); 29 29 30 MOCKABLE_FUNCTION(, void, mqtt_codec_reset, MQTTCODEC_HANDLE, handle); 30 31 MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_connect, const MQTT_CLIENT_OPTIONS*, mqttOptions, STRING_HANDLE, trace_log); 31 32 MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_disconnect); -
azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_client.c
r389 r399 113 113 static STRING_HANDLE construct_trace_log_handle(MQTT_CLIENT* mqtt_client) 114 114 { 115 #ifndef NO_LOGGING 115 116 STRING_HANDLE trace_log; 116 117 if (mqtt_client->logTrace) … … 123 124 } 124 125 return trace_log; 126 #else 127 return NULL; 128 #endif 125 129 } 126 130 … … 445 449 if (mqtt_codec_bytesReceived(mqtt_client->codec_handle, buffer, size) != 0) 446 450 { 451 mqtt_codec_reset(mqtt_client->codec_handle); 447 452 set_error_callback(mqtt_client, MQTT_CLIENT_PARSE_ERROR); 448 453 } … … 1215 1220 else 1216 1221 { 1222 #ifndef NO_LOGGING 1217 1223 if (mqtt_client->logTrace) 1218 1224 { … … 1221 1227 STRING_delete(trace_log); 1222 1228 } 1229 #endif 1223 1230 result = 0; 1224 1231 } … … 1280 1287 BUFFER_delete(pingPacket); 1281 1288 (void)tickcounter_get_current_ms(mqtt_client->packetTickCntr, &mqtt_client->timeSincePing); 1282 1289 #ifndef NO_LOGGING 1283 1290 if (mqtt_client->logTrace) 1284 1291 { … … 1287 1294 STRING_delete(trace_log); 1288 1295 } 1296 #endif 1289 1297 } 1290 1298 } -
azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_codec.c
r389 r399 38 38 #define UNSUBSCRIBE_FIXED_HEADER_FLAG 0x2 39 39 40 #define MAX_SEND_SIZE 0xFFFFFF7F 40 #define MAX_SEND_SIZE 0xFFFFFF7F // 268435455 41 42 // This captures the maximum packet size for 3 digits. 43 // If it's above this value then we bail out of the loop 44 #define MAX_3_DIGIT_PACKET_SIZE 2097152 41 45 42 46 #define CODEC_STATE_VALUES \ … … 409 413 size_t willTopicLen = 0; 410 414 size_t spaceLen = 0; 415 size_t currLen = 0; 416 size_t totalLen = 0; 411 417 412 418 if (mqttOptions->clientId != NULL) … … 436 442 } 437 443 438 size_tcurrLen = BUFFER_length(ctrlPacket);439 size_ttotalLen = clientLen + usernameLen + passwordLen + willMessageLen + willTopicLen + spaceLen;444 currLen = BUFFER_length(ctrlPacket); 445 totalLen = clientLen + usernameLen + passwordLen + willMessageLen + willTopicLen + spaceLen; 440 446 441 447 // Validate the Username & Password … … 507 513 { 508 514 (void)STRING_sprintf(connect_payload_trace, " | PWD: XXXX"); 515 //(void)STRING_sprintf(connect_payload_trace, " | PWD: %s", mqttOptions->password); 509 516 } 510 517 } … … 554 561 multiplier *= NEXT_128_CHUNK; 555 562 556 if (multiplier > 128 * 128 * 128)563 if (multiplier > MAX_3_DIGIT_PACKET_SIZE) 557 564 { 558 565 result = MU_FAILURE; … … 561 568 } while ((encodeByte & NEXT_128_CHUNK) != 0); 562 569 563 codecData->codecState = CODEC_STATE_VAR_HEADER; 564 565 // Reset remainLen Index 566 codecData->remainLenIndex = 0; 567 memset(codecData->storeRemainLen, 0, 4 * sizeof(uint8_t)); 568 569 if (totalLen > 0) 570 { 571 codecData->bufferOffset = 0; 572 codecData->headerData = BUFFER_new(); 573 if (codecData->headerData == NULL) 574 { 575 /* Codes_SRS_MQTT_CODEC_07_035: [ If any error is encountered then the packet state will be marked as error and mqtt_codec_bytesReceived shall return a non-zero value. ] */ 576 LogError("Failed BUFFER_new"); 577 result = MU_FAILURE; 578 } 579 else 580 { 581 if (BUFFER_pre_build(codecData->headerData, totalLen) != 0) 570 if (result != 0 || totalLen > MAX_SEND_SIZE) 571 { 572 LogError("Receive buffer too large for MQTT packet"); 573 result = MU_FAILURE; 574 } 575 else 576 { 577 codecData->codecState = CODEC_STATE_VAR_HEADER; 578 579 // Reset remainLen Index 580 codecData->remainLenIndex = 0; 581 memset(codecData->storeRemainLen, 0, 4 * sizeof(uint8_t)); 582 583 if (totalLen > 0) 584 { 585 codecData->bufferOffset = 0; 586 codecData->headerData = BUFFER_new(); 587 if (codecData->headerData == NULL) 582 588 { 583 589 /* Codes_SRS_MQTT_CODEC_07_035: [ If any error is encountered then the packet state will be marked as error and mqtt_codec_bytesReceived shall return a non-zero value. ] */ 584 LogError("Failed BUFFER_ pre_build");590 LogError("Failed BUFFER_new"); 585 591 result = MU_FAILURE; 586 592 } 587 593 else 594 { 595 if (BUFFER_pre_build(codecData->headerData, totalLen) != 0) 596 { 597 /* Codes_SRS_MQTT_CODEC_07_035: [ If any error is encountered then the packet state will be marked as error and mqtt_codec_bytesReceived shall return a non-zero value. ] */ 598 LogError("Failed BUFFER_pre_build"); 599 result = MU_FAILURE; 600 } 601 602 } 588 603 } 589 604 } … … 611 626 } 612 627 628 static void clear_codec_data(MQTTCODEC_INSTANCE* codec_data) 629 { 630 // Clear the code instance data 631 codec_data->currPacket = UNKNOWN_TYPE; 632 codec_data->codecState = CODEC_STATE_FIXED_HEADER; 633 codec_data->headerFlags = 0; 634 codec_data->bufferOffset = 0; 635 codec_data->headerData = NULL; 636 memset(codec_data->storeRemainLen, 0, 4 * sizeof(uint8_t)); 637 codec_data->remainLenIndex = 0; 638 } 639 640 void mqtt_codec_reset(MQTTCODEC_HANDLE handle) 641 { 642 if (handle != NULL) 643 { 644 clear_codec_data(handle); 645 } 646 } 647 613 648 MQTTCODEC_HANDLE mqtt_codec_create(ON_PACKET_COMPLETE_CALLBACK packetComplete, void* callbackCtx) 614 649 { … … 619 654 { 620 655 /* Codes_SRS_MQTT_CODEC_07_002: [On success mqtt_codec_create shall return a MQTTCODEC_HANDLE value.] */ 621 result->currPacket = UNKNOWN_TYPE; 622 result->codecState = CODEC_STATE_FIXED_HEADER; 623 result->headerFlags = 0; 624 result->bufferOffset = 0; 656 clear_codec_data(result); 625 657 result->packetComplete = packetComplete; 626 658 result->callContext = callbackCtx; 627 result->headerData = NULL;628 memset(result->storeRemainLen, 0, 4 * sizeof(uint8_t));629 result->remainLenIndex = 0;630 659 } 631 660 return result; … … 1086 1115 result = MU_FAILURE; 1087 1116 } 1088 if (codec_Data->currPacket == PINGRESP_TYPE)1117 else if (codec_Data->currPacket == PINGRESP_TYPE) 1089 1118 { 1090 1119 /* Codes_SRS_MQTT_CODEC_07_034: [Upon a constructing a complete MQTT packet mqtt_codec_bytesReceived shall call the ON_PACKET_COMPLETE_CALLBACK function.] */
Note:
See TracChangeset
for help on using the changeset viewer.