⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlrpc.pm

📁 Punjab is a jabber XMLRPC/SOAP/REST client. It is a xmlrpc, soap, or REST server that allows for p
💻 PM
📖 第 1 页 / 共 2 页
字号:
	}     } else {	$xmlrpc_transaction->error("Session does not exist");    }}sub jabber_start_roster{    my ($kernel,$heap,$session,$xmlrpc_transaction) = @_[KERNEL, HEAP, SESSION, ARG0];    my $params = $xmlrpc_transaction->params();    my $sid    = $params->[0];    my $id = luniqid;    &debug("HERE");    if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());	&debug("We have a session!");  	$kernel->post('Manager'.$sid,'start_roster', 'return_roster', 			  $xmlrpc_transaction,$id,$sid,'JABBER'.$sid);	    } else {	$xmlrpc_transaction->error("Session does not exist");    }}sub jabber_get_roster{    my ($kernel,$heap,$session,$xmlrpc_transaction) = @_[KERNEL, HEAP, SESSION, ARG0];    my $params = $xmlrpc_transaction->params();    my $sid    = $params->[0];        if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());	$poe_kernel->post('Manager'.$sid,'get_managed_roster','send_xmlrpc',$xmlrpc_transaction);	    } else {	$xmlrpc_transaction->error("Session does not exist");    }}sub jabber_get_message{    my $xmlrpc_transaction = $_[ARG0];        my $params = $xmlrpc_transaction->params();    my $sid    = $params->[0] if defined $params->[0];    my $to     = $params->[1] if defined $params->[1];    my $type   = $params->[2] if defined $params->[2];    my $id     = $params->[3] if defined $params->[3];    my $from   = $params->[4] if defined $params->[4];    if ($punjab_session->check_session($sid)) {	# grab the message 	$punjab_session->activity($sid,time());	$poe_kernel->post('Manager'.$sid,'get_managed_message',$to,$from,$id,$type,'send_xmlrpc',$xmlrpc_transaction);			return;    }    $xmlrpc_transaction->error("Session does not exist");}sub jabber_get_presence{    my ($kernel,$heap,$session,$xmlrpc_transaction) = @_[KERNEL, HEAP, SESSION, ARG0];    my $params = $xmlrpc_transaction->params();        my $sid    = $params->[0];    my $to     = $params->[1];    my $from   = $params->[2];    if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());	# grab the presence	$kernel->post('Manager'.$sid,'get_managed_presence',$to,$from,'send_xmlrpc',$xmlrpc_transaction);	return;    } else {	$xmlrpc_transaction->error("Session does not exist");    }}sub jabber_get_iq{    my $xmlrpc_transaction = $_[ARG0];    my $params = $xmlrpc_transaction->params();    my $sid    = $params->[0];    my $iq_id  = $params->[1];            if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());	# grab the presence	$poe_kernel->post('Manager'.$sid,'get_managed_iq',$iq_id,'send_xmlrpc',$xmlrpc_transaction);	    } else { 	$xmlrpc_transaction->error("Session does not exist");    }}sub jabber_check_message{    my $xmlrpc_transaction = $_[ARG0];    my $params = $xmlrpc_transaction->params();    my $sid    = $params->[0] if defined $params->[0];    my $to     = $params->[1] if defined $params->[1];    my $from   = $params->[1] if defined $params->[2];        if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());		# grab the message 	$poe_kernel->post('Manager'.$sid,'check_managed_message',$to,$from,'send_xmlrpc',$xmlrpc_transaction); 	    } else {	$xmlrpc_transaction->error("Session does not exist");    }}sub vcard(){    my $xmlrpc_transaction = $_[ARG0];    my $params = $xmlrpc_transaction->params();    my $id = luniqid;     my $sid    = $params->[0] if defined $params->[0];    my $jid    = $params->[1] if defined $params->[1];        if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());	$_[KERNEL]->post($sid,'start_vcard', 'return_vcard', 			 $xmlrpc_transaction,$jid,$id);	#$xmlrpc_transaction->return("vcard");    } else {	$xmlrpc_transaction->error("Session does not exist");    }}sub browse(){    my $xmlrpc_transaction = $_[ARG0];    my $params = $xmlrpc_transaction->params();    my $id     = luniqid;     my $sid    = $params->[0] if defined $params->[0];    my $jid    = $params->[1] if defined $params->[1];    my $auto   = $params->[2] if defined $params->[2]; # auto browse into objects    my $items  = $params->[3] if defined $params->[3]; # auto get item information    if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());	# this needs alot of cleaning up. 	$_[KERNEL]->post($sid,'start_browse', 'return_browse', 			 $xmlrpc_transaction,$id,$jid,$auto,$items);	   	    } else {	$xmlrpc_transaction->error("Session does not exist");    }   }sub return_browse() {    my ($kernel,$session,$heap,$ret_val, $xmlrpc_transaction,$id,$jid,$sid) = 	@_[KERNEL, SESSION, HEAP, ARG0, ARG1 .. ARG6];    my $ret;    if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());	# this is really ugly for now. 	if (not defined $heap->{'browse'}->{$sid}) {	    	    $heap->{'browse'}->{$sid} = [];	  	} 	my $query = $ret_val->get_tag('query');	my $service = $ret_val->get_tag('service');	if ($ret_val->attr('type') ne 'error') {	    if (defined($query)) {		$ret = $query->get_attrs();		if (defined($ret->{'xmlns'}) 		    and $ret->{'xmlns'} eq "http://jabber.org/protocol/disco#items") {		    $ret->{'items'} = [];		    my $ic = $query->get_children();		    foreach my $i (@$ic) {			# if auto or items are set then we send other messages?			push(@{$ret->{'items'}},$i->get_attrs());		    }		} elsif (defined($ret->{'xmlns'}) 			 and $ret->{'xmlns'} eq "http://jabber.org/protocol/disco#info") {		    my $ident = $query->get_tag('identity');		    $ret->{'identity'} = $ident->get_attrs();		    $ret->{'features'} = [];		    my @fs = $query->get_tag('feature');		    foreach my $f (@fs) {			if (ref($f) eq "POE::Filter::XML::Node") {			    push(@{$ret->{'features'}},$f->get_attrs());			}		    }		}	    } elsif (defined($service)) {		$ret = $service->get_attrs();		$ret->{'services'} = [];		my $sc = $service->get_children();		foreach my $c (@$sc) {		    my $rc = $c->get_attrs();		    $rc->{'supports'} = [];		    my $rsc = $c->get_children();		    foreach my $tc (@$rsc) {			push(@{$rc->{'supports'}},$tc->data());		    }		    push(@{$ret->{'services'}},$rc);		}	    }	    push(@{$heap->{'browse'}->{$sid}},$ret);	} else {	    push(@{$heap->{'browse'}->{$sid}},undef);	}		if ($#{$heap->{'browse'}->{$sid}}>=2) {	    # parse through the ret vals? 	    $kernel->yield('send_xmlrpc',$heap->{'browse'}->{$sid},$xmlrpc_transaction);	    delete $heap->{'browse'}->{$sid};	}    } else {	$xmlrpc_transaction->error("Session does not exist");           }}sub return_vcard() {    my ($kernel,$session,$heap,$ret_val, $xmlrpc_transaction,$node,$sid) = 	@_[KERNEL, SESSION, HEAP, ARG0 .. ARG3];    my $ret;    if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());	my $v = $ret_val->get_tag('vCard');	my $c = $v->get_children() if defined $v;	foreach my $c (@$c) {	    $ret->{$c->name()} = $c->data();	}	if (defined $ret) {	    	    $kernel->yield('send_xmlrpc',$ret,$xmlrpc_transaction);	} else {	    $xmlrpc_transaction->error("VCARD for ".$ret_val->attr('from')." does not exist");       	}    } else {	$xmlrpc_transaction->error("Session does not exist");           }}sub return_iq() {    my ($kernel,$session,$heap,$new_node, $xmlrpc_transaction,$node,$sid) = 	@_[KERNEL, SESSION, HEAP, ARG0 .. ARG3];        if ($punjab_session->check_session($sid)) {	$punjab_session->activity($sid,time());	$kernel->post('Manager'.$sid,'get_managed_iq',$node->attr('id'),'send_xmlrpc',$xmlrpc_transaction);		    } else {	$xmlrpc_transaction->error("Session does not exist");           }}sub return_contact() {    my ($kernel,$session,$heap,$new_node, $xmlrpc_transaction,$node,$sid) = 	@_[KERNEL, SESSION, HEAP, ARG0 .. ARG3];        my $attrs;        if ((!(defined($new_node)))||($new_node eq "")) {	$xmlrpc_transaction->return(FALSE);	return FALSE;    }    $attrs = $new_node->get_attrs();    my $error = "";    if (defined $attrs->{'type'} and $attrs->{'type'} eq +IQ_ERROR) {	$error = $new_node->get_tag('error')->data();	$xmlrpc_transaction->error($error);	return FALSE;    }            if (defined($attrs->{'type'}) and $attrs->{'type'} eq +IQ_RESULT) {	$xmlrpc_transaction->return(+TRUE);    }    $xmlrpc_transaction->error("error in contact");    }sub return_roster() {    my ($kernel,$session,$heap,$new_node, $xmlrpc_transaction,$node,$sid) = 	@_[KERNEL, SESSION, HEAP, ARG0 .. ARG3];    if ($punjab_session->check_session($sid)) {		$kernel->post('Manager'.$sid,'get_managed_roster','send_xmlrpc',$xmlrpc_transaction);	    } else {	$xmlrpc_transaction->error("Session does not exist");    }}# private functionssub send_xmlrpc {    my ($kernel,$session,$heap,$ret_val,$xmlrpc_trans) =       @_[KERNEL, SESSION, HEAP, ARG0, ARG1];    $xmlrpc_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 + -