Fix bug in ipstamp module.
Sync with server. Refs #2307. This was SVN commit r14363.
This commit is contained in:
parent
79252043ae
commit
d2e671392b
@ -479,15 +479,15 @@ class XpartaMuPP(sleekxmpp.ClientXMPP):
|
||||
"""
|
||||
pass
|
||||
elif iq['type'] == 'set':
|
||||
if 'gamelist|en' in iq.values:
|
||||
if 'gamelist' in iq.values:
|
||||
"""
|
||||
Register-update / unregister a game
|
||||
"""
|
||||
command = iq['gamelist|en']['command']
|
||||
command = iq['gamelist']['command']
|
||||
if command == 'register':
|
||||
# Add game
|
||||
try:
|
||||
self.gameList.addGame(iq['from'], iq['gamelist|en']['game'])
|
||||
self.gameList.addGame(iq['from'], iq['gamelist']['game'])
|
||||
self.sendGameList()
|
||||
except:
|
||||
traceback.print_exc()
|
||||
@ -504,19 +504,19 @@ class XpartaMuPP(sleekxmpp.ClientXMPP):
|
||||
elif command == 'changestate':
|
||||
# Change game status (waiting/running)
|
||||
try:
|
||||
self.gameList.changeGameState(iq['from'], iq['gamelist|en']['game'])
|
||||
self.gameList.changeGameState(iq['from'], iq['gamelist']['game'])
|
||||
self.sendGameList()
|
||||
except:
|
||||
traceback.print_exc()
|
||||
logging.error("Failed to process changestate data")
|
||||
else:
|
||||
logging.error("Failed to process command '%s' received from %s" % command, iq['from'].bare)
|
||||
elif 'gamereport|en' in iq.values:
|
||||
elif 'gamereport' in iq.values:
|
||||
"""
|
||||
Client is reporting end of game statistics
|
||||
"""
|
||||
try:
|
||||
self.reportManager.addReport(iq['from'], iq['gamereport|en']['game'])
|
||||
self.reportManager.addReport(iq['from'], iq['gamereport']['game'])
|
||||
if self.leaderboard.getLastRatedMessage() != "":
|
||||
self.send_message(mto=self.room, mbody=self.leaderboard.getLastRatedMessage(), mtype="groupchat",
|
||||
mnick=self.nick)
|
||||
@ -647,6 +647,6 @@ if __name__ == '__main__':
|
||||
xmpp.register_plugin('xep_0199') # XMPP Ping
|
||||
|
||||
if xmpp.connect():
|
||||
xmpp.process(block=False)
|
||||
xmpp.process(threaded=False)
|
||||
else:
|
||||
logging.error("Unable to connect")
|
||||
|
@ -13,6 +13,7 @@
|
||||
%%
|
||||
%% You should have received a copy of the GNU General Public License
|
||||
%% along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-module(mod_ipstamp).
|
||||
|
||||
-behaviour(gen_mod).
|
||||
@ -25,52 +26,63 @@
|
||||
-define (Domain, "lobby.wildfiregames.com").
|
||||
|
||||
%% Login of the Xpartamupp jabber client
|
||||
-define (XpartamuppLogin, "xpartamupp").
|
||||
%% TODO: It would be nice to get this from the module options.
|
||||
-define (XpartamuppLogin, "wfgbot").
|
||||
|
||||
start(_Host, _Opts) ->
|
||||
?INFO_MSG("mod_ipip starting", []),
|
||||
?INFO_MSG("mod_ipstamp starting", []),
|
||||
ejabberd_hooks:add(filter_packet, global, ?MODULE, on_filter_packet, 50),
|
||||
ok.
|
||||
|
||||
stop(_Host) ->
|
||||
?INFO_MSG("mod_ipstamp stopping", []),
|
||||
ejabberd_hooks:delete(filter_packet, global, ?MODULE, on_filter_packet, 50),
|
||||
ok.
|
||||
|
||||
on_filter_packet({From, To, Packet} = Input) ->
|
||||
{_,STo,_,_,_,_,_} = To,
|
||||
{_,SElement,LPacketInfo,LPacketQuery} = Packet,
|
||||
{_,SFrom,_,_,_,_,_} = From,
|
||||
if STo == "xpartamupp" ->
|
||||
{_,SElement,LPacketInfo,LPacketQuery} = Packet,
|
||||
if SElement == "iq" ->
|
||||
{_,STo,_,_,_,_,_} = To,
|
||||
%% We only want to do something for the bot
|
||||
if STo == ?XpartamuppLogin ->
|
||||
if SElement == "iq" ->
|
||||
%% Get iq type (get/set/result...).
|
||||
{_, SType} = lists:keyfind("type",1,LPacketInfo),
|
||||
if SType == "set" ->
|
||||
{_,_,LXmlns,LGame} = lists:keyfind("query",2,LPacketQuery),
|
||||
%% Get the sender's IP for later.
|
||||
Info = ejabberd_sm:get_user_info(SFrom,[?Domain],"0ad"),
|
||||
{ip, {Ploc, _Port}} = lists:keyfind(ip, 1, Info),
|
||||
SIp = inet_parse:ntoa(Ploc),
|
||||
%% Get XMLNS and message body (we assume the first xml element contains the xmlns).
|
||||
{_,_,LXmlns,LBody} = lists:keyfind(xmlelement,1,LPacketQuery),
|
||||
{_,SXmlns} = lists:keyfind("xmlns",1,LXmlns),
|
||||
%% Insert IP into game registration requests.
|
||||
if SXmlns == "jabber:iq:gamelist" ->
|
||||
{_,_,_,LCommand} = lists:keyfind("command",2,LGame),
|
||||
{_,_,_,LCommand} = lists:keyfind("command",2,LBody),
|
||||
{_,SCommand} = lists:keyfind(xmlcdata,1,LCommand),
|
||||
if SCommand == <<"register">> ->
|
||||
{_,_,KGame,_} = lists:keyfind("game",2,LGame),
|
||||
Info = ejabberd_sm:get_user_info(SFrom,[?Domain],"0ad"),
|
||||
{ip, {Ploc, _Port}} = lists:keyfind(ip, 1, Info),
|
||||
SIp = inet_parse:ntoa(Ploc),
|
||||
?INFO_MSG(string:concat("stamp ip: ",SIp), []),
|
||||
{From,To,{xmlelement,"iq",LPacketInfo,[
|
||||
{xmlelement,"query",[{"xmlns","jabber:iq:gamelist"}],[
|
||||
{xmlelement,"game",lists:keyreplace("ip",1,KGame,{"ip",SIp}),[]},
|
||||
{xmlelement,"command",[],[{xmlcdata,<<"register">>}]}
|
||||
]
|
||||
}
|
||||
]}}
|
||||
; true -> Input
|
||||
end
|
||||
; true -> Input
|
||||
end
|
||||
; true -> Input
|
||||
end
|
||||
; true -> Input
|
||||
end
|
||||
; true -> Input
|
||||
{_,_,KGame,_} = lists:keyfind("game",2,LBody),
|
||||
?INFO_MSG(string:concat("Inserting IP into game registration stanza: ",SIp), []),
|
||||
{From,To,{xmlelement,"iq",LPacketInfo,[
|
||||
{xmlelement,"query",[{"xmlns","jabber:iq:gamelist"}],[
|
||||
{xmlelement,"game",lists:keyreplace("ip",1,KGame,{"ip",SIp}),[]},
|
||||
{xmlelement,"command",[],[{xmlcdata,<<"register">>}]}
|
||||
]
|
||||
}
|
||||
]}};
|
||||
true ->
|
||||
Input
|
||||
end;
|
||||
true ->
|
||||
Input
|
||||
end;
|
||||
true ->
|
||||
Input
|
||||
end;
|
||||
true ->
|
||||
Input
|
||||
end;
|
||||
true ->
|
||||
Input
|
||||
end.
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user