xmpp

package module
v0.0.0-...-7948d1a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 27, 2019 License: BSD-3-Clause Imports: 20 Imported by: 0

README

go-xmpp

go xmpp library (original was written by russ cox )

Documentation

Documentation

Overview

Package xmpp implements a simple Google Talk client using the XMPP protocol described in RFC 3920 and RFC 3921.

TODO(flo):

  • support password protected MUC rooms
  • cleanup signatures of join/leave functions

Index

Constants

View Source
const (
	NsStream  = "http://etherx.jabber.org/streams"
	NsTLS     = "urn:ietf:params:xml:ns:xmpp-tls"
	NsSASL    = "urn:ietf:params:xml:ns:xmpp-sasl"
	NsBind    = "urn:ietf:params:xml:ns:xmpp-bind"
	NsClient  = "jabber:client"
	NsSession = "urn:ietf:params:xml:ns:xmpp-session"
)
View Source
const (
	NoHistory      = 0
	CharHistory    = 1
	StanzaHistory  = 2
	SecondsHistory = 3
	SinceHistory   = 4
)
View Source
const IQTypeGet = "get"
View Source
const IQTypeResult = "result"
View Source
const IQTypeSet = "set"

Variables

View Source
var DebugWriter io.Writer = os.Stderr

DebugWriter is the writer used to write debugging output to.

View Source
var DefaultConfig tls.Config

Default TLS configuration options

Functions

This section is empty.

Types

type AnonymousMechanism

type AnonymousMechanism struct{}

func (*AnonymousMechanism) DoAuth

func (anon *AnonymousMechanism) DoAuth(p *xml.Decoder, conn net.Conn) error

func (*AnonymousMechanism) Name

func (anon *AnonymousMechanism) Name() string

type Chat

type Chat struct {
	Remote    string
	Type      string
	Text      string
	Subject   string
	Thread    string
	Roster    Roster
	Other     []string
	OtherElem []XMLElement
	Stamp     time.Time
}

Chat is an incoming or outgoing XMPP chat message.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client holds XMPP connection opitons

func NewClient

func NewClient(host, vhost, user, passwd string, debug bool) (*Client, error)

NewClient creates a new connection to a host given as "hostname" or "hostname:port". Default the port to 5222.

func NewClientNoTLS

func NewClientNoTLS(host, vhost, user, passwd string, debug bool) (*Client, error)

NewClientNoTLS creates a new client without TLS

func (*Client) ApproveSubscription

func (c *Client) ApproveSubscription(jid string)

func (*Client) Close

func (c *Client) Close() error

Close closes the XMPP connection

func (*Client) Discovery

func (c *Client) Discovery() (string, error)

func (*Client) IsEncrypted

func (c *Client) IsEncrypted() bool

IsEncrypted will return true if the client is connected using a TLS transport, either because it used. TLS to connect from the outset, or because it successfully used STARTTLS to promote a TCP connection to TLS.

func (*Client) JID

func (c *Client) JID() string

func (*Client) JoinMUC

func (c *Client) JoinMUC(jid, nick string, history_type, history int, history_date *time.Time) (n int, err error)

xep-0045 7.2

func (*Client) JoinMUCNoHistory

func (c *Client) JoinMUCNoHistory(jid, nick string) (n int, err error)

func (*Client) JoinProtectedMUC

func (c *Client) JoinProtectedMUC(jid, nick string, password string, history_type, history int, history_date *time.Time) (n int, err error)

xep-0045 7.2.6

func (*Client) LeaveMUC

func (c *Client) LeaveMUC(jid string) (n int, err error)

xep-0045 7.14

func (*Client) PingC2S

func (c *Client) PingC2S(jid, server string) error

func (*Client) PingS2S

func (c *Client) PingS2S(fromServer, toServer string) error

func (*Client) RawInformation

func (c *Client) RawInformation(from, to, id, iqType, body string) (string, error)

rawInformation send a IQ request with the the payload body to the server

func (*Client) RawInformationQuery

func (c *Client) RawInformationQuery(from, to, id, iqType, requestNamespace, body string) (string, error)

RawInformationQuery sends an information query request to the server.

func (*Client) Recv

func (c *Client) Recv() (stanza interface{}, err error)

Recv waits to receive the next XMPP stanza. Return type is either a presence notification or a chat message.

func (*Client) RequestSubscription

func (c *Client) RequestSubscription(jid string)

func (*Client) RevokeSubscription

func (c *Client) RevokeSubscription(jid string)

func (*Client) Roster

func (c *Client) Roster() error

Roster asks for the chat roster.

func (*Client) Send

func (c *Client) Send(chat Chat) (n int, err error)

Send sends the message wrapped inside an XMPP message stanza body.

func (*Client) SendHtml

func (c *Client) SendHtml(chat Chat) (n int, err error)

SendHtml sends the message as HTML as defined by XEP-0071

func (*Client) SendIQ

