Merge branch 'v1' of openprivacy/libricochet-go into master

<3
This commit is contained in:
Dan Ballard 2019-01-23 01:19:46 +00:00 committed by Gogs
commit 487b1e9ae0
6 changed files with 33 additions and 33 deletions

View File

@ -15,8 +15,7 @@ pipeline:
image: golang image: golang
commands: commands:
- go list ./... | xargs go vet - go list ./... | xargs go vet
#-set_exit_status too many lint fails for :( - go list ./... | grep -v "/wire/" | grep -v "/examples/" | xargs golint -set_exit_status
- go list ./... | grep -v "/wire/" | grep -v "/examples/" | grep -v "/application" | xargs golint -set_exit_status
units-tests: units-tests:
image: golang image: golang
commands: commands:

View File

@ -23,13 +23,13 @@ type RicochetApplication struct {
name string name string
ls connectivity.ListenService ls connectivity.ListenService
acn connectivity.ACN acn connectivity.ACN
instances []*ApplicationInstance instances []*Instance
lock sync.Mutex lock sync.Mutex
aif ApplicationInstanceFactory aif InstanceFactory
} }
// Init initializes the underlying RicochetApplication datastructure, making it ready for use // Init initializes the underlying RicochetApplication datastructure, making it ready for use
func (ra *RicochetApplication) Init(acn connectivity.ACN, name string, v3identity identity.Identity, af ApplicationInstanceFactory, cm ContactManagerInterface) { func (ra *RicochetApplication) Init(acn connectivity.ACN, name string, v3identity identity.Identity, af InstanceFactory, cm ContactManagerInterface) {
ra.acn = acn ra.acn = acn
ra.name = name ra.name = name
ra.v3identity = v3identity ra.v3identity = v3identity
@ -74,15 +74,15 @@ func (ra *RicochetApplication) handleConnection(conn net.Conn) {
ra.lock.Unlock() ra.lock.Unlock()
} }
// HandleApplicationInstance delegates handling of a given ApplicationInstance to the Application. // HandleApplicationInstance delegates handling of a given Instance to the Application.
func (ra *RicochetApplication) HandleApplicationInstance(rai *ApplicationInstance) { func (ra *RicochetApplication) HandleApplicationInstance(rai *Instance) {
ra.lock.Lock() ra.lock.Lock()
ra.instances = append(ra.instances, rai) ra.instances = append(ra.instances, rai)
ra.lock.Unlock() ra.lock.Unlock()
} }
// Open a connection to another Ricochet peer at onionAddress. Infof they are unknown to use, use requestMessage (otherwise can be blank) // Open a connection to another Ricochet peer at onionAddress. Infof they are unknown to use, use requestMessage (otherwise can be blank)
func (ra *RicochetApplication) Open(onionAddress string, requestMessage string) (*ApplicationInstance, error) { func (ra *RicochetApplication) Open(onionAddress string, requestMessage string) (*Instance, error) {
rc, err := goricochet.Open(ra.acn, onionAddress) rc, err := goricochet.Open(ra.acn, onionAddress)
if err != nil { if err != nil {
log.Errorf("Error in application.Open(): %v\n", err) log.Errorf("Error in application.Open(): %v\n", err)
@ -105,7 +105,7 @@ func (ra *RicochetApplication) Open(onionAddress string, requestMessage string)
} }
// Broadcast performs the given function do() over all application instance (all connected peers) // Broadcast performs the given function do() over all application instance (all connected peers)
func (ra *RicochetApplication) Broadcast(do func(rai *ApplicationInstance)) { func (ra *RicochetApplication) Broadcast(do func(rai *Instance)) {
ra.lock.Lock() ra.lock.Lock()
for _, rai := range ra.instances { for _, rai := range ra.instances {
do(rai) do(rai)
@ -123,6 +123,7 @@ func (ra *RicochetApplication) Shutdown() {
ra.lock.Unlock() ra.lock.Unlock()
} }
// Close kills a connection by a given Onion Address
func (ra *RicochetApplication) Close(onion string) { func (ra *RicochetApplication) Close(onion string) {
ra.lock.Lock() ra.lock.Lock()
for _, instance := range ra.instances { for _, instance := range ra.instances {

View File

@ -5,30 +5,30 @@ import (
"git.openprivacy.ca/openprivacy/libricochet-go/connection" "git.openprivacy.ca/openprivacy/libricochet-go/connection"
) )
// ApplicationInstance is a concrete instance of a ricochet application, encapsulating a connection // Instance is a concrete instance of a ricochet application, encapsulating a connection
type ApplicationInstance struct { type Instance struct {
connection.AutoConnectionHandler connection.AutoConnectionHandler
Connection *connection.Connection Connection *connection.Connection
RemoteHostname string RemoteHostname string
} }
// ApplicationInstanceFactory generates ApplicationInstances on a specific connection. // InstanceFactory generates ApplicationInstances on a specific connection.
type ApplicationInstanceFactory struct { type InstanceFactory struct {
handlerMap map[string]func(*ApplicationInstance) func() channels.Handler handlerMap map[string]func(*Instance) func() channels.Handler
} }
// Init sets up an Application Factory // Init sets up an Application Factory
func (af *ApplicationInstanceFactory) Init() { func (af *InstanceFactory) Init() {
af.handlerMap = make(map[string]func(*ApplicationInstance) func() channels.Handler) af.handlerMap = make(map[string]func(*Instance) func() channels.Handler)
} }
// AddHandler defines a channel type -> handler construct function // AddHandler defines a channel type -> handler construct function
func (af *ApplicationInstanceFactory) AddHandler(ctype string, chandler func(*ApplicationInstance) func() channels.Handler) { func (af *InstanceFactory) AddHandler(ctype string, chandler func(*Instance) func() channels.Handler) {
af.handlerMap[ctype] = chandler af.handlerMap[ctype] = chandler
} }
// GetHandlers returns all handlers // GetHandlers returns all handlers
func (af *ApplicationInstanceFactory) GetHandlers() []string { func (af *InstanceFactory) GetHandlers() []string {
keys := make([]string, len(af.handlerMap)) keys := make([]string, len(af.handlerMap))
i := 0 i := 0
@ -41,13 +41,13 @@ func (af *ApplicationInstanceFactory) GetHandlers() []string {
} }
// GetHandler returns a set handler for the channel type. // GetHandler returns a set handler for the channel type.
func (af *ApplicationInstanceFactory) GetHandler(ctype string) func(*ApplicationInstance) func() channels.Handler { func (af *InstanceFactory) GetHandler(ctype string) func(*Instance) func() channels.Handler {
return af.handlerMap[ctype] return af.handlerMap[ctype]
} }
// GetApplicationInstance builds a new application instance using a connection as a base. // GetApplicationInstance builds a new application instance using a connection as a base.
func (af *ApplicationInstanceFactory) GetApplicationInstance(rc *connection.Connection) *ApplicationInstance { func (af *InstanceFactory) GetApplicationInstance(rc *connection.Connection) *Instance {
rai := new(ApplicationInstance) rai := new(Instance)
rai.Init() rai.Init()
rai.RemoteHostname = rc.RemoteHostname rai.RemoteHostname = rc.RemoteHostname
rai.Connection = rc rai.Connection = rc

View File

@ -16,11 +16,11 @@ import (
) )
type EchoBotInstance struct { type EchoBotInstance struct {
rai *application.ApplicationInstance rai *application.Instance
ra *application.RicochetApplication ra *application.RicochetApplication
} }
func (ebi *EchoBotInstance) Init(rai *application.ApplicationInstance, ra *application.RicochetApplication) { func (ebi *EchoBotInstance) Init(rai *application.Instance, ra *application.RicochetApplication) {
ebi.rai = rai ebi.rai = rai
ebi.ra = ra ebi.ra = ra
} }
@ -50,7 +50,7 @@ func (ebi *EchoBotInstance) ChatMessageAck(messageID uint32, accepted bool) {
} }
func (ebi *EchoBotInstance) SendChatMessage(rai *application.ApplicationInstance, message string) { func (ebi *EchoBotInstance) SendChatMessage(rai *application.Instance, message string) {
ebi.rai.Connection.Do(func() error { ebi.rai.Connection.Do(func() error {
channel := ebi.rai.Connection.Channel("im.ricochet.chat", channels.Outbound) channel := ebi.rai.Connection.Channel("im.ricochet.chat", channels.Outbound)
if channel != nil { if channel != nil {
@ -87,9 +87,9 @@ func main() {
os.Exit(1) os.Exit(1)
} }
af := application.ApplicationInstanceFactory{} af := application.InstanceFactory{}
af.Init() af.Init()
af.AddHandler("im.ricochet.chat", func(rai *application.ApplicationInstance) func() channels.Handler { af.AddHandler("im.ricochet.chat", func(rai *application.Instance) func() channels.Handler {
ebi := new(EchoBotInstance) ebi := new(EchoBotInstance)
ebi.Init(rai, echobot) ebi.Init(rai, echobot)
return func() channels.Handler { return func() channels.Handler {

View File

@ -47,7 +47,7 @@ func (messages *Messages) Get() []Message {
type ChatEchoBot struct { type ChatEchoBot struct {
onion string onion string
rai *application.ApplicationInstance rai *application.Instance
n int n int
Messages MessageStack Messages MessageStack
} }
@ -75,7 +75,7 @@ func (bot *ChatEchoBot) ChatMessage(messageID uint32, when time.Time, message st
return true return true
} }
func SendMessage(rai *application.ApplicationInstance, message string) { func SendMessage(rai *application.Instance, message string) {
log.Infof("SendMessage(to: %v, %v)\n", rai.RemoteHostname, message) log.Infof("SendMessage(to: %v, %v)\n", rai.RemoteHostname, message)
rai.Connection.Do(func() error { rai.Connection.Do(func() error {
@ -114,10 +114,10 @@ func TestApplicationIntegration(t *testing.T) {
messageStack.Init() messageStack.Init()
fmt.Println("Initializing application factory...") fmt.Println("Initializing application factory...")
af := application.ApplicationInstanceFactory{} af := application.InstanceFactory{}
af.Init() af.Init()
af.AddHandler("im.ricochet.contact.request", func(rai *application.ApplicationInstance) func() channels.Handler { af.AddHandler("im.ricochet.contact.request", func(rai *application.Instance) func() channels.Handler {
return func() channels.Handler { return func() channels.Handler {
contact := new(channels.ContactRequestChannel) contact := new(channels.ContactRequestChannel)
contact.Handler = new(application.AcceptAllContactHandler) contact.Handler = new(application.AcceptAllContactHandler)
@ -137,7 +137,7 @@ func TestApplicationIntegration(t *testing.T) {
} }
fmt.Println("Initializing alice...") fmt.Println("Initializing alice...")
af.AddHandler("im.ricochet.chat", func(rai *application.ApplicationInstance) func() channels.Handler { af.AddHandler("im.ricochet.chat", func(rai *application.Instance) func() channels.Handler {
return func() channels.Handler { return func() channels.Handler {
chat := new(channels.ChatChannel) chat := new(channels.ChatChannel)
chat.Handler = &ChatEchoBot{rai: rai, n: 0, Messages: messageStack, onion: aliceAddr} chat.Handler = &ChatEchoBot{rai: rai, n: 0, Messages: messageStack, onion: aliceAddr}
@ -157,7 +157,7 @@ func TestApplicationIntegration(t *testing.T) {
bobAddr := utils.GetTorV3Hostname(bpubk) bobAddr := utils.GetTorV3Hostname(bpubk)
fmt.Println("Seting up bob's onion " + bobAddr + "...") fmt.Println("Seting up bob's onion " + bobAddr + "...")
bl, _ := acn.Listen(bpk, application.RicochetPort) bl, _ := acn.Listen(bpk, application.RicochetPort)
af.AddHandler("im.ricochet.chat", func(rai *application.ApplicationInstance) func() channels.Handler { af.AddHandler("im.ricochet.chat", func(rai *application.Instance) func() channels.Handler {
return func() channels.Handler { return func() channels.Handler {
chat := new(channels.ChatChannel) chat := new(channels.ChatChannel)
chat.Handler = &ChatEchoBot{rai: rai, n: 0, Messages: messageStack, onion: bobAddr} chat.Handler = &ChatEchoBot{rai: rai, n: 0, Messages: messageStack, onion: bobAddr}

View File

@ -14,4 +14,4 @@ echo "Linting:"
# Ignore wire packages as they are autogenerated # Ignore wire packages as they are autogenerated
# Ignore examples as they are illustrative # Ignore examples as they are illustrative
# TODO Consider Renaming ApplicationInstance and ApplicationInstanceFactory to remove the last grep # TODO Consider Renaming ApplicationInstance and ApplicationInstanceFactory to remove the last grep
go list ./... | grep -v "/wire/" | grep -v "/examples/" | grep -v "/application" | xargs golint go list ./... | grep -v "/wire/" | grep -v "/examples/" | xargs golint