diff --git a/.drone.yml b/.drone.yml index 6548396..dbe1d14 100644 --- a/.drone.yml +++ b/.drone.yml @@ -15,8 +15,7 @@ pipeline: image: golang commands: - go list ./... | xargs go vet - #-set_exit_status too many lint fails for :( - - go list ./... | grep -v "/wire/" | grep -v "/examples/" | grep -v "/application" | xargs golint -set_exit_status + - go list ./... | grep -v "/wire/" | grep -v "/examples/" | xargs golint -set_exit_status units-tests: image: golang commands: diff --git a/application/application.go b/application/application.go index 08753cd..2c58860 100644 --- a/application/application.go +++ b/application/application.go @@ -23,13 +23,13 @@ type RicochetApplication struct { name string ls connectivity.ListenService acn connectivity.ACN - instances []*ApplicationInstance + instances []*Instance lock sync.Mutex - aif ApplicationInstanceFactory + aif InstanceFactory } // 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.name = name ra.v3identity = v3identity @@ -74,15 +74,15 @@ func (ra *RicochetApplication) handleConnection(conn net.Conn) { ra.lock.Unlock() } -// HandleApplicationInstance delegates handling of a given ApplicationInstance to the Application. -func (ra *RicochetApplication) HandleApplicationInstance(rai *ApplicationInstance) { +// HandleApplicationInstance delegates handling of a given Instance to the Application. +func (ra *RicochetApplication) HandleApplicationInstance(rai *Instance) { ra.lock.Lock() ra.instances = append(ra.instances, rai) ra.lock.Unlock() } // 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) if err != nil { 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) -func (ra *RicochetApplication) Broadcast(do func(rai *ApplicationInstance)) { +func (ra *RicochetApplication) Broadcast(do func(rai *Instance)) { ra.lock.Lock() for _, rai := range ra.instances { do(rai) @@ -123,6 +123,7 @@ func (ra *RicochetApplication) Shutdown() { ra.lock.Unlock() } +// Close kills a connection by a given Onion Address func (ra *RicochetApplication) Close(onion string) { ra.lock.Lock() for _, instance := range ra.instances { diff --git a/application/application_factory.go b/application/application_factory.go index b688b7e..8fdc3d8 100644 --- a/application/application_factory.go +++ b/application/application_factory.go @@ -5,30 +5,30 @@ import ( "git.openprivacy.ca/openprivacy/libricochet-go/connection" ) -// ApplicationInstance is a concrete instance of a ricochet application, encapsulating a connection -type ApplicationInstance struct { +// Instance is a concrete instance of a ricochet application, encapsulating a connection +type Instance struct { connection.AutoConnectionHandler Connection *connection.Connection RemoteHostname string } -// ApplicationInstanceFactory generates ApplicationInstances on a specific connection. -type ApplicationInstanceFactory struct { - handlerMap map[string]func(*ApplicationInstance) func() channels.Handler +// InstanceFactory generates ApplicationInstances on a specific connection. +type InstanceFactory struct { + handlerMap map[string]func(*Instance) func() channels.Handler } // Init sets up an Application Factory -func (af *ApplicationInstanceFactory) Init() { - af.handlerMap = make(map[string]func(*ApplicationInstance) func() channels.Handler) +func (af *InstanceFactory) Init() { + af.handlerMap = make(map[string]func(*Instance) func() channels.Handler) } // 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 } // GetHandlers returns all handlers -func (af *ApplicationInstanceFactory) GetHandlers() []string { +func (af *InstanceFactory) GetHandlers() []string { keys := make([]string, len(af.handlerMap)) i := 0 @@ -41,13 +41,13 @@ func (af *ApplicationInstanceFactory) GetHandlers() []string { } // 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] } // GetApplicationInstance builds a new application instance using a connection as a base. -func (af *ApplicationInstanceFactory) GetApplicationInstance(rc *connection.Connection) *ApplicationInstance { - rai := new(ApplicationInstance) +func (af *InstanceFactory) GetApplicationInstance(rc *connection.Connection) *Instance { + rai := new(Instance) rai.Init() rai.RemoteHostname = rc.RemoteHostname rai.Connection = rc diff --git a/application/examples/echobot/main.go b/application/examples/echobot/main.go index 4bbabf5..f96b0d3 100644 --- a/application/examples/echobot/main.go +++ b/application/examples/echobot/main.go @@ -16,11 +16,11 @@ import ( ) type EchoBotInstance struct { - rai *application.ApplicationInstance + rai *application.Instance 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.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 { channel := ebi.rai.Connection.Channel("im.ricochet.chat", channels.Outbound) if channel != nil { @@ -87,9 +87,9 @@ func main() { os.Exit(1) } - af := application.ApplicationInstanceFactory{} + af := application.InstanceFactory{} 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.Init(rai, echobot) return func() channels.Handler { diff --git a/testing/integration_test.go b/testing/integration_test.go index 56f83d9..da93432 100644 --- a/testing/integration_test.go +++ b/testing/integration_test.go @@ -47,7 +47,7 @@ func (messages *Messages) Get() []Message { type ChatEchoBot struct { onion string - rai *application.ApplicationInstance + rai *application.Instance n int Messages MessageStack } @@ -75,7 +75,7 @@ func (bot *ChatEchoBot) ChatMessage(messageID uint32, when time.Time, message st 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) rai.Connection.Do(func() error { @@ -114,10 +114,10 @@ func TestApplicationIntegration(t *testing.T) { messageStack.Init() fmt.Println("Initializing application factory...") - af := application.ApplicationInstanceFactory{} + af := application.InstanceFactory{} 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 { contact := new(channels.ContactRequestChannel) contact.Handler = new(application.AcceptAllContactHandler) @@ -137,7 +137,7 @@ func TestApplicationIntegration(t *testing.T) { } 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 { chat := new(channels.ChatChannel) chat.Handler = &ChatEchoBot{rai: rai, n: 0, Messages: messageStack, onion: aliceAddr} @@ -157,7 +157,7 @@ func TestApplicationIntegration(t *testing.T) { bobAddr := utils.GetTorV3Hostname(bpubk) fmt.Println("Seting up bob's onion " + bobAddr + "...") 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 { chat := new(channels.ChatChannel) chat.Handler = &ChatEchoBot{rai: rai, n: 0, Messages: messageStack, onion: bobAddr} diff --git a/testing/quality.sh b/testing/quality.sh index 3539a18..bc9bb13 100755 --- a/testing/quality.sh +++ b/testing/quality.sh @@ -14,4 +14,4 @@ echo "Linting:" # Ignore wire packages as they are autogenerated # Ignore examples as they are illustrative # TODO Consider Renaming ApplicationInstance and ApplicationInstanceFactory to remove the last grep -go list ./... | grep -v "/wire/" | grep -v "/examples/" | grep -v "/application" | xargs golint \ No newline at end of file +go list ./... | grep -v "/wire/" | grep -v "/examples/" | xargs golint \ No newline at end of file