From: Alaoui Y. <kak...@us...> - 2005-09-22 18:08:20
|
Update of /cvsroot/amsn/msn In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv308 Modified Files: protocol.tcl Log Message: Added receinving/sending ink messages in .gif and receiving long messages Index: protocol.tcl =================================================================== RCS file: /cvsroot/amsn/msn/protocol.tcl,v retrieving revision 1.728 retrieving revision 1.729 diff -C2 -d -r1.728 -r1.729 *** protocol.tcl 21 Sep 2005 23:21:10 -0000 1.728 --- protocol.tcl 22 Sep 2005 18:08:07 -0000 1.729 *************** *** 1283,1286 **** --- 1283,1290 ---- if { $res == 0 } { + if { $sbn != "ns" } { + catch {$sbn configure -last_activity [clock seconds] } + } + if {$sbn != "ns" } { degt_protocol "->$sbn-[$sbn cget -sock] $cmd" sbsend *************** *** 1295,1298 **** --- 1299,1343 ---- + + proc SendInk { sb file } { + + set maxchars 1202 + set fd [open $file r] + fconfigure $fd -translation {binary binary} + set data [read $fd] + + set data [::base64::encode $data] + set data [string map { "\n" ""} $data] + + set chunks [expr int( [string length $data] / $maxchars) + 1] + + + plugins_log "TeXIM" "data : $data\nchunks : $chunks\n" + + for {set i 0 } { $i < $chunks } { incr i } { + set chunk [string range $data [expr $i * $maxchars] [expr ($i * $maxchars) + $maxchars - 1]] + set msg "" + if { $i == 0 } { + set msg "MIME-Version: 1.0\r\nContent-Type: image/gif\r\n" + set chunk "base64:$chunk" + if { $chunks == 1 } { + set msg "${msg}\r\n$chunk" + } else { + set msgid "[format %X [myRand 4369 65450]][format %X [myRand 4369 65450]]-[format %X [myRand 4369 65450]]-[format %X [myRand 4369 65450]]-[format %X [expr [expr int([expr rand() * 1000000])%65450]] + 4369]-[format %X [myRand 4369 65450]][format %X [myRand 4369 65450]][format %X [myRand 4369 65450]]" + set msg "${msg}Message-ID: \{$msgid\}\r\nChunks: $chunks\r\n\r\n$chunk" + } + } else { + set msg "${msg}Message-ID: \{$msgid\}\r\nChunk: $i\r\n\r\n$chunk" + } + set msglen [string length $msg] + + ::MSN::WriteSBNoNL $sb "MSG" "U $msglen\r\n$msg" + + } + + + } + + ######################################################################## # Check if the old closed preferred SB is still the preferred SB, or *************** *** 2468,2475 **** } ! method setRaw { data } { set body $data ! array set header {} ! array set fields {} } --- 2513,2520 ---- } ! method setRaw { data {headers_list {}} {fields_list {}}} { set body $data ! array set headers $headers_list ! array set fields $fields_list } *************** *** 2982,2986 **** --- 3027,3074 ---- + set message_id [$message getHeader Message-ID] + set chunks [$message getHeader Chunks] + set current_chunk [$message getHeader Chunk] + if { $message_id != "" && ($chunks != "" || $current_chunk != "" ) } { + + if { $chunks != "" } { + status_log "chunked message : $chunks chunks - [$message getHeaders]" blue + set ::MSN::split_messages(${message_id}_total_chunks) $chunks + set ::MSN::split_messages(${message_id}_got_chunks) 1 + set ::MSN::split_messages(${message_id}_chunk_0) [$message getBody] + set ::MSN::split_messages(${message_id}_headers) [$message getHeaders] + set ::MSN::split_messages(${message_id}_fields) [$message getFields] + } else { + status_log "chunked message : $chunks chunk - [$message getHeaders] - [set ::MSN::split_messages(${message_id}_headers)]" blue + incr ::MSN::split_messages(${message_id}_got_chunks) + set ::MSN::split_messages(${message_id}_chunk_${current_chunk}) [$message getBody] + + array set headers [set ::MSN::split_messages(${message_id}_headers)] + array set headers [$message getHeaders] + set ::MSN::split_messages(${message_id}_headers) [array get headers] + + array set fields [set ::MSN::split_messages(${message_id}_fields)] + array set fields [$message getFields] + set ::MSN::split_messages(${message_id}_fields) [array get fields] + + } + + if {[set ::MSN::split_messages(${message_id}_total_chunks)] == [set ::MSN::split_messages(${message_id}_got_chunks)] } { + set body "" + + for { set i 0 } { $i < [set ::MSN::split_messages(${message_id}_total_chunks)] } { incr i } { + append body [set ::MSN::split_messages(${message_id}_chunk_${i})] + } + + $message setRaw $body [set ::MSN::split_messages(${message_id}_headers)] [set ::MSN::split_messages(${message_id}_fields)] + } else { + # Ignore this message until you get the whole message + return + } + + + } set contentType [lindex [split [$message getHeader Content-Type] ";"] 0] + switch $contentType { text/plain { *************** *** 3129,3132 **** --- 3217,3234 ---- xclientcaps_received $message $typer } + image/gif { + set body [$message getBody] + if { [string first "base64:" $body] != -1 } { + set data [::base64::decode [string range $body 7 end]] + } else { + set data $body + } + set img [image create photo -data $data] + destroy .test + toplevel .test + label .test.l -text "You received an ink message : " + label .test.i -image $img + pack .test.l .test.i -side top + } default { |