Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
JanFellner committed Sep 20, 2024
0 parents commit b05734b
Show file tree
Hide file tree
Showing 768 changed files with 590,817 additions and 0 deletions.
61 changes: 61 additions & 0 deletions .github/workflows/plantum-diagram.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: PlantUML Diagram Generator


on:
push:
paths:
- '**/*.puml'
pull_request:
paths:
- '**/*.puml'
workflow_dispatch:

jobs:
generate-diagrams:
runs-on: ubuntu-latest

steps:
- name: Checkout the repository
uses: actions/checkout@v2

- name: Set up Java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'

- name: Install PlantUML and Dependencies
run: |
sudo apt-get update
sudo apt-get install -y plantuml graphviz
- name: Debug - Find .puml files
run: |
echo "Finding .puml files:"
find . -name "*.puml" -print
echo " "
- name: Generate diagrams from .puml files (verbose)
run: |
echo "Generating diagrams:"
find . -name "*.puml" -exec echo "Processing {}" \; -exec sh -c 'plantuml -tpng -pipe < "$1" > "${1%.puml}.png"' _ {} \;
echo "PlantUML generation complete."
echo " "
- name: Debug - List generated .png files
run: |
echo "Listing all generated .png files:"
find . -name "*.png" -print
echo " "
- name: Commit and push generated images
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git add *.png || true
git add **/*.png || true
git commit -m "Auto-generated PlantUML diagrams"
git push
continue-on-error: true
45 changes: 45 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Prerequisites
*.d

# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app

# node files
node_modules

# environment files
browser-client/.env
node-client/.env

# intermediate files and folder for bundling and linting
*.eslintcache
.vite
dist
openAPI/example/esbuild/
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "interface/esnacc-compiler"]
path = interface/esnacc-compiler
url = https://github.com/ESTOS/esnacc.git
Binary file added Client_connection_setup.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
37 changes: 37 additions & 0 deletions Client_connection_setup.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
@startuml Client connection setup (as of 20.09.2024)
participant "Client" as CL
participant "UCController" as UCC
participant "UCWeb" as UCW
participant "UCServer" as UCS
autonumber

Note over UCW, UCS: The UCServer needs to be connected to UCConnect.\n\
If the server is connected it established connections to two\n\
different UCWeb proxies for redundancy reasons.
Note over CL, UCC: Retrieve one of the UCWeb proxys the UCServer is connected to
CL->UCC++: https://uccontroller.ucconnect.de/controller/client/ucws?ucsid=<color:blue><b>{UCSID or ALIAS}</b></color>
CL<--UCC--: 200 OK\n\n\
{"redirect" : "https://someucweb1.ucconnect.de" }
...
Note over CL, UCW: Create and authenticate a session over the UCWeb to the target UCServer
CL->UCW++: https://someucweb1.ucconnect.de/ws/client/createsession?ucsid=<color:blue><b>{UCSID or ALIAS}</b></color>
UCW->UCS++: asnNegotiatexx
UCW<--UCS--: asnNegotiatexxResult: { suportedauthMethods }
CL<-UCW--: 401 Unauthorized\n\
WWW-Authenticate: authdata
...
loop If authentication requires renegotiation (NTLM, Kerberos)
CL->UCW++: GET https://someucweb1.ucconnect.de/ws/client/createsession?ucsid=<color:blue><b>{UCSID or ALIAS}</b></color>\n\
Authorization: authdata\n\
x-epid: authsessionid <color:green>// for multi handshake auth protocols</color>
UCW->UCS++: asnCreateUserSession
UCW<--UCS--: asnCreateUserSessionResult: { u8sSessionID: 'usersessionID' }
Note left of UCW: Client calls are now happening in the context of //usersessionID//
UCW->UCS++: asnLogon(AsnLogonArgument)
UCW<--UCS--: AsnLogonResult
CL<--UCW--: 200 OK\n\n\n\
{ sessionID: usersessionID }
end
CL->UCW++: wss://someucweb1.ucconnect.de/ws/client/websocket?x-ucsessionid=<color:blue><b>{usersessionID}</b></color>
CL<--UCW--: 101 SWITCHING PROTOCOLS
@enduml
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2024 estos GmbH

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
97 changes: 97 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# UCServerWebSDK2.0 *preview*

## Basics
This is a preview version of the estos UCServer Web SDK2.0.
The SDK is currently still in beta status, i.e. we can and will probably make structural changes to simplify and improve the application.

The SDK provides the client and administration communication interface of the UCServer. It is therefore not a separate interface provided for the SDK, but the interface that our products also use.

### Functionality
Communication between a client and the UCServer requires a standing connection. A WebSocket is used for this in the SDK; technically, this can also be a TCP connection.

The interface (structures, methods, events) is described in full in [ASN.1](https://de.wikipedia.org/wiki/Abstract_Syntax_Notation_One). [ROSE](https://en.wikipedia.org/wiki/Remote_Operations_Service_Element_protocol) is used for framing the messages on the standing connection.

The encoding of the messages is either [JSON](https://de.wikipedia.org/wiki/JavaScript_Object_Notation) or [BER](https://en.wikipedia.org/wiki/X.690#BER_encoding), whereby BER allows a much more compact transmission.

### ASN.1 files
The asn.1 files describing the interface are located in the [interface/asn1](interface/asn1) folder. There is a separate asn.1 file for each scope / context.

Module | Function / Content
-------|-------------------
[ENetROSEInterface.asn1](interface/asn1/ENetROSEInterface.asn1)|Unsorted functions which did not fit into other modules
[ENetUC_Admin.asn1](interface/asn1/ENetUC_Admin.asn1)|Administrative functions which are available on the client interface
[ENetUC_Agent.asn1](interface/asn1/ENetUC_Agent.asn1)|Agent Login Logout state interface
[ENetUC_Appointments.asn1](interface/asn1/ENetUC_Appointments.asn1)|Appointment sync interface
[ENetUC_Auth.asn1](interface/asn1/ENetUC_Auth.asn1)|Authentication interface
[ENetUC_AV.asn1](interface/asn1/ENetUC_AV.asn1)|Audio Video interface
[ENetUC_BinaryTransfer.asn1](interface/asn1/ENetUC_BinaryTransfer.asn1)|Binary transfer (primarily for chat)
[ENetUC_ChatV2.asn1](interface/asn1/ENetUC_ChatV2.asn1)|Chat interface
[ENetUC_ClientCapabilities.asn1](interface/asn1/ENetUC_ClientCapabilities.asn1)|To exchange client capabilites
[ENetUC_ClientContent.asn1](interface/asn1/ENetUC_ClientContent.asn1)|Favourites layout and structure
[ENetUC_ClientPersistence.asn1](interface/asn1/ENetUC_ClientPersistence.asn1)|Allows a client to store and retrieve data on the server
[ENetUC_Common.asn1](interface/asn1/ENetUC_Common.asn1)|Shared commonly used structures
[ENetUC_Common_Appointments.asn1](interface/asn1/ENetUC_Common_Appointments.asn1)|Shared appointment structures
[ENetUC_Common_AsnContact.asn1](interface/asn1/ENetUC_Common_AsnContact.asn1)|Shared contact structures
[ENetUC_Common_Auth.asn1](interface/asn1/ENetUC_Common_Auth.asn1)|Shared auth structures
[ENetUC_Common_SIPCTI.asn1](interface/asn1/ENetUC_Common_SIPCTI.asn1)|Shared sip and cti structures
[ENetUC_CTI.asn1](interface/asn1/ENetUC_CTI.asn1)|Remot call control interface
[ENetUC_Journal.asn1](interface/asn1/ENetUC_Journal.asn1)|Journal / call history interface
[ENetUC_Mgmt.asn1](interface/asn1/ENetUC_Mgmt.asn1)|The server management interface (uses it´s own interface on the server side and thus is not available within the client interface)
[ENetUC_PresenceV2.asn1](interface/asn1/ENetUC_PresenceV2.asn1)|Retrieve and subscribe presence of users (including your own)
[ENetUC_Ranking.asn1](interface/asn1/ENetUC_Ranking.asn1)|Control the ranking of acd agents
[ENetUC_ServicesAgents.asn1](interface/asn1/ENetUC_ServicesAgents.asn1)|Server to server agent interface
[ENetUC_Tasks.asn1](interface/asn1/ENetUC_Tasks.asn1)|Tasks interface
[ENetUC_Transport.asn1](interface/asn1/ENetUC_Transport.asn1)|Some transport related functions

### From ASN.1 to structures or a complete communication stub
To compile the ASN.1 files, the estos enhanced snacc compiler is located in the [interface/esnacc-compiler](https://github.com/ESTOS/esnacc) folder.
It is built with cmake. For simplification, the

This can be built using a batch file in the interface folder

The compiler can provide structures for the following programming languages from the ASN.1 files
- C++
- C#
- C
- Swift
- Java
- TypeScript
- Javascript
- Delphi

The compiler provides complete stubs for the following languages.
- C++
- TypeScript

These stubs allow the simple call of the respective other page and offer a virtual interface on the called page for overwriting by means of class derivation.
Corresponding classes are generated for each ASN.1 module, which also enable structured splitting in your own code.
The stub performs the following tasks:
- Complete ROSE handling
- Validation and encoding of a function argument
- Encoding of the ROSE envelope
- Request response association (predefined, optional variable timeout)
- Decoding and validation of incoming requests
- Assignment to registered handler objects
- Complete transport logging (BER and or JSON)
- Encoding decoding in BER and JSON
- Error handling

### Structure of the SDK
Folder | Contents
-------|-------------------
[interface](interface) | Interface, scripts and tooling
[interface/asn1](interface/asn1) | The ASN.1 files which describe the server interface
[interface/esnacc-compiler](interface/esnacc-compiler) | the esnacc compiler to transpile the ASN.1 files
[openAPI](openAPI) | A swagger ui like client to test functions
[node-client](node-client) | A node sample client
[browser-client](browser-client) | A vanilla html sample client

### Connection setup
There are several ways to establish a connection to UCServe as a client.
The simplest and most universal is probably a connection via UCConnect.
It would also be possible to connect directly to an on Premise UCServer or the side by side installed UCWeb but this mechanism is currently not documented here.
If you take a closer look at the following plantUML diagram it should also answer how the direct connection to UCServer or UCWeb are possible.

![Client connection setup](Client_connection_setup.png)

We plan to provide this connection setup functionality in a dedicated npm module before finally releasing this SDK.
6 changes: 6 additions & 0 deletions browser-client/.env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# The client is provided by the webpack dev-server using these settings:
UCSERVERWEBSDK20_CLIENT_LISTEN_PORT=80
UCSERVERWEBSDK20_CLIENT_LISTEN_TLS=0
UCSERVERWEBSDK20_CLIENT_CERTFILE=cert.pem
UCSERVERWEBSDK20_CLIENT_KEYFILE=key.pem
# UCSERVERWEBSDK20_CLIENT_DNS_NAME
Loading

0 comments on commit b05734b

Please sign in to comment.