#!/usr/bin/perl use strict; use Socket; my $Dest = "localhost"; my $Port = 2001; my $Timeout = 30; # max. seconds to wait for response sub Error { print STDERR "@_\n"; close(SOCK); exit 0; } sub SplitLine($) { my ($line)=@_; if ($line =~ /^([0-9]{3})([- ])(.*)$/) { return ($1,$2,$3); } Error("Unidentified Line: $line"); } sub CopyEPG($$) { my ($src,$dst)=@_; my @epg; print SOCK "LSTE $src\r\n"; while () { chomp; my ($code,$sep,$data)=SplitLine($_); if ($code==215 && $sep eq '-') { push @epg,$data; } else { print STDOUT "(2):$_\n"; } last if ($code==215 && $sep eq ' '); } print SOCK "PUTE\r\n"; foreach my $line (@epg) { $line =~ s/^C [^ ]* (.*)$/C $dst $1/; print SOCK "$line\r\n"; } print SOCK ".\r\n"; while () { chomp; print STDOUT "(3):$_\n"; my ($code,$sep,$data)=SplitLine($_); last if ($code==250 && $sep eq ' '); } } $SIG{ALRM} = sub { Error("timeout"); }; alarm($Timeout); my $iaddr = inet_aton($Dest) || Error("no host: $Dest"); my $paddr = sockaddr_in($Port, $iaddr); my $proto = getprotobyname('tcp'); socket(SOCK, PF_INET, SOCK_STREAM, $proto) || Error("socket: $!"); connect(SOCK, $paddr) || Error("connect: $!"); select(SOCK); $| = 1; select(STDOUT); while () { chomp; print STDOUT "(1):$_\n"; my ($code,$sep,$data)=SplitLine($_); last if ($code=220 && $sep eq ' '); } CopyEPG("S19.2E-133-33-46","S19.2E-1-1082-20005"); # Sat.1 DE->AU CopyEPG("S19.2E-133-33-899","S19.2E-1-1082-20004"); # Kabel 1 DE->AU CopyEPG("S19.2E-133-33-898","S19.2E-1-1082-20002"); # ProSieben DE->AU print SOCK "quit\r\n"; while () { chomp; print STDOUT "(4):$_\n"; my ($code,$sep,$data)=SplitLine($_); last if ($code==221 && $sep eq ' '); } close(SOCK) || Error("close: $!");