aIRC — File Browser

aIRCv0.8.69 / aIRCv0.8.69 / addons / telnet.mrc

telnet.mrc — 5.56 KB — Download this file

;/**********************************************************************
; *
; * aIRC
; * Telnet Client
; *
; **********************************************************************/
;
;
alias _telnet.addonver { return 1.0 }
alias telnet {
  var %i = 1,%sock,%win,%port,%parms = $_parameter($1-,1,Telnet Client [/telnet],normal,$null,Server [port]),%server = $gettok($gettok(%parms,1,32),1,58),%service = 0
  if ($gettok(%parms,2,32) != $null) { %port = $ifmatch }
  elseif ($gettok(%parms,2,58) != $null) { %port = $ifmatch }
  else { %port = 23 }
  if (%port == 23) {
    info.a Connecting to %server ( $+ %port $+ )
    run telnet.exe %server %port
    return
  }
  while ($sock($_nospaces(Telnet,%i))) { inc %i }
  %sock = Telnet $+ %i
  %win = @ $+ %sock
  if ($window(%win) == $null) {
    window -aek %win $_window.conf(@Telnet)
    _window.font.reset %win @Telnet
  }
  if ($gettok($_idenport(%port,t),1,32) != $null) { %service = $ifmatch }
  echo $colour(info) -it %win $^*** Connecting to %server ( $+ %port $+ )
  sockopen %sock %server %port
  sockmark %sock %server $+ $chr(9) $+ 0 $+ $chr(9) $+ %service
  _recent.add telnet 10 %server %port
}
alias _telnet.unload {
  _closematchingwindows @Telnet*
  sockclose telnet*
}
alias _telnet.telnetnum {
  if ($sockname) && ($2 == $null) { return $remove($sockname,telnet) }
  if (@Telnet* iswm $1) { return $remove($1,@Telnet) }
  if (@Telnet* iswm $active) { return $remove($active,@Telnet) }
}
alias _telnet.telnetnums {
  if ($1) { return Telnet $+ $_telnet.telnetnum($1) }
  return Telnet $+ $_telnet.telnetnum
}
alias _telnet.sw {
  var %s = telnet $+ $_telnet.telnetnum
  if ($_sockmark(%s,2)) { echo -it $target $1- }
  sockwrite -n %s $1-
}
alias _telnet.host { return $_sockmark($_telnet.telnetnums($1),1) }
alias _telnet.port { return $sock($_telnet.telnetnums($1)).port }
alias _telnet.service { return $_sockmark($_telnet.telnetnums($1),3) }
alias _telnet.setservice {
  var %win = $active
  if (@telnet* !iswm $active) { return }
  var %sock = $_telnet.telnetnums,%services = eggdrop irc pop3,%tmp,%host = $_telnet.host,%port = $_telnet.port
  if ($sock(%sock)) { %tmp = $_selectedit($null,0,Telnet Client [/telnet],1,$_telnet.service,32,%services,Select service for current session:<CRLF>[Blank or escape for none]) }
  if ($sock(%sock)) {
    sockmark %sock $puttok($sock(%sock).mark,$iif(%tmp != $null,%tmp,$null),3,9)
    var %tmps
    if (%tmp != $null) { %tmps = ( $+ %tmp $+ ) }
    titlebar %win - %host [[ $+ %port $+ ]] %service %tmps
  }
  else { error.w %win You are not connected. }
}
alias `telnet.pre {
  set -u %`sock $_telnet.telnetnums
  set -u %`echo $iif($_sockmark(%`sock,2),1,0)
  set -u %`thost $gettok($window($active).title,2,32)
  set -u %`tport $remove($gettok($window($active).title,3,32),[,])
  if ($_telnet.host != $null) {
    set -u %`host $ifmatch
    set -u %`port $_telnet.port
    set -u %`service $_telnet.service
  }
}
menu @Telnet {
  $`telnet.pre:{  }
  -
  $iif(%`service == pop3,pop3)
  .&login...:{
    _telnet.sw user $_param(1,$null,User:)
    _telnet.sw pass $_parampass(1,$null,Pass:)
  }
  .&retr...:{ _telnet.sw retr $_param(isint,1,Message number:) }
  .&dele...:{ _telnet.sw dele $_param(isint,1,Message number:) }
  -
  $iif(%`thost,&service):{ _telnet.setservice }
  $iif(%`thost,&ident):{ ident $_telnet.host }
  $iif(%`thost && $_portscan.addonver,port&scan):{ portscan $_telnet.host }
  $iif(%`thost && $_portscan.addonver,&port ?...):{ portscan $_telnet.host ? }
  $iif(%`thost,$iif(%`host,&other conn,&reconnect)):{ telnet $gettok($window($active).title,2,32) $remove($gettok($window($active).title,3,32),[,]) }
  $iif(%`host,&terminate):{
    sockclose $_telnet.telnetnums
    echo $colour(info) -t $active $^*** End of Session
  }
  -
  $`ifmm(%`echo) &echo:{
    var %s = $_telnet.telnetnums
    sockmark %s $puttok($sock(%s).mark,$iif($_sockmark(%s,2),0,1),2,9)
  }
}
ON *:INPUT:@Telnet*:{
  if (/* iswm $1-) { $1- }
  else {
    var %s = $_telnet.telnetnums
    if ($sock(%s).status != active) { beep }
    else { _telnet.sw $1- }
  }
  halt
}
ON *:SOCKOPEN:telnet*:{
  if ($sockerr) {
    error.w @ $+ $sockname Telnet Session with $_telnet.host $+ : $_sockerr
    return
  }
  if ($window(@ [ $+ [ $sockname ] ] ) == $null) {
    window -aek @ $+ $sockname $_window.conf(@Telnet)
    _window.font.reset @ $+ $sockname @Telnet
  }
  var %service
  if ($_telnet.service != $null) { %service = ( $+ $ifmatch $+ ) }
  titlebar @ $+ $sockname - $_telnet.host [[ $+ $_telnet.port $+ ]] %service
  echo $colour(info) -it @ $+ $sockname $^*** Connection established: $_telnet.host $^bp($_telnet.port)
}
ON *:SOCKWRITE:telnet*:{
  if ($sockerr) { error.w @ $+ $sockname Telnet Session with $_telnet.host $+ : $_sockerr }
}
ON *:SOCKREAD:telnet*:{
  if ($sockerr) {
    error.w @ $+ $sockname Telnet Session with $_telnet.host $+ : $_sockerr
    return
  }
  var %sr
  sockread %sr
  while ($sockbr) {
    if ($right(%sr,1) == $cr) { %sr = $left(%sr,-1) }
    if (%sr == $chr(32)) || ($remove(%sr,$cr) == $null) { echo -it @ $+ $sockname  }
    elseif (%sr != $null) { echo -it @ $+ $sockname $ansi2mirc($replace(%sr,$chr(32), )) }
    if ($sockname == $null) { break }
    sockread %sr
  }
}
ON *:SOCKCLOSE:telnet*:{ echo $colour(info) -it @ $+ $sockname $^*** End of Session }
alias _onclosewin.telnet {
  if ($sock($remove($2,@))) { info.a Closing Telnet Session $remove($2,@Telnet) }
  sockclose $remove($2,@)
}
alias _windowsize.Telnet { return X Y 400 241 }
alias _windowopts.Telnet { return 1 1 1 }