From 63f12202d0c5d2a570b48d05e62722e0fea54467 Mon Sep 17 00:00:00 2001 From: Bohdan Horbeshko Date: Fri, 8 Jul 2022 07:54:30 -0400 Subject: [PATCH] Refactoring: merge handleGetDiscoInfo/handleGetDiscoItems back into one function --- xmpp/handlers.go | 94 ++++++++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 55 deletions(-) diff --git a/xmpp/handlers.go b/xmpp/handlers.go index 64915a1..3b688f5 100644 --- a/xmpp/handlers.go +++ b/xmpp/handlers.go @@ -24,6 +24,12 @@ const ( ) const NodeVCard4 string = "urn:xmpp:vcard4" +type discoType int +const ( + discoTypeInfo discoType = iota + discoTypeItems +) + func logPacketType(p stanza.Packet) { log.Warnf("Ignoring packet: %T\n", p) } @@ -52,12 +58,12 @@ func HandleIq(s xmpp.Sender, p stanza.Packet) { } _, ok = iq.Payload.(*stanza.DiscoInfo) if ok { - go handleGetDiscoInfo(s, iq) + go handleGetDisco(discoTypeInfo, s, iq) return } _, ok = iq.Payload.(*stanza.DiscoItems) if ok { - go handleGetDiscoItems(s, iq) + go handleGetDisco(discoTypeItems, s, iq) return } } @@ -318,7 +324,7 @@ func handleGetVcardIq(s xmpp.Sender, iq *stanza.IQ, typ byte) { _ = gateway.ResumableSend(component, &answer) } -func handleGetDiscoInfo(s xmpp.Sender, iq *stanza.IQ) { +func handleGetDisco(dt discoType, s xmpp.Sender, iq *stanza.IQ) { answer, err := stanza.NewIQ(stanza.Attrs{ Type: stanza.IQTypeResult, From: iq.To, @@ -331,67 +337,45 @@ func handleGetDiscoInfo(s xmpp.Sender, iq *stanza.IQ) { return } - disco := answer.DiscoInfo() - _, ok := toToID(iq.To) - if ok { - disco.AddIdentity("", "account", "registered") - } else { - disco.AddIdentity("Telegram Gateway", "gateway", "telegram") - } - bare, _, ok := splitFrom(iq.From) - if ok { - session, ok := sessions[bare] - if ok && session.Session.MUC { - disco.AddFeatures(stanza.NSDiscoItems) - disco.AddIdentity("Telegram group chats", "conference", "text") + if dt == discoTypeInfo { + disco := answer.DiscoInfo() + _, ok := toToID(iq.To) + if ok { + disco.AddIdentity("", "account", "registered") + } else { + disco.AddIdentity("Telegram Gateway", "gateway", "telegram") } - } - answer.Payload = disco - - log.Debugf("%#v", answer) - - component, ok := s.(*xmpp.Component) - if !ok { - log.Error("Not a component") - return - } - - _ = gateway.ResumableSend(component, answer) -} - -func handleGetDiscoItems(s xmpp.Sender, iq *stanza.IQ) { - answer, err := stanza.NewIQ(stanza.Attrs{ - Type: stanza.IQTypeResult, - From: iq.To, - To: iq.From, - Id: iq.Id, - Lang: "en", - }) - if err != nil { - log.Errorf("Failed to create answer IQ: %v", err) - return - } - - disco := answer.DiscoItems() - - _, ok := toToID(iq.To) - if !ok { bare, _, ok := splitFrom(iq.From) if ok { - // raw access, no need to create a new instance if not connected session, ok := sessions[bare] if ok && session.Session.MUC { - bareJid := gateway.Jid.Bare() - disco.AddItem(bareJid, "", "Telegram group chats") - for _, chat := range session.GetGroupChats() { - jid := strconv.FormatInt(chat.Id, 10) + "@" + bareJid - disco.AddItem(jid, "", chat.Title) + disco.AddFeatures(stanza.NSDiscoItems) + disco.AddIdentity("Telegram group chats", "conference", "text") + } + } + answer.Payload = disco + } else if dt == discoTypeItems { + disco := answer.DiscoItems() + + _, ok := toToID(iq.To) + if !ok { + bare, _, ok := splitFrom(iq.From) + if ok { + // raw access, no need to create a new instance if not connected + session, ok := sessions[bare] + if ok && session.Session.MUC { + bareJid := gateway.Jid.Bare() + disco.AddItem(bareJid, "", "Telegram group chats") + for _, chat := range session.GetGroupChats() { + jid := strconv.FormatInt(chat.Id, 10) + "@" + bareJid + disco.AddItem(jid, "", chat.Title) + } } } } - } - answer.Payload = disco + answer.Payload = disco + } log.Debugf("%#v", answer)