kons_font 13
lappend auto_path ./combat-tcl-ssl ~/tcl; package re combat
# + to jest wersja combata z komenda socket zastapiona przez tls::socket !!
set Combat::use_ssl 1
proc Combat::ssl_cli_passwd {} {return "qwerty"}
# + obecna wersja iiop.tcl wymaga aby klient tez mial cert/priv i haslo !
## dodajemy prot SSL/TLS do Combata...
# + przed uruchomieniem wykonaj ". e_tls"
# + konieczne bylo uzycie tls::handshake dla ser i kli,
# bez tego gniazdka (bezp.) troche inaczje sie zachowuja !!
# + problemy do rozwiazania:
# brak nr portu w IOR od serwera z SSL...
#
source Hello3.tcl
combat::ir add $_ir_Hello3
set o1 [corba::string_to_object file://[pwd]/Hello.IOR]
#% _combat_obj_1
# ...
# modyfikujemy ob. IOR tak, aby zawieral rzeczywisty nr portu...
#
proc err kod {catch $kod err; return $err}
proc j ob {join [$ob configure] \n}
proc znajdz_tag {li tag} {
foreach e $li {if {[$e cget -tag]==$tag} {return $e}}
error "nie znaleziono tagu $tag !!!"
}
set obj1 [Combat::CORBA::ORB::GetObjFromHandle $o1]
set ior1 [$obj1 cget -ior]
# + pobieramy obiekt IOR z handle $o1
$ior1 cget -type_id
#% IDL:HelloApp/Hello:1.0
set prof1 [znajdz_tag [$ior1 cget -profiles] 0]
# + znajdujemy profil z tagiem 0
$prof1 cget -port
#% 0
set comp1 [znajdz_tag [$prof1 cget -components] 20]
# + znajdujemy komponent z tagiem 20
binary scan [$comp1 cget -component_data] c* x1; set x1
#% 0 0 0 122 0 96 -116 63
set port1 [expr {([lindex $x1 end-1]&0xFF)*256+([lindex $x1 end]&0xFF)}]
#% 35903
# + obliczamy nr portu (ostatnie 2 bajty w component_data)
$prof1 configure -port $port1
#%
# ...
$o1 sayHello
#% Hello world !!!
$o1 podajLiczbe
#% 2
#% 1
#% 0
$obj1 disconnect
file chan sock*
#% sock5
tls::status sock5
#% sha1_hash E74BA76019A6F63892141DFC9663F3ACBAE2126C subject {/C=Unknown/ST=Unknown/L=Unknown/O=JacORB/OU=Unknown/CN=JSSE SSL Demo Server} issuer {/C=Unknown/ST=Unknown/L=Unknown/O=JacORB/OU=Unknown/CN=JSSE SSL Demo Server} notBefore {Jul 6 08:22:02 2006 GMT} notAfter {Nov 10 01:53:46 2038 GMT} serial 1152174122 sbits 168 cipher EDH-DSS-DES-CBC3-SHA
# ...
if 0 {
## jak stworzyc i dodac komponene ssl (tag 20) do profilu??
#
proc err kod {catch $kod err; return $err}
proc j ob {join [$ob configure] \n}
proc znajdz_tag {li tag} {
foreach e $li {if {[$e cget -tag]==$tag} {return $e}}
error "nie znaleziono tagu $tag !!!"
}
proc 2bajty n {list [expr {($n>>8) & 0xFF}] [expr {$n & 0xFF}]}
set obj1 [Combat::CORBA::ORB::GetObjFromHandle $ref]
set ior1 [$obj1 cget -ior]
set prof1 [znajdz_tag [$ior1 cget -profiles] 0]
set port1 [$prof1 cget -port]
#% 38560
$prof1 configure -port 0
# + tego wymaga spec Corby...
set xx1 "0 0 0 122 0 96 [2bajty $port1]"
#% 0 0 0 122 0 96 150 160
Combat::IOP::TaggedComponent q1
q1 configure -tag 20
# + komponent ssl-owy
q1 configure -component_data [binary form c* $xx1]
set comps1 [$prof1 cget -components]
lappend comps1 ::q1
$prof1 configure -components $comps1
# + dodalismy komponent q1 do profilu z tag=0
if 0 {
j $obj1
j $ior1
j $prof1
itcl::body HelloWorld::sayHello {} {
return "Jak sie masz ???"
}
}
}
# ...
exit