[python] Streamy, STARTTLS a select()/poll()

Jan Kundrát jkt na gentoo.org
Středa Květen 31 12:07:05 CEST 2006


Ahoj,
"stream" rikam instanci nejake tridy, ktera zpristupnuje metody read(),
write(), readline(), flush() (stejne funkce jako u souboru) a ponekud
divokou metodu has_data(timeout), ktera vrati, zda jsou k dispozici
nejaka data pro cteni (a volitelne na ne bude cekat nejakou dobu).

Bez problemu mi funguje implementace pro sockety (TCPStream) a na Linuxu
i pro procesy (ProcessStream) - poll() na win32 funguje jenom na sockety
a ne na pipes.

Problem je, ze pro svuj IMAP parser potrebuju funkci starttls(), ktera
nejak realizuje SSL/TLS handshake po jiz otevrenem spojeni (tady se muzu
omezit jenom na TCP sockety, STARTTLS pres pipe nutne nepotrebuju) a
dale jiz data bezi sifrovane. To samotne neni problem, smtplib dela to
same, jenomze podle manualu jsem v zadne SSL/TLS knihovne nenasel zadny
ekvivalent funkce, ktera by mi rekla, jestli muzu ze siforvaneho streamu
cist bez blokovani. select()/poll() na socket, po kterem tecou sifrovana
data, nema smysl, protoze ta data mohou byt rezie SSL.

Vim, ze Twisted by neco takoveho mel umet, jenomze mi to prijde jako
takovy kanon na vrabce. Pletu se?

Napada me jedno pomerne hnusne reseni, cist do vlastniho bufferu a
operace read(), readline(), write(), flush(), has_data() realizovat nad
nim. Takhle to pry (#python na freenode) resi prave Twisted pro pipes.

Koukal jsem i na Polymer (IMAP klient, ktery by neco takoveho mel
resit), nicmene ten se one funkci has_data() pomerne zdarile vyhyba.

Pripominky jsou vitany, v priloze je relevantni kus meho kodu.

-jkt

-- 
cd /local/pub && more beer > /dev/mouth
------------- další část ---------------
Netextová příloha byla odstraněna...
JmĂŠno: streams.py
Typ: text/x-python
Velikost: 2340 bytes
Popis: [Şådný popis není k dispozici]
Url : http://www.py.cz/pipermail/python/attachments/20060531/a2d2d3bb/attachment.py 
------------- další část ---------------
Netextová příloha byla odstraněna...
JmĂŠno: signature.asc
Typ: application/pgp-signature
Velikost: 258 bytes
Popis: OpenPGP digital signature
Url : http://www.py.cz/pipermail/python/attachments/20060531/a2d2d3bb/attachment.pgp 


Další informace o konferenci Python