diff --git a/main.go b/main.go index 97c2e06..b7530dd 100644 --- a/main.go +++ b/main.go @@ -15,7 +15,7 @@ import ( ) const ( - Version = "v0.3.8" + Version = "v1.0-dev" configurationFilePath = "xmpp4steam.cfg" ) @@ -53,6 +53,6 @@ func main() { xmpp.Disconnect() - time.Sleep(1 * time.Second) log.Println("Exit main()") + time.Sleep(1 * time.Second) } diff --git a/servers.addr b/servers.addr index 290da62..524d10c 100644 --- a/servers.addr +++ b/servers.addr @@ -1 +1 @@ -{"Addresses":[{"IP":"162.254.197.41","Port":27020},{"IP":"146.66.152.11","Port":27019},{"IP":"146.66.152.10","Port":27017},{"IP":"162.254.197.42","Port":27019},{"IP":"162.254.197.41","Port":27018},{"IP":"162.254.197.41","Port":27017},{"IP":"162.254.197.40","Port":27019},{"IP":"146.66.152.11","Port":27020},{"IP":"146.66.152.10","Port":27018},{"IP":"146.66.152.11","Port":27017},{"IP":"162.254.197.41","Port":27021},{"IP":"162.254.197.41","Port":27019},{"IP":"162.254.197.42","Port":27018},{"IP":"162.254.197.42","Port":27020},{"IP":"146.66.152.10","Port":27019},{"IP":"146.66.152.10","Port":27020},{"IP":"162.254.197.40","Port":27020},{"IP":"162.254.197.42","Port":27017},{"IP":"162.254.197.40","Port":27021},{"IP":"146.66.152.11","Port":27018},{"IP":"162.254.197.40","Port":27018},{"IP":"162.254.197.42","Port":27021},{"IP":"162.254.197.40","Port":27017},{"IP":"162.254.196.41","Port":27017},{"IP":"162.254.196.40","Port":27018},{"IP":"162.254.196.40","Port":27020},{"IP":"162.254.196.41","Port":27019},{"IP":"162.254.196.43","Port":27019},{"IP":"162.254.196.42","Port":27017},{"IP":"162.254.196.42","Port":27021},{"IP":"162.254.196.40","Port":27017},{"IP":"162.254.196.41","Port":27021},{"IP":"162.254.196.42","Port":27019},{"IP":"162.254.196.43","Port":27021},{"IP":"162.254.196.42","Port":27020},{"IP":"162.254.196.42","Port":27018},{"IP":"162.254.196.40","Port":27019},{"IP":"162.254.196.43","Port":27017},{"IP":"162.254.196.41","Port":27020},{"IP":"162.254.196.43","Port":27020},{"IP":"162.254.196.43","Port":27018},{"IP":"162.254.196.41","Port":27018},{"IP":"185.25.180.15","Port":27019},{"IP":"146.66.155.8","Port":27020},{"IP":"185.25.182.10","Port":27019},{"IP":"185.25.182.10","Port":27020},{"IP":"185.25.180.15","Port":27018},{"IP":"185.25.182.10","Port":27018},{"IP":"146.66.155.8","Port":27017},{"IP":"155.133.242.8","Port":27018},{"IP":"185.25.182.10","Port":27017},{"IP":"185.25.180.15","Port":27017},{"IP":"155.133.242.8","Port":27017},{"IP":"155.133.242.9","Port":27018},{"IP":"155.133.242.8","Port":27019},{"IP":"146.66.155.8","Port":27018},{"IP":"146.66.155.8","Port":27019},{"IP":"155.133.242.8","Port":27020},{"IP":"185.25.180.14","Port":27020},{"IP":"155.133.242.9","Port":27019},{"IP":"185.25.180.14","Port":27017},{"IP":"185.25.180.15","Port":27020},{"IP":"155.133.242.9","Port":27020},{"IP":"185.25.180.14","Port":27019},{"IP":"155.133.242.9","Port":27017},{"IP":"185.25.180.14","Port":27018},{"IP":"162.254.196.40","Port":27021},{"IP":"208.78.164.9","Port":27017},{"IP":"208.78.164.13","Port":27018},{"IP":"208.78.164.10","Port":27018},{"IP":"208.78.164.13","Port":27017},{"IP":"208.78.164.14","Port":27018},{"IP":"208.78.164.14","Port":27019},{"IP":"208.78.164.13","Port":27019},{"IP":"208.78.164.9","Port":27018},{"IP":"208.78.164.12","Port":27019},{"IP":"208.78.164.14","Port":27017},{"IP":"208.78.164.11","Port":27019},{"IP":"208.78.164.9","Port":27019},{"IP":"208.78.164.12","Port":27017}]} \ No newline at end of file +{"Addresses":[{"IP":"146.66.152.11","Port":27020},{"IP":"162.254.197.41","Port":27020},{"IP":"162.254.197.40","Port":27019},{"IP":"162.254.197.41","Port":27017},{"IP":"146.66.152.10","Port":27020},{"IP":"146.66.152.11","Port":27017},{"IP":"146.66.152.11","Port":27019},{"IP":"146.66.152.10","Port":27018},{"IP":"162.254.197.42","Port":27021},{"IP":"162.254.197.42","Port":27020},{"IP":"162.254.197.42","Port":27018},{"IP":"162.254.197.41","Port":27019},{"IP":"162.254.197.40","Port":27020},{"IP":"146.66.152.10","Port":27017},{"IP":"162.254.197.42","Port":27017},{"IP":"162.254.197.41","Port":27021},{"IP":"162.254.197.40","Port":27021},{"IP":"162.254.197.41","Port":27018},{"IP":"146.66.152.11","Port":27018},{"IP":"146.66.152.10","Port":27019},{"IP":"162.254.197.40","Port":27018},{"IP":"162.254.197.40","Port":27017},{"IP":"162.254.197.42","Port":27019},{"IP":"162.254.196.42","Port":27021},{"IP":"162.254.196.42","Port":27019},{"IP":"162.254.196.43","Port":27018},{"IP":"162.254.196.41","Port":27018},{"IP":"162.254.196.43","Port":27020},{"IP":"162.254.196.42","Port":27020},{"IP":"162.254.196.41","Port":27017},{"IP":"162.254.196.42","Port":27018},{"IP":"162.254.196.41","Port":27019},{"IP":"162.254.196.41","Port":27020},{"IP":"162.254.196.42","Port":27017},{"IP":"162.254.196.40","Port":27021},{"IP":"162.254.196.43","Port":27021},{"IP":"162.254.196.40","Port":27020},{"IP":"162.254.196.40","Port":27017},{"IP":"162.254.196.41","Port":27021},{"IP":"162.254.196.40","Port":27018},{"IP":"162.254.196.40","Port":27019},{"IP":"162.254.196.43","Port":27019},{"IP":"162.254.196.43","Port":27017},{"IP":"146.66.155.8","Port":27019},{"IP":"155.133.242.9","Port":27019},{"IP":"185.25.180.14","Port":27020},{"IP":"185.25.182.10","Port":27020},{"IP":"185.25.180.14","Port":27019},{"IP":"146.66.155.8","Port":27020},{"IP":"146.66.155.8","Port":27018},{"IP":"185.25.180.15","Port":27020},{"IP":"155.133.242.9","Port":27018},{"IP":"155.133.242.9","Port":27020},{"IP":"146.66.155.8","Port":27017},{"IP":"185.25.182.10","Port":27017},{"IP":"185.25.182.10","Port":27018},{"IP":"185.25.180.14","Port":27018},{"IP":"185.25.180.14","Port":27017},{"IP":"155.133.242.9","Port":27017},{"IP":"155.133.242.8","Port":27017},{"IP":"185.25.180.15","Port":27018},{"IP":"185.25.182.10","Port":27019},{"IP":"185.25.180.15","Port":27017},{"IP":"155.133.242.8","Port":27019},{"IP":"185.25.180.15","Port":27019},{"IP":"155.133.242.8","Port":27018},{"IP":"155.133.242.8","Port":27020},{"IP":"208.78.164.12","Port":27018},{"IP":"208.78.164.9","Port":27017},{"IP":"208.78.164.9","Port":27019},{"IP":"208.78.164.13","Port":27019},{"IP":"208.78.164.12","Port":27019},{"IP":"208.78.164.10","Port":27018},{"IP":"208.78.164.14","Port":27017},{"IP":"208.78.164.11","Port":27019},{"IP":"208.78.164.13","Port":27018},{"IP":"208.78.164.12","Port":27017},{"IP":"208.78.164.11","Port":27018},{"IP":"208.78.164.10","Port":27017},{"IP":"208.78.164.9","Port":27018}]} \ No newline at end of file diff --git a/xmpp/commands.go b/xmpp/commands.go index b66e7c8..44cbce7 100644 --- a/xmpp/commands.go +++ b/xmpp/commands.go @@ -21,7 +21,7 @@ var ( func execDiscoCommand(iq *xmpp.Iq) { log.Printf("%sDiscovery item iq received", LogInfo) - reply := iq.Response(xmpp.IqTypeResult) + reply := iq.Response(xmpp.IQTypeResult) discoItem := &xmpp.DiscoItems{Node: xmpp.NodeAdHocCommand} // Add available commands @@ -42,12 +42,12 @@ func execCommandAdHoc(iq *xmpp.Iq) { adHoc := &xmpp.AdHocCommand{} iq.PayloadDecode(adHoc) - if adHoc.SessionId == "" && adHoc.Action == xmpp.ActionAdHocExecute { + if adHoc.SessionID == "" && adHoc.Action == xmpp.ActionAdHocExecute { // First step in the command log.Printf("%sAd-Hoc command (Node : %s). First step.", LogInfo, adHoc.Node) - reply := iq.Response(xmpp.IqTypeResult) - cmd := &xmpp.AdHocCommand{Node: adHoc.Node, Status: xmpp.StatusAdHocExecute, SessionId: xmpp.SessionId()} + reply := iq.Response(xmpp.IQTypeResult) + cmd := &xmpp.AdHocCommand{Node: adHoc.Node, Status: xmpp.StatusAdHocExecute, SessionID: xmpp.SessionID()} if adHoc.Node == CommandAuthcode { // Command Auth Code cmdXForm := &xmpp.AdHocXForm{Type: xmpp.TypeAdHocForm, Title: "Steam Auth Code", Instructions: "Please provide the auth code that Steam sended to you."} @@ -103,8 +103,8 @@ func execCommandAdHoc(iq *xmpp.Iq) { } else if adHoc.Action == xmpp.ActionAdHocExecute { // Last step in the command log.Printf("%sAd-Hoc command (Node : %s). Last step.", LogInfo, adHoc.Node) - reply := iq.Response(xmpp.IqTypeResult) - cmd := &xmpp.AdHocCommand{Node: adHoc.Node, Status: xmpp.StatusAdHocCompleted, SessionId: adHoc.SessionId} + reply := iq.Response(xmpp.IQTypeResult) + cmd := &xmpp.AdHocCommand{Node: adHoc.Node, Status: xmpp.StatusAdHocCompleted, SessionID: adHoc.SessionID} if adHoc.Node == CommandAuthcode && adHoc.XForm.Type == xmpp.TypeAdHocSubmit { cmdXForm := &xmpp.AdHocXForm{Type: xmpp.TypeAdHocResult, Title: "Steam Auth Code"} @@ -185,8 +185,8 @@ func execCommandAdHoc(iq *xmpp.Iq) { } else if adHoc.Action == xmpp.ActionAdHocCancel { // command canceled log.Printf("%sAd-Hoc command (Node : %s). Command canceled.", LogInfo, adHoc.Node) - reply := iq.Response(xmpp.IqTypeResult) - cmd := &xmpp.AdHocCommand{Node: adHoc.Node, Status: xmpp.StatusAdHocCanceled, SessionId: adHoc.SessionId} + reply := iq.Response(xmpp.IQTypeResult) + cmd := &xmpp.AdHocCommand{Node: adHoc.Node, Status: xmpp.StatusAdHocCanceled, SessionID: adHoc.SessionID} reply.PayloadEncode(cmd) comp.Out <- reply } diff --git a/xmpp/xmpp.go b/xmpp/xmpp.go index 7c19ef6..283a9d2 100644 --- a/xmpp/xmpp.go +++ b/xmpp/xmpp.go @@ -80,28 +80,44 @@ func mainXMPP() { } case *xmpp.Iq: + jidBare := strings.SplitN(v.To, "/", 2)[0] + switch v.PayloadName().Space { - case xmpp.NsDiscoItems: - execDiscoCommand(v) + case xmpp.NSDiscoItems: + if jidBare == jid.Domain { + execDiscoCommand(v) + } else { + sendNotSupportedFeature(v) + } case xmpp.NodeAdHocCommand: - execCommandAdHoc(v) + if jidBare == jid.Domain { + execCommandAdHoc(v) + } else { + sendNotSupportedFeature(v) + } - case xmpp.NsVCardTemp: - reply := v.Response(xmpp.IqTypeResult) - vcard := &xmpp.VCard{} - reply.PayloadEncode(vcard) - comp.Out <- reply + case xmpp.NSVCardTemp: + if jidBare == jid.Domain { + reply := v.Response(xmpp.IQTypeResult) + vcard := &xmpp.VCard{} + reply.PayloadEncode(vcard) + comp.Out <- reply + } else { + sendNotSupportedFeature(v) + } - case xmpp.NsJabberClient: - reply := v.Response(xmpp.IqTypeResult) - reply.PayloadEncode(&xmpp.SoftwareVersion{Name: "go-xmpp4steam", Version: SoftVersion}) - comp.Out <- reply + case xmpp.NSJabberClient: + if jidBare == jid.Domain { + reply := v.Response(xmpp.IQTypeResult) + reply.PayloadEncode(&xmpp.SoftwareVersion{Name: "go-xmpp4steam", Version: SoftVersion}) + comp.Out <- reply + } else { + sendNotSupportedFeature(v) + } default: - reply := v.Response(xmpp.IqTypeError) - reply.PayloadEncode(xmpp.NewError("cancel", xmpp.FeatureNotImplemented, "")) - comp.Out <- reply + sendNotSupportedFeature(v) } default: @@ -120,6 +136,12 @@ func must(v interface{}, err error) interface{} { return v } +func sendNotSupportedFeature(iq *xmpp.Iq) { + reply := iq.Response(xmpp.IQTypeError) + reply.PayloadEncode(xmpp.NewError("cancel", xmpp.FeatureNotImplemented, "")) + comp.Out <- reply +} + func Disconnect() { log.Printf("%sXMPP disconnect", LogInfo) for _, u := range MapGatewayInfo {