aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPablo Polvorin <pablo.polvorin@process-one.net>2011-08-05 12:21:24 -0300
committerPablo Polvorin <pablo.polvorin@process-one.net>2011-08-05 12:21:24 -0300
commit573a84b2ec765c88972b4e147dc0bad44a035361 (patch)
tree9ef1b983e2bb4efdbbba7665956bcee5a90803a7
parentAdd comment about ping requests sent even to non-supporting clients (diff)
handle case when roster version on DB is enabled but version is not found.
Thanks Evgeniy.
-rw-r--r--src/mod_roster_odbc.erl10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/mod_roster_odbc.erl b/src/mod_roster_odbc.erl
index b713a0aab..3fccc2848 100644
--- a/src/mod_roster_odbc.erl
+++ b/src/mod_roster_odbc.erl
@@ -163,7 +163,15 @@ roster_version(LServer ,LUser) ->
true ->
case odbc_queries:get_roster_version(ejabberd_odbc:escape(LServer), ejabberd_odbc:escape(LUser)) of
{selected, ["version"], [{Version}]} -> Version;
- {selected, ["version"], []} -> not_found
+ {selected, ["version"], []} ->
+ %% If for some reason we don't had it on DB. Create a version Id and store it.
+ %% (we did the same on process_iq_get, that is called when client get roster,
+ %% not sure why it can still not be on DB at this point)
+ RosterVersion = sha:sha(term_to_binary(now())),
+ {atomic, {updated,1}} = odbc_queries:sql_transaction(LServer, fun() ->
+ odbc_queries:set_roster_version(ejabberd_odbc:escape(LUser), RosterVersion)
+ end),
+ RosterVersion
end;
false ->
roster_hash(ejabberd_hooks:run_fold(roster_get, LServer, [], [US]))