GithubHelp home page GithubHelp logo

nutomic / ensichat Goto Github PK

View Code? Open in Web Editor NEW
145.0 145.0 22.0 1.88 MB

Project discontinued

License: Mozilla Public License 2.0

Scala 93.86% Java 6.14%
android decentralized p2p peer-to-peer scala

ensichat's People

Contributors

arneball avatar nutomic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ensichat's Issues

EnsiRouter

I think that if this creates a Bluetooth mesh network, you could possibly create a fork of this project and call it EnsiRouter. And basically allow applications on Android to use EnsiRouter's API for sending data from one node to another. This is just an idea, but I think it s a great one.

Add a way to share the app

Is it possible to add a way to share the app ?
The case where the app would be the most needed are those when we don't have a connection or a bad one (or at least for me ^^) so other people can't go on the internet and get the app.

Bluetooth State Restoration

I think that EnsiChat should save the status of the state of Bluetooth being on or off. so say now Bluetooth is off in the device once when EnsiChat starts then it should start Bluetooth for the duration of the application running and once ensichat exits it should return the Bluetooth state to the original state (in this case, off).

This is a feature of what I think needs to be implemented for the best user experience.

Chats, Contacts

I think that there should be a page for chats, then one for added nodes and one for discovering new nodes. Like whatsapp has the contacts and chats pages.

Ability to send files

The ability to send files through the mesh would be awesome. And maybe even (sign the files, I think though that signatures are already in the protocol for text messages in EnsiChat if I am correct.

Out of band key exchange

For situations where keys must be exchanged before bluetooth connection is possible.

For example: Two people plan to meet for the first time in a busy subway station. Having exchanged keys OoB (OTR chat for example), one can contact the other when they arrive. A secondary verification may be useful during this in person exchange.

Little button

A cool feature would be to add an "Add Contacts" button to the main activity when the user has a blank screen (no contacts).

Networking question

How does the network send messages (Bluetooth isn't special as in I doubt it having its own protocol for networking as all it is is a radio). What is used for the networking, TCP?

Question: Does it create a mesh network

I would like to know how the system works.

Does it create a mesh network using Bluetooth as the communications system? If not it would be cool to see it work in a mesh nature.

Maybe a documentation in Markdown format of how it works would be great. :D

File sharing

I think that the addition of the ability to send and receive arbitrary files would be awesome.

I think you could have a little button for it in the chat in the toolbar for sending a file or an image (because i think the media side should be separate from the file side).

Dynamic routing

I would suggest this strongly as it will allow the network to do way more (not that it already can) but in a way more efficient way.

There are things like video and voice chat that I think could be awesome but only would work well if the router uses dynamic routing.

TCP API Interface

I was thinking of a really cool idea.

What if you could include a piece of code that could run a multi-threaded TCP server to handle requests from other apps that want to communicate to other apps that are on another phone on the EnsiChat mesh.

Like so:

Phone 1 has an app that say now sends messages.
Phone 1 wants to send a message to the same app on user's Phone 2.

Phone 1's app then makes a TCP connection to the local TCP server on port 6969 and then via a protocol designed by @Nutomic - it can take that data and send it over the mesh via your bluetooth + internet routing protocol and then to the device specified in the packet sent to EnsiChat TCP server. Once received it can then send the data back from EnsiChat on Phone 2 to the required app by sending a data message via TCP to the app.

This is just an idea, however you would like to implement a "Router API" is up to you. I just think it would be neat to see apps using your protocol to transfer information other than EnsiChat's.

Meshnetworking with Bluetooth

I was reading a question on how blue tooth works on Wikipedia. The way EnsiChat works, say now you have three nodes within the same distance from each other a triangular topology. All with a 5 meter distance between each other. And the all connect to each other in a mesh. Is it completely decentralized, like there is no super node or node that runs the whole network.

Start on boot

I think allowing EnsiChat to start on boot would be great.

Other Transport Methods

  • wifi: we can discover other devices using Bonjour or similar and connect to them (when multiple devices are connected to the same hotspot)
  • internet: probably with a dht for discovery
  • LTE Direct (once that is available for consumers)

Voice and Video

This is a future feature request. But I feel like I should put it here.

Public key encryption

I do not know if this already exists in EnsiChat. I am assuming it does. So the question is does it, it seems so.

Maybe I am getting confused with the user verification feature.

Offline Messaging

If the receiver of a message is offline (not connected to the same mesh as the sender) the message will never arrive. This is also not indicated to the sender (ref #22).

Time message was sent

It would be cool to see a feature implemented to add to the protocol information to when the message was sent. At what time it was sent.

Network Informations Page

It would be really cool to have a page dedicated to the network information.

  1. Like what nodes your are connected to directly.
  2. And also a list of all nodes on the network.
  3. Network topology map generation
  4. Also the notification could contain information on number of connected nodes.

Little update:

Maybe you could include something like a ping time or somehting, I don't know, just for fun. It shouldn't be that hard. UI have some pseudo-code below which could help:

# Gather ping info
var startTime = currentTime()
sendPacket(nodeAddress) # This should be a special packet of which teh node can see it must send a reply to the sender of the packet.
wait until packet is received
var endTime = currentTime()
var ping = endTime - startTime

Server licensing

Maybe the server should have its own repo and use the GNU AGPL v3?

Ability to set status message

It would be really cool to see a feature implemented allowing the node (user) to have status message for his profile set.

Group chat

This would be a great feature to add to allow conversations between groups of people.

Show Identicons

There is one thing I want to know. If some one takes your username how can the connectee decifer which drive is the real @deavmi . Couldn't there be some kind of MAC address stuff put into here or something, some signature of proof.

Also if this is the fingerprint, system, maybe (I am lost in my one thoughts) there should be a view fingerprint option somewhere. Idk, I am just throwing ideas around here. ;)

Start on boot option

The addition of a start on boot option for the EnsiChat would be nice. Allow it to start as a notification.

EnsiChat Library (API)

I think EnsiChat could really do with a library (Shared Library - is that the word for this situation) as this could really open up the abilities to silently interact with EnsiChat and send data from one app to EnsiChat and then to a node.

Something like a little EnsiChat API.

Fingerprint on contacts page

Wouldn't it be cool to show the fingerprint of the user under the bold text of the user, in like a gray text font.

PTT support

The app is really great, but is possible add an encrypted PTT (push to talk) functions like a Walkie Talkie??

Message delivered indication

Maybe it would be nice to have message deliverance notifications like in whatsapp. Get the protocol to send a message to the sender telling him that the message has been sent.

Beta builds?

is there any way to getting beta builds of ensichat?

Data compression?

I was wondering if zipping all the data that gets sent over the network would be a good idea. There will probably be more overhead, but of which is not bad. Because of compressing and decompressing.

App keep crashing

On first launch everything was fine but just after quitting the app, it crash several time without relaunching it. And now it crash on every launch

On a wiko cink peax 2 with android 4.1.2 and the version 0.1

AES

It would be possible to add (now or in future) AES technologies to encrypt communications?

Launcher Icon

Would be great if anyone could contribute one :)

My graphics skills are unfortunately nonexistant.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.