• Publicidad

Ayuda con CGI:IRC 2

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Ayuda con CGI:IRC 2

Notapor Unix_Sendin » 2006-03-06 08:25 @392

yo ya aregle el problema del que le esplique ahora me da otro error aqui te lo pongo
Código: Seleccionar todo
*** An error occurred: Error opening socket: Unknown error
en los logs da este error
Código: Seleccionar todo
Use of uninitialized value in bitwise and (&) at modules/parse.pl line 56.\n
aqui le pongo el parse.pl si le ase falta mas dimelo para mandarte el programa completo.

Código: Seleccionar todo
#### Parsing Functions
use strict;

## Reads a config file from the filename passed to it, returns a reference to
## a hash containing the name=value pairs in the file.
sub parse_config {
   my %config;
   open(CONFIG, "<$_[0]") or error("Opening config file '$_[0]': $!");
   while(<CONFIG>) {
      s/(\015\012|\012)$//; # Be forgiving for poor windows users
      next if /^\s*[#;]/; # Comments
      next if !/=/;

      my($key,$value) = split(/\s*=\s*/, $_, 2);
      $config{$key} = defined $value ? $value : '';
   }
   close(CONFIG);
   return \%config;
}

sub make_utf8 {
        # Use perl's unicode support assuming we have 5.6 and Encode
        return pack("U", hex($_[0])) if $] >= 5.006 && $::ENCODE;
        # From http://www1.tip.nl/~t876506/utf8tbl.html
   my $chr = unpack("n", pack("H*", shift));
   return chr $chr if $chr < 0x7F;
   return chr(192 + int($chr / 64)) . chr(128 + $chr % 64) if $chr <= 0x7FF;
   return chr(224 + int($chr / 4096)) . chr(128 + int($chr / 64) % 64) .
      chr(128 + $chr % 64) if $chr <= 0xFFFF;
   return chr(240 + int($chr / 262144)) . chr(128 + int($chr / 4096) % 64) .
      chr(128 + int($chr / 64) % 64) . chr(128 + $chr % 64) if $chr <= 0x1FFFFF;
   return "";
}

## Parses a CGI input, returns a hash reference to the value within it.
## The clever regexp bit is from cgi-lib.pl
## This now also removes certain characters that might not be a good idea.
## $ext (bitmask): 1 to *NOT* remove \n etc, 2 to treat input as xmlhttp
## (different encoding for +).
sub parse_query {
   my($query, $ext) = @_;
   return {} unless defined $query and length $query;

   return {
          map {
             s/\+/ /g unless defined $ext and $ext & 2;
             my($key, $val) = split(/=/,$_,2);
             $val = "" unless defined $val;

             $key =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
             $key =~ s/[\r\n\0\001]//g;

        # Modified from unescape as found in CGI::Util
                  # (can't use CGI::Util due to + oddity from XMLHTTP).
                  $val =~ s{%(?:([0-9a-fA-F]{2})|u([0-9a-fA-F]{4}))}
                    {
                                 if(defined($1)) {
                                         if($ext & 2 and hex($1) > 0x7F) {
                                                 make_utf8("00$1");
                                         }else{
                                                 pack("C", hex($1));
                                         }
                                 }else{
                                         make_utf8($2);
                                 }
                        }ge;

        if(defined $ext and $ext & 1) {
           $val =~ s/[\0\001]//g;
        }else{
           $val =~ s/[\r\n\0\001]//g;
        }

                  Encode::_utf8_on($val) if $::ENCODE;

             $key => $val; # Return a hash element to map.
      } split(/[&;]/, $query)
   };
}

sub parse_cookie {
   if(exists $ENV{HTTP_COOKIE} && $ENV{HTTP_COOKIE} =~ /cgiircauth/) {
          for(split /;/, $ENV{HTTP_COOKIE}) {
                 s/^\s+//;
                 my($name,$value) = split(/=/,$_,2);
                 return $value if $name eq "cgiircauth";
          }
   }
   return 0;
}

sub parse_interface_cookie {
   my %tmp = ( );
   if(exists $ENV{HTTP_COOKIE} && $ENV{HTTP_COOKIE} =~ /cgiirc/) {
      for(split /;/, $ENV{HTTP_COOKIE}) {
         s/^\s+//;
         my($name,$value) = split(/=/,$_,2);
         next if $name =~ /[^a-z]/i;
         next unless $name =~ s/^cgiirc//;
         next if $name eq 'auth';
         $tmp{$name} = $value;
      }
   }
   return \%tmp;
}

sub escape_html {
   my($html) = @_;
   $html =~ s/&/&amp;/g;
   $html =~ s/>/&gt;/g;
   $html =~ s/</&lt;/g;
   $html =~ s/"/&quot;/g;
   return $html;
}

