Skip to content

Commit

Permalink
Merge pull request #147 from Kennox/release-0-6-3
Browse files Browse the repository at this point in the history
Release v0.6.3
  • Loading branch information
martinfrancois authored May 19, 2017
2 parents 413ab10 + ae28394 commit 235d8ba
Show file tree
Hide file tree
Showing 15 changed files with 397 additions and 126 deletions.
2 changes: 1 addition & 1 deletion debianfx/control
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Package: rscc
Version: 0.6.2
Version: 0.6.3
Section: misc
Priority: extra
Maintainer: Ronny Standtke <Ronny.Standtke@gmx.net>
Expand Down
56 changes: 2 additions & 54 deletions debianfx/postinst
Original file line number Diff line number Diff line change
@@ -1,64 +1,12 @@
#!/bin/sh
echo "[Desktop Entry]
Categories=System;
Exec=java -jar /usr/bin/rsccfx.jar
Exec=sudo java -jar /usr/bin/rsccfx.jar
Icon=rscc
Name=Remote Support
Name[de]=Fernwartung (JavaFX)
Name[en]=Remote Support (JavaFX)
Name[it]=Assistenza Remota (JavaFX)
Name[fr]=Contrôle à distance (JavaFX)
StartupNotify=true
Type=Application" > /usr/share/applications/ch-imedias-rsccfx.desktop
mkdir /home/user/.rscc
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<supporters>
<supporter>
<description>imedias</description>
<address>agora.imedias.ch</address>
<port></port>
<encrypted>false</encrypted>
<chargeable>false</chargeable>
</supporter>
<supporter>
<description>imedias (encrypted)</description>
<address>agora.imedias.ch</address>
<port></port>
<encrypted>true</encrypted>
<chargeable>false</chargeable>
</supporter>
<supporter>
<description>IFE Informatik AG</description>
<address>46.14.169.243</address>
<port></port>
<encrypted>false</encrypted>
<chargeable>false</chargeable>
</supporter>
<supporter>
<description>Edelmanns Informatik GmbH</description>
<address>lernstick.edelmanns.ch</address>
<port></port>
<encrypted>false</encrypted>
<chargeable>false</chargeable>
</supporter>
<supporter>
<description>Ronny Standtke</description>
<address>standtke.nsupdate.info</address>
<port></port>
<encrypted>false</encrypted>
<chargeable>false</chargeable>
</supporter>
<supporter>
<description>dindan solutions GmbH</description>
<address>dindan.dyndns.info</address>
<port></port>
<encrypted>false</encrypted>
<chargeable>false</chargeable>
</supporter>
<supporter>
<description></description>
<address></address>
<port></port>
<encrypted>false</encrypted>
<chargeable>false</chargeable>
</supporter>
</supporters>' > /home/user/.rscc/rscc-defaults-lernstick.xml
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,7 @@
<goal>jdeb</goal>
</goals>
<configuration>
<deb>${project.build.directory}/rsccfx.deb</deb>
<dataSet>
<data>
<src>${project.build.directory}/${project.build.finalName}.jar</src>
Expand Down
172 changes: 172 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
# RSCC - Remote Support Connection Client

RSCC is a remote support application to establish a connection between two clients and start a VNC-Connection, in multiple ways.

Key features:
- Uses VNC server and viewer
- Client-to-Client (P2P) connection using ICE and STUN and
- RUDP to add reliability to the transmission of UDP-packages
- Fallback solution using a relay-server
- Runs on Linux only, tested with Lernstick
- Open Source

The use cases always include a *requester* who seeks support and his *supporter*. The scenarios are the following:
- Supporter has public IP
- Supporter starts vncviewer in listening mode ("Start Service")
- Supporter is either in the addressbook (predefined) or lets the requester know his details (IP and port VNCViewer listens on)
- Requester starts VNC server in connection mode (Reverse VNC)

