forked from jshiffer/go-xmpp
Rename Options to Config
This commit is contained in:
parent
1c3aaad174
commit
fa5590e921
26
client.go
26
client.go
@ -14,7 +14,7 @@ import (
|
|||||||
// server.
|
// server.
|
||||||
type Client struct {
|
type Client struct {
|
||||||
// Store user defined options
|
// Store user defined options
|
||||||
options Options
|
config Config
|
||||||
// Session gather data that can be accessed by users of this library
|
// Session gather data that can be accessed by users of this library
|
||||||
Session *Session
|
Session *Session
|
||||||
// TCP level connection / can be replaced by a TLS session after starttls
|
// TCP level connection / can be replaced by a TLS session after starttls
|
||||||
@ -25,31 +25,31 @@ type Client struct {
|
|||||||
Setting up the client / Checking the parameters
|
Setting up the client / Checking the parameters
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// NewClient generates a new XMPP client, based on Options passed as parameters.
|
// NewClient generates a new XMPP client, based on Config passed as parameters.
|
||||||
// If host is not specified, the DNS SRV should be used to find the host from the domainpart of the JID.
|
// If host is not specified, the DNS SRV should be used to find the host from the domainpart of the JID.
|
||||||
// Default the port to 5222.
|
// Default the port to 5222.
|
||||||
// TODO: better options checks
|
// TODO: better config checks
|
||||||
func NewClient(options Options) (c *Client, err error) {
|
func NewClient(config Config) (c *Client, err error) {
|
||||||
// TODO: If option address is nil, use the Jid domain to compose the address
|
// TODO: If option address is nil, use the Jid domain to compose the address
|
||||||
if options.Address, err = checkAddress(options.Address); err != nil {
|
if config.Address, err = checkAddress(config.Address); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if options.Password == "" {
|
if config.Password == "" {
|
||||||
err = errors.New("missing password")
|
err = errors.New("missing password")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c = new(Client)
|
c = new(Client)
|
||||||
c.options = options
|
c.config = config
|
||||||
|
|
||||||
// Parse JID
|
// Parse JID
|
||||||
if c.options.parsedJid, err = NewJid(c.options.Jid); err != nil {
|
if c.config.parsedJid, err = NewJid(c.config.Jid); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.options.ConnectTimeout == 0 {
|
if c.config.ConnectTimeout == 0 {
|
||||||
c.options.ConnectTimeout = 15 // 15 second as default
|
c.config.ConnectTimeout = 15 // 15 second as default
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -80,8 +80,8 @@ func (c *Client) Connect() (*Session, error) {
|
|||||||
// TODO: Refactor = abstract retry loop in capped exponential back-off function
|
// TODO: Refactor = abstract retry loop in capped exponential back-off function
|
||||||
var try = 0
|
var try = 0
|
||||||
var success bool
|
var success bool
|
||||||
for try <= c.options.Retry || !success {
|
for try <= c.config.Retry || !success {
|
||||||
if tcpconn, err = net.DialTimeout("tcp", c.options.Address, time.Duration(c.options.ConnectTimeout)*time.Second); err == nil {
|
if tcpconn, err = net.DialTimeout("tcp", c.config.Address, time.Duration(c.config.ConnectTimeout)*time.Second); err == nil {
|
||||||
success = true
|
success = true
|
||||||
}
|
}
|
||||||
try++
|
try++
|
||||||
@ -92,7 +92,7 @@ func (c *Client) Connect() (*Session, error) {
|
|||||||
|
|
||||||
// Connection is ok, we now open XMPP session
|
// Connection is ok, we now open XMPP session
|
||||||
c.conn = tcpconn
|
c.conn = tcpconn
|
||||||
if c.conn, c.Session, err = NewSession(c.conn, c.options); err != nil {
|
if c.conn, c.Session, err = NewSession(c.conn, c.config); err != nil {
|
||||||
return c.Session, err
|
return c.Session, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,11 +23,11 @@ func TestClient_Connect(t *testing.T) {
|
|||||||
mock.Start(t, testXMPPAddress, handlerConnectSuccess)
|
mock.Start(t, testXMPPAddress, handlerConnectSuccess)
|
||||||
|
|
||||||
// Test / Check result
|
// Test / Check result
|
||||||
options := Options{Address: testXMPPAddress, Jid: "test@localhost", Password: "test", Insecure: true}
|
config := Config{Address: testXMPPAddress, Jid: "test@localhost", Password: "test", Insecure: true}
|
||||||
|
|
||||||
var client *Client
|
var client *Client
|
||||||
var err error
|
var err error
|
||||||
if client, err = NewClient(options); err != nil {
|
if client, err = NewClient(config); err != nil {
|
||||||
t.Errorf("connect create XMPP client: %s", err)
|
t.Errorf("connect create XMPP client: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,11 +44,11 @@ func TestClient_NoInsecure(t *testing.T) {
|
|||||||
mock.Start(t, testXMPPAddress, handlerAbortTLS)
|
mock.Start(t, testXMPPAddress, handlerAbortTLS)
|
||||||
|
|
||||||
// Test / Check result
|
// Test / Check result
|
||||||
options := Options{Address: testXMPPAddress, Jid: "test@localhost", Password: "test"}
|
config := Config{Address: testXMPPAddress, Jid: "test@localhost", Password: "test"}
|
||||||
|
|
||||||
var client *Client
|
var client *Client
|
||||||
var err error
|
var err error
|
||||||
if client, err = NewClient(options); err != nil {
|
if client, err = NewClient(config); err != nil {
|
||||||
t.Errorf("cannot create XMPP client: %s", err)
|
t.Errorf("cannot create XMPP client: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
options := xmpp.Options{
|
config := xmpp.Config{
|
||||||
Address: "localhost:5222",
|
Address: "localhost:5222",
|
||||||
Jid: "test@localhost",
|
Jid: "test@localhost",
|
||||||
Password: "test",
|
Password: "test",
|
||||||
@ -21,7 +21,7 @@ func main() {
|
|||||||
Insecure: true,
|
Insecure: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
client, err := xmpp.NewClient(options)
|
client, err := xmpp.NewClient(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error: ", err)
|
log.Fatal("Error: ", err)
|
||||||
}
|
}
|
||||||
|
@ -99,11 +99,11 @@ func playSCURL(p *mpg123.Player, rawURL string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func connectXmpp(jid string, password string, address string) (client *xmpp.Client, err error) {
|
func connectXmpp(jid string, password string, address string) (client *xmpp.Client, err error) {
|
||||||
xmppOptions := xmpp.Options{Address: address,
|
xmppConfig := xmpp.Config{Address: address,
|
||||||
Jid: jid, Password: password, PacketLogger: os.Stdout, Insecure: true,
|
Jid: jid, Password: password, PacketLogger: os.Stdout, Insecure: true,
|
||||||
Retry: 10}
|
Retry: 10}
|
||||||
|
|
||||||
if client, err = xmpp.NewClient(xmppOptions); err != nil {
|
if client, err = xmpp.NewClient(xmppConfig); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
session.go
14
session.go
@ -31,7 +31,7 @@ type Session struct {
|
|||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSession(conn net.Conn, o Options) (net.Conn, *Session, error) {
|
func NewSession(conn net.Conn, o Config) (net.Conn, *Session, error) {
|
||||||
s := new(Session)
|
s := new(Session)
|
||||||
s.init(conn, o)
|
s.init(conn, o)
|
||||||
|
|
||||||
@ -62,12 +62,12 @@ func (s *Session) PacketId() string {
|
|||||||
return fmt.Sprintf("%x", s.lastPacketId)
|
return fmt.Sprintf("%x", s.lastPacketId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Session) init(conn net.Conn, o Options) {
|
func (s *Session) init(conn net.Conn, o Config) {
|
||||||
s.setProxy(nil, conn, o)
|
s.setProxy(nil, conn, o)
|
||||||
s.Features = s.open(o.parsedJid.domain)
|
s.Features = s.open(o.parsedJid.domain)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Session) reset(conn net.Conn, newConn net.Conn, o Options) {
|
func (s *Session) reset(conn net.Conn, newConn net.Conn, o Config) {
|
||||||
if s.err != nil {
|
if s.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@ func (s *Session) reset(conn net.Conn, newConn net.Conn, o Options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: setProxyLogger ? better name ? This is not a TCP / HTTP proxy
|
// TODO: setProxyLogger ? better name ? This is not a TCP / HTTP proxy
|
||||||
func (s *Session) setProxy(conn net.Conn, newConn net.Conn, o Options) {
|
func (s *Session) setProxy(conn net.Conn, newConn net.Conn, o Config) {
|
||||||
if newConn != conn {
|
if newConn != conn {
|
||||||
s.socketProxy = newSocketProxy(newConn, o.PacketLogger)
|
s.socketProxy = newSocketProxy(newConn, o.PacketLogger)
|
||||||
}
|
}
|
||||||
@ -135,7 +135,7 @@ func (s *Session) startTlsIfSupported(conn net.Conn, domain string) net.Conn {
|
|||||||
return conn
|
return conn
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Session) auth(o Options) {
|
func (s *Session) auth(o Config) {
|
||||||
if s.err != nil {
|
if s.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -143,7 +143,7 @@ func (s *Session) auth(o Options) {
|
|||||||
s.err = authSASL(s.socketProxy, s.decoder, s.Features, o.parsedJid.username, o.Password)
|
s.err = authSASL(s.socketProxy, s.decoder, s.Features, o.parsedJid.username, o.Password)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Session) bind(o Options) {
|
func (s *Session) bind(o Config) {
|
||||||
if s.err != nil {
|
if s.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -176,7 +176,7 @@ func (s *Session) bind(o Options) {
|
|||||||
|
|
||||||
// TODO: remove when ejabberd is fixed: https://github.com/processone/ejabberd/issues/869
|
// TODO: remove when ejabberd is fixed: https://github.com/processone/ejabberd/issues/869
|
||||||
// After the bind, if the session is required (as per old RFC 3921), we send the session open iq
|
// After the bind, if the session is required (as per old RFC 3921), we send the session open iq
|
||||||
func (s *Session) rfc3921Session(o Options) {
|
func (s *Session) rfc3921Session(o Config) {
|
||||||
if s.err != nil {
|
if s.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Mediated Read / Write on socket
|
// Mediated Read / Write on socket
|
||||||
// Used if logFile from Options is not nil
|
// Used if logFile from Config is not nil
|
||||||
type socketProxy struct {
|
type socketProxy struct {
|
||||||
socket io.ReadWriter // Actual connection
|
socket io.ReadWriter // Actual connection
|
||||||
logFile *os.File
|
logFile *os.File
|
||||||
|
Loading…
Reference in New Issue
Block a user