sum7
/
yaja
Archived
1
0
Fork 0

improve use bind of stream start + logging

This commit is contained in:
Martin/Geno 2018-02-11 22:43:42 +01:00
parent 3c13b83657
commit 940d328b09
No known key found for this signature in database
GPG Key ID: F0D39A37E925E941
5 changed files with 58 additions and 42 deletions

View File

@ -86,7 +86,7 @@ func (client *Client) auth(password string) error {
if mechanism == "" {
return fmt.Errorf("PLAIN authentication is not an option: %s", f.Mechanisms.Mechanism)
}
client.Logging.Info("used auth with '%s'", mechanism)
client.Logging.Infof("used auth with '%s'", mechanism)
element, err := client.Read()
if err != nil {

View File

@ -42,8 +42,14 @@ func (client *Client) startStream() (*messages.StreamFeatures, error) {
debug += " tls"
}
debug += " mechanism("
mFirst := true
for _, m := range f.Mechanisms.Mechanism {
debug += m
if mFirst {
mFirst = false
debug += m
} else {
debug += ", " + m
}
}
debug += ")"
if f.Bind != nil {
@ -81,41 +87,47 @@ func (client *Client) connect(password string) error {
return err
}
if _, err := client.startStream(); err != nil {
f, err := client.startStream()
if err != nil {
return err
}
// bind to resource
bind := &messages.Bind{}
if client.JID.Resource != "" {
bind.Resource = client.JID.Resource
}
if err := client.Send(&messages.IQClient{
Type: messages.IQTypeSet,
To: model.NewJID(client.JID.Domain),
Bind: bind,
}); err != nil {
return err
}
var iq messages.IQClient
if err := client.ReadDecode(&iq); err != nil {
return err
}
if iq.Error != nil {
if iq.Error.ServiceUnavailable == nil {
return errors.New(fmt.Sprintf("recv error on iq>bind: %s[%s]: %s -> %s -> %s", iq.Error.Code, iq.Error.Type, iq.Error.Text, messages.XMLChildrenString(iq.Error.StanzaErrorGroup), messages.XMLChildrenString(iq.Error.Other)))
} else {
client.Logging.Warn("connected without setting resource with bind after auth: service-unavailable")
bind := f.Bind
if f.Bind == nil || (f.Bind.JID == nil && f.Bind.Resource == "") {
// bind to resource
if client.JID.Resource != "" {
bind.Resource = client.JID.Resource
}
} else if iq.Bind == nil {
return errors.New("<iq> result missing <bind>")
} else if iq.Bind.JID != nil {
client.JID.Local = iq.Bind.JID.Local
client.JID.Domain = iq.Bind.JID.Domain
client.JID.Resource = iq.Bind.JID.Resource
client.Logging.Info("set resource by server bind")
if err := client.Send(&messages.IQClient{
Type: messages.IQTypeSet,
To: model.NewJID(client.JID.Domain),
Bind: bind,
}); err != nil {
return err
}
var iq messages.IQClient
if err := client.ReadDecode(&iq); err != nil {
return err
}
if iq.Error != nil {
return errors.New(fmt.Sprintf("recv error on iq>bind: %s[%s]: %s -> %s -> %s", iq.Error.Code, iq.Error.Type, iq.Error.Text, messages.XMLChildrenString(iq.Error.StanzaErrorGroup), messages.XMLChildrenString(iq.Error.Other)))
} else if iq.Bind == nil {
return errors.New("iq>bind is nil :" + messages.XMLChildrenString(iq.Other))
}
bind = iq.Bind
}
if bind == nil {
return errors.New("bind is nil")
} else if bind.JID != nil {
client.JID.Local = bind.JID.Local
client.JID.Domain = bind.JID.Domain
client.JID.Resource = bind.JID.Resource
client.Logging.Infof("set jid by server bind '%s'", bind.JID.Full())
} else if bind.Resource != "" {
client.JID.Resource = bind.Resource
client.Logging.Infof("set resource by server bind '%s'", bind.Resource)
} else {
return errors.New(messages.XMLChildrenString(iq.Other))
return errors.New("bind>jid is nil" + messages.XMLChildrenString(bind))
}
// set status
return client.Send(&messages.PresenceClient{Show: messages.PresenceShowXA, Status: "online"})

View File

@ -112,10 +112,10 @@ func (t *Tester) StartBot(status *Status) {
for _, jid := range t.Admins {
if first {
first = false
allAdmins += jid.Bare()
} else {
allAdmins += ", "
allAdmins += ", " + jid.Bare()
}
allAdmins += jid.Bare()
if jid.Bare() == msg.From.Bare() {
isAdmin = true
status.client.Send(messages.MessageClient{Type: msg.Type, To: jid, Body: "last message, disconnect requested by " + msg.From.Bare()})

View File

@ -23,7 +23,7 @@ func XMLStartElementToString(element *xml.StartElement) string {
}
debug := fmt.Sprintf("<%s xmlns=\"%s\"", element.Name.Local, element.Name.Space)
for _, attr := range element.Attr {
debug = fmt.Sprintf("%s %s=\"%s\"", debug, attr.Name, attr.Value)
debug = fmt.Sprintf("%s %s=\"%s\"", debug, attr.Name.Local, attr.Value)
}
debug += ">"
return debug
@ -54,10 +54,10 @@ func XMLChildrenString(o interface{}) (result string) {
if xmlElement, ok := valueField.Interface().(*xml.Name); ok && xmlElement != nil {
if first {
first = false
result += xmlElement.Local
} else {
result += ", "
result += ", " + xmlElement.Local
}
result += xmlElement.Local
}
}
return

View File

@ -1,8 +1,12 @@
tlsdir = "tmp/ssl"
state_path = "tmp/yaja-tester.json"
logging = 5
accounts_path = "tmp/yaja-tester.json"
output_path = "tmp/yaja-tester-output.json"
webserver = ":https"
logging = 4
logging_clients = 4
logging_bots = 3
interval = "30s"
timeout = "10s"
admins = ["a.admin@chat.sum7.eu"]