Appwebsocket client
The appwebsocket client is used to establish a websocket connection to an app with the appwebsocket authentication protocol.
File information
Logging
To enable logging for IAppWebsocketClient, the flag LOG_WEBSOCKET_CLIENT must be set in the managers diagnostic settings.
Classes
IAppWebsocketClient
class IAppWebsocketClient {
public:
static IAppWebsocketClient * Create(class IIoMux * const iomux,
class UAppWebsocketClient * const user,
class ISocketProvider * const tcpSocketProvider,
class ISocketProvider * const tlsSocketProvider,
class IDns * const dns,
class IInstanceLog * const log);
void Connect(const char * websocketUri, const char * password, const char * app, const char * domain, const char * sip, const char * guid, const char * dn);
void Connect(const char * websocketUri, const char * app, class IAppWebsocketAuthenticator * authenticator);
void MessageComplete();
void MessageSend(class json_io & msg, char * buffer);
void MessageSendText(const char * buffer);
void Encrypt(const char * seed, const char * data, char * out, size_t outLen);
void Decrypt(const char * seed, const char * data, char * out, size_t outLen);
void Hash(const char * seed, const char * data, char * out, size_t outLen);
void Close();
};
Public functions
IAppWebsocketClient::Create (static)
-
This function creates a new instance of IAppWebsocketClient.
Parameters
class IIoMux * const iomux | A pointer to the IIoMux class. |
class UAppWebsocketClient * const user | A pointer to the UAppWebsocketClient class which will receive the callbacks. |
class ISocketProvider * const tcpSocketProvider | A pointer to the ISocketProvider class for TCP sockets. |
class ISocketProvider * const tlsSocketProvider | A pointer to the ISocketProvider class for TLS sockets. |
class IDns * const dns | A pointer to the IDns class. Can be a nullptr. |
IInstanceLog * log | An IInstanceLog pointer to the logging interface. |
Connect with string parameters
-
This function connects to the given endpoint.
Parameters
const char *websocketUri | The websocket URI, e.g. wss://mydomain.com/websocket/uri |
const char *password | |
const char *app | |
const char *domain | |
const char *sip | |
const char *guid | |
const char *dn | |
Connect with IAppWebsocketAuthenticator
-
This function connects to the given endpoint.
Parameters
const char *websocketUri | The websocket URI, e.g. wss://mydomain.com/websocket/uri |
const char *app | |
class IAppWebsocketAuthenticator * const authenticator | A pointer to the IAppWebsocketAuthenticator class. |
MessageComplete
-
Call this function to receive the next message.
MessageSend
-
This function sends a JSON message.
Parameters
class json_io &msg | A json_io class which contains the message JSON. |
char *buffer | A buffer which will be used to encode the message into. Must be big enough to avoid buffer overflows! |
MessageSendText
-
This function sends a text message.
Parameters
const char *buffer | The buffer which will be sent. |
Encrypt
Can be used to encrypt a text send on the AppWebsocket connection, using the session
key
Parameters
const char * seedseed |
Seed, which can be used so that the result of the encryption is different even
if the data is the same.
|
const char * data |
Buffer containing the data to be encrypted as zero terminated string
|
char * out |
Buffer for the encrypted output as hex string.
|
size_t outLen |
Length of the buffer for the output. Must be 2 times the length of
the data string.
|
Decrypt
Can be used to dencrypt a text send on the AppWebsocket connection, using the session
key
Parameters
const char * seedseed |
Seed, which can be used so that the result of the encryption is different even
if the data is the same.
|
const char * data |
Buffer containing the hex string of encryped data
|
char * out |
Buffer for the decrypted output
|
size_t outLen |
Length of the buffer for the output. Must be half the length of
the data string.
|
Hash
Calculate a SHA256 hash using the session key
Parameters
const char * seedseed |
Seed, which can be used so that the result of the encryption is different even
if the data is the same.
|
const char * data |
Buffer containing a zero terminated string over which the hash shall be calculated
|
char * out |
Buffer for the hash
|
size_t outLen |
Length of the buffer for the output. Must be 64 bytes, 2* HASH_SIZE_SHA256
|
Close
-
Closes the appwebsocket client connection.
UAppWebsocketClient
class UAppWebsocketClient {
public:
virtual void AppWebsocketClientConnectComplete(class IAppWebsocketClient * appWebsocketClient) = 0;
virtual void AppWebsocketClientMessage(class IAppWebsocketClient * appWebsocketClient, class json_io & msg, word base, const char * mt, const char * src) = 0;
virtual void AppWebsocketClientSendResult(class IAppWebsocketClient * appWebsocketClient) = 0;
virtual void AppWebsocketClientClosed(class IAppWebsocketClient * appWebsocketClient) = 0;
};
Overview
This is the user for an IAppWebsocketClient. The parent class needs to implement the functions below.
Public functions
AppWebsocketClientConnectComplete
Will be called from the IAppWebsocketClient instance after a successfull connect.
Parameters
class IAppWebsocketClient * appWebsocketClient | The calling IAppWebsocketClient instance. |
AppWebsocketClientMessage
Will be called from the IAppWebsocketClient instance when a new message is received.
Parameters
class IAppWebsocketClient * appWebsocketClient | The calling IAppWebsocketClient instance. |
class json_io &msg | The json_io class which contains the message JSON. |
word base | The JSON base. |
const char * mt | The message type string. |
const char * src | The message source string. |
AppWebsocketClientSendResult
Will be called from the IAppWebsocketClient instance if a message has been sent.
Parameters
class IAppWebsocketClient * appWebsocketClient | The calling IAppWebsocketClient instance. |
AppWebsocketClientClosed
Will be called from the IAppWebsocketClient instance if the connection has been closed.
Parameters
class IAppWebsocketClient * appWebsocketClient | The calling IAppWebsocketClient instance. |
Code Example
class Test : public UAppWebsocketClient {
class IAppWebsocketClient * awsClient;
void AppWebsocketClientConnectComplete(class IAppWebsocketClient * appWebsocketClient) override;
void AppWebsocketClientMessage(class IAppWebsocketClient * appWebsocketClient, class json_io & msg, word base, const char * mt, const char * src) override;
void AppWebsocketClientSendResult(class IAppWebsocketClient * appWebsocketClient) override;
void AppWebsocketClientClosed(class IAppWebsocketClient * appWebsocketClient) override;
public:
Test(class IIoMux * const iomux,
class ISocketProvider * const tcpSocketProvider,
class ISocketProvider * const tlsSocketProvider,
class IDns * const dns,
class IInstanceLog * const log);
};
Test::Test(class IIoMux * const iomux,
class ISocketProvider * const tcpSocketProvider,
class ISocketProvider * const tlsSocketProvider,
class IDns * const dns,
class IInstanceLog * const log)
{
this->awsClient = IAppWebsocketClient::Create(iomux, this, tcpSocketProvider, tlsSocketProvider, dns, log);
this->awsClient->Connect("wss://mydomain.com/websocket/uri", "myapp", "mydomain.com", "sip", "...", "DN");
}
void Test::AppWebsocketClientConnectComplete(class IAppWebsocketClient * appWebsocketClient)
{
char buffer[1024];
class json_io json(buffer);
word base = json.add_object(JSON_ID_ROOT, nullptr);
json.add_string(base, "mt", "SendHello");
this->awsClient->MessageSend(json, buffer);
this->awsClient->MessageComplete();
}
void Test::AppWebsocketClientMessage(class IAppWebsocketClient * appWebsocketClient, class json_io & msg, word base, const char * mt, const char * src)
{
debug->printf("Test::AppWebsocketClientMessage received mt:%s", mt);
this->awsClient->Close();
}
void Test::AppWebsocketClientSendResult(class IAppWebsocketClient * appWebsocketClient)
{
debug->printf("Test::AppWebsocketClientSendResult message sent");
}
void Test::AppWebsocketClientClosed(class IAppWebsocketClient * appWebsocketClient)
{
debug->printf("Test::AppWebsocketClientClosed");
delete this->awsClient;
this->awsClient = nullptr;
// do other cleanup, e.g. call TryClose()
}