~ubuntu-branches/ubuntu/trusty/ejabberd/trusty-proposed

« back to all changes in this revision

Viewing changes to src/ejabberd_c2s.erl

  • Committer: Bazaar Package Importer
  • Author(s): Konstantin Khomoutov, Konstantin Khomoutov
  • Date: 2010-07-26 20:36:14 UTC
  • mfrom: (1.1.15 upstream)
  • Revision ID: james.westby@ubuntu.com-20100726203614-s3asj0k5ym3bxhdw
Tags: 2.1.4-1
[ Konstantin Khomoutov ]
* Do not prevent ejabberd_debug from being installed and used
  as this was implemented upstream as the default behavior.
* Add build dependency on erlang-parsetools.
* Add 'sharedscripts' option to logrotate config.
* Update VCS references in control file to point to git.deb.at.
* Add group sticky bit to permissions on the log directory --
  this should make log files owned by the group "adm".
* Explicitly set umask to 027 before starting erl.
* Add patch with fix for EJAB-953 (closes: #590389).
* Fix call to setup_ejabberd in postinst.
* Fix owner/permissions for log files when upgrading.
* Minor fixes and clarifications in ejabberdctl.8 manual page.
* Refresh reopen-log.patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
55
55
         handle_sync_event/4,
56
56
         code_change/4,
57
57
         handle_info/3,
58
 
         terminate/3]).
 
58
         terminate/3,
 
59
     print_state/1
 
60
     ]).
59
61
 
60
62
-include("ejabberd.hrl").
61
63
-include("jlib.hrl").
315
317
                                                  [{xmlelement, "mechanisms",
316
318
                                                    [{"xmlns", ?NS_SASL}],
317
319
                                                    Mechs}] ++
318
 
                                                   ejabberd_hooks:run_fold(
319
 
                                                     c2s_stream_features,
320
 
                                                     Server,
321
 
                                                     [], [])}),
 
320
                                                  ejabberd_hooks:run_fold(
 
321
                                                    c2s_stream_features,
 
322
                                                    Server,
 
323
                                                    [], [Server])}),
322
324
                                    fsm_next_state(wait_for_feature_request,
323
325
                                               StateData#state{
324
326
                                                 server = Server,
327
329
                                _ ->
328
330
                                    case StateData#state.resource of
329
331
                                        "" ->
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]),
 
336
                                            StreamFeatures =
 
337
                                                [{xmlelement, "bind",
 
338
                                                  [{"xmlns", ?NS_BIND}], []},
 
339
                                                 {xmlelement, "session",
 
340
                                                  [{"xmlns", ?NS_SESSION}], []}]
 
341
                                                ++ RosterVersioningFeature
 
342
                                                ++ ejabberd_hooks:run_fold(
 
343
                                                     c2s_stream_features,
 
344
                                                     Server,
 
345
                                                     [], [Server]),
335
346
                                            send_element(
336
347
                                              StateData,
337
348
                                              {xmlelement, "stream:features", [],
1276
1287
                        case ejabberd_hooks:run_fold(
1277
1288
                               feature_check_packet, StateData#state.server,
1278
1289
                               allow,
1279
 
                               [StateData#state.user,
 
1290
                               [StateData#state.jid,
1280
1291
                                StateData#state.server,
1281
1292
                                StateData#state.pres_last,
1282
1293
                                {From, To, Packet},
1330
1341
           ok
1331
1342
    end,
1332
1343
    {stop, normal, StateData};
 
1344
handle_info({force_update_presence, LUser}, StateName,
 
1345
            #state{user = LUser, server = LServer} = StateData) ->
 
1346
    NewStateData =
 
1347
        case StateData#state.pres_last of
 
1348
            {xmlelement, "presence", _Attrs, _Els} ->
 
1349
                PresenceEl = ejabberd_hooks:run_fold(
 
1350
                               c2s_update_presence,
 
1351
                               LServer,
 
1352
                               StateData#state.pres_last,
 
1353
                               [LUser, LServer]),
 
1354
                StateData2 = StateData#state{pres_last = PresenceEl},
 
1355
                presence_update(StateData2#state.jid,
 
1356
                                PresenceEl,
 
1357
                                StateData2),
 
1358
                StateData2;
 
1359
            _ ->
 
1360
                StateData
 
1361
        end,
 
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).
1336
1366
 
 
1367
 
 
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)}
 
1378
               }.
 
1379
    
1337
1380
%%----------------------------------------------------------------------
1338
1381
%% Func: terminate/3
1339
1382
%% Purpose: Shutdown the fsm
1392
1435
                            presence_broadcast(
1393
1436
                              StateData, From, StateData#state.pres_i, Packet)
1394
1437
                    end
1395
 
            end;
 
1438
            end,
 
1439
            bounce_messages();
1396
1440
        _ ->
1397
1441
            ok
1398
1442
    end,
2185
2229
            end
2186
2230
    end.
2187
2231
 
 
2232
bounce_messages() ->
 
2233
    receive
 
2234
        {route, From, To, El} ->
 
2235
            ejabberd_router:route(From, To, El),
 
2236
            bounce_messages()
 
2237
    after 0 ->
 
2238
            ok
 
2239
    end.
 
2240
 
2188
2241
%%%----------------------------------------------------------------------
2189
2242
%%% JID Set memory footprint reduction code
2190
2243
%%%----------------------------------------------------------------------