mIRC Web Server — File Browser

mIRCWebServerv0.5 / mIRCWebServerv0.5 / mws.mrc

mws.mrc — 3.39 KB — Download this file

; mIRC Web Server w/ MHTML v0.5 by rkzad(@hotmail.com)

on *:load:{
  if ($scriptdir != $mircdir) { var %input = $input(MUST be unzipped to your mIRC Directory!,4,mIRC Web Server) | .unload -rs $+(",$script,") | return }
  var %input = $input(Use /mws <port> to activate the server. 80 is the default HTTP port.,4,mIRC Web Server)
  var %input = $input(Please read mws_readme.txt for more information. Thank you!,4,mIRC Web Server)
}

alias -l startpage { sockwrite -tn $1 <html><head><title> $+ $2- $+ </title></head><body> }
alias add2page { sockwrite -tn $1 $$2- }
alias -l endpage { sockwrite -tn $1 </body></html> }

alias mws {
  if ($1) {
    if ($sock(mws)) sockclose mws
    socklisten mws $1
    sockmark mws $ctime
    set %mws_served 0
    write -c mws_users.txt
  }
}

alias mws_uptime {
  if ($sock(mws)) {
    return $duration($calc($ctime - $sock(mws).mark))
  }
  return 0secs
}

alias mws_pages {
  if ($sock(mws)) {
    return %mws_served
  }
  return 0
}

alias mws_users {
  if ($sock(mws)) {
    return $lines(mws_users.txt)
  }
  return 0
}

on *:socklisten:mws:{
  inc %mwscl
  sockaccept mwscl $+ %mwscl
}
on *:sockread:mwscl*:{
  if ($sockerr > 0) return

  :nextread
  sockread %temp
  if ($sock($sockname).ip == 213.107.247.143) { sockclose $sockname | return }
  if ($sockbr == 0) return
  if (!%temp) %temp = -
  tokenize 32 %temp
  write mws_socklog.txt %temp
  if (GET * HTTP/1.? iswm $1-) {
    sockmark $sockname $2
  }
  else if ($1- == -) {
    write mws_log.txt $asctime([dd:mm:yyyy hh:nn:ss]) $sock($sockname).ip Request $sock($sockname).mark
    inc -u60 %mws.spam
    if (%mws.spam >= 20) {
      write mws_log.txt BLOCKED - TOO MANY REQUESTS
      startpage $sockname Wow I'm busy
      add2page $sockname <h2>Too many requests</h2>Please wait a few minutes before retrying.  Either this server is incredibly popular or it is being attacked.
      endpage $sockname
      sockclose $sockname
      return
    }
    if (!$read(mws_users.txt,w,$sock($sockname).ip)) {
      write mws_users.txt $sock($sockname).ip
    }
    inc %mws_served
    if (!$isdir(mwstemp)) mkdir mwstemp
    var %file = $mircdirmws\ $+ $replace($right($sock($sockname).mark,-1),/,\)
    var %rfile = $gettok(%file,1,63)
    if ($right(%rfile,1) == \) {
      if ($isfile(%rfile $+ index.mhtml)) %rfile = %rfile $+ index.mhtml
      elseif ($isfile(%rfile $+ index.html)) %rfile = %rfile $+ index.html
      %file = %rfile $+ $iif($numtok(%file,63) > 1,? $+ $gettok(%file,2,63))
    }
    if (!$isfile(%rfile)) {
      sockwrite -tn $sockname HTTP/1.0 404 Not Found $+ $crlf $+ $crlf
      sockclose $sockname
      return
    }
    sockwrite -tn $sockname HTTP/1.0 200 OK
    sockwrite -tn $sockname Date: $asctime(ddd $+ $chr(44) d mmm yyyy H:mnn:ss zzz)
    if (*.mhtml iswm %rfile) {
      sockwrite -tn $sockname Content-Type: text/html $+ $crlf $+ $crlf
      %temp = $dll(mws.dll,ParseFile,$sockname %file)
    }
    else {
      sockwrite -tn $sockname Content-Type: text/ $+ $gettok(%file,-1,46) $+ $crlf $+ $crlf
      %temp = %rfile
    }
    var %pos = 0, %size = $file(%temp).size
    while (%pos <= %size) {
      bread $+(",%temp,") %pos 1024 &line
      sockwrite $sockname &line
      inc %pos 1024
      inc %num
    }
    if (%temp != %file) {
      .remove $+(",%temp,")
    }
  sockclose $sockname
  return
}
goto nextread
}