If I send a file to myself, the speed depends in fact on my upload capabilities (which I can manupulate by producing other upload). Wonder why. I am using a router in a "1-PC home network".
As this might not alway be the case, it's rendering the following quite useless

Notes:
Now it has grown a lot bigger than I originally intended, I added some comments, echo feedback and some plain error checking.
I made this stimulated by the OP -
just to play arround a bit- therefore I'll add it here. Hardly will you be able to make others use something like this, or make them send the results back to you... And why be that long winded, why not exchange a file, or ask. However, I wrote this thingy - maybe it will help someone - most likely it will not

There is a $send(N).cps identifier, returning a current "average" of that send..., but I wanted to calculate it by myself
Why "at least 100kB"? To get a viable average value.
Problem:
Without much doubt, most users have "on send request" set to default, that is: "ask". And I have no idea how to start calculating the time
after accepting the dcc get (there is no "on accept" event, or an "on send starts") -
but the calculated speed will only be correct if $sreq is set to "auto", which is quite unlikely...
alias dcc.test {
; ----- inform the tester of what will be going on (allow the user to abort this all)
if ($input(To test the DCC speed of your current connection $+ $chr(44) please select a file (at least 100kB size) $&
located on your hard drive. $crlf $crlf $+ A copy of this file will be sent to you via DCC $+ $chr(44) $&
the copy will be removed directly after the transfer has finished. $crlf $crlf $+ Note: $qt(mirc.chm) is $&
of suficient size $+ $chr(44) for instance.,ygid,Testing your DCC speed) == $true) {
; ----- select a file for speed test
:1
set %dcc.test.pathfile $sfile($gettok($mircdir,1,92),*.*,Test this file)
if (%dcc.test.pathfile) {
; ----- file is smaller than 100kB: repeat the prompt, or abort the test
if ($file($shortfn(%dcc.test.pathfile)).size < 102400) {
if ($input(The file selected: $crlf $+ $qt(%dcc.test.pathfile) $crlf $+ is of insufficient size: $&
$bytes($file($shortfn(%dcc.test.pathfile)).size).suf $+ . $&
$crlf $+ Please select a file of at least 100kB size!,ygwd,Error: File is too small) == $true) { goto 1 }
else { ECHO -a Test aborted. | return }
}
}
; ----- no file selected: repeat the prompt, or abort the test
else {
if ($input(You did not select a file. Please retry!,ygwd,Error: No file selected) == $true) { goto 1 }
else { ECHO -a Test aborted. | return }
}
; ----- file selected and size suficcient: enable the checking group
.enable #dcc.connection.check
; ----- if the user is not in dcc trust, add him temporarily (for "limit auto get to trusted users")
if (!$trust($me)) { set %dcc.test.temptrust on | dcc trust $ial($me) }
; ----- send the file selected
dcc send $me $shortfn(%dcc.test.pathfile)
set %dcc.test.file $mkfn($nopath(%dcc.test.pathfile))
set %dcc.test.started $ctime
}
; ----- test not confirmed
else { ECHO -a Test not confirmed. }
}
; ----- group of dcc events for testing
#dcc.connection.check on
on *:FILERCVD:*: {
; ----- the file was sent to user oneself, its the test file
if (($nick == $me) && ($nopath($filename) == %dcc.test.file)) {
; ----- calculate transfer speed (size over time)
ECHO -a Test finished. The average DCC send speed was $&
$round($calc($file($shortfn($filename)).size / $calc($ctime - %dcc.test.started) / 1024),1) kB/s.
dcc.test.end $shortfn($filename)
}
}
on *:GETFAIL:*: {
; ----- the file was sent to user oneself, its the test file
if (($nick == $me) && ($nopath($filename) == %dcc.test.file)) {
ECHO -a Test failed.
dcc.test.end $shortfn($filename)
}
}
#dcc.connection.check end
; ----- needed on both success and failure, therefore an alias
alias -l dcc.test.end {
; ----- restore dcc trust settings (if changed)
if (%dcc.test.temptrust) { dcc trust -r $ial($me) }
; ----- remove the file sent for testing purposes
.remove $1
; ----- close dcc get / send windows of the user oneself
close -gs $me
; ----- remove the variables created for testing
unset %dcc.test.*
; ----- disable the test group
.disable #dcc.connection.check
}