Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cjdns-enabled apps #12

Open
benhylau opened this issue Jan 13, 2015 · 13 comments
Open

Cjdns-enabled apps #12

benhylau opened this issue Jan 13, 2015 · 13 comments
Labels

Comments

@benhylau
Copy link
Member

The cjdns-android app, when it is eventually built, manages the cjdns service and facilitates peering. Running that alone should allow your browser to reach services offered by your peers, and also reach Hyperboria if at least one node in your network is able to reach it. This is however, just a basic use case. The mobile nature of a cjdns node running on a phone comes with challenges, like transient peers as phones go on & off, move in & out of range, etc. but also opens up use cases that aren't practical on stationary nodes. Cjdns-enabled apps can be built to allow such use cases, like an encrypted messaging app across an ad-hoc network. Think FireChat but secure, and requires the cjdns service to be running. The cjdns app will allow other apps to silently kickstart the cjdns service on the device.

This issue is created to discuss:

  • Mobile-relevant use cases
  • Ideas for cjdns-enabled apps
  • How to implement them, whether the current design of the cjdns app can facilitate that use case, and whether the Android platform will support it
@kpcyrd
Copy link
Member

kpcyrd commented Jan 13, 2015

You can use it as easy to use tls replacement so every app with network communications is a potential use case for cjdns.

Starting cjdns on boot would be the easiest solution, but probably bad for your battery. I think I've heard of a way to expose apis to other android applications so maybe we could just expose:

ensureCjdnsIsRunning();

I don't now anything about android so no idea if this is possible.

@benhylau
Copy link
Member Author

The problem is, most apps are hardcoded to talk with their own servers, so cjdns doesn't add much. Some cjdns-enabled apps would function across an ad-hoc mesh network I imagine.

Yes Android allows for that. See #8 (comment)

If the app is missing, it will also bring you to the app store so you can install the cjdns app.

@ghost
Copy link

ghost commented Jan 13, 2015

One angle we should take a look at is what FireChat does -- or rather: does not do.

http://www.88-bar.com/2015/01/fact-checking-the-hype-around-mesh-networks-and-firechat/

TL;DR

  1. FireChat was built for concerts and Burning Man
  2. FireChat is “not meant for secure or private communications”
  3. Lots of people in Hong Kong signed up for FireChat
  4. But FireChat put Hong Kong citizens in danger during the protests
  5. Protesters did use its mesh networking capability, but there’s only one report of it
  6. FireChat is an IRC-like chatroom app, not a messaging app
  7. The Hong Kong mobile network did not “collapse”

@kpcyrd
Copy link
Member

kpcyrd commented Jan 13, 2015

I've proposed a way to allow every application to add their own peers in cjdelisle/cjdns#712, so if you want to use cjdns to securely communicated with your server, you'd add your server as a peer and connect to it with it's fc address. The server would announce itself as non-router.

@benhylau
Copy link
Member Author

@lgierth heh I posted this issue after reading that same article. I wanted to start thinking about what it would take to build a cjdns-based chat or chatroom app. Or whatever, sharing files across the ad-hoc network, broadcasting news, etc. Some of these app development efforts can even happen in parallel with the cjdns app. The nice thing is, once we add a new protocol in the cjdns app, such as RFC 1149, all cjdns-based app can connect through that too without any changes.

@benhylau
Copy link
Member Author

@kpcyrd So if I am to build a cjdns-enabled app that needs to access a server, I can write my application so that when it launches, it would ask the cjdns-android app to peer to my server's fc address. My server is running as a cjdns node configured to peer with anyone who asks. This is to guarantee the device can reach this server? Did I understand this correctly?

@kpcyrd
Copy link
Member

kpcyrd commented Jan 15, 2015

This was the idea, yes.

It would be easy for the user to allow each application to add peers and pass a removal password, so each application can add peers, but only remove those it has the password to.

The more I think about it, the more I think this could be kind of a bad idea. I would love some opinions on this.

@benhylau
Copy link
Member Author

Posted on r/darknetplan

@kylerchin
Copy link

Is this dead? Net neutrality is dead, and cjdns must live. Otherwise, I start my own fork.

@sdgathman
Copy link

I use linphone on my laptop to make SIP phone calls over cjdns. The cjdns IP is the "phone number". Totally serverless - no DNS, no sip broker - nada. My dad loves it.

Linphone on Android has the same potential - if only Cjdns were running.

Without Cjdns, you are reduced to making phone calls through a centralized SIP provider. (Mobile IPv6 would also work, sans encryption - if IPv6 were available everywhere.)

@sdgathman
Copy link

Is this dead? Net neutrality is dead, and cjdns must live. Otherwise, I start my own fork.

Net "neutrality" replaces corporate oppression with government oppression - I hope it stays dead. You can get neutrality from corporations now by paying by the GB for bandwidth used - then the provider wants nothing to stand in the way of bigger bills!

My letter to the FCC petitioned the government to use their Constitutional power of defining "weights and measures" to define the currently nonsensical marketing term "unlimited internet" (a more accurate term would be "unmetered internet") to mean what you mean by "net neutrality". There is actually a place for "movie watchers internet" - where everything is throttled except streaming providers that pay to play. As long as it is not marketed as "unlimited internet". Truth in advertising is a constitutional concern of the Federal government.

@benhylau
Copy link
Member Author

@sdgathman I actually had that working on a pair of phones, running this cjdns app and running the linphone app with ipv6 enabled, but at some point it stopped working and only worked when one end is a laptop. I didn't have time to look into the problems since shifting focus to work on raspberry pi platforms. I hope to get back into this one day, but a lot is changing in cjdns (auto-peer over UDPInterface, supernode routing, etc.) so let's see how things go in the next 6 months.

@sdgathman
Copy link

sdgathman commented Oct 12, 2018

Without Cjdns, you are reduced to making phone calls through a centralized SIP provider. (Mobile IPv6 would also work, sans encryption - if IPv6 were available everywhere.)

Imagine an IPv6 tunnel broker service with UDP tunneling (like sixxs used to offer). An Android app connects to the nearest tunnel endpoint, changing the tunnel endpoint as the phone moves, and a user run base station runs Mobile IPv6 for a stable IPv6 for the phone. (As envisioned by the mobile IPv6 designers.)

Or you can just run Cjdns. :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants