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 )