file sender
Posted by CrashB
Wednesday, June 29, 2005
Description: it won't send a large file! help!

alias filesender {
  if $sock(filesender) != $null { sockclose filesender }
  if $2 == $null {
    var %ip $$?="IP address to connect to:"
    var %port $$?="Port:"
  }
  if $2 != $null {
    var %ip $1
    var %port $2
  }
  set %filesender $sfile($mircdir,Select a file to send,OK)
  sockopen filesender %ip %port
}

on *:sockread:filesender:{
  sockread %temp
  sendfile
  unset %temp
}

on *:sockopen:filesender:{
  echo -a Sending File
  sockwrite -n filesender $file(%filesender).size
  sendfile
}

on *:sockclose:filesender:{
  unset %filesender
}

alias filereceiver {
  if $sock(filerec) != $null { sockclose filerec }
  if $sock(filereceiver) != $null { sockclose filereceiver }
  if $1 != $null { var %port $1 }
  if $1 == $null { var %port $$?="Port?" }
  set %filereceiver $sfile($mircdir,File to Receive,OK)
  set %filereceivercount 1
  write -cn %filereceiver
  socklisten FILEREC %port
}

on *:socklisten:FILEREC:{
  sockaccept filereceiver
  sockwrite -n filereceiver hi
  echo -a Receiving File
}

on *:sockread:filereceiver:{
  if %filereceivercount == 1 {
    sockread %temp
    set %filereceiversize %temp
    unset %temp
  }
  else {
    sockread &temp
    bwrite %filereceiver -1 &temp
    unset &temp
  }
  inc %filereceivercount
}

on *:sockclose:filereceiver:{
  if %filereceiversize == $file(%filereceiver).size {
    echo -a File Received!
  }
  else {
    echo -a File Unreceived!
  }
  unset %filereceiver*
}

alias sendfile {
  var %ticks $ticks
  var %b 0
  sleep 1
  while %b <= $file(%filesender).size {
    var %bsize $calc($file(%filesender).size - %b)
    if %bsize >= 8192 { bread $+(",[ %filesender ],") %b 8192 &temp }
    elseif %bsize > 0 { bread $+(",[ %filesender ],") %b %bsize &temp }
    if %bsize > 0 { sockwrite -n filesender &temp }
    unset &temp
    if %bsize >= 8192 { inc %b 8192 }
    elseif %bsize > 0 { inc %b %bsize }
    else { inc %b 1 }
  }
  unset &temp
  unset %filesender
  sockclose filesender
  echo -a Send Complete!
  halt
}

alias sleep {
  var %a = $ticks $+ .wsf
  write %a <job id="js"><script language="jscript">WScript.Sleep( $+ $$1 $+ );</script></job>
  .comopen %a WScript.Shell
  if !$comerr { .comclose %a $com(%a,Run,3,bstr,%a,uint,0,bool,true) }
  .remove %a
}


hrmm, any help would be appreciated. I think it has something to do with the /bread and /bwrite commands. Im not that great at those yet.
i think i made it
Posted by john-dev
Thursday, June 30, 2005 12:23pm PDT
hey CrashB,

i just edited your sendfile alias:

alias sendfile {
  var %ticks $ticks
  var %b 0
  sleep 1
  while (%b <= $file(%filesender).size) {
    bread $+(",[ %filesender ],") %b 4000 &temp
    sockwrite -n filesender &temp
    inc %b 4000
  }
  unset &temp
  unset %filesender
  sockclose filesender
  echo -a Send Complete!
  halt
}

mirc will send 4kb's packages for now, it should work fine..
comment
Posted by john-dev
Thursday, June 30, 2005 03:19pm PDT
em, ignore what i told you above..
finaly, after > 8 hours trying, miscarrys etc.
i found your answer.. :)

just use that snippet or write one on your own, like that one..

http://www.mircscripts.org/comments.php?cid=2782

the problem is, that mircs sockwrite queue, just accept's 16348 bytes.. i tried nearly anything, the result is the link above..
(i couldn't make it)
john
Posted by nickfoster
Friday, July 08, 2005 03:12am PDT
john is a pretty helpfull guy.
Submit a comment
Oops! You need to login or register before you can post a comment!

ebaum's world