You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Mickael Remond 838c059398
Remove Bind in the payload list, as it is intended to be used by XMPP client and not by users of the library.
5 years ago
_examples Fix XMPP logger consistency 5 years ago
cmd/xmpp-check Fix installation note 5 years ago
stanza Remove Bind in the payload list, as it is intended to be used by XMPP client and not by users of the library. 5 years ago
.gitignore Ignore directory where I put private notes 5 years ago
CODE_OF_CONDUCT.md Add CoC and contribution guide 5 years ago
CONTRIBUTING.md Add CoC and contribution guide 5 years ago
Dockerfile Run tests on Golang 1.12 5 years ago
LICENSE Moving XMPP library to Fluux project 6 years ago
README.md Start listing supported specifications 5 years ago
auth.go Refactor and move parsing and stanza to a separate package 5 years ago
backoff.go Add constants (enumlike) for stanza types and simplify packet creation (#62) 5 years ago
backoff_test.go Add constants (enumlike) for stanza types and simplify packet creation (#62) 5 years ago
cert_checker.go Rename check_cert 5 years ago
client.go Fix XMPP logger consistency 5 years ago
client_test.go Refactor and move parsing and stanza to a separate package 5 years ago
codecov.yml Disable Codecov comments on PR 5 years ago
codeship-services.yml Add Codecov support 6 years ago
codeship-steps.yml Workaround Codeship coverage upload report issues 6 years ago
codeship.env.encrypted Add missing codecov token 6 years ago
component.go Refactor and move parsing and stanza to a separate package 5 years ago
component_test.go Refactor and move parsing and stanza to a separate package 5 years ago
config.go Fix XMPP logger consistency 5 years ago
conn_error.go With go modules, we should be able to remove import comments 5 years ago
doc.go Add constants (enumlike) for stanza types and simplify packet creation (#62) 5 years ago
go.mod With go modules, we should be able to remove import comments 5 years ago
go.sum Move examples out of the cmd directory 5 years ago
jid.go With go modules, we should be able to remove import comments 5 years ago
jid_test.go With go modules, we should be able to remove import comments 5 years ago
network.go Adding tests and always use brackets in IPV6 addresses 5 years ago
network_test.go Improves IPV6 examples 5 years ago
router.go Refactor and move parsing and stanza to a separate package 5 years ago
router_test.go Refactor and move parsing and stanza to a separate package 5 years ago
session.go Fix XMPP logger consistency 5 years ago
stream_logger.go Fix XMPP logger consistency 5 years ago
stream_manager.go Postconnect method should receive an xmpp.Sender and not directly a client 5 years ago
tcp_server_mock.go With go modules, we should be able to remove import comments 5 years ago
test.sh Add test (and refactor them) for PR#15 (#18) 5 years ago

README.md

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