107 lines
3.4 KiB
Markdown
107 lines
3.4 KiB
Markdown
|
|
|
|
# To Do
|
|
|
|
- Any socket function which takes a IP/port address should have a version which also takes a sockaddr_in*.
|
|
- Fix the time functions to make them more convenient and C++ish.
|
|
- implement floating point UI numbers
|
|
- UI needs a special UUID (not kInvalidId) to specify the 'root' UI element. See note in cwUi._createFromObj()
|
|
- Look at 'BUG' warnings in cwNumericConvert.h.
|
|
- cwObject must be able to parse without dynamic memory allocation into a fixed buffer
|
|
- cwObject must be able to be composed without dynamic memory allocation or from a fixed buffer.
|
|
|
|
- cwWebsock is allocating memory on send().
|
|
- cwWebsock: if the size of the recv and xmt buffer, as passed form the protocolArray[], is too small send() will fail without an error message.
|
|
This is easy to reproduce by simply decreasing the size of the buffers in the protocol array.
|
|
|
|
- Clean up the cwObject namespace - add an 'object' namespace inside 'cw'
|
|
|
|
- Add underscore to the member variables of object_t.
|
|
|
|
|
|
- logDefaultFormatter() in cwLog.cpp uses stack allocated memory in a way that could easily be exploited.
|
|
|
|
- lexIntMatcher() in cwLex.cpp doesn't handle 'e' notation correctly. See note in code.
|
|
|
|
- numeric_convert() in cwNumericConvert.h could be made more efficient using type_traits.
|
|
|
|
- thread needs setters and getters for internal variables
|
|
|
|
- change cwMpScNbQueue so that it does not require 'new'.
|
|
|
|
- cwAudioBuf.cpp - the ch->fn in update() does not have the correct memory fence.
|
|
|
|
- change file names to match object names
|
|
|
|
- (DONE) change all NULL's to nullptr
|
|
|
|
- (DONE) implement kTcpFl in cwTcpSocket.cpp
|
|
|
|
# UI Control Creation Protocol
|
|
|
|
The UI elements have four identifiers:
|
|
|
|
uuId - An integer which is unique among all identifiers for a given cwUi object.
|
|
appId - A constant (enumerated) id assigned by the application. Unique among siblings.
|
|
jsId - A string id used by Javascript to identify a control. Unique among siblings.
|
|
jsUuId - An integer which is unique among all identifers for the browser representation of a given cwUi object.
|
|
|
|
The 'jsId' is selected by the application when the object is created.
|
|
The 'jsUuId' is generated by the JS client when the UI element is created.
|
|
The 'uuId' is generated by the UI server when the JS client registers the control.
|
|
The 'appId' is assigned by the UI server when the JS client regsiters the control.
|
|
|
|
Client sends 'init' message.
|
|
Server sends 'create' messages.
|
|
Client sends 'register' messages.
|
|
Server send' 'id_assign' messages.
|
|
|
|
# sockaddr_in reference
|
|
|
|
|
|
#include <netinet/in.h>
|
|
|
|
struct sockaddr_in {
|
|
short sin_family; // e.g. AF_INET
|
|
unsigned short sin_port; // e.g. htons(3490)
|
|
struct in_addr sin_addr; // see struct in_addr, below
|
|
char sin_zero[8]; // zero this if you want to
|
|
};
|
|
|
|
struct in_addr {
|
|
unsigned long s_addr; // load with inet_aton()
|
|
};
|
|
|
|
|
|
|
|
# Development Setup
|
|
|
|
1) Install libwebsockets.
|
|
|
|
```
|
|
sudo dnf install g++ openssl-devel cmake
|
|
cd sdk
|
|
git clone https://libwebsockets.org/repo/libwebsockets
|
|
cd libwebsockets
|
|
mkdir build
|
|
cd build
|
|
cmake -DCMAKE_INSTALL_PREFIX:PATH=/home/kevin/sdk/libwebsockets/build/out ..
|
|
```
|
|
|
|
2) Environment setup:
|
|
|
|
export LD_LIBRARY_PATH=~/sdk/libwebsockets/build/out/lib
|
|
|
|
# Raspberry Pi Build Notes:
|
|
|
|
cd sdk
|
|
mkdir libwebsockets
|
|
cmake -DCMAKE_INSTALL_PREFIX:PATH=/home/pi/sdk/libwebsockets/build/out -DLWS_WITH_SSL=OFF ..
|
|
make
|
|
sudo make install
|
|
|
|
apt install libasound2-dev
|
|
|
|
|
|
|