Native Go XMPP library
Go to file
2019-07-09 16:59:54 +02:00
_examples Fix XMPP logger consistency 2019-06-29 10:47:07 +02:00
cmd/xmpp-check Fix installation note 2019-06-19 11:43:16 +02:00
stanza Add helpers for IQ DiscoItems 2019-07-09 16:59:54 +02:00
.gitignore Ignore directory where I put private notes 2019-06-18 14:36:56 +02:00
auth.go Refactor and move parsing and stanza to a separate package 2019-06-26 17:14:52 +02:00
backoff_test.go Add constants (enumlike) for stanza types and simplify packet creation (#62) 2019-06-22 11:13:33 +02:00
backoff.go Add constants (enumlike) for stanza types and simplify packet creation (#62) 2019-06-22 11:13:33 +02:00
cert_checker.go Rename check_cert 2019-06-29 09:17:35 +02:00
client_test.go Fix session element parsing on IQ 2019-06-29 17:39:19 +02:00
client.go Fix XMPP logger consistency 2019-06-29 10:47:07 +02:00
CODE_OF_CONDUCT.md Add CoC and contribution guide 2019-01-21 16:24:26 +01:00
codecov.yml Disable Codecov comments on PR 2019-05-31 19:08:20 +02:00
codeship-services.yml Add Codecov support 2018-01-01 18:57:56 +01:00
codeship-steps.yml Workaround Codeship coverage upload report issues 2018-01-02 16:21:45 +01:00
codeship.env.encrypted Add missing codecov token 2018-01-01 18:59:19 +01:00
component_test.go Refactor and move parsing and stanza to a separate package 2019-06-26 17:14:52 +02:00
component.go Refactor and move parsing and stanza to a separate package 2019-06-26 17:14:52 +02:00
config.go Fix XMPP logger consistency 2019-06-29 10:47:07 +02:00
conn_error.go With go modules, we should be able to remove import comments 2019-06-18 16:28:30 +02:00
CONTRIBUTING.md Add CoC and contribution guide 2019-01-21 16:24:26 +01:00
doc.go Add constants (enumlike) for stanza types and simplify packet creation (#62) 2019-06-22 11:13:33 +02:00
Dockerfile Run tests on Golang 1.12 2019-06-04 18:59:34 +02:00
go.mod With go modules, we should be able to remove import comments 2019-06-18 16:28:30 +02:00
go.sum Move examples out of the cmd directory 2019-06-08 11:34:09 +02:00
jid_test.go With go modules, we should be able to remove import comments 2019-06-18 16:28:30 +02:00
jid.go With go modules, we should be able to remove import comments 2019-06-18 16:28:30 +02:00
LICENSE Moving XMPP library to Fluux project 2018-01-01 18:12:33 +01:00
network_test.go Improves IPV6 examples 2019-06-26 14:00:39 +02:00
network.go Adding tests and always use brackets in IPV6 addresses 2019-06-26 12:37:59 +02:00
README.md Start listing supported specifications 2019-06-29 15:15:09 +02:00
router_test.go Refactor and move parsing and stanza to a separate package 2019-06-26 17:14:52 +02:00
router.go Refactor and move parsing and stanza to a separate package 2019-06-26 17:14:52 +02:00
session.go Improves comments 2019-06-29 17:48:38 +02:00
stream_logger.go Fix XMPP logger consistency 2019-06-29 10:47:07 +02:00
stream_manager.go Postconnect method should receive an xmpp.Sender and not directly a client 2019-06-29 09:35:33 +02:00
tcp_server_mock.go With go modules, we should be able to remove import comments 2019-06-18 16:28:30 +02:00
test.sh Add test (and refactor them) for PR#15 (#18) 2019-02-10 17:53:18 +01:00

Fluux XMPP

Codeship Status for FluuxIO/xmpp GoDoc GoReportCard codecov

Fluux XMPP is a Go XMPP library, focusing on simplicity, simple automation, and IoT.

The goal is to make simple to write simple XMPP clients and components:

  • For automation (like for example monitoring of an XMPP service),
  • For building connected "things" by plugging them on an XMPP server,
  • For writing simple chatbot to control a service or a thing.
  • For writing XMPP servers components.

The library is designed to have minimal dependencies. For now, the library does not depend on any other library.

Supported specifications

Clients

Components

Stanza subpackage

XMPP stanzas are basic and extensible XML elements. Stanzas (or sometimes special stanzas called 'nonzas') are used to leverage the XMPP protocol features. During a session, a client (or a component) and a server will be exchanging stanzas back and forth.

At a low-level, stanzas are XML fragments. However, Fluux XMPP library provides the building blocks to interact with stanzas at a high-level, providing a Go-friendly API.

The stanza subpackage provides support for XMPP stream parsing, marshalling and unmarshalling of XMPP stanza. It is a bridge between high-level Go structure and low-level XMPP protocol.

Parsing, marshalling and unmarshalling is automatically handled by Fluux XMPP client library. As a developer, you will generally manipulates only the high-level structs provided by the stanza package.

The XMPP protocol, as the name implies is extensible. If your application is using custom stanza extensions, you can implement your own extensions directly in your own application.

To learn more about the stanza package, you can read more in the stanza package documentation.

Examples

We have several examples to help you get started using Fluux XMPP library.

Here is the demo "echo" client:

package main

import (
	"fmt"
	"log"
	"os"

	"gosrc.io/xmpp"
	"gosrc.io/xmpp/stanza"
)

func main() {
	config := xmpp.Config{
		Address:      "localhost:5222",
		Jid:          "test@localhost",
		Password:     "test",
		StreamLogger: os.Stdout,
		Insecure:     true,
	}

	router := xmpp.NewRouter()
	router.HandleFunc("message", handleMessage)

	client, err := xmpp.NewClient(config, router)
	if err != nil {
		log.Fatalf("%+v", err)
	}

	// If you pass the client to a connection manager, it will handle the reconnect policy
	// for you automatically.
	cm := xmpp.NewStreamManager(client, nil)
	log.Fatal(cm.Run())
}

func handleMessage(s xmpp.Sender, p stanza.Packet) {
	msg, ok := p.(stanza.Message)
	if !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}
	_ = s.Send(reply)
}

Reference documentation

The code documentation is available on GoDoc: gosrc.io/xmpp