WiFiSSLClient Class

WiFiSSLClient Class

Description
Defines a class of WiFi Secure Socket Layer Client implementation for Ameba.

Syntax
class WiFiSSLClient

Members

Public Constructors 
WiFiSSLClient::WiFiSSLClientConstructs a WiFiSSLClient instance that always connects in SSL to the specified IP address and port
Public Methods 
WiFiSSLClient::connectConnect to the IP address and port
WiFiSSLClient::writeWrite a single byte into the packet
WiFiSSLClient::availableNumber of bytes remaining in the current packet
WiFiSSLClient::readRead a single byte from the current packet
WiFiSSLClient:: peekReturn the next byte from the current packet without moving on to the next byte
WiFiSSLClient:: flushFinish reading the current packet
WiFiSSLClient::stopStop SSL client connection
WiFiSSLClient::connectedCheck if SSL client is connected, return 1 if connected, 0 if not
WiFiSSLClient:: setRootCASet Root CA for authentication
WiFiSSLClient:: setClientCertificateSet certificate of the client
WiFiSSLClient::setRecvTimeoutSet receiving timeout
WiFiSSLClient::setPreSharedKeySet the pre shared key (PSK) to use for authentication

WiFiSSLClient::WiFiSSLClient

Description
Constructs a WiFiSSLClient instance that always connects in SSL to the specified IP address and port.

Syntax
WiFiSSLClient::WiFiSSLClient(void)
WiFiSSLClient::WiFiSSLClient(uint8_t sock)

Parameters
sock: socket state, default -1

Returns
The function returns nothing.

Example Code
Example: WiFiSSLClient

#include    
  
char ssid[] = "yourNetwork"; //  your network SSID (name)  
char pass[] = "secretPassword";// your network password (use for WPA, or WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)
  
int status = WL_IDLE_STATUS;  
  
char server[] = "www.google.com";         // name address for Google (using DNS)  
//unsigned char test_client_key[] = "";   //For the usage of verifying client  
//unsigned char test_client_cert[] = "";  //For the usage of verifying client  
//unsigned char test_ca_cert[] = "";      //For the usage of verifying server  
  
WiFiSSLClient client;  
  
void setup() {  
  //Initialize serial and wait for port to open:  
  Serial.begin(9600);  
  while (!Serial) {  
    ; // wait for serial port to connect. Needed for native USB port only  
  }  
  
  // check for the presence of the shield:  
  if (WiFi.status() == WL_NO_SHIELD) {  
    Serial.println("WiFi shield not present");  
    // don't continue:  
    while (true);  
  }  
  
  // attempt to connect to Wifi network:  
  while (status != WL_CONNECTED) {  
    Serial.print("Attempting to connect to SSID: ");  
    Serial.println(ssid);  
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:  
    status = WiFi.begin(ssid,pass);  
  
    // wait 10 seconds for connection:  
    delay(10000);  
  }  
  Serial.println("Connected to wifi");  
  printWifiStatus();  
  
  Serial.println("\nStarting connection to server...");  
  // if you get a connection, report back via serial:  
  if (client.connect(server, 443)) { //client.connect(server, 443, test_ca_cert, test_client_cert, test_client_key)  
    Serial.println("connected to server");  
    // Make a HTTP request:  
    client.println("GET /search?q=realtek HTTP/1.0");  
    client.println("Host: www.google.com");  
    client.println("Connection: close");  
    client.println();  
  }  
  else  
  Serial.println("connected to server failed");  
}  
  
void loop() {  
  // if there are incoming bytes available  
  // from the server, read them and print them:  
  while (client.available()) {  
    char c = client.read();  
    Serial.write(c);  
  }  
  
  // if the server's disconnected, stop the client:  
  if (!client.connected()) {  
    Serial.println();  
    Serial.println("disconnecting from server.");  
    client.stop();  
  
    // do nothing forevermore:  
    while (true);  
  }  
}  
  
void printWifiStatus() {  
  // print the SSID of the network you're attached to:  
  Serial.print("SSID: ");  
  Serial.println(WiFi.SSID());  
  
  // print your WiFi shield's IP address:  
  IPAddress ip = WiFi.localIP();  
  Serial.print("IP Address: ");  
  Serial.println(ip);  
  
  // print your MAC address:  
  byte mac[6];  
  WiFi.macAddress(mac);  
  Serial.print("MAC address: ");  
  Serial.print(mac[0], HEX);  
  Serial.print(":");  
  Serial.print(mac[1], HEX);  
  Serial.print(":");  
  Serial.print(mac[2], HEX);  
  Serial.print(":");  
  Serial.print(mac[3], HEX);  
  Serial.print(":");  
  Serial.print(mac[4], HEX);  
  Serial.print(":");  
  Serial.println(mac[5], HEX);  
	  
  // print the received signal strength:  
  long rssi = WiFi.RSSI();  
  Serial.print("signal strength (RSSI):");  
  Serial.print(rssi);  
  Serial.println(" dBm");  
}  

Notes and Warnings
NA

WiFiSSLClient::connect

Description
Connect to the IP address and port.

