]> Sergey Matveev's repositories - paster.git/commitdiff
Tcl example client
authorSergey Matveev <stargrave@stargrave.org>
Tue, 25 Oct 2022 14:51:53 +0000 (17:51 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Tue, 25 Oct 2022 14:51:53 +0000 (17:51 +0300)
contrib/paster.tcl [new file with mode: 0755]

diff --git a/contrib/paster.tcl b/contrib/paster.tcl
new file mode 100755 (executable)
index 0000000..7ef8f0b
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/env tclsh
+
+set Host paster.example.com
+set Port 2021
+set GnuTLS 1
+
+set fn [lindex $argv 0]
+set size 0
+if {($argc > 0) && [file exists $fn]} {
+    set ext [file extension $fn]
+    set fd [open $fn {RDONLY BINARY}]
+    set size [file size $fn]
+} else {
+    chan configure stdin -encoding binary -translation binary
+    set data [read stdin]
+    set size [string length $data]
+    if {$argc > 0} {set ext $fn}
+}
+
+if $GnuTLS {
+    set sock [open "|gnutls-cli --logfile=/dev/null -p $Port $Host" {RDWR BINARY}]
+} {
+    set sock [socket $Host $Port]
+    chan configure $sock -encoding binary -translation binary
+}
+puts -nonewline $sock "d"
+if {[info exists ext]} {
+    set ext [string trimleft $ext .]
+    puts -nonewline $sock [string cat "1:e" [string length $ext] ":$ext"]
+}
+puts -nonewline $sock "1:v$size:"
+if {[info exists fd]} {
+    fcopy $fd $sock
+    close $fd
+} {
+    puts -nonewline $sock $data
+}
+puts -nonewline $sock "e"
+flush $sock
+while {[gets $sock line] >= 0} { puts $line }
+close $sock