]> Sergey Matveev's repositories - paster.git/blob - contrib/paster.tcl
Netstrings are simpler than bencode
[paster.git] / contrib / paster.tcl
1 #!/usr/bin/env tclsh
2
3 set Host paster.example.com
4 set Port 2021
5 set GnuTLS 1
6
7 set ext ""
8 set fn [lindex $argv 0]
9 set size 0
10 if {($argc > 0) && [file exists $fn]} {
11     set ext [string trimleft [file extension $fn] .]
12     set fd [open $fn {RDONLY BINARY}]
13     set size [file size $fn]
14 } else {
15     chan configure stdin -encoding binary -translation binary
16     set data [read stdin]
17     set size [string length $data]
18     if {$argc > 0} {set ext $fn}
19 }
20
21 if $GnuTLS {
22     set sock [open "|gnutls-cli --logfile=/dev/null -p $Port $Host" {RDWR BINARY}]
23 } {
24     set sock [socket $Host $Port]
25     chan configure $sock -encoding binary -translation binary
26 }
27
28 puts -nonewline $sock [string cat [string length $ext] ":$ext,"]
29 puts -nonewline $sock "$size:"
30 if {[info exists fd]} {
31     fcopy $fd $sock
32     close $fd
33 } {
34     puts -nonewline $sock $data
35 }
36 puts -nonewline $sock ","
37 flush $sock
38 while {[gets $sock line] >= 0} { puts $line }
39 close $sock