5.12.1 Execution
main.c
- Initialize the device and connect to a server using
SSL.
- Code summary
- Configure the network and
server parameters in
main.h
./** Wi-Fi Settings */ #define MAIN_WLAN_SSID "DEMO_AP" /**< Destination SSID */ #define MAIN_WLAN_AUTH M2M_WIFI_SEC_WPA_PSK /**< Security type */ #define MAIN_WLAN_PSK "12345678" /**< Password for Destination SSID */ /** All SSL defines */ #define MAIN_HOST_NAME "www.google.com" #define MAIN_HOST_PORT 443
- Initialize the socket module and create the UDP server
socket.
socketInit(); registerSocketCallback(socket_cb, resolve_cb);
- Connect to the
AP.
/* Connect to AP. */ m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID), MAIN_WLAN_AUTH, (char *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL);
- After the device is connected to the AP, the
gethostbyname()
function will be executed.static void wifi_cb(uint8_t u8MsgType, void *pvMsg) { case M2M_WIFI_REQ_DHCP_CONF: { /* Obtain the IP Address by network name */ gethostbyname((uint8_t *)MAIN_HOST_NAME);
- Ensure the following
configuration in
sslConnect()
:Call
socket()
with the SOCKET_FLAGS_SSL bit set in u8Flags parameter./* Create secure socket */ if (tcp_client_socket < 0) { tcp_client_socket = socket(AF_INET, SOCK_STREAM, SOCKET_FLAGS_SSL); }
- Configure the SNI for the socket via
setsockopt()
and option SO_SSL_SNI./*Configure the SNI for the socket */ setsockopt(tcp_client_socket, SOL_SSL_SOCKET, SO_SSL_SNI, MAIN_HOST_NAME, sizeof(MAIN_HOST_NAME));
- Call
set_alpn_list()
with parameter pointing to "h2 http/1.1" (this means that HTTP/2 and HTTP/1.1 are both supported)./* Sets the protocol list to be used for ALPN */ set_alpn_list(tcp_client_socket,"h2 http/1.1");
- After the configuration is
applied, try to connect to the SSL server by calling
sslConnect()
.if (sslConnect() != SOCK_ERR_NO_ERROR) { gu8SocketStatus = SocketInit; }
- If successfully connected,
the
socket_cb()
function will be called with the SOCKET_MSG_CONNECT message. The user can check for the ALPN negotiation type in thesocket_cb()
function with theget_alpn_index()
function./* Check for ALPN negotiation type. */ switch (alpn_index) { case 1: printf("Negotiated HTTP/2.\r\n"); break; case 2: printf("Negotiated HTTP/1.1.\r\n"); break; case 0: printf("Protocol negotiation did not occur.\r\n"); break; }
- Configure the network and
server parameters in
- Build the program and download it into the board.
- Start the application.Note: To set up an SSL connection, a root certificate must be installed.