/usr/local/CPAN/Nagios-NSCA/Nagios/NSCA/Client/InputFilter.pm


package Nagios::NSCA::Client::InputFilter;
use strict;
use warnings;
use Nagios::NSCA::DataPacket;
use Nagios::NSCA::Client::Settings;
use base 'Nagios::NSCA::Client::Base';
use constant NSCA_PACKET_VERSION => 3;

our $VERSION = sprintf("%d", q$Id: InputFilter.pm,v 1.2 2006/04/10 22:39:39 matthew Exp $ =~ /\s(\d+)\s/);

sub new {
    my ($class, %args) = @_;
    my $settings = Nagios::NSCA::Client::Settings->new();
    my $fields = {
        delimiter => $settings->delimiter(),
    };
    my $self = $class->SUPER::new(%args);
    $self->_initFields($fields);
    
    $self->delimiter($args{delimiter});

    return $self;
}

sub line2packet {
    my ($self, $line) = @_;
    my $packet;

    if ($line) {
        my $d = $self->delimiter;
        my %data; 

        if ($line =~ /^(.+?)$d(.+?)$d(\d+)$d(.+)$/) {  # Service checks
            %data = (host => $1, service => $2, code => $3, output => $4);
        } elsif ($line =~ /^(.+?)$d(\d+)$d(.+)$/) { # Host checks
            %data = (host => $1, service => "", code => $2, output => $3);
        } 
    
        if (%data) {
            $packet = Nagios::NSCA::DataPacket->new(%data);
        }
    }

    return $packet;
}

1;