- Both clients (supporter and requester) are behind a NAT
- The clients connects via SSH to the relay server.
- The relay server (keyserver) is used to generate a *key* (9-digit key) and transmits this key to the client.
- The requester sends this key to his supporter.
- The supporter enters the received key
- run the ICE-protocol (ice4j) and try to establish a direct connection using STUN/UDP hole punching
- If ICE is successful, the connection is tunneled over RUDP (some kind of TCP over UDP), which results in a direct (P2P) connection
- If no direct connection is possible, the realy server is used for fallback and will route the traffic over the already existing TCP connection.


## Detailed Protocol Description
- ICE (Interactive Connectivity Establishment)
- [ICE](https://tools.ietf.org/html/rfc5245) is a protocol which helps establishing connections between users.
- ICE uses STUN (Session Traversal Utilities for NAT [RFC 3489](https://www.ietf.org/rfc/rfc3489.txt), [RFC 5389](https://tools.ietf.org/html/rfc5389)) to find out the own networks public IP-address
- After a client has sucessfully received its own routers public IP-address it
gathers all possible communication-candidates and generates an SDP (Session Description Protocol)
- Both clients exchange this SDP and parse the content of it.
- Both clients execute connectivity-tests trying to reach the remote machine.

- [RUDP](https://sourceforge.net/projects/rudp/)-Proxy
- RUDP is a protocol which ensures reliable package transmission over UDP.
- The RUDP-Proxy is a two-way proxy which forwards VNC traffic from localhost to the remote machine.
- Example: VNC-Server is listening on port 5900, VNC-Viewer connects to port 2601 localhost via TCP.
The proxy forwards the incoming request on port 2601 to the remote machine to port 5050 via RUDP
The proxy on the remote machine takes the incoming request and forwards it to the VNC Server on port 5900.
- Vice versa

```
+--------------------------+ +----------------------------+
| VNC Requester | | VNC Supporter |
| +-------------+ | | +--------------+ |
| | | 5900 | | | | |
| | <-----+ | | +-----+ | |
| | VNC Server | | | | | | VNC Viewer | |
| | | | | | | | | |
| | | | | | TCP | | | |
| +-------------+ |TCP| | | +--------------+ |
| | | | | |
| +-------------+ | | | | +--------------+ |
| | |-----+ | | | 2601| | |
| | | | | +-----> | |
| | Proxy | | | | Proxy | |
| | | 5050 + RUDP + 5050 | | |
| | <-------------------------------------| | |
| +-------------+ + + +--------------+ |
| | | |
| | | |
| | | |
| | | |
+--------------------------+ +----------------------------+
```
## Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.

### Prerequisites

- Working Linux installation
- preferably latest [Lernstick build](http://lernstick.ch/releases/lernstick_debian8_latest.iso)
- Java IDE of your choice (e.g. IntelliJ Idea, Eclipse, NetBeans, ...)
- Most recent []Java 8 JDK](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
- VNC server (x11vnc)
- VNC viewer (vncviewer)
- Python
- Maven
- Access to a running Server (use this [Docker image](https://hub.docker.com/r/jpduloch/p2p/) based on this [repository](https://github.com/jpduloch/p2p))
```
Give examples
```

### Installing

Seting up the Development-Environment
1. Make sure you have all the prerequisites from above
2. Clone repository
3. Open project in Java IDE
4. Import pom.xml as Maven project and download all dependencies
5. Run mvn package
6. Run the application

## Install application only
You can either create a debian and/or jar package with maven. Alternatively you can download an upcoming version from the imedias servers or the [this github repository](https://github.com/Kennox/rscc/releases).
The ".jar"-file can be run with the following code:
```
sudo java -jar rsccfx.jar
```

To install the debian packge (recommend!) you can run the following command in the respective directory:

```
sudo dpkg -i rsccfx.deb
```
This will create all the necessary files on your local machine (e.g. desktop entry and default imedias supporters).

End with an example of getting some data out of the system or using it for a little demo

## Running the tests

The whitebox tests are being carried out using JUnit 4 and Mockito. Therefore you can run them in your favorite IDE or by using Maven.
````
$ mvn package
````

### Break down into end to end tests

Explain what these tests test and why

```
Give an example
```

### And coding style tests

To ensure proper coding style, checkstyle enforces the [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html). Any checkstyle error in the rsccfx package will result into the build failing.
The checkstyle configuration file is located in the path ```config/checkstyle.xml``` and is based on the latest commit of the [official checkstyle implementation](https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml) of the Google Java Style Guide.

To check the code for checkstyle violations, run:
```
mvn checkstyle:check
```

## Deployment

To use the RSCC you need a server running the Docker Image.

## Built With

* [Maven](https://maven.apache.org/) - Dependency Management

## Contributing

Please read [CONTRIBUTING.md](https://gist.github.com/PurpleBooth/b24679402957c63ec426) for details on our code of conduct, and the process for submitting pull requests to us.

## Versioning

-

## Authors

See also the list of [contributors](https://github.com/Kennox/rscc/contributors) who participated in this project.

## License

GPL

## Acknowledgments

* Hat tip to anyone who's code was used
* RUDP: https://sourceforge.net/projects/rudp/
* Proxy Server: http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm
* Ice4j https://github.com/jitsi/ice4j#readme


42 changes: 23 additions & 19 deletions resources/images/invalid.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions resources/images/valid.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/ch/imedias/rsccfx/localization/Bundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,6 @@ expertIcePortLbl=ICE Port
expertUdpPackageSizeLbl=UDP package size
expertForwardingPortLbl=Local forwarding port
expertStunServerPortLbl=Stunserver port
expertStunserverLbl=Stunservers
expertStunserverLbl=STUN servers
expertSettingsBtn=Expert settings
settingsTitleLbl=Expert settings
6 changes: 3 additions & 3 deletions src/ch/imedias/rsccfx/localization/Bundle_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ homeSupportSmallLbl=Jemand ben\u00F6tigt meine Hilfe

# RequestView
requestTitleLbl=Schl\u00fcssel generieren
requestDescriptionLbl=W\u00e4hlen Sie den Supporter, welcher Sie unterst\u00fctzen soll. Sie k\u00F6nnen auch neue Supporter hinzuf\u00fcgen oder einen bestehenden editieren. Kontaktieren Sie Ihren Supporter f\u00fcr die Einstellungsdetails.
requestDescriptionLbl=Starten Sie eine neue Fernwartung, indem Sie den generierten Schl\u00fcssel Ihres Partners hier eingeben.
requestKeyGeneratorPane=Schl\u00fcsselgenerierung
requestGeneratedKeyFld=Schl\u00fcssel wird generiert...
requestPredefinedAdressessPane=Adressbuch
Expand All @@ -58,7 +58,7 @@ supportStatusLblReady=Bereit

#StartServiceView
startServiceDescpriptionLbl=Damit Ihr Partner durch das Adressbuch eine direkte Verbindung zu Ihnen herstellen kann, muss hier zuerst der Dienst gestartet werden.
statusBoxServiceIdle=Dienst läuft nicht
statusBoxServiceIdle=Dienst l\ufffduft nicht
statusBoxServiceStarted=Dienst wurde gestartet
statusBoxServiceStopped=Dienst wurde gestoppt

Expand Down Expand Up @@ -93,6 +93,6 @@ expertIcePortLbl=ICE Port
expertUdpPackageSizeLbl=UDP Paketgr\u00F6sse
expertForwardingPortLbl=lokaler Weiterleitungsport
expertStunServerPortLbl=Stunserver Port
expertStunserverLbl=Stunservers
expertStunserverLbl=STUN-Server(s)
expertSettingsBtn=Experteneinstellungen
settingsTitleLbl=Experteneinstellungen
Loading

0 comments on commit 235d8ba

Please sign in to comment.