Syntax
int WiFiSSLClient::connect(IPAddress ip, uint16_t port)
int WiFiSSLClient::connect(const char *host, uint16_t port)
int WiFiSSLClient::connect(const char* host, uint16_t port, unsigned char* rootCABuff, unsigned char* cli_cert, unsigned char* cli_key)
int WiFiSSLClient::connect(IPAddress ip, uint16_t port, unsigned char* rootCABuff, unsigned char* cli_cert, unsigned char* cli_key)

Parameters
ip: IP address
host: Host name
port: the port to listen on
rootCABuff: buffer that store root CA
cli_cert: buffer that store client certificate
cli_key buffer that store client key pair

Returns
1: if successful
0: if failed

Example Code
Example: WiFiSSLClient
Details of the code can be found in the previous section of WiFiSSLClient:: WiFiSSLClient.

Notes and Warnings
NA

WiFiSSLClient::write

Description
Write a single byte into the packet

Syntax
size_t WiFiSSLClient::write(uint8_t byte)
size_t WiFiSSLClient::write(const uint8_t *buf, size_t size)

Parameters
byte: the outgoing byte
buf: the outgoing message
size: the size of the buffer

Returns
The function returns single -byte into the packet or turns bytes size from the buffer into the packet.

Example Code
NA

Notes and Warnings
NA

WiFiSSLClient::available

Description
Number of bytes remaining in the current packet

Syntax
int WiFiSSLClient::available(void)

Parameters
The function requires no input parameter.

Returns
The function returns the number of bytes available in the current packet; else return “0:” if no data available.

Example Code
Example: WiFiSSLClient
Details of the code can be found in the previous section of WiFiSSLClient:: WiFiSSLClient.

Notes and Warnings
NA

WiFiSSLClient::read

Description
Read a single byte from the current packet

Syntax
int WiFiSSLClient::read()
int WiFiSSLClient::read(unsigned char* buf, size_t size)

Parameters
buf: buffer to hold incoming packets (char*)
size: maximum size of the buffer (int)

Returns
size: the size of the buffer
-1: if no buffer is available

Example Code
Example: WiFiSSLClient
Details of the code can be found in the previous section of WiFiSSLClient:: WiFiSSLClient.

Notes and Warnings
NA

WiFiSSLClient::peek

Description
Return the next byte from the current packet without moving on to the next byte.

Syntax
int WiFiSSLClient::peek(void)

Parameters
The function requires no input parameter.

Returns
b: the next byte or character
-1: if none is available

Example Code
NA

Notes and Warnings
NA

WiFiSSLClient::flush

Description
Finish reading the current packet

Syntax
void WiFiSSLClient::flush(void)

Parameters
The function requires no input parameter.

Returns
The function returns nothing.

Example Code
NA

Notes and Warnings
NA

WiFiSSLClient::stop

Description
Disconnect from the server. Stop SSL client connection

Syntax
void WiFiSSLClient::stop(void)

Parameters
The function requires no input parameter.

Returns
The function returns nothing.

Example Code
Example: WiFiSSLClient
Details of the code can be found in the previous section of WiFiSSLClient:: WiFiSSLClient.

Notes and Warnings
NA

WiFiSSLClient::connected

Description
Check if SSL client is connected, return 1 if connected, 0 if not.

Syntax
uint8_t WiFiSSLClient::connected(void)

Parameters
The function requires no input parameter.

Returns
The function returns “1” if connected, returns “0” if not connected.

Example Code
Example: WiFiSSLClient
Details of the code can be found in the previous section of WiFiSSLClient:: WiFiSSLClient.

Notes and Warnings
NA

WiFiSSLClient::setRootCA

Description
Set Root CA for authentication

Syntax
void WiFiSSLClient::setRootCA(unsigned char *rootCA)

Parameters
rootCA: a string of rootCA

Returns
The function returns nothing.

Example Code
NA

Notes and Warnings
NA

WiFiSSLClient::setClientCertificate

Description
Set certificate of client

Syntax
void WiFiSSLClient::setClientCertificate(unsigned char *client_ca, unsigned char *private_key)

Parameters
client_ca: Client certificate
private_key: client’s private key pair

Returns
The function returns nothing.

Example Code
NA

Notes and Warnings
NA

WiFiSSLClient::setRecvTimeout

Description
Set receiving timeout

Syntax
int WiFiSSLClient::setRecvTimeout(int timeout)

Parameters
timeout: timeout in seconds

Returns
The function returns “0”.

Example Code
NA

Notes and Warnings
NA

WiFiSSLClient::setPreSharedKey

Description
Set the pre shared key (PSK) to use for authentication

Syntax
void WiFiSSLClient::setPreSharedKey(unsigned char *pskIdent, unsigned char *psKey)

Parameters
pskIdent: identity for PSK
psKey: Pre shared key

Returns
The function returns nothing.

Example Code
NA

Notes and Warnings
Do not set a root CA and client certificate if PSK should be used for authentication. If root CA, client certificate and PSK are all set, certificate based authentication will be used.

Please confirm that QQ communication software is installed