package main import ( "crypto/tls" "fmt" "log" "os" "time" appConfig "github.com/xmpploadtesting/config" "gosrc.io/xmpp" "gosrc.io/xmpp/stanza" ) func main() { var client *xmpp.Client var err error // LOAD APPLICATION CONFIGURATION appConfig.Load() // Setup xmpp config config := &xmpp.Config{ TransportConfiguration: xmpp.TransportConfiguration{ Address: appConfig.AppConfig.Service.Address + ":" + appConfig.AppConfig.Service.Port, Domain: appConfig.AppConfig.Service.Domain, TLSConfig: &tls.Config{InsecureSkipVerify: true}, }, Jid: "admin@localhost", Credential: xmpp.Password("openadmin123"), StreamLogger: os.Stdout, Insecure: true, } // Setup xmpp router router := xmpp.NewRouter() router.HandleFunc("message", handleMessage) log.Printf("Adding message") // Setup new xmpp client if client, err = xmpp.NewClient(config, router, errorHandler); err != nil { log.Panicln(fmt.Sprintf("Could not create a new client ! %s", err)) } // Client connection if err := client.Connect(); err != nil { msg := fmt.Sprintf("XMPP connection failed: %v", err) fmt.Printf("Failed to connect to server. Exiting... %v", msg) return } onlinePresencePacket := stanza.NewPresence(stanza.Attrs{From: config.Jid, Type: stanza.StanzaType(stanza.PresenceShowAway)}) // Send onlinePresence packet indefiletly delayed by DelayBetweenMeassges from configuration for { err = client.Send(onlinePresencePacket) log.Printf("Sending online presence stanza: %v", err) // Delay before sending another message time.Sleep(time.Duration(appConfig.AppConfig.GeneralOptions.DelayBetweenMassages)) } } func handleMessage(s xmpp.Sender, p stanza.Packet) { log.Printf("Handle message") msg, ok := p.(stanza.Message) if !ok { log.Printf(" message not OK") _, _ = fmt.Fprintf(os.Stdout, "Ignoring packet: %T\n", p) return } _, _ = fmt.Fprintf(os.Stdout, "Body = %s - from = %s\n", msg.Body, msg.From) reply := stanza.Message{Attrs: stanza.Attrs{To: msg.From}, Body: msg.Body} err := s.Send(reply) log.Printf("Error sending message %v", err) } func errorHandler(err error) { fmt.Println(err.Error()) }