Newsgroup: it.comp.lang.perl
Titolo: Problema interessante.

Ciao. Vi pongo un problema che devo risolvere. Se qualcuno puo' aiutarmi mi
mandi una mail a 
mat...@gate2000.com
Devo realizzare un CD-ROM interattivo formato HTML con ricerche in un
database e visualizzazione dei risultati.
Secondo me si potrebbe realizzare attraverso un programma che emuli sul
computer il server e gestisca il browser come client. Cosa ne pensate?
Credo che per fare cio' ci sia un programma (netsddeserver) della Netscape
. Qualcuno lo conosce o sa in quali occasione viene usato. Dove lo posso
trovare? (ho gia' cercato sul sito Netscape)
Grazie
Ciao
Matteo.

 wrote:
: Ciao. Vi pongo un problema che devo risolvere. Se qualcuno puo' aiutarmi mi
: mandi una mail a 
mat...@gate2000.com
Se scrivi qui, leggi qui.
: Devo realizzare un CD-ROM interattivo formato HTML con ricerche in un
: database e visualizzazione dei risultati.
: Secondo me si potrebbe realizzare attraverso un programma che emuli sul
: computer il server e gestisca il browser come client. Cosa ne pensate?
Nonostante non citi il Perl nel tuo articolo, devo supporre che tu
stia cercando una soluzione che faccia uso del Perl, dato che hai
postato su questo newsgroup.
Prova a dare un'occhiata ai moduli della gerarchia Server::* (su un
sito CPAN, ad esempio 
cis.utovrm.it
, nella directory
/CPAN/modules/by-module/Server) o al modulo IO::Socket, con cui puoi
costruire un server che possa interpretare qualche comando HTTP.
Magari per la il tuo tipo di applicazione basta poter servire il
GET e sei gia` a posto.
: Credo che per fare cio' ci sia un programma (netsddeserver) della Netscape
: . Qualcuno lo conosce o sa in quali occasione viene usato. Dove lo posso
: trovare? (ho gia' cercato sul sito Netscape)
E` un programma in Perl?
-- 
Nando Santagata: Telemastica & infornatica
Key fingerprint = C2 D9 C0 8E D5 B7 04 97  AF E8 3F 3E AF 4E 7F 9E

E` un programma in Perl?
Questo e' un rude simulatore che mi sono scritto per testare gli
script in locale prima di fare upload... E' molto primitivo ma
magari interessa a qualcuno...
Il fake-server gestisce GET e POST verso url di tipo .EXE e .PL; in
realta' viene pero' sempre lanciato un programma .PL.
Sono anche gestite richieste GET di immagini GIF e JPEG.
Il programma e' *limitatissimo* (fa esattamente quello che serviva
a me) ma non dovrebbe essere complicato estendere la cosa...
8< - - - - - - CUT HERE - - - - - - - - - - - - - - - - - - - - -
$tcp_proto=(getprotobyname('tcp'))[2];
socket(SOCK,2,1,$tcp_proto)        || die("socket: $!\n");
$saddr = pack('S n a4 x8', 2, 80, pack('C4',0,0,0,0));
bind(SOCK,$saddr)         || die("bind: $!\n");
listen(SOCK,10)           || die("listen: $!\n");
print "Waiting for connections...\n";
while(accept(NEW,SOCK))
{
  print "New connection:\n";
  $input=""; $n=0;
  $url=""; $length=""; $method="";
  INPUT: while(1)
  {
    if (recv(NEW,$buf,256,0))
    {
      $input.=$buf;
      while ($input=~/\r?\n/)
      {
        $n++;
        #print $n,"] '",$`,"'\n";
        $input=$';
        $line=$`;
        if ($line=~/^(GET|POST) (.*) HTTP\/1.0$/)
        {
          $url=$2; $method=$1;
        }
        if ($line=~/^Content-length: (\d+)/i)
        {
          $length=$1;
        }
        last INPUT unless $line;
      }
    }
    else
    {
      print "Hmmm...\n";
      last INPUT;
    }
  }
  $data=substr($input,0,$length);
  $length-=length($data);
  while ($length) 
  {
    recv(NEW,$buf,$length,0);
    $data.=$buf; $length-=length($buf);
  }
  print "Replying...\n";
 
  send(NEW,"HTTP/1.0 200 Ok\nMIME-version: 1.0\n",0);
  select((select(NEW),$|=1)[0]);
 
  if ($url)
  {
    $ENV{"REQUEST_METHOD"}=$method;
    if ($url=~/\?/)
    {
      $ENV{"QUERY_STRING"}=$';
      $url=$`;
    }
    $url="/wwwroot$url";
    if ($url=~/\.(pl|exe)$/)
    {
      $url="perl $`.pl";
      print "running $url\n";
      open(PRG,"|$url>result.cgi");
      print PRG $data,"\n";
      close(PRG);
      print "reading results\n";
      open(PRG,"result.cgi");
      undef $/; $res=<PRG>; $/="\n";
      close(PRG);
    }
    elsif ($url=~/\.(gif|jpg)$/)
    {
      print "$url\n";
      if (open(DATAFILE,$url))
      {
        binmode(DATAFILE);
        undef $/;
        $res="Content-type: image/".($1 eq "jpg" ? "jpeg" : $1).
             "\n\n".
             <DATAFILE>;
        $/="\n";
        close(DATAFILE);
      }
      else
      {
        $res="Content-type: text/plain\n\nObject not found\n";
      }
    }
    else
    {
      $res="Content-type: text/plain\n\nError...";
    }
  }
  else
  {
    $res="Content-type: text/plain\n\nError...";
  }
  print "Replying...\n";
  while (length($res)>0)
  {
    $l=send(NEW,$res,0);
    $res=substr($res,$l);
  }
  print "Replied\n"; 
 
  shutdown(NEW,2)    || die "shutdown: $!";
  close(NEW)         || die "close: $!";
}