]> Sergey Matveev's repositories - paster.git/blob - contrib/paster.tcl
7ef8f0b159b03064c3389b34c33124aa9d560d4a
[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 fn [lindex $argv 0]
8 set size 0
9 if {($argc > 0) && [file exists $fn]} {
10     set ext [file extension $fn]
11     set fd [open $fn {RDONLY BINARY}]
12     set size [file size $fn]
13 } else {
14     chan configure stdin -encoding binary -translation binary
15     set data [read stdin]
16     set size [string length $data]
17     if {$argc > 0} {set ext $fn}
18 }
19
20 if $GnuTLS {
21     set sock [open "|gnutls-cli --logfile=/dev/null -p $Port $Host" {RDWR BINARY}]
22 } {
23     set sock [socket $Host $Port]
24     chan configure $sock -encoding binary -translation binary
25 }
26 puts -nonewline $sock "d"
27 if {[info exists ext]} {
28     set ext [string trimleft $ext .]
29     puts -nonewline $sock [string cat "1:e" [string length $ext] ":$ext"]
30 }
31 puts -nonewline $sock "1:v$size:"
32 if {[info exists fd]} {
33     fcopy $fd $sock
34     close $fd
35 } {
36     puts -nonewline $sock $data
37 }
38 puts -nonewline $sock "e"
39 flush $sock
40 while {[gets $sock line] >= 0} { puts $line }
41 close $sock