328
330
case StateData#state.resource of
330
RosterVersioningFeature = ejabberd_hooks:run_fold(roster_get_versioning_feature, Server, [], [Server]),
331
StreamFeatures = [{xmlelement, "bind",
332
[{"xmlns", ?NS_BIND}], []},
333
{xmlelement, "session",
334
[{"xmlns", ?NS_SESSION}], []} | RosterVersioningFeature],
332
RosterVersioningFeature =
333
ejabberd_hooks:run_fold(
334
roster_get_versioning_feature,
335
Server, [], [Server]),
337
[{xmlelement, "bind",
338
[{"xmlns", ?NS_BIND}], []},
339
{xmlelement, "session",
340
[{"xmlns", ?NS_SESSION}], []}]
341
++ RosterVersioningFeature
342
++ ejabberd_hooks:run_fold(
337
348
{xmlelement, "stream:features", [],
1276
1287
case ejabberd_hooks:run_fold(
1277
1288
feature_check_packet, StateData#state.server,
1279
[StateData#state.user,
1290
[StateData#state.jid,
1280
1291
StateData#state.server,
1281
1292
StateData#state.pres_last,
1282
1293
{From, To, Packet},
1332
1343
{stop, normal, StateData};
1344
handle_info({force_update_presence, LUser}, StateName,
1345
#state{user = LUser, server = LServer} = StateData) ->
1347
case StateData#state.pres_last of
1348
{xmlelement, "presence", _Attrs, _Els} ->
1349
PresenceEl = ejabberd_hooks:run_fold(
1350
c2s_update_presence,
1352
StateData#state.pres_last,
1354
StateData2 = StateData#state{pres_last = PresenceEl},
1355
presence_update(StateData2#state.jid,
1362
{next_state, StateName, NewStateData};
1333
1363
handle_info(Info, StateName, StateData) ->
1334
1364
?ERROR_MSG("Unexpected info: ~p", [Info]),
1335
1365
fsm_next_state(StateName, StateData).
1368
%%----------------------------------------------------------------------
1369
%% Func: print_state/1
1370
%% Purpose: Prepare the state to be printed on error log
1371
%% Returns: State to print
1372
%%----------------------------------------------------------------------
1373
print_state(State = #state{pres_t = T, pres_f = F, pres_a = A, pres_i = I}) ->
1374
State#state{pres_t = {pres_t, ?SETS:size(T)},
1375
pres_f = {pres_f, ?SETS:size(F)},
1376
pres_a = {pres_a, ?SETS:size(A)},
1377
pres_i = {pres_i, ?SETS:size(I)}
1337
1380
%%----------------------------------------------------------------------
1338
1381
%% Func: terminate/3
1339
1382
%% Purpose: Shutdown the fsm
2232
bounce_messages() ->
2234
{route, From, To, El} ->
2235
ejabberd_router:route(From, To, El),
2188
2241
%%%----------------------------------------------------------------------
2189
2242
%%% JID Set memory footprint reduction code
2190
2243
%%%----------------------------------------------------------------------