mirror of
https://github.com/Links2004/arduinoWebSockets.git
synced 2025-06-27 16:01:01 +02:00
Compare commits
20 Commits
Author | SHA1 | Date | |
---|---|---|---|
1789a18ddb | |||
ca8026e550 | |||
daf04b0560 | |||
8cdcf47fc5 | |||
1bea689694 | |||
7a4c416082 | |||
87b23a48e9 | |||
bd011d8fd8 | |||
af17970256 | |||
66f69c3b20 | |||
d41d65ccdc | |||
2e54e8b9c6 | |||
2059fc5c3b | |||
b60be0e3c5 | |||
e8006439a2 | |||
0980b209ba | |||
899cfbdbe7 | |||
dcfb0df665 | |||
dc6fd04a98 | |||
7da1dc5c6e |
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
10
.github/workflows/arduino-lint.yaml
vendored
Normal file
10
.github/workflows/arduino-lint.yaml
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
name: Arduino library compliance (Lint)
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: arduino/arduino-lint-action@v2
|
||||||
|
with:
|
||||||
|
library-manager: update
|
69
.github/workflows/compile-arduino_wifinina-examples.yaml
vendored
Normal file
69
.github/workflows/compile-arduino_wifinina-examples.yaml
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
name: Compile Arduino WiFiNINA Examples
|
||||||
|
|
||||||
|
# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/compile-arduino_wifinina-examples.yaml"
|
||||||
|
- "examples/arduino_wifinina/**"
|
||||||
|
- "src/**"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/compile-arduino_wifinina-examples.yaml"
|
||||||
|
- "examples/arduino_wifinina/**"
|
||||||
|
- "src/**"
|
||||||
|
schedule:
|
||||||
|
# Run every Tuesday at 8 AM UTC to catch breakage caused by changes to external resources (libraries, platforms).
|
||||||
|
- cron: "0 8 * * TUE"
|
||||||
|
workflow_dispatch:
|
||||||
|
repository_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: ${{ matrix.board.fqbn }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
SKETCHES_REPORTS_PATH: sketches-reports
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
board:
|
||||||
|
- fqbn: arduino:samd:mkrwifi1010
|
||||||
|
platforms: |
|
||||||
|
- name: arduino:samd
|
||||||
|
artifact-name-suffix: arduino-samd-mkrwifi1010
|
||||||
|
libraries: |
|
||||||
|
- name: WiFiNINA
|
||||||
|
- fqbn: arduino:samd:nano_33_iot
|
||||||
|
platforms: |
|
||||||
|
- name: arduino:samd
|
||||||
|
artifact-name-suffix: arduino-samd-nano_33_iot
|
||||||
|
libraries: |
|
||||||
|
- name: WiFiNINA
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile examples
|
||||||
|
uses: arduino/compile-sketches@v1
|
||||||
|
with:
|
||||||
|
fqbn: ${{ matrix.board.fqbn }}
|
||||||
|
platforms: ${{ matrix.board.platforms }}
|
||||||
|
libraries: |
|
||||||
|
# Install the library from the local path.
|
||||||
|
- source-path: ./
|
||||||
|
${{ matrix.board.libraries }}
|
||||||
|
sketch-paths: |
|
||||||
|
- examples/arduino_wifinina/arduino_wifinina.ino
|
||||||
|
enable-deltas-report: true
|
||||||
|
sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
|
|
||||||
|
- name: Save sketches report as workflow artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
if-no-files-found: error
|
||||||
|
path: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
|
name: sketches-report-${{ matrix.board.artifact-name-suffix }}
|
81
.github/workflows/compile-seeed-studio-examples.yaml
vendored
Normal file
81
.github/workflows/compile-seeed-studio-examples.yaml
vendored
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
name: Compile SeedStudio Examples
|
||||||
|
|
||||||
|
# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/compile-seeed-studio-examples.yaml"
|
||||||
|
- "examples/seeed-studio/**"
|
||||||
|
- "src/**"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/compile-seeed-studio-examples.yaml"
|
||||||
|
- "examples/seeed-studio/**"
|
||||||
|
- "src/**"
|
||||||
|
schedule:
|
||||||
|
# Run every Tuesday at 8 AM UTC to catch breakage caused by changes to external resources (libraries, platforms).
|
||||||
|
- cron: "0 8 * * TUE"
|
||||||
|
workflow_dispatch:
|
||||||
|
repository_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: ${{ matrix.board.fqbn }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
SKETCHES_REPORTS_PATH: sketches-reports
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
board:
|
||||||
|
- fqbn: Seeeduino:samd:seeed_XIAO_m0:usbstack=arduino,debug=off
|
||||||
|
platforms: |
|
||||||
|
- name: Seeeduino:samd
|
||||||
|
source-url: https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
|
||||||
|
libraries: |
|
||||||
|
- name: Seeed Arduino rpcWiFi
|
||||||
|
- name: Seeed Arduino rpcUnified
|
||||||
|
- name: Seeed_Arduino_mbedtls
|
||||||
|
- name: Seeed Arduino FS
|
||||||
|
- name: Seeed Arduino SFUD
|
||||||
|
artifact-name-suffix: seeeduino-xia0
|
||||||
|
- fqbn: Seeeduino:samd:seeed_wio_terminal
|
||||||
|
platforms: |
|
||||||
|
- name: Seeeduino:samd
|
||||||
|
source-url: https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
|
||||||
|
libraries: |
|
||||||
|
- name: Seeed Arduino rpcWiFi
|
||||||
|
- name: Seeed Arduino rpcUnified
|
||||||
|
- name: Seeed_Arduino_mbedtls
|
||||||
|
- name: Seeed Arduino FS
|
||||||
|
- name: Seeed Arduino SFUD
|
||||||
|
artifact-name-suffix: seeeduino-wio_terminal
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile examples
|
||||||
|
uses: arduino/compile-sketches@v1
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
fqbn: ${{ matrix.board.fqbn }}
|
||||||
|
platforms: ${{ matrix.board.platforms }}
|
||||||
|
libraries: |
|
||||||
|
# Install the library from the local path.
|
||||||
|
- source-path: ./
|
||||||
|
${{ matrix.board.libraries }}
|
||||||
|
sketch-paths: |
|
||||||
|
- examples/seeed-studio/xio-wio-terminal/WebSocketClient
|
||||||
|
enable-deltas-report: true
|
||||||
|
sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
|
|
||||||
|
- name: Save sketches report as workflow artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
if-no-files-found: error
|
||||||
|
path: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
|
name: sketches-report-${{ matrix.board.artifact-name-suffix }}
|
60
.github/workflows/compile-unor4wifi-examples.yaml
vendored
Normal file
60
.github/workflows/compile-unor4wifi-examples.yaml
vendored
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
name: Compile Arduino UNO R4 WiFi Examples
|
||||||
|
|
||||||
|
# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/compile-unor4wifi-examples.yaml"
|
||||||
|
- "examples/arduino_renesas/**"
|
||||||
|
- "src/**"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/compile-unor4wifi-examples.yaml"
|
||||||
|
- "examples/arduino_renesas/**"
|
||||||
|
- "src/**"
|
||||||
|
schedule:
|
||||||
|
# Run every Tuesday at 8 AM UTC to catch breakage caused by changes to external resources (libraries, platforms).
|
||||||
|
- cron: "0 8 * * TUE"
|
||||||
|
workflow_dispatch:
|
||||||
|
repository_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: ${{ matrix.board.fqbn }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
SKETCHES_REPORTS_PATH: sketches-reports
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
board:
|
||||||
|
- fqbn: arduino:renesas_uno:unor4wifi
|
||||||
|
platforms: |
|
||||||
|
- name: arduino:renesas_uno
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile examples
|
||||||
|
uses: arduino/compile-sketches@v1
|
||||||
|
with:
|
||||||
|
fqbn: ${{ matrix.board.fqbn }}
|
||||||
|
platforms: ${{ matrix.board.platforms }}
|
||||||
|
libraries: |
|
||||||
|
# Install the library from the local path.
|
||||||
|
- source-path: ./
|
||||||
|
sketch-paths: |
|
||||||
|
- examples/arduino_renesas/arduino_uno_r4_wifi
|
||||||
|
enable-deltas-report: true
|
||||||
|
sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
|
|
||||||
|
- name: Save sketches report as workflow artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
if-no-files-found: error
|
||||||
|
path: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
|
name: sketches-report-${{ matrix.board.artifact-name-suffix }}
|
12
.github/workflows/main.yml
vendored
12
.github/workflows/main.yml
vendored
@ -17,7 +17,7 @@ jobs:
|
|||||||
check_version_files:
|
check_version_files:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: check version
|
- name: check version
|
||||||
run: |
|
run: |
|
||||||
@ -26,7 +26,7 @@ jobs:
|
|||||||
prepare_example_json:
|
prepare_example_json:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: generate examples
|
- name: generate examples
|
||||||
id: set-matrix
|
id: set-matrix
|
||||||
@ -61,7 +61,7 @@ jobs:
|
|||||||
ARDUINO_DIRECTORIES_DATA: /home/runner/arduino_ide
|
ARDUINO_DIRECTORIES_DATA: /home/runner/arduino_ide
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Get hash
|
- name: Get hash
|
||||||
id: get-hash
|
id: get-hash
|
||||||
@ -69,7 +69,7 @@ jobs:
|
|||||||
echo "hash=$(/bin/date -u "+%Y%m%d")-$(md5sum ".github/workflows/main.yml" | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT
|
echo "hash=$(/bin/date -u "+%Y%m%d")-$(md5sum ".github/workflows/main.yml" | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- uses: actions/cache@v3
|
- uses: actions/cache@v4
|
||||||
id: cache_all
|
id: cache_all
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
@ -116,7 +116,7 @@ jobs:
|
|||||||
|
|
||||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: install libgtk2.0-0
|
- name: install libgtk2.0-0
|
||||||
run: |
|
run: |
|
||||||
@ -128,7 +128,7 @@ jobs:
|
|||||||
echo "hash=$(/bin/date -u "+%Y%m%d")-$(md5sum ".github/workflows/main.yml" | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT
|
echo "hash=$(/bin/date -u "+%Y%m%d")-$(md5sum ".github/workflows/main.yml" | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- uses: actions/cache@v3
|
- uses: actions/cache@v4
|
||||||
id: cache_all
|
id: cache_all
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
WebSocket Server and Client for Arduino [](https://github.com/Links2004/arduinoWebSockets/actions?query=workflow%3ACI+branch%3Amaster)
|
WebSocket Server and Client for Arduino [](https://github.com/Links2004/arduinoWebSockets/actions?query=branch%3Amaster)
|
||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
a WebSocket Server and Client for Arduino based on RFC6455.
|
a WebSocket Server and Client for Arduino based on RFC6455.
|
||||||
@ -33,6 +33,8 @@ a WebSocket Server and Client for Arduino based on RFC6455.
|
|||||||
- ATmega2560 with Ethernet Shield (ATmega branch)
|
- ATmega2560 with Ethernet Shield (ATmega branch)
|
||||||
- ATmega2560 with enc28j60 (ATmega branch)
|
- ATmega2560 with enc28j60 (ATmega branch)
|
||||||
- Arduino UNO [R4 WiFi](https://github.com/arduino/ArduinoCore-renesas)
|
- Arduino UNO [R4 WiFi](https://github.com/arduino/ArduinoCore-renesas)
|
||||||
|
- Arduino Nano 33 IoT, MKR WIFI 1010 (requires [WiFiNINA](https://github.com/arduino-libraries/WiFiNINA/) library)
|
||||||
|
- Seeeduino XIAO, Seeeduino Wio Terminal (requires [rpcWiFi](https://github.com/Seeed-Studio/Seeed_Arduino_rpcWiFi) library)
|
||||||
|
|
||||||
###### Note: ######
|
###### Note: ######
|
||||||
|
|
||||||
@ -45,6 +47,7 @@ a WebSocket Server and Client for Arduino based on RFC6455.
|
|||||||
### wss / SSL ###
|
### wss / SSL ###
|
||||||
supported for:
|
supported for:
|
||||||
- wss client on the ESP8266
|
- wss client on the ESP8266
|
||||||
|
- wss / SSL for ESP32 in client mode
|
||||||
- wss / SSL is not natively supported in WebSocketsServer however it is possible to achieve secure websockets
|
- wss / SSL is not natively supported in WebSocketsServer however it is possible to achieve secure websockets
|
||||||
by running the device behind an SSL proxy. See [Nginx](examples/Nginx/esp8266.ssl.reverse.proxy.conf) for a
|
by running the device behind an SSL proxy. See [Nginx](examples/Nginx/esp8266.ssl.reverse.proxy.conf) for a
|
||||||
sample Nginx server configuration file to enable this.
|
sample Nginx server configuration file to enable this.
|
||||||
@ -105,8 +108,6 @@ Where `WStype_t type` is defined as:
|
|||||||
### Issues ###
|
### Issues ###
|
||||||
Submit issues to: https://github.com/Links2004/arduinoWebSockets/issues
|
Submit issues to: https://github.com/Links2004/arduinoWebSockets/issues
|
||||||
|
|
||||||
[](https://gitter.im/Links2004/arduinoWebSockets?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
||||||
|
|
||||||
### License and credits ###
|
### License and credits ###
|
||||||
|
|
||||||
The library is licensed under [LGPLv2.1](https://github.com/Links2004/arduinoWebSockets/blob/master/LICENSE)
|
The library is licensed under [LGPLv2.1](https://github.com/Links2004/arduinoWebSockets/blob/master/LICENSE)
|
||||||
|
100
examples/arduino_wifinina/arduino_wifinina.ino
Normal file
100
examples/arduino_wifinina/arduino_wifinina.ino
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <WiFiNINA.h>
|
||||||
|
#include <WebSocketsClient.h>
|
||||||
|
|
||||||
|
#define WIFI_SSID ""
|
||||||
|
#define WIFI_PASS ""
|
||||||
|
|
||||||
|
int status = WL_IDLE_STATUS;
|
||||||
|
WiFiClient client;
|
||||||
|
WebSocketsClient webSocket;
|
||||||
|
|
||||||
|
void webSocketEvent(WStype_t type, uint8_t *payload, size_t length) {
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case WStype_DISCONNECTED:
|
||||||
|
Serial.println("[WSc] Disconnected!");
|
||||||
|
break;
|
||||||
|
case WStype_CONNECTED:
|
||||||
|
Serial.println("[WSc] Connected!");
|
||||||
|
|
||||||
|
// send message to server when Connected
|
||||||
|
webSocket.sendTXT("Connected");
|
||||||
|
break;
|
||||||
|
case WStype_TEXT:
|
||||||
|
Serial.print("[WSc] get text:");
|
||||||
|
Serial.println((char *)payload);
|
||||||
|
|
||||||
|
// send message to server
|
||||||
|
// webSocket.sendTXT("message here");
|
||||||
|
break;
|
||||||
|
case WStype_BIN:
|
||||||
|
// send data to server
|
||||||
|
// webSocket.sendBIN(payload, length);
|
||||||
|
break;
|
||||||
|
case WStype_ERROR:
|
||||||
|
case WStype_FRAGMENT_TEXT_START:
|
||||||
|
case WStype_FRAGMENT_BIN_START:
|
||||||
|
case WStype_FRAGMENT:
|
||||||
|
case WStype_PING:
|
||||||
|
case WStype_PONG:
|
||||||
|
case WStype_FRAGMENT_FIN:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
while (!Serial) {
|
||||||
|
; // wait for serial port to connect. Needed for native USB port only
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
Serial.println();
|
||||||
|
Serial.println();
|
||||||
|
|
||||||
|
// check for the WiFi module:
|
||||||
|
if (WiFi.status() == WL_NO_MODULE) {
|
||||||
|
Serial.println("Communication with WiFi module failed!");
|
||||||
|
// don't continue
|
||||||
|
while (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
String fv = WiFi.firmwareVersion();
|
||||||
|
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
|
||||||
|
Serial.println("Please upgrade the firmware");
|
||||||
|
}
|
||||||
|
|
||||||
|
// attempt to connect to WiFi network:
|
||||||
|
while (status != WL_CONNECTED) {
|
||||||
|
Serial.print("Attempting to connect to SSID: ");
|
||||||
|
Serial.println(WIFI_SSID);
|
||||||
|
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
|
||||||
|
status = WiFi.begin(WIFI_SSID, WIFI_PASS);
|
||||||
|
|
||||||
|
// wait 10 seconds for connection:
|
||||||
|
delay(10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("Connected to WiFi");
|
||||||
|
|
||||||
|
// print your board's IP address:
|
||||||
|
IPAddress ip = WiFi.localIP();
|
||||||
|
Serial.print("IP Address: ");
|
||||||
|
Serial.println(ip);
|
||||||
|
|
||||||
|
// server address, port and URL
|
||||||
|
webSocket.begin("192.168.0.123", 8011);
|
||||||
|
|
||||||
|
// event handler
|
||||||
|
webSocket.onEvent(webSocketEvent);
|
||||||
|
|
||||||
|
// try ever 5000 again if connection has failed
|
||||||
|
webSocket.setReconnectInterval(5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
webSocket.loop();
|
||||||
|
}
|
@ -112,7 +112,13 @@ void setup() {
|
|||||||
// server address, port and URL. This server can be flakey.
|
// server address, port and URL. This server can be flakey.
|
||||||
// Expected response: Request served by 0123456789abcdef
|
// Expected response: Request served by 0123456789abcdef
|
||||||
// webSocket.beginSslWithBundle("echo.websocket.org", 443, "/", rootca_crt_bundle_start, "");
|
// webSocket.beginSslWithBundle("echo.websocket.org", 443, "/", rootca_crt_bundle_start, "");
|
||||||
|
// ESP32 3.0.4 or higher needs the size of the bundle
|
||||||
|
// webSocket.beginSslWithBundle("echo.websocket.org", 443, "/", rootca_crt_bundle_start, sizeof(rootca_crt_bundle_start), "");
|
||||||
|
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 4)
|
||||||
|
webSocket.beginSslWithBundle("echo.websocket.org", 443, "/", NULL, 0, "");
|
||||||
|
#else
|
||||||
webSocket.beginSslWithBundle("echo.websocket.org", 443, "/", NULL, "");
|
webSocket.beginSslWithBundle("echo.websocket.org", 443, "/", NULL, "");
|
||||||
|
#endif
|
||||||
|
|
||||||
// event handler
|
// event handler
|
||||||
webSocket.onEvent(webSocketEvent);
|
webSocket.onEvent(webSocketEvent);
|
||||||
|
@ -54,7 +54,7 @@ void socketIOEvent(socketIOmessageType_t type, uint8_t * payload, size_t length)
|
|||||||
|
|
||||||
// Message Includes a ID for a ACK (callback)
|
// Message Includes a ID for a ACK (callback)
|
||||||
if(id) {
|
if(id) {
|
||||||
// creat JSON message for Socket.IO (ack)
|
// create JSON message for Socket.IO (ack)
|
||||||
DynamicJsonDocument docOut(1024);
|
DynamicJsonDocument docOut(1024);
|
||||||
JsonArray array = docOut.to<JsonArray>();
|
JsonArray array = docOut.to<JsonArray>();
|
||||||
|
|
||||||
@ -130,11 +130,11 @@ void loop() {
|
|||||||
if(now - messageTimestamp > 2000) {
|
if(now - messageTimestamp > 2000) {
|
||||||
messageTimestamp = now;
|
messageTimestamp = now;
|
||||||
|
|
||||||
// creat JSON message for Socket.IO (event)
|
// create JSON message for Socket.IO (event)
|
||||||
DynamicJsonDocument doc(1024);
|
DynamicJsonDocument doc(1024);
|
||||||
JsonArray array = doc.to<JsonArray>();
|
JsonArray array = doc.to<JsonArray>();
|
||||||
|
|
||||||
// add evnet name
|
// add event name
|
||||||
// Hint: socket.on('event_name', ....
|
// Hint: socket.on('event_name', ....
|
||||||
array.add("event_name");
|
array.add("event_name");
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ void loop() {
|
|||||||
JsonObject param1 = array.createNestedObject();
|
JsonObject param1 = array.createNestedObject();
|
||||||
param1["now"] = (uint32_t) now;
|
param1["now"] = (uint32_t) now;
|
||||||
|
|
||||||
// JSON to String (serializion)
|
// JSON to String (serialization)
|
||||||
String output;
|
String output;
|
||||||
serializeJson(doc, output);
|
serializeJson(doc, output);
|
||||||
|
|
||||||
|
@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* WebSocketClient.ino
|
||||||
|
*
|
||||||
|
* Created on: 10.08.2024
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <rpcWiFi.h>
|
||||||
|
#include <WiFiMulti.h>
|
||||||
|
#include <WebSocketsClient.h>
|
||||||
|
|
||||||
|
WebSocketsClient webSocket;
|
||||||
|
WiFiMulti wifiMulti;
|
||||||
|
|
||||||
|
#define USE_SERIAL Serial
|
||||||
|
|
||||||
|
void hexdump(const void *mem, uint32_t len, uint8_t cols = 16) {
|
||||||
|
const uint8_t* src = (const uint8_t*) mem;
|
||||||
|
USE_SERIAL.printf("\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)", (ptrdiff_t)src, len, len);
|
||||||
|
for(uint32_t i = 0; i < len; i++) {
|
||||||
|
if(i % cols == 0) {
|
||||||
|
USE_SERIAL.printf("\n[0x%08X] 0x%08X: ", (ptrdiff_t)src, i);
|
||||||
|
}
|
||||||
|
USE_SERIAL.printf("%02X ", *src);
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
USE_SERIAL.printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
|
||||||
|
|
||||||
|
switch(type) {
|
||||||
|
case WStype_DISCONNECTED:
|
||||||
|
USE_SERIAL.printf("[WSc] Disconnected!\n");
|
||||||
|
break;
|
||||||
|
case WStype_CONNECTED:
|
||||||
|
USE_SERIAL.printf("[WSc] Connected to url: %s\n", payload);
|
||||||
|
|
||||||
|
// send message to server when Connected
|
||||||
|
webSocket.sendTXT("Connected");
|
||||||
|
break;
|
||||||
|
case WStype_TEXT:
|
||||||
|
USE_SERIAL.printf("[WSc] get text: %s\n", payload);
|
||||||
|
|
||||||
|
// send message to server
|
||||||
|
// webSocket.sendTXT("message here");
|
||||||
|
break;
|
||||||
|
case WStype_BIN:
|
||||||
|
USE_SERIAL.printf("[WSc] get binary length: %u\n", length);
|
||||||
|
hexdump(payload, length);
|
||||||
|
|
||||||
|
// send data to server
|
||||||
|
// webSocket.sendBIN(payload, length);
|
||||||
|
break;
|
||||||
|
case WStype_ERROR:
|
||||||
|
case WStype_FRAGMENT_TEXT_START:
|
||||||
|
case WStype_FRAGMENT_BIN_START:
|
||||||
|
case WStype_FRAGMENT:
|
||||||
|
case WStype_PONG:
|
||||||
|
case WStype_PING:
|
||||||
|
case WStype_FRAGMENT_FIN:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
// USE_SERIAL.begin(921600);
|
||||||
|
USE_SERIAL.begin(115200);
|
||||||
|
|
||||||
|
USE_SERIAL.println();
|
||||||
|
USE_SERIAL.println();
|
||||||
|
USE_SERIAL.println();
|
||||||
|
|
||||||
|
for(uint8_t t = 4; t > 0; t--) {
|
||||||
|
USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\n", t);
|
||||||
|
USE_SERIAL.flush();
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
wifiMulti.addAP("SSID", "passpasspass");
|
||||||
|
|
||||||
|
//WiFi.disconnect();
|
||||||
|
while(wifiMulti.run() != WL_CONNECTED) {
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
// server address, port and URL
|
||||||
|
webSocket.begin("192.168.0.123", 81, "/");
|
||||||
|
|
||||||
|
// event handler
|
||||||
|
webSocket.onEvent(webSocketEvent);
|
||||||
|
|
||||||
|
// use HTTP Basic Authorization this is optional remove if not needed
|
||||||
|
webSocket.setAuthorization("user", "Password");
|
||||||
|
|
||||||
|
// try ever 5000 again if connection has failed
|
||||||
|
webSocket.setReconnectInterval(5000);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
webSocket.loop();
|
||||||
|
}
|
@ -16,10 +16,10 @@
|
|||||||
"keywords": "wifi, http, web, server, client, websocket",
|
"keywords": "wifi, http, web, server, client, websocket",
|
||||||
"license": "LGPL-2.1",
|
"license": "LGPL-2.1",
|
||||||
"name": "WebSockets",
|
"name": "WebSockets",
|
||||||
"platforms": "atmelavr, espressif8266, espressif32, raspberrypi, renesas_uno",
|
"platforms": "*",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/Links2004/arduinoWebSockets.git"
|
"url": "https://github.com/Links2004/arduinoWebSockets.git"
|
||||||
},
|
},
|
||||||
"version": "2.5.1"
|
"version": "2.6.1"
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
name=WebSockets
|
name=WebSockets
|
||||||
version=2.5.1
|
version=2.6.1
|
||||||
author=Markus Sattler
|
author=Markus Sattler
|
||||||
maintainer=Markus Sattler
|
maintainer=Markus Sattler
|
||||||
sentence=WebSockets for Arduino (Server + Client)
|
sentence=WebSockets for Arduino (Server + Client)
|
||||||
|
@ -55,10 +55,12 @@ class SocketIOclient : protected WebSocketsClient {
|
|||||||
void beginSSL(String host, uint16_t port, String url = "/socket.io/?EIO=3", String protocol = "arduino", uint32_t pingInterval = 60 * 1000, uint32_t pongTimeout = 90 * 1000, uint8_t disconnectTimeoutCount = 5);
|
void beginSSL(String host, uint16_t port, String url = "/socket.io/?EIO=3", String protocol = "arduino", uint32_t pingInterval = 60 * 1000, uint32_t pongTimeout = 90 * 1000, uint8_t disconnectTimeoutCount = 5);
|
||||||
#ifndef SSL_AXTLS
|
#ifndef SSL_AXTLS
|
||||||
void beginSSLWithCA(const char * host, uint16_t port, const char * url = "/socket.io/?EIO=3", const char * CA_cert = NULL, const char * protocol = "arduino", uint32_t pingInterval = 60 * 1000, uint32_t pongTimeout = 90 * 1000, uint8_t disconnectTimeoutCount = 5);
|
void beginSSLWithCA(const char * host, uint16_t port, const char * url = "/socket.io/?EIO=3", const char * CA_cert = NULL, const char * protocol = "arduino", uint32_t pingInterval = 60 * 1000, uint32_t pongTimeout = 90 * 1000, uint8_t disconnectTimeoutCount = 5);
|
||||||
void beginSSLWithCA(const char * host, uint16_t port, const char * url = "/socket.io/?EIO=3", BearSSL::X509List * CA_cert = NULL, const char * protocol = "arduino", uint32_t pingInterval = 60 * 1000, uint32_t pongTimeout = 90 * 1000, uint8_t disconnectTimeoutCount = 5);
|
|
||||||
void setSSLClientCertKey(const char * clientCert = NULL, const char * clientPrivateKey = NULL);
|
void setSSLClientCertKey(const char * clientCert = NULL, const char * clientPrivateKey = NULL);
|
||||||
|
#if defined(SSL_BARESSL)
|
||||||
|
void beginSSLWithCA(const char * host, uint16_t port, const char * url = "/socket.io/?EIO=3", BearSSL::X509List * CA_cert = NULL, const char * protocol = "arduino", uint32_t pingInterval = 60 * 1000, uint32_t pongTimeout = 90 * 1000, uint8_t disconnectTimeoutCount = 5);
|
||||||
void setSSLClientCertKey(BearSSL::X509List * clientCert = NULL, BearSSL::PrivateKey * clientPrivateKey = NULL);
|
void setSSLClientCertKey(BearSSL::X509List * clientCert = NULL, BearSSL::PrivateKey * clientPrivateKey = NULL);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
bool isConnected(void);
|
bool isConnected(void);
|
||||||
|
|
||||||
|
@ -99,6 +99,18 @@
|
|||||||
#define WEBSOCKETS_YIELD() yield()
|
#define WEBSOCKETS_YIELD() yield()
|
||||||
#define WEBSOCKETS_YIELD_MORE() delay(1)
|
#define WEBSOCKETS_YIELD_MORE() delay(1)
|
||||||
|
|
||||||
|
#elif defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_SAMD_NANO_33_IOT)
|
||||||
|
|
||||||
|
#define WEBSOCKETS_MAX_DATA_SIZE (15 * 1024)
|
||||||
|
#define WEBSOCKETS_YIELD() yield()
|
||||||
|
#define WEBSOCKETS_YIELD_MORE() delay(1)
|
||||||
|
|
||||||
|
#elif defined(WIO_TERMINAL) || defined(SEEED_XIAO_M0)
|
||||||
|
|
||||||
|
#define WEBSOCKETS_MAX_DATA_SIZE (15 * 1024)
|
||||||
|
#define WEBSOCKETS_YIELD() yield()
|
||||||
|
#define WEBSOCKETS_YIELD_MORE() delay(1)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// atmega328p has only 2KB ram!
|
// atmega328p has only 2KB ram!
|
||||||
@ -121,6 +133,8 @@
|
|||||||
#define NETWORK_ESP32_ETH (5)
|
#define NETWORK_ESP32_ETH (5)
|
||||||
#define NETWORK_RP2040 (6)
|
#define NETWORK_RP2040 (6)
|
||||||
#define NETWORK_UNOWIFIR4 (7)
|
#define NETWORK_UNOWIFIR4 (7)
|
||||||
|
#define NETWORK_WIFI_NINA (8)
|
||||||
|
#define NETWORK_SAMD_SEED (9)
|
||||||
|
|
||||||
// max size of the WS Message Header
|
// max size of the WS Message Header
|
||||||
#define WEBSOCKETS_MAX_HEADER_SIZE (14)
|
#define WEBSOCKETS_MAX_HEADER_SIZE (14)
|
||||||
@ -142,6 +156,12 @@
|
|||||||
#elif defined(ARDUINO_UNOWIFIR4)
|
#elif defined(ARDUINO_UNOWIFIR4)
|
||||||
#define WEBSOCKETS_NETWORK_TYPE NETWORK_UNOWIFIR4
|
#define WEBSOCKETS_NETWORK_TYPE NETWORK_UNOWIFIR4
|
||||||
|
|
||||||
|
#elif defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_SAMD_NANO_33_IOT)
|
||||||
|
#define WEBSOCKETS_NETWORK_TYPE NETWORK_WIFI_NINA
|
||||||
|
|
||||||
|
#elif defined(WIO_TERMINAL) || defined(SEEED_XIAO_M0)
|
||||||
|
#define WEBSOCKETS_NETWORK_TYPE NETWORK_SAMD_SEED
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define WEBSOCKETS_NETWORK_TYPE NETWORK_W5100
|
#define WEBSOCKETS_NETWORK_TYPE NETWORK_W5100
|
||||||
|
|
||||||
@ -237,6 +257,31 @@
|
|||||||
#elif(WEBSOCKETS_NETWORK_TYPE == NETWORK_UNOWIFIR4)
|
#elif(WEBSOCKETS_NETWORK_TYPE == NETWORK_UNOWIFIR4)
|
||||||
|
|
||||||
#include <WiFiS3.h>
|
#include <WiFiS3.h>
|
||||||
|
#define WEBSOCKETS_NETWORK_CLASS WiFiClient
|
||||||
|
#define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer
|
||||||
|
|
||||||
|
#elif(WEBSOCKETS_NETWORK_TYPE == NETWORK_WIFI_NINA)
|
||||||
|
#if __has_include(<WiFiNINA.h>)
|
||||||
|
#include <WiFiNINA.h>
|
||||||
|
#else
|
||||||
|
#error "Please install WiFiNINA library!"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define WEBSOCKETS_NETWORK_CLASS WiFiClient
|
||||||
|
#define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer
|
||||||
|
#define WEBSOCKETS_NETWORK_SSL_CLASS WiFiSSLClient
|
||||||
|
|
||||||
|
#elif(WEBSOCKETS_NETWORK_TYPE == NETWORK_SAMD_SEED)
|
||||||
|
#if __has_include(<rpcWiFi.h>) && __has_include(<rpcWiFiClientSecure.h>)
|
||||||
|
#include <rpcWiFi.h>
|
||||||
|
#include <rpcWiFiClientSecure.h>
|
||||||
|
#else
|
||||||
|
#error "Please install rpcWiFi library!"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define WEBSOCKETS_NETWORK_CLASS WiFiClient
|
||||||
|
#define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer
|
||||||
|
#define WEBSOCKETS_NETWORK_SSL_CLASS WiFiClientSecure
|
||||||
|
|
||||||
#define WEBSOCKETS_NETWORK_CLASS WiFiClient
|
#define WEBSOCKETS_NETWORK_CLASS WiFiClient
|
||||||
#define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer
|
#define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer
|
||||||
|
@ -50,6 +50,9 @@ void WebSocketsClient::begin(const char * host, uint16_t port, const char * url,
|
|||||||
_CA_cert = NULL;
|
_CA_cert = NULL;
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
_CA_bundle = NULL;
|
_CA_bundle = NULL;
|
||||||
|
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 4)
|
||||||
|
_CA_bundle_size = 0;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -124,6 +127,17 @@ void WebSocketsClient::beginSslWithCA(const char * host, uint16_t port, const ch
|
|||||||
_CA_cert = CA_cert;
|
_CA_cert = CA_cert;
|
||||||
_CA_bundle = NULL;
|
_CA_bundle = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(ESP32) && ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 4)
|
||||||
|
void WebSocketsClient::beginSslWithBundle(const char * host, uint16_t port, const char * url, const uint8_t * CA_bundle, size_t CA_bundle_size, const char * protocol) {
|
||||||
|
begin(host, port, url, protocol);
|
||||||
|
_client.isSSL = true;
|
||||||
|
_fingerprint = SSL_FINGERPRINT_NULL;
|
||||||
|
_CA_cert = NULL;
|
||||||
|
_CA_bundle = CA_bundle;
|
||||||
|
_CA_bundle_size = CA_bundle_size;
|
||||||
|
}
|
||||||
|
#else
|
||||||
void WebSocketsClient::beginSslWithBundle(const char * host, uint16_t port, const char * url, const uint8_t * CA_bundle, const char * protocol) {
|
void WebSocketsClient::beginSslWithBundle(const char * host, uint16_t port, const char * url, const uint8_t * CA_bundle, const char * protocol) {
|
||||||
begin(host, port, url, protocol);
|
begin(host, port, url, protocol);
|
||||||
_client.isSSL = true;
|
_client.isSSL = true;
|
||||||
@ -131,6 +145,7 @@ void WebSocketsClient::beginSslWithBundle(const char * host, uint16_t port, cons
|
|||||||
_CA_cert = NULL;
|
_CA_cert = NULL;
|
||||||
_CA_bundle = CA_bundle;
|
_CA_bundle = CA_bundle;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
void WebSocketsClient::beginSSL(const char * host, uint16_t port, const char * url, const uint8_t * fingerprint, const char * protocol) {
|
void WebSocketsClient::beginSSL(const char * host, uint16_t port, const char * url, const uint8_t * fingerprint, const char * protocol) {
|
||||||
@ -140,6 +155,7 @@ void WebSocketsClient::beginSSL(const char * host, uint16_t port, const char * u
|
|||||||
_CA_cert = NULL;
|
_CA_cert = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(SSL_BARESSL)
|
||||||
void WebSocketsClient::beginSslWithCA(const char * host, uint16_t port, const char * url, BearSSL::X509List * CA_cert, const char * protocol) {
|
void WebSocketsClient::beginSslWithCA(const char * host, uint16_t port, const char * url, BearSSL::X509List * CA_cert, const char * protocol) {
|
||||||
begin(host, port, url, protocol);
|
begin(host, port, url, protocol);
|
||||||
_client.isSSL = true;
|
_client.isSSL = true;
|
||||||
@ -151,14 +167,15 @@ void WebSocketsClient::beginSslWithCA(const char * host, uint16_t port, const ch
|
|||||||
beginSslWithCA(host, port, url, new BearSSL::X509List(CA_cert), protocol);
|
beginSslWithCA(host, port, url, new BearSSL::X509List(CA_cert), protocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebSocketsClient::setSSLClientCertKey(const char * clientCert, const char * clientPrivateKey) {
|
||||||
|
setSSLClientCertKey(new BearSSL::X509List(clientCert), new BearSSL::PrivateKey(clientPrivateKey));
|
||||||
|
}
|
||||||
|
|
||||||
void WebSocketsClient::setSSLClientCertKey(BearSSL::X509List * clientCert, BearSSL::PrivateKey * clientPrivateKey) {
|
void WebSocketsClient::setSSLClientCertKey(BearSSL::X509List * clientCert, BearSSL::PrivateKey * clientPrivateKey) {
|
||||||
_client_cert = clientCert;
|
_client_cert = clientCert;
|
||||||
_client_key = clientPrivateKey;
|
_client_key = clientPrivateKey;
|
||||||
}
|
}
|
||||||
|
#endif // SSL_BARESSL
|
||||||
void WebSocketsClient::setSSLClientCertKey(const char * clientCert, const char * clientPrivateKey) {
|
|
||||||
setSSLClientCertKey(new BearSSL::X509List(clientCert), new BearSSL::PrivateKey(clientPrivateKey));
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // SSL_AXTLS
|
#endif // SSL_AXTLS
|
||||||
#endif // HAS_SSL
|
#endif // HAS_SSL
|
||||||
@ -227,7 +244,12 @@ void WebSocketsClient::loop(void) {
|
|||||||
if(_client.isSSL) {
|
if(_client.isSSL) {
|
||||||
DEBUG_WEBSOCKETS("[WS-Client] connect wss...\n");
|
DEBUG_WEBSOCKETS("[WS-Client] connect wss...\n");
|
||||||
if(_client.ssl) {
|
if(_client.ssl) {
|
||||||
|
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_WIFI_NINA) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_SAMD_SEED) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_UNOWIFIR4)
|
||||||
|
// does not support delete (no destructor)
|
||||||
|
#else
|
||||||
delete _client.ssl;
|
delete _client.ssl;
|
||||||
|
#endif
|
||||||
|
|
||||||
_client.ssl = NULL;
|
_client.ssl = NULL;
|
||||||
_client.tcp = NULL;
|
_client.tcp = NULL;
|
||||||
}
|
}
|
||||||
@ -241,15 +263,21 @@ void WebSocketsClient::loop(void) {
|
|||||||
_client.ssl->setCACert((const uint8_t *)_CA_cert, strlen(_CA_cert) + 1);
|
_client.ssl->setCACert((const uint8_t *)_CA_cert, strlen(_CA_cert) + 1);
|
||||||
#elif(defined(ESP8266) || defined(ARDUINO_ARCH_RP2040)) && defined(SSL_BARESSL)
|
#elif(defined(ESP8266) || defined(ARDUINO_ARCH_RP2040)) && defined(SSL_BARESSL)
|
||||||
_client.ssl->setTrustAnchors(_CA_cert);
|
_client.ssl->setTrustAnchors(_CA_cert);
|
||||||
|
#elif defined(WIO_TERMINAL) || defined(SEEED_XIAO_M0)
|
||||||
|
_client.ssl->setCACert(_CA_cert);
|
||||||
|
#elif defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_SAMD_NANO_33_IOT)
|
||||||
|
// no setCACert
|
||||||
#else
|
#else
|
||||||
#error setCACert not implemented
|
#error setCACert not implemented
|
||||||
#endif
|
#endif
|
||||||
#if defined(ESP32)
|
#if defined(ESP32)
|
||||||
} else if(_CA_bundle) {
|
} else if(_CA_bundle) {
|
||||||
DEBUG_WEBSOCKETS("[WS-Client] setting CA bundle");
|
DEBUG_WEBSOCKETS("[WS-Client] setting CA bundle");
|
||||||
|
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 4)
|
||||||
|
_client.ssl->setCACertBundle(_CA_bundle, _CA_bundle_size);
|
||||||
|
#else
|
||||||
_client.ssl->setCACertBundle(_CA_bundle);
|
_client.ssl->setCACertBundle(_CA_bundle);
|
||||||
#endif
|
#endif
|
||||||
#if defined(ESP32)
|
|
||||||
} else if(!SSL_FINGERPRINT_IS_SET) {
|
} else if(!SSL_FINGERPRINT_IS_SET) {
|
||||||
_client.ssl->setInsecure();
|
_client.ssl->setInsecure();
|
||||||
#elif defined(SSL_BARESSL)
|
#elif defined(SSL_BARESSL)
|
||||||
@ -266,7 +294,11 @@ void WebSocketsClient::loop(void) {
|
|||||||
} else {
|
} else {
|
||||||
DEBUG_WEBSOCKETS("[WS-Client] connect ws...\n");
|
DEBUG_WEBSOCKETS("[WS-Client] connect ws...\n");
|
||||||
if(_client.tcp) {
|
if(_client.tcp) {
|
||||||
|
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_WIFI_NINA) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_SAMD_SEED) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_UNOWIFIR4)
|
||||||
|
// does not support delete (no destructor)
|
||||||
|
#else
|
||||||
delete _client.tcp;
|
delete _client.tcp;
|
||||||
|
#endif
|
||||||
_client.tcp = NULL;
|
_client.tcp = NULL;
|
||||||
}
|
}
|
||||||
_client.tcp = new WEBSOCKETS_NETWORK_CLASS();
|
_client.tcp = new WEBSOCKETS_NETWORK_CLASS();
|
||||||
@ -516,8 +548,12 @@ void WebSocketsClient::clientDisconnect(WSclient_t * client) {
|
|||||||
event = true;
|
event = true;
|
||||||
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
|
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
|
||||||
client->status = WSC_NOT_CONNECTED;
|
client->status = WSC_NOT_CONNECTED;
|
||||||
|
#else
|
||||||
|
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_WIFI_NINA) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_SAMD_SEED) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_UNOWIFIR4)
|
||||||
|
// does not support delete (no destructor)
|
||||||
#else
|
#else
|
||||||
delete client->tcp;
|
delete client->tcp;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
client->tcp = NULL;
|
client->tcp = NULL;
|
||||||
}
|
}
|
||||||
|
@ -48,14 +48,20 @@ class WebSocketsClient : protected WebSockets {
|
|||||||
void beginSSL(String host, uint16_t port, String url = "/", String fingerprint = "", String protocol = "arduino");
|
void beginSSL(String host, uint16_t port, String url = "/", String fingerprint = "", String protocol = "arduino");
|
||||||
#else
|
#else
|
||||||
void beginSSL(const char * host, uint16_t port, const char * url = "/", const uint8_t * fingerprint = NULL, const char * protocol = "arduino");
|
void beginSSL(const char * host, uint16_t port, const char * url = "/", const uint8_t * fingerprint = NULL, const char * protocol = "arduino");
|
||||||
|
#if defined(SSL_BARESSL)
|
||||||
void beginSslWithCA(const char * host, uint16_t port, const char * url = "/", BearSSL::X509List * CA_cert = NULL, const char * protocol = "arduino");
|
void beginSslWithCA(const char * host, uint16_t port, const char * url = "/", BearSSL::X509List * CA_cert = NULL, const char * protocol = "arduino");
|
||||||
void setSSLClientCertKey(BearSSL::X509List * clientCert = NULL, BearSSL::PrivateKey * clientPrivateKey = NULL);
|
void setSSLClientCertKey(BearSSL::X509List * clientCert = NULL, BearSSL::PrivateKey * clientPrivateKey = NULL);
|
||||||
|
#endif
|
||||||
void setSSLClientCertKey(const char * clientCert = NULL, const char * clientPrivateKey = NULL);
|
void setSSLClientCertKey(const char * clientCert = NULL, const char * clientPrivateKey = NULL);
|
||||||
#endif
|
#endif
|
||||||
void beginSslWithCA(const char * host, uint16_t port, const char * url = "/", const char * CA_cert = NULL, const char * protocol = "arduino");
|
void beginSslWithCA(const char * host, uint16_t port, const char * url = "/", const char * CA_cert = NULL, const char * protocol = "arduino");
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
|
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 4)
|
||||||
|
void beginSslWithBundle(const char * host, uint16_t port, const char * url = "/", const uint8_t * CA_bundle = NULL, size_t CA_bundle_size = 0, const char * protocol = "arduino");
|
||||||
|
#else
|
||||||
void beginSslWithBundle(const char * host, uint16_t port, const char * url = "/", const uint8_t * CA_bundle = NULL, const char * protocol = "arduino");
|
void beginSslWithBundle(const char * host, uint16_t port, const char * url = "/", const uint8_t * CA_bundle = NULL, const char * protocol = "arduino");
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void beginSocketIO(const char * host, uint16_t port, const char * url = "/socket.io/?EIO=3", const char * protocol = "arduino");
|
void beginSocketIO(const char * host, uint16_t port, const char * url = "/socket.io/?EIO=3", const char * protocol = "arduino");
|
||||||
@ -116,17 +122,29 @@ class WebSocketsClient : protected WebSockets {
|
|||||||
String _fingerprint;
|
String _fingerprint;
|
||||||
const char * _CA_cert;
|
const char * _CA_cert;
|
||||||
const uint8_t * _CA_bundle;
|
const uint8_t * _CA_bundle;
|
||||||
|
#if defined(ESP32)
|
||||||
|
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 4)
|
||||||
|
size_t _CA_bundle_size;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#define SSL_FINGERPRINT_IS_SET (_fingerprint.length())
|
#define SSL_FINGERPRINT_IS_SET (_fingerprint.length())
|
||||||
#define SSL_FINGERPRINT_NULL ""
|
#define SSL_FINGERPRINT_NULL ""
|
||||||
#else
|
#else
|
||||||
const uint8_t * _fingerprint;
|
const uint8_t * _fingerprint;
|
||||||
|
#if defined(SSL_BARESSL)
|
||||||
BearSSL::X509List * _CA_cert;
|
BearSSL::X509List * _CA_cert;
|
||||||
BearSSL::X509List * _client_cert;
|
BearSSL::X509List * _client_cert;
|
||||||
BearSSL::PrivateKey * _client_key;
|
BearSSL::PrivateKey * _client_key;
|
||||||
|
#endif
|
||||||
#define SSL_FINGERPRINT_IS_SET (_fingerprint != NULL)
|
#define SSL_FINGERPRINT_IS_SET (_fingerprint != NULL)
|
||||||
#define SSL_FINGERPRINT_NULL NULL
|
#define SSL_FINGERPRINT_NULL NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_SAMD_SEED) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_WIFI_NINA)
|
||||||
|
const char * _CA_cert;
|
||||||
|
const uint8_t * _CA_bundle;
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
WSclient_t _client;
|
WSclient_t _client;
|
||||||
|
|
||||||
|
@ -25,6 +25,14 @@
|
|||||||
#include "WebSockets.h"
|
#include "WebSockets.h"
|
||||||
#include "WebSocketsServer.h"
|
#include "WebSocketsServer.h"
|
||||||
|
|
||||||
|
#ifdef ESP32
|
||||||
|
#if defined __has_include
|
||||||
|
#if __has_include("soc/wdev_reg.h")
|
||||||
|
#include "soc/wdev_reg.h"
|
||||||
|
#endif // __has_include
|
||||||
|
#endif // defined __has_include
|
||||||
|
#endif
|
||||||
|
|
||||||
WebSocketsServerCore::WebSocketsServerCore(const String & origin, const String & protocol) {
|
WebSocketsServerCore::WebSocketsServerCore(const String & origin, const String & protocol) {
|
||||||
_origin = origin;
|
_origin = origin;
|
||||||
_protocol = protocol;
|
_protocol = protocol;
|
||||||
@ -65,7 +73,11 @@ WebSocketsServerCore::~WebSocketsServerCore() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
WebSocketsServer::~WebSocketsServer() {
|
WebSocketsServer::~WebSocketsServer() {
|
||||||
|
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_WIFI_NINA) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_SAMD_SEED)
|
||||||
|
// does not support delete (no destructor)
|
||||||
|
#else
|
||||||
delete _server;
|
delete _server;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -83,6 +95,8 @@ void WebSocketsServerCore::begin(void) {
|
|||||||
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
randomSeed(RANDOM_REG32);
|
randomSeed(RANDOM_REG32);
|
||||||
|
#elif defined(ESP32) && defined(WDEV_RND_REG)
|
||||||
|
randomSeed(REG_READ(WDEV_RND_REG));
|
||||||
#elif defined(ESP32)
|
#elif defined(ESP32)
|
||||||
#define DR_REG_RNG_BASE 0x3ff75144
|
#define DR_REG_RNG_BASE 0x3ff75144
|
||||||
randomSeed(READ_PERI_REG(DR_REG_RNG_BASE));
|
randomSeed(READ_PERI_REG(DR_REG_RNG_BASE));
|
||||||
@ -539,6 +553,8 @@ void WebSocketsServerCore::dropNativeClient(WSclient_t * client) {
|
|||||||
}
|
}
|
||||||
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
|
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
|
||||||
client->status = WSC_NOT_CONNECTED;
|
client->status = WSC_NOT_CONNECTED;
|
||||||
|
#elif(WEBSOCKETS_NETWORK_TYPE == NETWORK_WIFI_NINA) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_SAMD_SEED)
|
||||||
|
// does not support delete (no destructor)
|
||||||
#else
|
#else
|
||||||
delete client->tcp;
|
delete client->tcp;
|
||||||
#endif
|
#endif
|
||||||
@ -655,7 +671,12 @@ void WebSocketsServer::handleNewClients(void) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// store new connection
|
// store new connection
|
||||||
|
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_WIFI_NINA)
|
||||||
|
WEBSOCKETS_NETWORK_CLASS * tcpClient = new WEBSOCKETS_NETWORK_CLASS(_server->available());
|
||||||
|
#else
|
||||||
WEBSOCKETS_NETWORK_CLASS * tcpClient = new WEBSOCKETS_NETWORK_CLASS(_server->accept());
|
WEBSOCKETS_NETWORK_CLASS * tcpClient = new WEBSOCKETS_NETWORK_CLASS(_server->accept());
|
||||||
|
#endif
|
||||||
|
|
||||||
if(!tcpClient) {
|
if(!tcpClient) {
|
||||||
DEBUG_WEBSOCKETS("[WS-Client] creating Network class failed!");
|
DEBUG_WEBSOCKETS("[WS-Client] creating Network class failed!");
|
||||||
return;
|
return;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* @file WebSocketsVersion.h
|
* @file WebSocketsVersion.h
|
||||||
* @date 17.06.2024
|
* @date 06.09.2024
|
||||||
* @author Markus Sattler
|
* @author Markus Sattler
|
||||||
*
|
*
|
||||||
* Copyright (c) 2015 Markus Sattler. All rights reserved.
|
* Copyright (c) 2015 Markus Sattler. All rights reserved.
|
||||||
@ -25,12 +25,12 @@
|
|||||||
#ifndef WEBSOCKETSVERSION_H_
|
#ifndef WEBSOCKETSVERSION_H_
|
||||||
#define WEBSOCKETSVERSION_H_
|
#define WEBSOCKETSVERSION_H_
|
||||||
|
|
||||||
#define WEBSOCKETS_VERSION "2.5.1"
|
#define WEBSOCKETS_VERSION "2.6.1"
|
||||||
|
|
||||||
#define WEBSOCKETS_VERSION_MAJOR 2
|
#define WEBSOCKETS_VERSION_MAJOR 2
|
||||||
#define WEBSOCKETS_VERSION_MINOR 5
|
#define WEBSOCKETS_VERSION_MINOR 6
|
||||||
#define WEBSOCKETS_VERSION_PATCH 1
|
#define WEBSOCKETS_VERSION_PATCH 1
|
||||||
|
|
||||||
#define WEBSOCKETS_VERSION_INT 2005001
|
#define WEBSOCKETS_VERSION_INT 2006001
|
||||||
|
|
||||||
#endif /* WEBSOCKETSVERSION_H_ */
|
#endif /* WEBSOCKETSVERSION_H_ */
|
||||||
|
@ -9,7 +9,7 @@ For details, see http://sourceforge.net/projects/libb64
|
|||||||
#include <core_esp8266_features.h>
|
#include <core_esp8266_features.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(WIO_TERMINAL) || defined(SEEED_XIAO_M0)
|
||||||
#define CORE_HAS_LIBB64
|
#define CORE_HAS_LIBB64
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ For details, see http://sourceforge.net/projects/libb64
|
|||||||
#include <core_esp8266_features.h>
|
#include <core_esp8266_features.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(WIO_TERMINAL) || defined(SEEED_XIAO_M0)
|
||||||
#define CORE_HAS_LIBB64
|
#define CORE_HAS_LIBB64
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user