portal Michała Hanćkowiaka
Begin main content
wm withdraw .; wm withdraw .output; wm geom .konsola 804x492+200+14; # Puszcz
wm geom .konsola 762x1020+772+35; # Morasko
wm geom .konsola 835x699+517+7; kons_font 11; # A0-4, laptopy

## ZeroMQ, 09.2018
# + security, metoda PLAIN + ZAP
# + zmq ma 3 metody: NULL, PLAIN, CURVE
# + opisy security w zmq:
https://rfc.zeromq.org/spec:23/ZMTP/
https://rfc.zeromq.org/spec:27/ZAP/
https://rfc.zeromq.org/spec:24/ZMTP-PLAIN/
http://hintjens.com/blog:45
http://hintjens.com/blog:48
http://hintjens.com/blog:49
# + ZAP: gdzie kod sprawdzajacy username/password ?
#  trzeba podlaczyc handler pod "inproc://zeromq.zap.01"
#  dziwna reakcja na bledne haslo po stronie klienta(?)
#    to chyba blad w libzmq 4.1.5 ?!?!
#  mozna obejsc ten blad przez flage DONTWAIT w send i recv;
#    ale nie do konca...
#  moze potrzebna nowsza wersja libzmq ?!?!
#    okazuje sie ze niezbedna jest wersja libzmq 4.2.5
#    zmodyfikowana wersja tclzmq
#    oraz wlaczenie draftowych flag monitora
#      ktore moga nie dzialac... (chyba nie dzialaja prawidlowo?!)
#    wszystko razem dosc kontrowersyjne...
#      info o blednym hasle przychodzi jako zdarzenie...
#  WNIOSEK: uzywac starej wersji i triku z CONNECTED
#    do wykrywania czy uwierzytelnianie sie udalo...
#    jednak jest pewien problem z tym podejsciem:
#      nie wiadomo ile zdarzen (DIS)CONNECTED przyjdzie i ktore jest ostnie...
#
exec tclkit8.6b1 alr_zmq03ser.tcl &
  #% 21244
proc err args {catch $args err; set err}
lappend auto_path ./zeromq
package re zmq
  #% 4.0.1
zmq version
  #% 4.1.5

zmq context ctx
zmq socket s2 ctx REQ
s2 config IDENTITY 1234
s2 config PLAIN_USERNAME "qqq"
s2 config PLAIN_PASSWORD "123"
zmq monitor ctx s2 eee
proc eee args {
  puts "[info level 0]"
  if {[lindex $args 0 1]=="CONNECTED"} {set ::CONNECTED 1}
  if {[lindex $args 0 1]=="DISCONNECTED"} {set ::CONNECTED 0}
}
  # + NIE pokazuje bledu przy connect z blednym haslem ?!?!?!
  # + po przejsciu na nowa wersje i zmianach w tclzmq pokazuje...
  #  dlaczego pokazuje tez CONNECT_RETRIED ?!?! blad ?
  # + cos jest nie tak z tymi komunikatami...
  #  dlaczego nie ma HANDSHAKE_SUCC
  # + przy starej wersji libzmq mozna sie posluzyc flagami
  #  CONNECTED i DISCONNECTED (!!!)

# klient
set CONNECTED 0; s2 connect "tcp://localhost:7777"; after 300; update; set CONNECTED
  #% 0
  #% 1
  # + connect wysyla zdarzenia do kolejki zdarzen...
  # + jesli CONNECTED tzn. ze uwierzytelnienie sie udalo i mozna wyw. send/recv
  # + jest problem ani vwait ani update nie dzialaja prawidlow... ?!?!?!
  #  "after 300; update" to prymitywne rozwiazanie bez gwarancji...

s2 send "a ku ku 1"
  #%
s2 recv
  #% odp na: {a ku ku 1}
s2 recv DONTWAIT

s2 disconnect "tcp://localhost:7777"
s2 config PLAIN_PASSWORD "123"
s2 config PLAIN_PASSWORD "1234"
  # + reakcja na bledne haslo jest dziwna... zawieszenie?
  #  jak to wykryc ?!?!?!?!!?!?
  #  okazuje sie ze flaga DONTWAIT pomaga...
  #  zwraca "Resource temporarily unavailable"
  # + po uaktualnieniu tclzmq oraz po przejsciu na libzmq 4.2.5 (zamiast 4.1.5)
  #  otrzymujemy informacje HANDSHAKE_FAILED_AUTH...
  #  czy to wystarczy?  to jest tylko DRAFT...
  # + jesli w trybie bez polaczenia wywolac send, to potem jest problem bo
  #  zmq nie pozwala na drugie send; jedyne wyjcie to "s2 destroy" i utworzyc s2 od nowa...

s2 config
  #% {SNDHWM 1000} {RCVHWM 1000} {AFFINITY 0} {IDENTITY 1234} {RATE 100} {RECOVERY_IVL 10000} {SNDBUF 0} {RCVBUF 0} {RCVMORE 0} {EVENTS POLLOUT} {TYPE 3} {LINGER -1} {RECONNECT_IVL 100} {BACKLOG 100} {RECONNECT_IVL_MAX 0} {MAXMSGSIZE -1} {MULTICAST_HOPS 1} {RCVTIMEO -1} {SNDTIMEO -1} {LAST_ENDPOINT tcp://localhost:7777} {TCP_KEEPALIVE -1} {TCP_KEEPALIVE_CNT -1} {TCP_KEEPALIVE_IDLE -1} {TCP_KEEPALIVE_INTVL -1} {IMMEDIATE 0} {MECHANISM PLAIN} {PLAIN_SERVER 0} {PLAIN_USERNAME qqq} {PLAIN_PASSWORD 1234} {CURVE_SERVER {<no libsodium>}} {CURVE_PUBLICKEY {<no libsodium>}} {CURVE_SECRETKEY {<no libsodium>}} {CURVE_SERVERKEY {<no libsodium>}} {ZAP_DOMAIN {}} {IPV6 0}

zmq have_libsodium
  #% 1

s2 destroy










exit

uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...