📄 soap.pm
字号:
my $params = $soap_transaction->params(); my @order = sort(keys(%$params)); # is this what I have to do? my $sid = $params->{$order[0]} if defined $params->{$order[0]}; my $service = $params->{$order[1]} if defined $params->{$order[1]}; my $to = $params->{$order[2]} if defined $params->{$order[2]}; my $nick = $params->{$order[3]} if defined $params->{$order[3]}; my $group = $params->{$order[4]} if defined $params->{$order[4]}; my $request = $params->{$order[5]} if defined $params->{$order[5]}; if ($punjab_session->check_session($sid)) { $punjab_session->activity($sid,time()); my $id = luniqid; if (defined($to)) { if (defined($request)) { $kernel->post($sid, 'send_presence', 'subscribe', 'Online', 'Online',$to); } my $node = POE::Filter::XML::Node->new('iq'); $node->attr('type','set'); $node->attr('id',$id); my $query = $node->insert_tag('query'); $query->attr('xmlns',NS_JABBER_ROSTER); my $item = $query->insert_tag('item'); my $g_tag = $query->insert_tag('group'); $g_tag->data($group); $item->attr('name',$nick); $item->attr('jid',$to); $kernel->post($sid,'send_xml',$node); &debug("start_contact : Manage Contact set"); $kernel->post('Manager'.$sid,'manage_events', 'return_contact', $soap_transaction,$node,$sid); #$soap_transaction->return(TRUE); } } else { $soap_transaction->return(FALSE); }}sub jabber_start_roster{ my ($kernel,$heap,$session,$soap_transaction) = @_[KERNEL, HEAP, SESSION, ARG0]; my $params = $soap_transaction->params(); my @order = sort(keys(%$params)); # is this what I have to do? my $sid = $params->{$order[0]}; my $id = luniqid; if ($punjab_session->check_session($sid)) { $punjab_session->activity($sid,time()); $kernel->post('Manager'.$sid,'start_roster', 'return_roster', $soap_transaction,$id,$sid,'JABBER'.$sid); return; } else { $soap_transaction->return("Session does not exist"); }}sub jabber_get_roster{ my $soap_transaction = $_[ARG0]; my $params = $soap_transaction->params(); my @order = sort(keys(%$params)); # is this what I have to do? my $sid = $params->{$order[0]}; #my $iq_id = $params->{$order[1]}; my (@c,$h_ret,@a_ret,$ret); # grab the iq #$kernel->post('Manager'.$sid,'get_managed_roster','send_soap',$soap_transaction); $ret = $poe_kernel->call('Manager'.$sid,'get_managed_roster'); if ((!(defined($ret)))||($ret eq "")) { $soap_transaction->return(FALSE); return FALSE; } $soap_transaction->return($ret->to_str());}sub jabber_get_message{ my $soap_transaction = $_[ARG0]; my $params = $soap_transaction->params(); my @order = sort(keys(%$params)); # is this what I have to do? my $sid = $params->{$order[0]} if defined $params->{$order[0]}; my $to = $params->{$order[1]} if defined $params->{$order[1]}; my $type = $params->{$order[2]} if defined $params->{$order[2]}; my $id = $params->{$order[3]} if defined $params->{$order[3]}; my $from = $params->{$order[4]} if defined $params->{$order[4]}; my (@c,$ret); # grab the message $ret = $poe_kernel->call('Manager'.$sid,'get_managed_message',$to,$from,$id,$type); if ((!(defined($ret)))||($ret eq "")) { $soap_transaction->return(FALSE); return FALSE; } $soap_transaction->return($ret->to_str());}sub jabber_get_presence{ my ($kernel,$heap,$session,$soap_transaction) = @_[KERNEL, HEAP, SESSION, ARG0]; my $params = $soap_transaction->params(); my @order = sort(keys(%$params)); my $sid = $params->{$order[0]}; my $to = $params->{$order[1]}; my $from = $params->{$order[2]}; my (@c,$ret); if ($punjab_session->check_session($sid)) { $punjab_session->activity($sid,time()); # grab the presence $ret = $kernel->call('Manager'.$sid,'get_managed_presence',$to,$from); if ((!(defined($ret)))||($ret eq "")) { $soap_transaction->return(FALSE); return FALSE; } #utf8::downgrade($ret); $soap_transaction->return($ret); return; } else { $soap_transaction->return(FALSE); }}sub jabber_get_iq{ my $soap_transaction = $_[ARG0]; my $params = $soap_transaction->params(); my @order = sort(keys(%$params)); # is this what I have to do? my $sid = $params->{$order[0]}; my $iq_id = $params->{$order[1]}; my (@c,$h_ret,@a_ret,$ret); $ret = $poe_kernel->call('Manager'.$sid,'get_managed_iq',$iq_id); if ((!(defined($ret)))||($ret eq "")) { $soap_transaction->return(FALSE); return FALSE; } # for now just send the hash $soap_transaction->return($ret->to_str());}sub jabber_check_message{ my $soap_transaction = $_[ARG0]; my $params = $soap_transaction->params(); my @order = sort(keys(%$params)); # is this what I have to do? my $sid = $params->{$order[0]} if defined $params->{$order[0]}; my $to = $params->{$order[1]} if defined $params->{$order[1]}; my (@c,$ret); # grab the message $ret = $poe_kernel->call('Manager'.$sid,'check_managed_message',$to); if ((!(defined($ret)))||($ret eq "")) { $soap_transaction->return(FALSE); return FALSE; } $soap_transaction->return($ret->to_str());}sub return_iq() { my ($kernel,$session,$heap,$new_node, $soap_transaction,$node,$sid) = @_[KERNEL, SESSION, HEAP, ARG0 .. ARG3]; my $ret = $kernel->call('Manager'.$sid,'get_managed_iq',$node->attr('id')); if ((!(defined($ret)))||($ret eq "")) { $soap_transaction->return(FALSE); return FALSE; } # for now just send the hash $soap_transaction->return($ret->to_str()); #$soap_transaction->return('Return IQ'); }sub return_contact() { my ($kernel,$session,$heap,$new_node, $soap_transaction,$node,$sid) = @_[KERNEL, SESSION, HEAP, ARG0 .. ARG3]; my $attrs; if ((!(defined($new_node)))||($new_node eq "")) { $soap_transaction->return(FALSE); return FALSE; } $attrs = $new_node->get_attrs(); if (defined $attrs->{'type'} and $attrs->{'type'} eq +IQ_ERROR) { &debug("ERROR : ".$new_node->to_str()); $soap_transaction->return("error"); return FALSE; } if (defined($attrs->{'type'}) and $attrs->{'type'} eq +IQ_RESULT) { $soap_transaction->return('<contact/>'); } $soap_transaction->return(FALSE); }sub return_roster() { my ($kernel,$session,$heap,$new_node, $soap_transaction,$node,$sid) = @_[KERNEL, SESSION, HEAP, ARG0 .. ARG3]; my $ret = $poe_kernel->call('Manager'.$sid,'get_managed_roster'); if ((!(defined($ret)))||($ret eq "")) { $soap_transaction->return(FALSE); return FALSE; } $new_node->free(); $soap_transaction->return($ret->to_str());}# private functionssub send_soap { my ($kernel,$session,$heap,$ret_val,$soap_trans) = @_[KERNEL, SESSION, HEAP, ARG0, ARG1]; my $ret; if(ref($ret_val) eq 'HASH') { } elsif(ref($ret_val) eq 'ARRAY') { } else { $ret = $ret_val; } $soap_trans->return($ret_val);}sub check_timeout(){ my ($kernel,$session,$heap) = @_[KERNEL, SESSION, HEAP]; my @keys = keys %{$punjab_session->registry()}; $heap->{'session_keys'} = \@keys; $kernel->yield('check_timeout_continue'); }sub check_timeout_continue(){ my ($kernel,$session,$heap) = @_[KERNEL, SESSION, HEAP]; my $ctime = time(); my $s = pop(@{$heap->{'session_keys'}}); if (not defined $s) { my $count = keys %{$punjab_session->registry()}; if ($count > 0) { $kernel->delay('check_timeout', $heap->{'CONFIG'}->{'idle_check'}); } return; } if (($ctime - $punjab_session->activity($s))>=$heap->{'CONFIG'}->{'timeout'}) { $kernel->post($s,'disconnect',$s); $punjab_session->unregister($s); } $kernel->yield('check_timeout_continue');}1;__END__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -