39 core_route_stanza(origin, stanza); |
39 core_route_stanza(origin, stanza); |
40 end |
40 end |
41 end |
41 end |
42 |
42 |
43 function handle_normal_presence(origin, stanza, core_route_stanza) |
43 function handle_normal_presence(origin, stanza, core_route_stanza) |
|
44 error("hello world") |
44 if origin.roster then |
45 if origin.roster then |
45 for jid in pairs(origin.roster) do -- broadcast to all interested contacts |
46 for jid in pairs(origin.roster) do -- broadcast to all interested contacts |
46 local subscription = origin.roster[jid].subscription; |
47 local subscription = origin.roster[jid].subscription; |
47 if subscription == "both" or subscription == "from" then |
48 if subscription == "both" or subscription == "from" then |
48 stanza.attr.to = jid; |
49 stanza.attr.to = jid; |
238 if origin.type == "c2s" then |
239 if origin.type == "c2s" then |
239 if to ~= nil and not(origin.roster[to_bare] and (origin.roster[to_bare].subscription == "both" or origin.roster[to_bare].subscription == "from")) then -- directed presence |
240 if to ~= nil and not(origin.roster[to_bare] and (origin.roster[to_bare].subscription == "both" or origin.roster[to_bare].subscription == "from")) then -- directed presence |
240 origin.directed = origin.directed or {}; |
241 origin.directed = origin.directed or {}; |
241 origin.directed[to] = true; |
242 origin.directed[to] = true; |
242 end |
243 end |
243 if to == nil and stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error" then |
244 if stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error" then |
244 handle_outbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza); |
245 handle_outbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza); |
245 elseif not to then |
246 elseif not to then |
246 handle_normal_presence(origin, stanza, core_route_stanza); |
247 handle_normal_presence(origin, stanza, core_route_stanza); |
247 else |
248 else |
248 core_route_stanza(origin, stanza); |
249 core_route_stanza(origin, stanza); |
249 end |
250 end |
250 elseif (origin.type == "s2sin" or origin.type == "component") and hosts[host] then |
251 elseif (origin.type == "s2sin" or origin.type == "component") and hosts[host] then |
251 if to == nil and stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error" then |
252 if stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error" then |
252 handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza); |
253 handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza); |
253 else |
254 else |
254 core_route_stanza(origin, stanza); |
255 core_route_stanza(origin, stanza); |
255 end |
256 end |
256 end |
257 end |