Agent-TCLI

 view release on metacpan or  search on metacpan

lib/Agent/TCLI/Transport/XMPP.pm  view on Meta::CPAN

sub PostRequest {
	my ($kernel,  $self, $sender, $request, ) =
  	  @_[KERNEL, OBJECT,  SENDER,      ARG0, ];
	$self->Verbose("PostRequest: sender(".$sender->ID.")
		request(".$request->id.") \n");

	my $addressee;

	# First, check if we're on the bottom of the stack.
	if ( $request->sender->[0] eq $self->alias )
	{
		#we're here, take us off
		$request->shift_sender;
		$request->shift_postback;
	}
#	elsif ( defined($request->sender->[0]) )  # implied != $self->alias
#	{
#		# TODO Genereate real error
#		$self->Verbose("PostRequest: Whoops! Got something in sender0 that shouldn't be there \n ".$request->dump(1));
#		return;
#	}

	if ( $request->sender->[0] eq 'XMPP' )
	{
		#take off XMPP and adressee.
		$request->shift_sender;
		$addressee = $request->shift_postback;
	}
	elsif ( defined($request->sender->[0]) )  # implied != 'XMPP'
	{
		# TODO Genereate real error
		$self->Verbose("PostRequest: Whoops! Got something in sender0 that shouldn't be there \n ".$request->dump(1));
		return;
	}

	# make sure sender put themselves on stack.
	# need to resolve POE sender to alias to do this.
#	if ( !defined($request->sender->[0]) || $request->sender->[0] ne $sender )
#	{
#		# Do them a favor and put them on.
#		$request->unshift_sender( $sender );
#		# but we'll have to assume they are at least compliant with response returns.
#		$request->unshift_postback('PostResponse');
#		$self->Verbose($self->alias.":PostRequest: putting ".$sender." on sender/postback stack");
#	}
	# Transmit will take care of putting self onto stack.

	# Now Transmit it
	$kernel->call($self->alias, 'TransmitRequest', $request, $addressee );
	return;
}

sub PostResponse {
	my ($kernel,  $self, $sender, $response, $control) =
  	  @_[KERNEL, OBJECT,  SENDER,      ARG0,     ARG1];
	$self->Verbose("PostResponse: sender(".$sender->ID.")
		Code(".$response->code.") \n");

#	my $request = $response->request;

	# The response should come back with either message nodes attached
	# or something in the sender/postback stack to provide
	# directions on where to go. If there a XMPP in the sender/postback
	# that means the request should get transmitted as a whole request (iq),
	# and not as a message/body, so let Transmit handle that.

	# First, check if we're on the bottom of the stack.
	if ( defined($response->sender->[0]) && $response->sender->[0] eq $self->alias )
	{
		#we're here, but we don't take us off anymore, so there is not much to do.
	}
	elsif ( defined($response->sender->[0]) )  # implied != $self->alias
	{
		# TODO Genereate real error
		$self->Verbose("PostResponse: Whoops! Got something in sender0 that shouldn't be there \n ".$response->dump(1));
		return;
	}

	# Now if there's anything for XMPP on the stack, Transmit it
	if ( defined($response->sender->[1]) && $response->sender->[1] eq 'XMPP' )
	{
		#we're here, take us off bottom
		$response->shift_sender;
		$response->shift_postback;
		$kernel->yield('TransmitResponse', $response );
		return;
	}
	elsif ( defined($response->sender->[1]) )  # implied != 'XMPP'
	{
		# TODO Genereate real error
		$self->Verbose("PostResponse: Whoops! Got something in sender1 that shouldn't be there \n ".$response->dump(1));
		return;
	}

	my $msg = $response->get_send();

	# If the send message has not been set up, then do it.
	if ( ref($msg) ne 'Net::XMPP::Message')
	{
  		$self->Verbose("PostResponse:  Creating new Send XMPP::Message", 2);

		# If we've got a recieved message, use it
		if ( ref( $response->get_recv ) =~ /Message/)
		{
			if ( $response->get_recv->GetType eq 'groupchat' )
			{
  				$msg = $response->get_recv()->Reply();
				$self->Verbose("PostResponse: Reply dump ", 5, $msg);
  				$msg->SetTo( $response->get_recv->GetFrom('jid')->GetJID('base') );
				$self->Verbose("PostResponse: Getfrom base ".$response->get_recv->GetFrom('jid')->GetJID('base'), 2 );
				$msg->SetFrom( $jid[$$self] );
			}
			else
			{
  				$msg = $response->get_recv()->Reply();
			}
		}
		elsif ( defined($control) )
		{
	  		$msg = Net::XMPP::Message->new();
  			$msg->SetTo( $control->get_jid() );



( run in 2.840 seconds using v1.01-cache-2.11-cpan-e1769b4cff6 )