Skip to content

Commit

Permalink
Better console display, time remaining stats, increase/decrease QR co…
Browse files Browse the repository at this point in the history
…de version, disable timeout, licence and readme.
  • Loading branch information
anderson- committed Nov 18, 2014
1 parent 79edeb3 commit 1784e33
Show file tree
Hide file tree
Showing 8 changed files with 1,008 additions and 73 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
/test/
/nbproject/private/
*~
receivedtux.png
674 changes: 674 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

39 changes: 39 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
Eye-Fi
===

What is it?
---
Eye-Fi is a secure file transfer software directed for anonymously sharing data across notebooks. It doesn't use no intermediary media, no physical connection between the computers or a computer network, no radio communication (Wi-Fi, Bluetooth), or any other conventional mean. The only things needed is a notebook with a webcam.

How it works?
---

The concept is very simple, two notebooks are placed facing each other, each one recording the screen of the other. One is labeled "Server" and it has the file, answering requests on demand, the other is the "Client" and it is responsible to setup the connection parameters, request chunks of data, and handling any connection problem.

![](https://raw.github.com/anderson-/eye-fi/master/src/eyefi/slogo128.png)

The data transfer is made by swapping QR codes, encoded with chunks of the original file. For encoding an QR code two parameters are needed: Version and error correction level (ECL). Higher versions encode more data, but are harder to read. Higher ECL encode less data, but the message can be reconstructed if a portion of the QR code is not visible.

The process of sending a file over screen-webcam is described as follows:

![](https://raw.github.com/anderson-/eye-fi/master/doc/CommunicationProtocol.png)


Features
---

- Tested on Windows and Linux
- Auto scan for best QR code version and error correction level
- Auto reduce/increase QR code version during transfer
- Real time transfer statistics
- MD5Sum check for file integrity
- Simulate file transfer locally
- Simulate webcam interference
- Open source: GPLv3

| **Pros** | **Cons** |
|:-----------------------:|:-----------:|
|Secure |Awkward setup|
|Awesome and fun? |Slow |

**2014 - Anderson de Oliveira Antunes**
74 changes: 74 additions & 0 deletions doc/CommunicationProtocol.plantuml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
@startuml

skinparam shadowing false

skinparam sequence {
ArrowColor Black
ActorBorderColor Black
LifeLineBorderColor Black
LifeLineBackgroundColor White

ParticipantBorderColor Black
ParticipantBackgroundColor White
ParticipantFontColor Black

ActorBackgroundColor White
ActorFontColor Black
}

title The Communication Protocol

actor cuser as "Receiver"
participant client as "Client\nNotebook"
participant server as "Server\nNotebook"
actor suser as "Sender"

cuser -> client : Select "Receive file"
activate client
client ->x server : Request random QR code version 0
...
suser -> server : Select "Send file"
activate server
==== Benchmark ==
client -> client: benchmark(...);
activate client #GreenYellow
group Version loop X [0 ... 39]
group ECL loop Y [0 ... 3]
alt
client -> server : Request random QR code version <b>X</b> ECL <b>Y</b>
server --> client : Send random QR code version <b>X</b> ECL <b>Y</b>
else QR code too dense to identify
client -> server : Request random QR code version <b>X</b> ECL <b>Y</b>
server -->x client : Send random QR code version <b>X</b> ECL <b>Y</b>
deactivate client
end
end
end
==== Transfer ==
client -> client: receiveFile(...);
activate client #LightSeaGreen
group Checksum error loop
group Chunk request loop Z [0 ... (Filesize / QRCodeDataLength)]
alt
client -> server : Request file chunk <b>Z</b> version <b>V</b>
server --> client : Send file chunk <b>Z</b> version <b>V</b>
else QR code read exception
client -> server : Request file chunk <b>Z</b> version <b>(V-1)</b>
server --> client : Send file chunk <b>Z</b> version <b>(V-1)</b>
end
end

client -> client: requestChecksum(...);
activate client #OrangeRed
client -> server : Request file checksum
server --> client : Send file checksum
deactivate client
deactivate client
end
==== End ==
client --> cuser : File delivered
...
suser -> server: Close application
deactivate server
cuser -> client: Close application
deactivate client
Binary file added doc/CommunicationProtocol.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added lib/Filters.jar
Binary file not shown.
4 changes: 3 additions & 1 deletion nbproject/project.properties
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
file.reference.bridj-0.6.2.jar=lib/bridj-0.6.2.jar
file.reference.Filters.jar=lib/Filters.jar
file.reference.javase.jar=lib/javase.jar
file.reference.slf4j-api-1.7.2.jar=lib/slf4j-api-1.7.2.jar
file.reference.webcam-capture-0.3.10.jar=lib/webcam-capture-0.3.10.jar
Expand All @@ -41,7 +42,8 @@ javac.classpath=\
${file.reference.slf4j-api-1.7.2.jar}:\
${file.reference.webcam-capture-0.3.10.jar}:\
${file.reference.javase.jar}:\
${file.reference.zcore.jar}
${file.reference.zcore.jar}:\
${file.reference.Filters.jar}
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false
Expand Down
Loading

0 comments on commit 1784e33

Please sign in to comment.