IxNetwork

 view release on metacpan or  search on metacpan

lib/IxNetwork/IxNetworkLegacy.pm  view on Meta::CPAN


sub _CreateFileOnServer {
    my($self) = @_;
    my $filename = $_[1];

    $self->_Send(sprintf("<001><006><007%d>%s<009>", length($filename), $filename));
    my $remoteFilename = $self->_Recv();

    return $self->_SendRecv('ixNet', 'writeTo', $remoteFilename, '-ixNetRelative', '-overwrite')
}

sub _InitialConnect {
    my($self) = @_;
    my $address = $_[1];
    my $port = $_[2];
    my $options = $_[3];
    
    # make an initial socket connection
    # this will keep trying as it could be connecting to the proxy
    # which may not have an available application instance at that time
    my $attempts = 0;
    while(1)
    {
        my $ret = eval {
            if (validate::isIpv6($address) == 0) {
                # connect to IPv4 address (or a host name).
                my $protocol = getprotobyname('tcp');
                socket($self->{_socket}, Socket::AF_INET, Socket::SOCK_STREAM, $protocol);
                my $inetAddress = gethostbyname($address);
                my $sockAddress = Socket::sockaddr_in($port, $inetAddress);
                CORE::connect($self->{_socket}, $sockAddress);
            } else {
                if (!$checkDependencies::ipv6LoadError) {
                    require LWP::Protocol::INET6;
                    $self->{_socket} = LWP::Protocol::INET6->new(
                        PeerAddr => $address,
                        PeerPort => $port,
                        Proto    => 'tcp',
                    )
                    or die("Unknown Ipv6 address $address\n");
                } else {
                    die("Unable to load perl IPv6 module\n");
                }
            }
            1;
        };
        if (!$ret and $@) {
            if ((defined $self->{_proxySocket}) && $attempts < 120) {
                sleep(2);
                $attempts++;
            } else {
                $self->_Close();
                die "$@\n";
            }
        } else {
            last;
        }
    }
    
    ## a socket connection has been made now read the type of connection
    ## setup to timeout if the remote endpoint is not valid
    my $sock = $self->{_socket};
    $self->{_socket}->blocking(0);
    my $rin = '';
    vec($rin, fileno($sock), 1) = 1;
    my $timeout = 30;
    my $nfound = select(my $rout = $rin, undef, undef, $timeout);
    if ($nfound == 0)
    {
        $self->_Close();
        die "Connection handshake timed out after $timeout seconds\n";
    }
    $sock->blocking(1);
    my $ret = eval {
        my $connectString = $self->_Recv();
        if($connectString eq 'proxy') {
            $self->{_socket}->write($options);
            $self->{_socket}->flush();
            $self->{_connectTokens} = $self->_Recv();
            my %connectTokens = split(/ /, $self->{_connectTokens});
            $self->{_proxySocket} = $self->{_socket};
            $self->{_socket} = undef;
            $self->_InitialConnect($address, $connectTokens{-port}, '');
        }
        1;
    };
    if (!$ret and $@) {
        my $error = $@; 
        $self->_Close();
        die "$error";
    }
}

sub _Close {
    my($self) = @_;
    
    eval {
        if (defined $self->{_socket}) {
            close($self->{_socket});
            $self->{_socket} = undef;
        }
        if (defined $self->{_proxySocket}) {
            close($self->{_proxySocket});
            $self->{_proxySocket} = undef;
        }
        $self->{_port} = undef;
        $self->{_address} = undef;
        $self->{_sessionId} = undef;
        $self->{_serverusername} = undef;
    };
}

sub _Join {
    my($self) = @_;
    my @args = @_[1..scalar(@_) - 1];
    
    foreach my $arg (@args) {
        if (ref($arg) eq 'ARRAY') {
            if ($self->{_addContentSeparator} == 0) {
                $self->{_sendContent} .= chr(0x02);
            }



( run in 0.988 second using v1.01-cache-2.11-cpan-524268b4103 )