1;



Gracias pro su ayuda Saludos Unix :wink:
Avatar de Usuario
Unix_Sendin
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2006-01-29 13:03 @585
Ubicación: Cuba - Ciudad Habana

Publicidad

Re: Ayuda con CGI:IRC 2

Notapor explorer » 2006-03-06 12:13 @550

El primer error es un tema de conexión, por lo que no sabemos porqué ha ocurrido.
En el segundo error, el problema está en la línea 56 de parse.pl:
Código: Seleccionar todo
if($ext & 2 and hex($1) > 0x7F) {
El error quiere decir que la variable $ext no ha sido definido, por lo que quiere decir que la función parse_query ha sido llamada con un solo parámetro. Es necesario llamarle con dos parámetros, siendo el segundo una máscara de bits, cuyo primer bit indica que queres que no elimine los finales de línea '\n', y el segundo bit si quieres tratar la entrada como el resultado de una llamada xmlhttp (tan de moda en nuestros días, por cierto).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Unix_Sendin » 2006-03-10 15:30 @687

Como estas mi hermano siempre ayudando mira mejor hacemos una cosita yo lo boy a subir a una web tu lo bajas lo revisas bueno despues me dices Saludos Unix
Avatar de Usuario
Unix_Sendin
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2006-01-29 13:03 @585
Ubicación: Cuba - Ciudad Habana

Re: Ayuda con CGI:IRC 2

Notapor explorer » 2006-03-11 14:37 @651

Respecto al primer error, en el fichero de configuración, pone:
Código: Seleccionar todo
default_server = sendin
default_port = 6667
Debes comprobar que desde la máquina desde donde se ejecuta el cgi, tiene acceso a una máquina que se llame sendin, y que exista un servicio de irc funcionando en el puerto 6667.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Unix_Sendin » 2006-03-11 16:51 @744

Bueno lo tengo asi mismo pero me sige dando el error ya no se que es :?: por eso te mande el programa para que lo bajaras Saludos Unix. :wink:
Avatar de Usuario
Unix_Sendin
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2006-01-29 13:03 @585
Ubicación: Cuba - Ciudad Habana

Re: Ayuda con CGI:IRC 2

Notapor explorer » 2006-03-11 17:47 @782

Según lo que he visto, el programa es un cliente de IRC hecho en Perl. Y no veo que tenga ningún fallo.
Para que no te salga el fallo del modules/parse.pl, debes editar el programa client-perl.cgi y el irc.cgi y donde ponga parse_query( un solo parametro ) pones parse_query( el parametro anterior, 0 ).
Si haces un telnet sendin 6667, qué sale? ¿Se llega a conectar al servidor de IRC?
¿Qué servidor de IRC usas? Quizás no está escuchando por el 6667...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Unix_Sendin » 2006-03-13 04:03 @211

si me finciona el irc le ago el telnet y todo pero el CGI:IRC es que no quieres conertar me sige dando esos errores no se porque bueno esplicame que tengo que cambiar recuerda que ahora es que estoy aprendiendo a programar per dime como quieto lo que me estas esplicando ?????? :wink: Saludos Unix
Avatar de Usuario
Unix_Sendin
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2006-01-29 13:03 @585
Ubicación: Cuba - Ciudad Habana

Re: Ayuda con CGI:IRC 2

Notapor explorer » 2006-03-13 12:01 @542

A mi no se me ocurre nada más...

A ver si hay alguien más a quien se le pueda ocurrir qué pasa...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor AkonD » 2006-03-13 12:26 @560

El cgi-irc funciona a la perfecion yo lo uso en mi site.

El error puede ser por 2 cosas:

1- La configuración esta mal (creo que no pones la direc del server de irc) revisa el archivo .config del cgi-irc

2- La makina donde ejecutas el cgi tiene el iptables puesto de tal manera que no permite conexiones salientes al puerto 6667 (muchos servidores web lo hacen) o kiza la red de irc a la k intentas conectar tiene glineada la ip de tu server web.

salu2
AkonD
Perlero nuevo
Perlero nuevo
 
Mensajes: 50
Registrado: 2005-10-06 06:36 @316
Ubicación: España

Notapor Unix_Sendin » 2006-03-13 20:26 @893

bueno tengo que ver a lo mejor es que lo tengo mal configurado el server mio es el localhost es mi server de proeba yo todo lo pruebo en mi pc buenos saludos Unix gracias por todo :D si algo te escribo por MP a AkonD para que me ayudes a configuralo bien yo uso WinXP buenos mil gracias.
Avatar de Usuario
Unix_Sendin
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2006-01-29 13:03 @585
Ubicación: Cuba - Ciudad Habana

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados