Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
client
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
elixxir
client
Commits
50688144
Commit
50688144
authored
4 years ago
by
Benjamin Wenger
Browse files
Options
Downloads
Patches
Plain Diff
small changes
parent
9c3a6f0a
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
README.md
+55
-45
55 additions, 45 deletions
README.md
with
55 additions
and
45 deletions
README.md
+
55
−
45
View file @
50688144
...
...
@@ -3,7 +3,7 @@
[

](https://gitlab.com/elixxir/client/commits/master)
[

](https://gitlab.com/elixxir/client/commits/master)
The XX Network client is a
command line tool and related libraries
The XX Network client is a
library and related command line tool
that facilitate making full-featured XX clients for all platforms. The
command line tool can be built for any platform supported by
golang. The libraries are built for iOS and Android using
...
...
@@ -11,7 +11,8 @@ golang. The libraries are built for iOS and Android using
This repository contains everything necessary to implement all of the
XX Network messaging features. These include the end-to-end encryption
and metadata protection.
and metadata protection. It also contains features to extend the base
messaging protocols.
For library writers, the client requires a writable folder to store
data, functions for receiving and approving requests for creating
...
...
@@ -44,7 +45,7 @@ GOOS=windows GOARCH=386 CGO_ENABLED=0 go build -ldflags '-w -s' -o release/clien
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -ldflags '-w -s' -o release/client.darwin64 main.go
```
Basic usage, sending unsafe, unencrypted messages to yourself:
Basic
command line
usage, sending unsafe, unencrypted messages to yourself:
```
client --password user-password --ndf ndf.json -l client.log -s session-directory --writeContact user-contact.json --unsafe -m \"Hello World, without E2E Encryption\"
...
...
@@ -52,7 +53,7 @@ client --password user-password --ndf ndf.json -l client.log -s session-director
*
`--password`
is the password used to encrypt and load the session.
*
`--ndf`
is the network definition file, downloadable from the XX network
website.
website
when available
.
*
`-l`
the file to write logs (user messages are still printed to stdout)
*
`--writeContact`
Output the user's contact information to this file.
*
`--unsafe`
Send message without encryption (necessary whenever you have not
...
...
@@ -155,49 +156,13 @@ Note that the client cannot be used on the betanet with precanned user ids.
## Library Overview
The XX client uses gomobile to build Android and iOS libraries. We
The XX client is designed to be used as a go library (and by extension a
c library).
Support is also present for go mobile to build Android and iOS libraries. We
bind all exported symbols from the bindings package for use on mobile
platforms.
### Building the Library
To set up Gomobile for Android, install the NDK and pass the -ndk flag
to
` $ gomobile init`
. Other repositories that use Gomobile for
binding should include a shell script that creates the bindings. For
iOS, gomobile must be run on an OS X machine with Xcode installed.
Important reference info:
1.
[
Setting up Gomobile and subcommands
](
https://godoc.org/golang.org/x/mobile/cmd/gomobile
)
2.
[
Reference cycles, type restrictions
](
https://godoc.org/golang.org/x/mobile/cmd/gobind
)
To clone and build:
```
# Go mobile install
go get -u golang.org/x/mobile/cmd/gomobile
go get -u golang.org/x/mobile/bind
gomobile init... # Note this line will be different depending on sdk/target!
# Get and test code
git clone https://gitlab.com/elixxir/client.git client
cd client
go mod vendor -v
go mod tidy
go test ./...
# Android
gomobile bind -target android -androidapi 21 gitlab.com/elixxir/client/bindings
# iOS
gomobile bind -target ios gitlab.com/elixxir/client/bindings
zip -r iOS.zip Bindings.framework
```
You can verify that all symbols got bound by unzipping
`bindings-sources.jar`
and inspecting the resulting source files.
Every time you make a change to the client or bindings, you must
rebuild the client bindings into a .aar or iOS.zip to propagate those
changes to the app. There's a script that runs gomobile for you in the
`bindings-integration`
repository.
### Implementation Notes
Clients need to perform the same actions
*in the same order*
as shown in
...
...
@@ -207,6 +172,9 @@ set up before starting network threads (i.e., before StartNetworkFollowers
connection reaches the "healthy" state. Below are relevant code listings for
how to do these actions.
the ndf is the network definition file, downloadable from the XX network
website when available.
1.
Creating and/or Loading a client:
```
//create a new client if none exist
...
...
@@ -420,14 +388,56 @@ type RoundEventCallback func(ri *pb.RoundInfo, timedOut bool)
showing that you can receive a full RoundInfo object for any round event
received by the client library on the network.
### Building the Library for iOS and Android
To set up Gomobile for Android, install the NDK and pass the -ndk flag
to
` $ gomobile init`
. Other repositories that use Gomobile for
binding should include a shell script that creates the bindings. For
iOS, gomobile must be run on an OS X machine with Xcode installed.
Important reference info:
1.
[
Setting up Gomobile and subcommands
](
https://godoc.org/golang.org/x/mobile/cmd/gomobile
)
2.
[
Reference cycles, type restrictions
](
https://godoc.org/golang.org/x/mobile/cmd/gobind
)
To clone and build:
```
# Go mobile install
go get -u golang.org/x/mobile/cmd/gomobile
go get -u golang.org/x/mobile/bind
gomobile init... # Note this line will be different depending on sdk/target!
# Get and test code
git clone https://gitlab.com/elixxir/client.git client
cd client
go mod vendor -v
go mod tidy
go test ./...
# Android
gomobile bind -target android -androidapi 21 gitlab.com/elixxir/client/bindings
# iOS
gomobile bind -target ios gitlab.com/elixxir/client/bindings
zip -r iOS.zip Bindings.framework
```
You can verify that all symbols got bound by unzipping
`bindings-sources.jar`
and inspecting the resulting source files.
Every time you make a change to the client or bindings, you must
rebuild the client bindings into a .aar or iOS.zip to propagate those
changes to the app. There's a script that runs gomobile for you in the
`bindings-integration`
repository.
## Roadmap
See the larger network documentation for more, but there are 2 specific
parts of the roadmap that are intended for the client:
*
Ephemeral IDs -
s
ending messages to users with temporal/ephemeral recipient
*
Ephemeral IDs -
S
ending messages to users with temporal/ephemeral recipient
user identities.
*
User Discovery - A bot that will allow the user to look for others on the
network.
*
Notifications - An optional notifications system which uses firebase
*
Efficiency improvements - mechanisms for message pickup and network tracking
*
will evolve to allow tradeoffs and options for use
We also are always looking at how to simplify and improve the library interface.
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment