Changeset 65 for trunk/lib/DJabberd/IQ.pm
- Timestamp:
- 04/09/06 02:26:57 (4 years ago)
- Files:
-
- 1 modified
-
trunk/lib/DJabberd/IQ.pm (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/DJabberd/IQ.pm
r64 r65 16 16 my $handler = { 17 17 'get-{jabber:iq:roster}query' => \&process_iq_getroster, 18 'set-{jabber:iq:roster}query' => \&process_iq_setroster, 18 19 'get-{jabber:iq:auth}query' => \&process_iq_getauth, 19 20 'set-{jabber:iq:auth}query' => \&process_iq_setauth, … … 40 41 } 41 42 42 sub send_result_nodes { 43 sub send_result { 44 my DJabberd::IQ $self = shift; 45 $self->send_reply("result"); 46 } 47 48 sub send_error { 49 my DJabberd::IQ $self = shift; 50 # TODO: take more parameters 51 $self->send_reply("error"); 43 52 } 44 53 … … 47 56 my DJabberd::IQ $self = shift; 48 57 my $raw = shift; 58 return $self->send_reply("result", $raw); 59 } 60 61 sub send_reply { 62 my DJabberd::IQ $self = shift; 63 my ($type, $raw) = @_; 49 64 50 65 my $conn = $self->{connection} 51 66 or return; 52 67 68 $raw ||= ""; 53 69 my $id = $self->id; 54 70 my $to = $conn->bound_jid->as_string; 55 my $xml = qq{<iq to='$to' type=' result' id='$id'>$raw</iq>};71 my $xml = qq{<iq to='$to' type='$type' id='$id'>$raw</iq>}; 56 72 warn "About to send IQ reply: $xml\n"; 57 73 $conn->write(\$xml); … … 81 97 } 82 98 99 sub process_iq_setroster { 100 my ($conn, $iq) = @_; 101 102 $DB::single = 1; 103 104 my $item = $iq->query->first_element; 105 unless ($item && $item->element eq "{jabber:iq:roster}item") { 106 $iq->send_error; 107 return; 108 } 109 110 # {=xmpp-ip-7.6-must-ignore-subscription-values} 111 my $subattr = $item->attr('subscription') || ""; 112 my $removing = $subattr eq "remove" ? 1 : 0; 113 114 my $jid = $item->attr("{jabber:iq:roster}jid") 115 or return $iq->send_error; 116 117 my $name = $item->attr("{jabber:iq:roster}name"); 118 119 # find list of group names to add/update. can ignore 120 # if we're just removing. 121 my @groups; # scalars of names 122 unless ($removing) { 123 foreach my $ele ($item->children_elements) { 124 next unless $ele->element eq "{jabber:iq:roster}group"; 125 push @groups, $ele->first_child; 126 } 127 } 128 129 my $ritem = DJabberd::RosterItem->new(jid => $jid, 130 name => $name, 131 groups => \@groups); 132 133 my $phase = $removing ? "RosterRemoveItem" : "RosterSetItem"; 134 $conn->run_hook_chain(phase => $phase, 135 args => [ $ritem ], 136 methods => { 137 done => sub { 138 my ($self) = @_; 139 $iq->send_result; 140 # TODO: roster push 141 }, 142 }, 143 fallback => sub { 144 $iq->send_error; 145 # TODO: roster push 146 }); 147 148 return 1; 149 } 150 83 151 sub process_iq_getauth { 84 152 my ($conn, $iq) = @_;