func (c *Client) SendIQ(iq IQ) (n int, err error)

func (*Client) SendKeepAlive

func (c *Client) SendKeepAlive() (n int, err error)

SendKeepAlive sends a "whitespace keepalive" as described in chapter 4.6.1 of RFC6120.

func (*Client) SendOrg

func (c *Client) SendOrg(org string) (n int, err error)

SendOrg sends the original text without being wrapped in an XMPP message stanza.

func (*Client) SendPresence

func (c *Client) SendPresence(presence Presence) (n int, err error)

func (*Client) SendResultPing

func (c *Client) SendResultPing(id, toServer string) error

func (*Client) SendTopic

func (c *Client) SendTopic(chat Chat) (n int, err error)

Send sends room topic wrapped inside an XMPP message stanza body.

type Contact

type Contact struct {
	Remote string
	Name   string
	Group  []string
}
type Cookie uint64

Cookie is a unique XMPP session identifier

type Delay

type Delay struct {
	Stamp string `xml:"stamp,attr"`
}

type IQ

type IQ struct {
	XMLName xml.Name `xml:"iq"`
	XmlNs   string   `xml:"xml_ns,attr,omitempty"`
	ID      string   `xml:"id,attr"`
	From    string   `xml:"from,attr"`
	To      string   `xml:"to,attr"`
	Type    string   `xml:"type,attr"`
	Query   []byte   `xml:",innerxml"`
}

func NewIQ

func NewIQ(from string, to string, iqType string, inner []byte) IQ

type MD5DigestMechanism

type MD5DigestMechanism struct {
	// contains filtered or unexported fields
}

func (*MD5DigestMechanism) DoAuth

func (md *MD5DigestMechanism) DoAuth(p *xml.Decoder, conn net.Conn) error

func (*MD5DigestMechanism) Name

func (md *MD5DigestMechanism) Name() string

type Mechanism

type Mechanism interface {
	Name() string
	DoAuth(*xml.Decoder, net.Conn) error
}

type OAuthMechanism

type OAuthMechanism struct {
	// contains filtered or unexported fields
}

func (*OAuthMechanism) DoAuth

func (o *OAuthMechanism) DoAuth(_ *xml.Decoder, conn net.Conn) error

func (*OAuthMechanism) Name

func (o *OAuthMechanism) Name() string

type Options

type Options struct {
	// Host specifies what host to connect to, as either "hostname" or "hostname:port"
	// Default the port to 5222.
	Host string

	Domain string

	// Available Auth Mechanisms
	AuthMechanisms []Mechanism

	// Resource specifies an XMPP client resource, like "bot", instead of accepting one
	// from the server.  Use "" to let the server generate one for your client.
	Resource string

	// OAuthScope provides go-xmpp the required scope for OAuth2 authentication.
	OAuthScope string

	// OAuthToken provides go-xmpp with the required OAuth2 token used to authenticate
	OAuthToken string

	// OAuthXmlNs provides go-xmpp with the required namespaced used for OAuth2 authentication.  This is
	// provided to the server as the xmlns:auth attribute of the OAuth2 authentication request.
	OAuthXmlNs string

	// TLS Config
	TLSConfig *tls.Config

	// InsecureAllowUnencryptedAuth permits authentication over a TCP connection that has not been promoted to
	// TLS by STARTTLS; this could leak authentication information over the network, or permit man in the middle
	// attacks.
	InsecureAllowUnencryptedAuth bool

	// NoTLS directs go-xmpp to not use TLS initially to contact the server; instead, a plain old unencrypted
	// TCP connection should be used. (Can be combined with StartTLS to support STARTTLS-based servers.)
	NoTLS bool

	// StartTLS directs go-xmpp to STARTTLS if the server supports it; go-xmpp will automatically STARTTLS
	// if the server requires it regardless of this option.
	StartTLS bool

	// Debug output
	Debug bool

	// Use server sessions
	Session bool

	// Presence Status
	Status string

	// Status message
	StatusMessage string
}

Options are used to specify additional options for new clients, such as a Resource.

func (Options) NewClient

func (o Options) NewClient() (*Client, error)

NewClient establishes a new Client connection based on a set of Options.

type PlainMechanism

type PlainMechanism struct {
	// contains filtered or unexported fields
}

func NewPlainMechanism

func NewPlainMechanism(user, pass string) PlainMechanism

func (*PlainMechanism) DoAuth

func (p *PlainMechanism) DoAuth(_ *xml.Decoder, conn net.Conn) error

func (*PlainMechanism) Name

func (p *PlainMechanism) Name() string

type Presence

type Presence struct {
	From   string
	To     string
	Type   string
	Show   string
	Status string
}

Presence is an XMPP presence notification.

type Roster

type Roster []Contact

type XMLElement

type XMLElement struct {
	XMLName  xml.Name
	InnerXML string `xml:",innerxml"`
}

func (*XMLElement) String

func (e *XMLElement) String() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL