Closed Rutvij-dev closed 4 years ago
I'd recommend working your way up to making the TLS connection to AWS.
Do some initial testing with the library you're developing and perhaps create a simple HTTP client to connect to a web server and retrieve a file. You'll be able to validate that you're receiving large amounts of data correctly. If you have the client POST data to a CGI script on the web server, you can confirm that sending large blocks of data works correctly as well. Doing the initial tests with cleartext will help you identify failures, even if you're just using md5sum
to validate file contents, you'll know that you successfully sent or received 32KB (for example).
Then try using the TLS code with a web server that you have control over so you can configure the TLS options, view logs that could indicate the cause of failed connections, and even capture packets on the server (possibly with tcpdump) for analysis in Wireshark to see what happens in the handshake. If you have the private key file for the TLS certificate on the web server, Wireshark will even be able to decode encrypted data from the handshake.
mbedtld_logs.txt
or is that going to a file? Does stdout run at a fast-enough baud rate that you aren't timing out the connection when hex dumping the 5KB ServerHello?You're making solid progress with your code, and it seems like you aren't far off from having a working handshake.
Hi, Thanks for the help it worked i am now able to communicate with AWS :)
While debugging this the issue seemed with send API of xbee3 cellular . I am using latest user guide Revision history—90002258 for firmware 11415, now this guide says it has hardbound data limit of 1500 bytes for transfer for TCP and less for UDP
I have selected XBEE_SOCK_PROTOCOL_TCP
while creating socket and able to connect to AWS.
But while sending to socket using xbee_sock_send
it cannot send 419 bytes of data saying EMSGSIZE(122), so i had to put soft limit with a condition and divide them into chunk of 160 bytes max.
Same thing happened with receive callback which is getting 512 bytes of chunk and not more then that, however guide says it may catch-up till 1500 bytes.
So send/recv both should work but in my case it did not work. So why this limit is mis-macthing ?
Is there anything needs to be configured to extend limit for send/recv ?
Thanks
Make sure you have XBEE_CELLULAR_ENABLED
defined in your project so it will use a maximum RF payload of 1500. I believe XBEE_MAX_RX_FRAME_LEN
and XBEE_MAX_TX_FRAME_LEN
are using safe values for the extended sockets.
How large are your serial buffers? -EMSGSIZE
usually indicates that code in xbee_device.c
can't fit the full frame into an empty serial transmit buffer. You'll get -EBUSY
if the buffer is too full to take the frame, but it should eventually drain and you'll be able to queue the outbound frame at that point.
Hi, you were right, there were buffer limits in my rx-tx UART buffers -255 bytes , i enlarged this size and now OTA as well as MQTT messages to AWS are working fine.
I made this size 1023 Bytes.
Thanks for the debug pointer, really appreciate.
Thanks
Hi, I am working with MCU based solution where i have added extended socket apis in AWS freeRTOS using https://github.com/digidotcom/xbee_ansic_library. In this implementations i am able to connect to the AWS server using socket create and connect option. I am using firmware version 11415.
I have written xbee_recv call back such as it uses 8K buffer and this will be filled up with Xbee RF hardware event and can be used for mqtt to to take data from this same buffer. To do this i have maintained one buffer with two pointers i.e hardware pointer and software pointer.
Hw pointer deals with incoming data from Xbee RF and SW pointer will be used in taking out the data and pas to upper layer.
Now in TLS handshaking phase i am able to achieve "client state: 0" viz. send client hello and "client state: 2" viz. parse server hello, but when it goes to the 3rd state "client state: 3" it goes to mbedtsl_ssl_flush_output it send 167 bytes for flushing , but at this point i am receiving socket state "0x76 -Socket closed unexpectedly" and connection lost logs.
Before this stage i received response from AWS for 5350 bytes which i stored in 8K buffer and and nb_want variable got satisfied.
below are my mbedtls enabled logs with MBEDTLS_DEBUG_C macro
Please help me understand what is going on,
Any help would be greatly appreciable.
Thanks