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

📄 soap.pm

📁 Punjab is a jabber XMLRPC/SOAP/REST client. It is a xmlrpc, soap, or REST server that allows for p
💻 PM
📖 第 1 页 / 共 2 页
字号:
package PunJab::Soap;use strict;use warnings;use POE;use POE::Filter::XML;use POE::Filter::XML::Node;use POE::Filter::XML::NS qw/ :JABBER :IQ /;use POE::Filter::XML::Utils;use PunJab::Util;use PunJab::Session;use PunJab::Server::Soap;use POSIX qw(strftime);use Digest::MD5 qw(md5 md5_hex md5_base64);use Data::Uniqid qw ( suniqid uniqid luniqid );use Digest::SHA1;sub new {    shift;    my $config = shift;        $config->{'type'} = "soap_client";    PunJab::Server::Soap->new($config,'soap_server');    POE::Session->create	( inline_states =>	  { _start => sub {	      my $kernel = $_[KERNEL];	      if ($config->{debug}>0) {		  &debug("Soap Interface Session Started\n");	      }	      $kernel->alias_set("soap_client");	      $kernel->post( soap_server => publish => soap_client => "dump_body" );	      $kernel->post( soap_server => publish => soap_client => "send_xml" );	      #$kernel->post( soap_server => publish => soap_client => "send_iq" );	      $kernel->post( soap_server => publish => soap_client => "get_iq" );	      $kernel->post( soap_server => publish => soap_client => "start_roster" );	      #$kernel->post( soap_server => publish => soap_client => "check_roster" );	      $kernel->post( soap_server => publish => soap_client => "start_contact" );	      $kernel->post( soap_server => publish => soap_client => "send_presence" );	      $kernel->post( soap_server => publish => soap_client => "get_presence" );	      $kernel->post( soap_server => publish => soap_client => "get_roster" );	      $kernel->post( soap_server => publish => soap_client => "get_message" );	      $kernel->post( soap_server => publish => soap_client => "check_message" );	      $kernel->post( soap_server => publish => soap_client => "send_message" );	      $kernel->post( soap_server => publish => soap_client => "connect" );	      $kernel->post( soap_server => publish => soap_client => "disconnect" );	  },	    session_register => sub {		my $sid = $_[ARG0];				$punjab_session->register($sid);		$punjab_session->logged_in($sid,1);		$punjab_session->activity($sid,time());		if ($_[HEAP]->{'CONFIG'}->{debug} > 1) {		    &debug("SOAP Session $sid registered");		}	    },	    session_unregister => sub {		my $sid = $_[ARG0];		$punjab_session->unregister($sid);				if ($_[HEAP]->{'CONFIG'}->{debug} > 1) {		    &debug("SOAP Session $sid unregistered");		}	    },            # -------------------------- #            # client methods            # -------------------------- #	    connect       => \&jabber_connect,	    disconnect    => \&jabber_disconnect,	    	    # send methods	    send_xml      => \&jabber_send_xml,	    #send_iq       => \&jabber_send_iq,	    send_presence => \&jabber_send_presence,	    send_message  => \&jabber_send_message,          	    # roster methods	    start_roster  => \&jabber_start_roster,	    get_roster    => \&jabber_get_roster,	    start_contact  => \&jabber_start_contact,	    # get methods	    get_message   => \&jabber_get_message,	    get_presence  => \&jabber_get_presence,	    get_iq        => \&jabber_get_iq,	    	    # check methods	    check_message => \&jabber_check_message,	    #check_roster	    #check_iq?	    send_soap      => \&send_soap,	    	    #none soap functions	    return_iq      => \&return_iq,	    return_roster  => \&return_roster,	    return_contact => \&return_contact,	    	    	    check_timeout  => \&check_timeout,	    check_timeout_continue  => \&check_timeout_continue,	},	  heap => { CONFIG => $config },	  options => { debug => $config->{'debug'}, trace => $config->{'debug'} }	  );    return undef;}### Handlers for the soap server. #my %users;sub shutdown_service {    $_[KERNEL]->post( soapy => rescind => service => "connect" );    $_[KERNEL]->post( soapy => rescind => service => "disconnect" );    $_[KERNEL]->yield("shutdown");}sub jabber_connect {    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 $jid    = $params->{$order[0]};    my $pass   = $params->{$order[1]};    my $port   = $params->{$order[2]};    my ($session_id,$error);        if ($jid eq "" or $pass eq "") {	$soap_transaction->return(FALSE);	return FALSE;    }    my ($username,$hostname,$resource) = &parse_jid($jid);        #my $port_num = '5222' if not defined $port;    if ($port eq "") {	$port = 5222;    }    ### Create the session    # put this in a soap header    my $ip = $soap_transaction->request()->{remote_ip};    $ip = luniqid if not defined $ip;    my $key = $jid.$pass.$resource.$ip;    $session_id = $punjab_session->key($key);    ### Start the jabber client.      if ($heap->{'CONFIG'}->{server}->{debug} > 1) {	&debug('Connecting : ' .$jid." : ". $session_id . ":" .$port."\n");    }    if ($punjab_session->check_session($session_id)) {	$soap_transaction->return($session_id);	return;    }        PunJab::JabberConnection->new($session_id,				  $jid,				  $pass,				  $username,				  $resource,				  $hostname,				  $port,				  $heap->{'CONFIG'},				  $soap_transaction,				  'session_register',				  'session_unregister');    $kernel->delay('check_timeout', $heap->{'CONFIG'}->{'idle_check'},$session_id);    }sub jabber_disconnect {    my ($kernel,$heap,$session,$soap_transaction) = @_[KERNEL, HEAP, SESSION, ARG0];    my $params           = $soap_transaction->params();    my ($cruft,$sid)     = each(%$params);     $kernel->call($sid,'disconnect');                  $soap_transaction->return(1);    }sub jabber_send_xml{    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 $xml    = $params->{$order[1]};    if ($punjab_session->check_session($sid)) {        $punjab_session->activity($sid,time());	# turn into a node	my $node = &str_to_node($xml);	# maybe add this to the manager?	# $kernel->post('Manager'.$sid,'output_event',$node);	if (defined($node)) {	    my $attrs = $node->get_attrs();	    my $id = $attrs->{'id'};	    	    if (defined($id) and $node->name() eq "iq") {		$kernel->post($sid,'send_xml',$node);		&debug("send_xml : Manage IQ");		$kernel->post('Manager'.$sid,'manage_events', 'return_iq', 				  $soap_transaction,$node,$sid);				return;	    } else {		$kernel->post($sid,'send_xml',$node);	    }	    	    $soap_transaction->return(1);	} else {	    $soap_transaction->return("Error in xml node.");	}    } else {	$soap_transaction->return("Session does not exist");    }}sub jabber_send_message{    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 $to      = $params->{$order[1]};    my $subject = $params->{$order[2]};    my $body    = $params->{$order[3]};    my $type    = $params->{$order[4]};    my $id      = $params->{$order[5]};    if ($punjab_session->check_session($sid)) {        $punjab_session->activity($sid,time());	    	my $xml    = POE::Filter::XML::Node->new('message');	if ($id eq "") {	    $id     = strftime("%m%d%y%H%M%S%Y", localtime);	}	$xml->attr('id',$id);	$xml->attr('to',$to);	$xml->attr('from',$heap->{'jid'});	$xml->attr('type',$type);	if (defined($subject) and $subject ne "") {	    my $subject_t = $xml->insert_tag('subject');	    $subject_t->data($subject);	}	my $body_t = $xml->insert_tag('body');	$body_t->data($body);		$kernel->post($sid,'send_xml',$xml);		$soap_transaction->return(1);    } else {	$soap_transaction->return("Session does not exist");    }    }sub jabber_send_presence{    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]} 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 $show   = $params->{$order[3]} if defined $params->{$order[3]};    my $status = $params->{$order[4]} if defined $params->{$order[4]};        if ($punjab_session->check_session($sid)) {        $punjab_session->activity($sid,time());        		if (defined($to) and defined($type) and defined($show) and defined($status)) {	    if (length($to)>1) {		$kernel->post('JABBER'.$sid,'send_presence',$type,$show,$status,$to);	    } else {		$kernel->post('JABBER'.$sid,'send_presence',$type,$show,$status);	    }	    if ($type eq "subscribed") {		$kernel->call('Manager'.$sid,'delete_presence',$to);	    }	} else {	    $kernel->post('JABBER'.$sid,'send_presence');	}	$soap_transaction->return(TRUE);    } else {	$soap_transaction->return(FALSE);    }}sub jabber_start_contact{    my ($kernel,$heap,$session,$soap_transaction) = @_[KERNEL, HEAP, SESSION, ARG0];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -