Skip to content

Instantly share code, notes, and snippets.

@bamthomas
Created December 14, 2011 10:10
Show Gist options
  • Save bamthomas/1475991 to your computer and use it in GitHub Desktop.
Save bamthomas/1475991 to your computer and use it in GitHub Desktop.
module http ejabberd
-module(mod_http_presence).
-behavior(gen_mod).
-include("ejabberd.hrl").
-include("jlib.hrl").
-export([start/2, stop/1, on_presence/4]).
start(Host, _Opts) ->
?INFO_MSG("mod_http_presence starting", []),
inets:start(),
?INFO_MSG("inets:services() = ~w", [inets:services()]),
ejabberd_hooks:add(set_presence_hook, Host, ?MODULE, on_presence, 50),
ok.
stop(Host) ->
?INFO_MSG("mod_http_presence stopping", []),
ejabberd_hooks:delete(set_presence_hook, Host, ?MODULE, on_presence, 50),
ok.
on_presence(User, Server, _Resource, _Packet) ->
LUser = jlib:nodeprep(User),
LServer = jlib:nodeprep(Server),
envoieRequeteHttpPost("http://localhost", [{"user", LUser}, {"server", LServer}]).
envoieRequeteHttpPost(Url,Parametres) ->
case httpc:request(post,{Url,[],"application/x-www-form-urlencoded", encodeParametresPost(Parametres)},[],[]) of
{ok, {_Status, _Headers, Body}} -> Body;
Erreur ->
log:error("la requete http ~p a recupere une erreur : ~w", [Url, Erreur]),
{erreur, Erreur}
end.
encodeParametresPost(ListeParametres) ->
string_join(lists:map(fun({Cle,Valeur})-> Cle ++ "=" ++ Valeur end, ListeParametres), "&").
string_join(Liste, Separateur) -> string_join(Liste, Separateur, []).
string_join([], _Separateur, Accumulateur) -> Accumulateur;
string_join([Tete|Queue], Separateur, []) -> string_join(Queue, Separateur, Tete);
string_join([Tete|Queue], Separateur, Accumulateur) -> string_join(Queue, Separateur, Accumulateur ++ Separateur ++ Tete).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment