#encoding: UTF-8
# This file is part of Rmldonkey.
# Rmldonkey is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# Rmldonkey is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Rmldonkey. If not, see <http://www.gnu.org/licenses/>.
# Copyright 2009, Manuel Ramos Caro manuelramoscaro@yahoo.es
require 'iconv'
require 'net/telnet'
class ConectaTelnet
#metodos_initilize y estados
def initialize(ip,port,usuario,contrasena)
begin
@conexion = Net::Telnet.new('Host' => ip,'Port' => port, 'Timeout' => 20000, 'Telnetmode' => false)
if contrasena == ""
retorno = @conexion.cmd("auth " + usuario)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
else
retorno = @conexion.cmd("auth " + usuario + " " + contrasena)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
end
retorno.each_line do |valor_retorno|
valor_retorno.each_line do |buffer_retorno|
if buffer_retorno =~ /Bad login/ || buffer_retorno =~ /Failure/
if contrasena =! ""
raise 'Usuario y/o contraseña no valido...'
end
else
@estado_conectatelnet = true
@ip = ip
@port = port
@usuario = usuario
@contrasena = contrasena
end
end
end
rescue
@estado_conectatelnet = false
@conectatelnet_error_msg = $!
end
#debug
# puts @estado_conectatelnet
#debug
end
def conectatelnet_error_msg
return @conectatelnet_error_msg
end
def estado_conectatelnet
return @estado_conectatelnet
end
#metodos_version
def ctversion
i=0
@ctversion_retorno_msg = Array.new
retorno = @conexion.cmd("version")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
retorno.each_line do |buffer_retorno|
buffer_retorno.each_line do |linea_retorno|
if i == 1
@ctversion_retorno_msg[0] = linea_retorno[0..(linea_retorno =~ /:/) - 1]
end
i += 1
end
end
return true
rescue TimeoutError, SocketError, StandardError
return false
end
def ctversion_retorno_msg
return @ctversion_retorno_msg
end
#metodos_estado
def ctestado
i=0
@ctestado_retorno_msg = Array.new
@ctestado_down_msg = String.new
@ctestado_up_msg = String.new
@ctestado_campos_descarga_msg = Array.new
retorno = @conexion.cmd("vd")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
retorno.each_line do |buffer_retorno|
buffer_retorno.each_line do |linea_retorno|
if retorno =~ /not authorized/
raise @cadena112
end
if i == 1
y = 0
linea_retorno.split('|').each do |trozo|
@ctestado_retorno_msg[y] = trozo
y += 1
#separamos valores para la grafica de estadisticas
y2 = 0
trozo.split(' ').each do |valor|
if y2 == 1
if y == 1
@ctestado_down_msg = valor
end
end
if y2 == 1
if y == 2
@ctestado_up_msg = valor
end
end
y2 += 1
end
#separamos valores para la grafica de estadisticas
end
end
#añadimos identificacion de los campos de la descarga
if i == 2
y = 0
pos = 0
posfile_int = 0
linea_retorno = limpiar_linea(linea_retorno)
while linea_retorno[pos..pos] != nil
posfile_int += 1
if linea_retorno[pos..pos] == 'e'
posfile_int = 0
end
if linea_retorno[pos..pos] == '%'
@posfile = (posfile_int -4) * 2
end
pos += 1
end
linea_retorno.split(' ').each do |trozo|
if trozo != ' '
@ctestado_campos_descarga_msg[y] = trozo
y +=1
end
end
end
#añadimos identificacion de los campos de la descarga
i += 1
end
end
#enviamos una marca de tiempo anomesdiahoraminutossegundos con objeto estadistico
tiempo = Time.now
@ctestado_time_msg = tiempo.strftime("%Y%m%d%H%M%S")
#enviamos una marca de tiempo anomesdiahoraminutossegundos con objeto estadistico
return true
rescue
@conectatelnet_error_msg = $!
return false
end
#añadimos identificacion de los campos de la descarga
def ctestado_campos_descarga_msg
return @ctestado_campos_descarga_msg
end
def posfile_msg
return @posfile
end
#añadimos identificacion de los campos de la descarga
def ctestado_retorno_msg
return @ctestado_retorno_msg
end
#añadimos los metodos para retornar los valores a utilizar por estadisticas
def ctestado_down_msg
return @ctestado_down_msg
end
def ctestado_up_msg
return @ctestado_up_msg
end
def ctestado_time_msg
return @ctestado_time_msg
end
#metodos_descarga
def limpiar_linea(linea)
linea = Iconv.conv('UTF-8//IGNORE', 'UTF-8', linea + ' ')[0..-2]
linea = linea.to_s.chomp
linea = linea.gsub("[2;37;0m","")
linea = linea.gsub("[3","")
linea = linea.gsub("[0m","")
linea = linea.gsub("2m[","[")
linea = linea.gsub("1m[","[")
linea = linea.gsub("6m[","[")
linea = linea.gsub("[4m","")
linea = linea.gsub("[5m","")
linea = linea.gsub("[6m","")
linea = linea.gsub("[7m","")
linea = linea.gsub("[8m","")
linea = linea.gsub("[9m","")
linea = linea.gsub("[30m","")
linea = linea.gsub("[31m","")
linea = linea.gsub("[32m","")
linea = linea.gsub("[33m","")
linea = linea.gsub("[34m","")
linea = linea.gsub("[35m","")
linea = linea.gsub("[36m","")
linea = linea.gsub("[37m","")
linea = linea.gsub("[40m","")
linea = linea.gsub("[41m","")
linea = linea.gsub("[42m","")
linea = linea.gsub("[43m","")
linea = linea.gsub("[44m","")
linea = linea.gsub("[45m","")
linea = linea.gsub("[46m","")
linea = linea.gsub("[47m","")
linea = linea.gsub("\x1b","")
linea = linea.gsub("MLdonkey command-line:","")
linea = Iconv.conv('UTF-8//IGNORE', 'UTF-8', linea + ' ')[0..-2]
#linea = linea.force_encoding("UTF-8")
return linea
end
#quitamos los caracteres que deforman las pantallas con curses.
def quitar_acentos(cadena)
# cadena = cadena.gsub("á","a")
# cadena = cadena.gsub("é","e")
# cadena = cadena.gsub("í","i")
# cadena = cadena.gsub("ó","o")
# cadena = cadena.gsub("ú","u")
# cadena = cadena.gsub("�?","A")
# cadena = cadena.gsub("É","E")
# cadena = cadena.gsub("�?","I")
# cadena = cadena.gsub("Ó","O")
# cadena = cadena.gsub("Ú","U")
# cadena = cadena.gsub("ä","a")
# cadena = cadena.gsub("ë","e")
# cadena = cadena.gsub("ï","i")
# cadena = cadena.gsub("ö","o")
# cadena = cadena.gsub("ü","u")
# cadena = cadena.gsub("Ä","A")
# cadena = cadena.gsub("Ë","E")
# cadena = cadena.gsub("�?","I")
# cadena = cadena.gsub("Ö","O")
# cadena = cadena.gsub("Ü","U")
# cadena = cadena.gsub("à","a")
# cadena = cadena.gsub("è","e")
# cadena = cadena.gsub("ì","i")
# cadena = cadena.gsub("ò","o")
# cadena = cadena.gsub("ù","u")
# cadena = cadena.gsub("À","A")
# cadena = cadena.gsub("È","E")
# cadena = cadena.gsub("Ì","I")
# cadena = cadena.gsub("Ò","O")
# cadena = cadena.gsub("Ù","U")
# cadena = cadena.gsub("ç","c")
# cadena = cadena.gsub("Ç","C")
# cadena = cadena.gsub("ñ","n")
# cadena = cadena.gsub("Ñ","N")
# cadena = cadena.gsub("¡","!")
# cadena = cadena.gsub("¿","?")
return cadena
end
def ctdescargas(id)
i=0
@cdescargas_retorno_msg = Array.new
retorno = @conexion.cmd("vd " + id)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
retorno.each_line do |buffer_retorno|
buffer_retorno.each_line do |linea_retorno|
if id==""
valor = quitar_acentos(limpiar_linea(linea_retorno.to_s.chomp))
if valor[0..0] == "["
@cdescargas_retorno_msg[i] = valor
i += 1
end
else
@cdescargas_retorno_msg[i] = quitar_acentos(limpiar_linea(linea_retorno.to_s.chomp))
i += 1
end
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctdescargas_retorno_msg
return @cdescargas_retorno_msg
end
#################################
##### Metodos para formatear la matrix #####
#################################
def tratar_mensaje(mensaje)
mensaje_salida=Array.new
iz=0
de=0
y=0
while @ctestado_campos_descarga_msg[y] != nil
if y == 0
while mensaje[de..de] != "\]" && mensaje[de..de] != nil
de += 1
end
mensaje_salida[y] = mensaje[iz..de]
iz = de + 1
de = iz
else
if @ctestado_campos_descarga_msg[y] =~ /File/
while mensaje[de..de + 1] == " "
de += 1
end
iz = de
de = de + @posfile.to_i
while mensaje[de..de + 1] != " "
de += 1
end
#eliminamos ahora blancos a la izquierda
blanco = de
while mensaje[blanco..blanco] == " "
blanco -= 1
end
mensaje_salida[y] = mensaje[iz..blanco]
#siguiente palabra
iz = de + 1
else
if @ctestado_campos_descarga_msg[y] =~ /User/ || @ctestado_campos_descarga_msg[y] =~ /Group/
blanco=0
while mensaje[de..de] == " "
de += 1
blanco += 1
end
if blanco >= 2
mensaje_salida[y] = " "
de = iz
else
iz = de
while mensaje[de..de] != " " && mensaje[de..de] != nil
de += 1
end
mensaje_salida[y] = mensaje[iz..de]
iz = de + 1
end
else
while mensaje[de..de] == " "
de += 1
end
iz = de
while mensaje[de..de] != " " && mensaje[de..de] != nil
de += 1
end
mensaje_salida[y] = mensaje[iz..de]
iz = de + 1
end
end
end
y += 1
end
return mensaje_salida
end #tratar_mensaje(mensaje)
def formatea_descarga(array_cadenas,columna)
i=0
salida = String.new
while @ctestado_campos_descarga_msg[i] != nil
case @ctestado_campos_descarga_msg[i]
when columna
if array_cadenas[i] != nil
salida = salida + array_cadenas[i]
end
end
i+=1
end
return salida
end #formatea_descarga(array_cadenas,columna)
def formatea_prioridad(prio)
case prio
when "0"
return "Normal"
when "-10"
return "Low "
when "-20"
return "Very low"
when "10"
return "High"
when "20"
return "Very High"
else
return prio
end
end
def ctdescargas_retorno_as_matrix_columns
@columns_matrix = ["Id", "File","%","Done","Size","lSeen","Old","Rate","Prio"]
return @columns_matrix
end
def ctdescargas_retorno_as_matrix
#formateamos el retorno de la consulta de descargas como una matrix de dos dimensiones
@main_matrix = Array.new
i = 0
@cdescargas_retorno_msg.each do |element|
@sub_matrix = Array.new
@sub_matrix[0] = tratar_mensaje(element.to_s)[0]
@sub_matrix[1] = formatea_descarga(tratar_mensaje(element.to_s),'File')
@sub_matrix[2] = formatea_descarga(tratar_mensaje(element.to_s),'%')
@sub_matrix[3] = formatea_descarga(tratar_mensaje(element.to_s),'Done')
@sub_matrix[4] = formatea_descarga(tratar_mensaje(element.to_s),'Size')
@sub_matrix[5] = formatea_descarga(tratar_mensaje(element.to_s),'lSeen')
@sub_matrix[6] = formatea_descarga(tratar_mensaje(element.to_s),'Old')
@sub_matrix[7] = formatea_descarga(tratar_mensaje(element.to_s),'Rate')
@sub_matrix[8] = formatea_prioridad(formatea_descarga(tratar_mensaje(element.to_s),'Prio'))
# item2 = formatea_descarga(tratar_mensaje(element.to_s),'%')
@main_matrix[i] = @sub_matrix
i += 1
end #@cdescargas_retorno_msg.each do |element|
return @main_matrix
end
def ctdescarga_cancel(descarga)
#recibe como parametro de entrada la cadena correspondiente con
#la que se pretende cancelar.
retorno = @conexion.cmd("cancel " + descarga)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctdescarga_cancel_confirm(valor)
if valor == 's'
retorno = @conexion.cmd("confirm yes")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
end
if valor == 'n'
retorno = @conexion.cmd("confirm no")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
end
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctdescarga_pause(descarga)
#recibe como parametro de entrada la cadena correspondiente con
#la que se pretende pausar.
retorno = @conexion.cmd("pause " + descarga)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctdescarga_resume(descarga)
#recibe como parametro de entrada la cadena correspondiente con
#la que se pretende reanudar.
retorno = @conexion.cmd("resume " + descarga)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctdescarga_prioridad(valor,descarga)
retorno = @conexion.cmd("priority "+ valor + " " + descarga.to_s)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
#metodos_busqueda(problematico si no tiene delay la busqueda no es efectiva)
def ctlista_busqueda()
@clista_busqueda_retorno_msg = Array.new
retorno = @conexion.cmd("vs")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
i=0
retorno.each_line do |buffer_retorno|
buffer_retorno.each_line do |linea_retorno|
if linea_retorno =~ /CONTAINS/
@clista_busqueda_retorno_msg[i] = linea_retorno
i+=1
end
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctlista_busqueda_retorno_msg
return @clista_busqueda_retorno_msg
end
def ctbusqueda(buscado,minsize,maxsize)
cadena_busqueda = "s"
if minsize != 0
cadena_busqueda += " -minsize " + minsize.to_s
end
if maxsize != 0
cadena_busqueda += " -maxsize " + maxsize.to_s
end
cadena_busqueda += " "
cadena_busqueda += buscado
retorno = @conexion.cmd(cadena_busqueda)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def limpia_resultado_busqueda(linea)
linea= String.new
y=0
while linea[y..(y + 1)] != " "
y+=1
end
linea=linea[(y + 1)..linea.length]
return linea
end
def encontrar_tamano_total(cadena)
i=0
romper = true
while romper && cadena[i].chr != " "
i+=1
if cadena[i] == nil
romper = false
end
end
valor = cadena.to_i
y = 0
while valor >= 1
valor_ant = valor
valor = (valor / 1024).to_f
y+=1
end
case y - 1
when 1
retorno = valor_ant.to_s[0..6] + " Kb"
when 2
retorno = valor_ant.to_s[0..6] + " Mb"
when 3
retorno = valor_ant.to_s[0..6] + " Gb"
when 4
retorno = valor_ant.to_s[0..6] + " Tb"
when 0
retorno = valor_ant.to_s[0..6] + " Bytes"
else
retorno = "Size Error"
end
while retorno.length < 10
retorno = " " + retorno
end
return retorno
end
def ctver_resultado_busqueda(busqueda)
@cver_resultado_busqueda_msg = Array.new
retorno = @conexion.cmd("vr " + busqueda)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
i=0
y=0
retorno.each_line do |buffer_retorno|
buffer_retorno.each_line do |linea_retorno|
linea_retorno = limpiar_linea(linea_retorno)
#debug puts "linea_retorno:" + linea_retorno
if y >= 4 && linea_retorno [0..0] == "["
@cver_resultado_busqueda_msg[i] = linea_retorno[1..6]
i += 1
@cver_resultado_busqueda_msg[i] = encontrar_tamano_total(linea_retorno[9..20])
i += 1
@cver_resultado_busqueda_msg[i] = linea_retorno[21..28]
i += 1
@cver_resultado_busqueda_msg[i] = linea_retorno[32..linea_retorno.length]
#debug puts "linea_file:" + @cver_resultado_busqueda_msg[i]
i += 1
end
y += 1
end
end
return true
rescue TimeoutError,SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_resultado_busqueda_msg(ini,fin)
i=ini * 4
y=0
retorno = Array.new
while i < (fin * 4) && i < @cver_resultado_busqueda_msg.length
retorno[y] = @cver_resultado_busqueda_msg[i]
i += 1
y += 1
end
return retorno
end
def ctver_descarga(id)
retorno = @conexion.cmd("d " + id)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctver_forget(id)
retorno = @conexion.cmd("forget " + id)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctlista_server_conected()
@cver_lista_server_msg = Array.new
retorno = @conexion.cmd("vm")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
i = 0
retorno.each_line do |buffer_retorno|
buffer_retorno.each_line do |linea_retorno|
i += 1
#@cver_lista_server_msg[i] = i.to_s + " " + linea_retorno
@cver_lista_server_msg[i] = " " + linea_retorno
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_lista_server_msg
return @cver_lista_server_msg
end
def ctlista_server()
@cver_lista_todos_server_msg = Array.new
retorno = @conexion.cmd("vma")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
i = 0
retorno.each_line do |buffer_retorno|
buffer_retorno.each_line do |linea_retorno|
i += 1
#@cver_lista_todos_server_msg[i] = i.to_s + " " + linea_retorno
@cver_lista_todos_server_msg[i] = " " + linea_retorno
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_lista_todos_server_msg
return @cver_lista_todos_server_msg
end
def ctconecta_server(id)
retorno = @conexion.cmd("c " + id)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctdesconecta_server(id)
retorno = @conexion.cmd("x " + id)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctborra_server(id)
retorno = @conexion.cmd("rem " + id)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctdownurl(url)
retorno = @conexion.cmd("dllink " + url.to_s)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
ok = true
retorno.each do |buffer_retorno|
buffer_retorno.each do |linea_retorno|
if linea_retorno =~ /already/ || linea_retorno =~ /Not_found/
ok = false
end
end
end
return ok
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctstats
@cver_valores_estadistiva_msg = Array.new
retorno = @conexion.cmd("stats")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
i=0
retorno.each_line do |buffer_retorno|
buffer_retorno.each_line do |linea_retorno|
if linea_retorno =~ /\|/
@cver_valores_estadistiva_msg[i] = limpiar_linea(linea_retorno.to_s.chomp)
i += 1
end
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_valores_estadistiva_msg
return @cver_valores_estadistiva_msg
end
def cupstats
@cver_valores_estadistica_carga_msg = Array.new
retorno = @conexion.cmd("upstats")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
i=0
retorno.each_line do |buffer_retorno|
buffer_retorno.each_line do |linea_retorno|
if linea_retorno =~ /\|/
@cver_valores_estadistica_carga_msg[i] = limpiar_linea(linea_retorno.to_s.chomp)
i += 1
end
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_valores_estadistica_carga_msg
return @cver_valores_estadistica_carga_msg
end
def limpiar_caracteres_control(linea)
linea = linea.to_s.chomp
linea = linea.gsub("\x1b[2;37;0m","")
linea = linea.gsub("\x1b[31m","")
linea = linea.gsub("\x1b[34m","")
linea = limpiar_linea(linea)
if linea == "> " || linea == "" || linea == " "
linea = nil
end
return linea
end
def ctsecciones_lista
@cver_valores_secciones_msg = Array.new
retorno = @conexion.cmd("options")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
secciones = Array.new
i = 0
retorno.each_line do |seccion|
seccion_limpia = limpiar_caracteres_control(seccion)
if !(seccion_limpia =~ /Header/) &&
!(seccion_limpia =~ /Donkey::Overnet/) &&
!(seccion_limpia =~ /Donkey::Kademlia/) &&
#se omiten inicialmente dado que sus valores fallan para el comando options + opcion
!(seccion_limpia =~ /Network Config/) &&
!(seccion_limpia =~ /HTML mods/) &&
!(seccion_limpia =~ /options/) &&
!(seccion_limpia =~ /command-line/) && seccion_limpia != nil &&
seccion_limpia != "\n"
@cver_valores_secciones_msg[i] = seccion_limpia
i += 1
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_valores_secciones_msg
return @cver_valores_secciones_msg
end
def ctsecciones_grupos(seccion,array_secciones)
@cver_valores_secciones_num_msg=''
y = 0
array_secciones.each do |valor_buscar|
if seccion == valor_buscar
retorno = @conexion.cmd("options " + seccion)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
i = 1
retorno.each_line do |valor|
if valor =~ /Options in section/
@cver_valores_secciones_num_msg = @cver_valores_secciones_num_msg + "iii" + i.to_s
@siguiente = y + 1
end
if valor =~ /\]\=/
i += 1
end
end
end
y += 1
end
if @siguiente < array_secciones.length
retorno = @conexion.cmd("options " + array_secciones[@siguiente])
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
i = 1
retorno.each_line do |valor|
if valor =~ /Options in section/
@cver_valores_secciones_num_msg = @cver_valores_secciones_num_msg + "iii" + (i - 1).to_s
end
if valor =~ /\]\=/
i += 1
end
end
else
@cver_valores_secciones_num_msg = @cver_valores_secciones_num_msg + "iii9999"
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_valores_secciones_num_msg
return @cver_valores_secciones_num_msg
end
def ctopciones
@cver_valores_opciones_msg = Array.new
retorno = @conexion.cmd("options Header")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
x = 1
retorno.each_line do |valor|
valor_limpio = limpiar_caracteres_control(valor)
if valor_limpio != nil && valor_limpio != " "
if valor_limpio=~ /\]\=/
@cver_valores_opciones_msg[x] = x.to_s + " " + valor_limpio
x += 1
end
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_valores_opciones_msg
return @cver_valores_opciones_msg
end
def ctestblece_opcion(nombre,valor)
retorno = @conexion.cmd("set " + nombre + " \"" + valor + "\"")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
i = 0
retorno.each_line do |buffer_retorno|
if i == 1
if buffer_retorno =~ /Error/
return false
else
return true
end
end
i += 1
end
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctusers
retorno = @conexion.cmd("users")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
@cver_valores_users_msg = Array.new
i = 0
y = 0
retorno.each_line do |valor|
if !(valor =~ />/) && !(valor =~ /command-line/)
@cver_valores_users_msg[i] = valor
i += 1
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_valores_users_msg
###AKI-INI
#puts @cver_valores_users_msg
i = 0
stop = false
user = 0
group = 0
@cver_valores_users_msg.each do |line|
if line =~ / Group /
stop = true
group = 0
end #if line =~ /Group/
if line =~ / Groups /
user = 0
end #if line =~ / Groups /
if i > 0 && !stop
line = line.gsub(" ","")
line = line.gsub(" "," none ")
end #if i > 0
if user > 0 && !stop
y = 0
g = 0
member_ant = ""
line.split(' ').each do | member|
if y == 0
puts "user....: " + member
else
if y == 1
puts "admin...: " + member
else
if member_ant =~ /#{member}/ && g == 0
puts "groups...: " + member_ant.gsub("none","")
puts "dgroup...: " + member.gsub("none","")
g = 1
else
member_ant += " " + member
end #if member_ant =~ /#{member}/ && g == 0
if g > 0
if g == 2
puts "Email..:" + member.gsub("none","")
end #if g == 2
if g == 3
puts "Commit dir..:" + member.gsub("none","")
end #if g == 3
if g == 4
puts "Max dls..:" + member.gsub("none","")
end #if g == 3
if g == 5
puts "Dls..:" + member.gsub("none","")
end #if g == 3
g += 1
end #if g > 0
end #if y == 1
end #if y = 0
y += 1
end #line.split(' ').each do | member|
end #if user > 0 && !stop
i += 1
user += 1
group += 1
end #@cver_valores_users_msg.each do |line|
###AKI-FIN
return @cver_valores_users_msg
end
def cgroups_as_matrix
i = 0
stop = false
group = 0
user_index = Array.new
ui = 0
group_index = Array.new
gi = 0
@cver_valores_users_msg.each do |line|
if line =~ / Group /
stop = true
group = 0
end #if line =~ /Group/
if i > 0 && !stop
line = line.gsub(" "," none ")
end #if i > 0
i += 1
#puts line
if group > 0 && stop
group_member = Array.new
gm = 0
line.split(' ').each do | member|
group_member[gm] = member
gm += 1
end #line.split(' ').each do | member|
if group_member.length > 0
group_index[gi] = group_member
gi += 1
end #if group_member != nil
end #if group > 0 && stop
group += 1
end #@cver_valores_users_msg.each do |line|
return group_index
end
def cusers_as_matrix
@main_matrix = Array.new
i = 0
i2 = 0
stop = false
user = 0
group = 0
@cver_valores_users_msg.each do |line|
@sub_matrix = Array.new
if line =~ / Group /
stop = true
group = 0
end #if line =~ /Group/
if line =~ / Groups /
user = 0
end #if line =~ / Groups /
if i2 > 0 && !stop
line = line.gsub(" ","")
line = line.gsub(" "," none ")
end #if i2 > 0 && !stop
if user > 0 && !stop
y = 0
g = 0
member_ant = ""
line.split(' ').each do | member|
if y == 0
@sub_matrix[0] = member
else
if y == 1
@sub_matrix[1] = member
else
if member_ant =~ /#{member}/ && g == 0
@sub_matrix[2] = member_ant.gsub("none","")
@sub_matrix[3] = member.gsub("none","")
g = 1
else
member_ant += " " + member.gsub("none","")
end #if member_ant =~ /#{member}/ && g == 0
if g > 0
if g == 2
@sub_matrix[4] = member.gsub("none","")
end #if g == 2
if g == 3
@sub_matrix[5] = member.gsub("none","")
end #if g == 3
if g == 4
@sub_matrix[6] = member.gsub("none","")
end #if g == 3
if g == 5
@sub_matrix[7] = member.gsub("none","")
end #if g == 3
g += 1
end #if g > 0
end #if y == 1
end #if y == 0
y += 1
end #line.split(' ').each do | member|
end #if user > 0 && !stop
if @sub_matrix[0] != nil
@main_matrix[i] = @sub_matrix
i += 1
end #if @sub_matrix != nil
i2 += 1
user += 1
group += 1
end #@cver_valores_users_msg.each do |line|
return @main_matrix
end
def ctuseradd(nuevo_user,nuevo_password,confirm_password,nuevo_group,nuevo_commit_dir,nuevo_mail,nuevo_max_download)
if nuevo_user.to_s != nil
if nuevo_password.to_s != nil
if nuevo_password.to_s == confirm_password.to_s
comando = "useradd " + nuevo_user.to_s + " " + nuevo_password.to_s
else
raise @cadena114
end
else
raise @cadena115
end
else
raise @cadena116
end
if nuevo_group != nil
comando = comando + " " + nuevo_group.to_s
end
if nuevo_commit_dir != nil
comando = comando + " " + nuevo_commit_dir.to_s
end
if nuevo_mail != nil
comando = comando + " " + nuevo_mail.to_s
end
if nuevo_max_download != nil
comando = comando + " " + nuevo_max_download.to_s
end
retorno = @conexion.cmd(comando)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
if retorno =~ /exception/ || retorno =~ /not/
raise limpiar_linea(retorno.to_s)
end
return true
rescue
@conectatelnet_error_msg = $!
return false
end
def ctuserdel(user)
retorno = @conexion.cmd("userdel " + user)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctgroupadd(group,admin)
comando = "groupadd " + group.to_s + " " + admin.to_s
retorno = @conexion.cmd(comando)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
if retorno =~ /exception/ || retorno =~ /not/
raise limpiar_linea(retorno.to_s)
end
return true
rescue
@conectatelnet_error_msg = $!
return false
end
def ctgroupdel(group)
retorno = @conexion.cmd("groupdel " + group)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctusergroupadd(user,group)
retorno = @conexion.cmd("usergroupadd " + user.to_s + " " + group.to_s)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
if retorno =~ /exception/ || retorno =~ /not/
raise limpiar_linea(retorno.to_s)
end
return true
rescue
@conectatelnet_error_msg = $!
return false
end
def ctusergroupdel(user,group)
retorno = @conexion.cmd("usergroupdel " + user.to_s + " " + group.to_s)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
return true
rescue
@conectatelnet_error_msg = $!
return false
end
def ctuserdgroup(user,group)
if group != nil
retorno = @conexion.cmd("userdgroup " + user.to_s + " " + group.to_s)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
else
retorno = @conexion.cmd("userdgroup " + user.to_s + " none")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
end
if retorno =~ /exception/ || retorno =~ /not/
raise limpiar_linea(retorno.to_s)
end
return true
rescue
@conectatelnet_error_msg = $!
return false
end
def ctusermail(user,mail)
retorno = @conexion.cmd("usermail " + user.to_s + " " + mail.to_s)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
if retorno =~ /exception/ || retorno =~ /not/
raise limpiar_linea(retorno.to_s)
end
return true
rescue
@conectatelnet_error_msg = $!
return false
end
def ctusercommit(user,dir)
retorno = @conexion.cmd("usercommit " + user.to_s + " " + dir)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
if retorno =~ /exception/ || retorno =~ /not/
raise limpiar_linea(retorno.to_s)
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctuserdls(user,max)
retorno = @conexion.cmd("userdls " + user.to_s + " " + max)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
if retorno =~ /exception/ || retorno =~ /not/
raise limpiar_linea(retorno.to_s)
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctgroupadmin(group,admin)
retorno = @conexion.cmd("groupadmin " + group.to_s + " " + admin)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
if retorno =~ /exception/ || retorno =~ /not/
raise limpiar_linea(retorno.to_s)
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctshares()
@cver_valores_shares_msg = Array.new
retorno = @conexion.cmd("shares")
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
x = 1
@cver_valores_shares_msg[0] = "header"
retorno.each_line do |valor|
if valor.length > 2
valor.each_line do |linea_retorno|
if (linea_retorno =~ /:/ || linea_retorno =~ /;/) && x > 0
else
@cver_valores_shares_msg[x] = limpiar_caracteres_control(linea_retorno).chomp.to_s
x += 1
end
end
end
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def cver_valores_shares_msg
return @cver_valores_shares_msg
end
def ctunshare(dir)
retorno = @conexion.cmd("unshare " + dir.to_s)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
if retorno =~ /exception/ || retorno =~ /not/
raise limpiar_linea(retorno.to_s)
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctshare(prio,dir,estra)
comando = "share " + prio.to_s + " " + dir.to_s + " " + estra.to_s
retorno = @conexion.cmd(comando)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
if retorno =~ /exception/ || retorno =~ /no/
raise limpiar_linea(retorno.to_s)
end
return true
rescue TimeoutError, SocketError, StandardError
@conectatelnet_error_msg = $!
return false
end
def ctany(comando)
@cver_valores_any_msg = Array.new
retorno = @conexion.cmd(comando.to_s)
retorno = Iconv.conv('UTF-8//IGNORE', 'UTF-8', retorno + ' ')[0..-2]
x = 0
retorno.each_line do |valor|
valor.each_line do |linea_retorno|
if x > 0
if linea_retorno =~ /command-line:/
else
@cver_valores_any_msg[x] = limpiar_caracteres_control(linea_retorno).to_s
end
end
x += 1
end
end
return true
rescue TimeoutError, SocketError, StandardError
return false
end
def cver_valores_any_msg
return @cver_valores_any_msg
end
##### methods to show conection data #####
def cver_ip_value
return @ip
end
def cver_port_value
return @port
end
def cver_user_value
return @usuario
end
def cver_pass_value
return @contrasena
end
#### methods to parse server list ####
def tipo_servidor(cadena_serv)
encontrado_iz = false
encontrado_de = false
iz=0
de=0
while cadena_serv[iz..de] != nil && encontrado_de != true
if encontrado_iz != true
iz += 1
end
if encontrado_de != true
de += 1
end
if cadena_serv[iz..iz] == '['
encontrado_iz = true
iz +=1
de = iz
end
if cadena_serv[de ..de] == ' ' && encontrado_iz
encontrado_de = true
de -= 1
end
end
@siguiente_pos_tratamiento_servidores = de += 1
return cadena_serv[iz..de]
end
def id_servidor(cadena_serv)
iz = @siguiente_pos_tratamiento_servidores
de = @siguiente_pos_tratamiento_servidores
encontrado_de = false
while cadena_serv[iz..de] != nil && encontrado_de != true
de += 1
if cadena_serv[de..de] == ']'
encontrado_de = true
end
end
@siguiente_pos_tratamiento_servidores = de
return cadena_serv[iz..(de-1)].gsub(" ","")
end
def ip_servidor(cadena_serv)
iz = @siguiente_pos_tratamiento_servidores
de = @siguiente_pos_tratamiento_servidores
encontrado_de = false
encontrado_iz = false
while cadena_serv[iz..de] != nil && encontrado_de != true
if encontrado_iz != true
iz += 1
end
if encontrado_de != true
de += 1
end
if encontrado_iz == false && cadena_serv[iz..iz] =~ /\d/
encontrado_iz = true
end
if encontrado_iz == true && cadena_serv[de..de] == ' '
encontrado_de = true
end
end
@siguiente_pos_tratamiento_servidores = de
return cadena_serv[iz..(de-1)]
end
def nombre_servidor(cadena_serv)
#debug puts "cadena servidor" + cadena_serv.to_s
iz = @siguiente_pos_tratamiento_servidores
de = 0
encontrado_iz = false
while cadena_serv[iz..iz] != nil && cadena_serv[iz..iz] != ' '
iz += 1
end
nombre_serv = cadena_serv[iz..(iz+40)]
@siguiente_pos_tratamiento_servidores = iz + 41
#eliminamos blancos a la derecha
de = nombre_serv.length
while nombre_serv[de..de] == ' ' && nombre_serv[de..de] != nil
de -=1
end
return nombre_serv[1..(de-1)]
end
def usuarios_servidor(cadena_serv)
iz = @siguiente_pos_tratamiento_servidores
de = @siguiente_pos_tratamiento_servidores
encontrado_de = false
encontrado_iz = false
while cadena_serv[iz..de] != nil && encontrado_de != true
if encontrado_iz != true
iz += 1
end
if encontrado_de != true
de += 1
end
if encontrado_iz == false && cadena_serv[iz..iz] =~ /\d/
encontrado_iz = true
end
if encontrado_iz == true && cadena_serv[de..de] == ' '
encontrado_de = true
end
end
@siguiente_pos_tratamiento_servidores = de
return cadena_serv[iz..(de-1)]
end
def ficheros_servidor(cadena_serv)
iz = @siguiente_pos_tratamiento_servidores
de = @siguiente_pos_tratamiento_servidores
encontrado_de = false
encontrado_iz = false
while cadena_serv[iz..de] != nil && encontrado_de != true
if encontrado_iz != true
iz += 1
end
if encontrado_de != true
de += 1
end
if encontrado_iz == false && cadena_serv[iz..iz] =~ /\d/
encontrado_iz = true
end
if encontrado_iz == true && cadena_serv[de..de] == ' '
encontrado_de = true
end
end
@siguiente_pos_tratamiento_servidores = de
return cadena_serv[iz..(de-1)]
end
def estado_servidor(cadena_serv)
iz = @siguiente_pos_tratamiento_servidores
de = @siguiente_pos_tratamiento_servidores
encontrado_de = false
encontrado_iz = false
while cadena_serv[de..de] != nil && encontrado_de != true
if encontrado_iz != true
iz += 1
end
if encontrado_de != true
de += 1
end
if encontrado_iz == false && cadena_serv[iz..iz] == ':'
encontrado_iz = true
iz += 1
end
if encontrado_iz == true && cadena_serv[de..de] == nil
encontrado_de = true
end
end
@siguiente_pos_tratamiento_servidores = 0
return cadena_serv[iz..(de + 1)]
end
def ctserver_return_as_matrix_columns
@columns_matrix = ["Type", "Id","Ip","Name","Users","Files","Status"]
return @columns_matrix
end
def ctserver_return_as_matrix
#formateamos el retorno de la consulta de descargas como una matrix de dos dimensiones
@main_matrix = Array.new
i = 0
view_server = String.new
@cver_lista_todos_server_msg.each do |element|
@sub_matrix = Array.new
show = false
if element =~ /\]/
view_server = view_server + element
else
if element =~ /Users:/
view_server = view_server + element
view_server = view_server.gsub("\n","")
show = true
else
show = false
end
end
if show
@sub_matrix[0] = tipo_servidor(view_server)
@sub_matrix[1] = id_servidor(view_server)
@sub_matrix[2] = ip_servidor(view_server)
@sub_matrix[3] = nombre_servidor(view_server)
@sub_matrix[4] = usuarios_servidor(view_server)
@sub_matrix[5] = ficheros_servidor(view_server)
@sub_matrix[6] = estado_servidor(view_server)
@main_matrix[i] = @sub_matrix
view_server = ""
i += 1
end
end
return @main_matrix
end
def ctserver_connected_return_as_matrix
#formateamos el retorno de la consulta de descargas como una matrix de dos dimensiones
@main_matrix = Array.new
i = 0
view_server = String.new
@cver_lista_server_msg.each do |element|
@sub_matrix = Array.new
show = false
if element =~ /\]/
view_server = view_server + element
else
if element =~ /Users:/
view_server = view_server + element
view_server = view_server.gsub("\n","")
show = true
else
show = false
end
end
if show
@sub_matrix[0] = tipo_servidor(view_server)
@sub_matrix[1] = id_servidor(view_server)
@sub_matrix[2] = ip_servidor(view_server)
@sub_matrix[3] = nombre_servidor(view_server)
@sub_matrix[4] = usuarios_servidor(view_server)
@sub_matrix[5] = ficheros_servidor(view_server)
@sub_matrix[6] = estado_servidor(view_server)
@main_matrix[i] = @sub_matrix
view_server = ""
i += 1
end
end
return @main_matrix
end
end