[Pound Mailing List] [Patch] WebSocket support for pound

"Frank Schmirler" <frank.schmirler-PfwzoFMxJyVWk0Htik3J/[email protected]> Tue, 7 Aug 2018 11:58:42 +0200
Newsgroups gmane.comp.web.pound.general
Message-ID <[email protected]>
This is a multi-part message in MIME format.

------=OPENWEBMAIL_ATT_0.589921429145278
Content-Type: text/plain;
	charset=iso-8859-1

Hi,

we recently stumbled over the missing WebSocket support in pound. I attached a
patch against vanilla pound-2.8 which adds support. So far it has been tested
with Guacamole (https://guacamole.apache.org/) and with a commercial product
using WebSockts and it worked without any problems or side effects.

The patch collects the various markers for an upgrade request and for the
server`s acceptance of the upgrade in variable "is_ws". When all markers have
been collected, the connection switches to "WebSocket mode", i.e. simply
forward everything between client and server in both directions until the
connection is closed or times out. There is no parsing of WebSocket frames.

With the patch, WebSockets should start working out of the box. There's no
need to configure anything special (except for the usual listener, service and
backend configuration of course). WebSocket connections are usually long-lived
(hours or even days). However WebSocket clients usually send keep alive
packets to prevent timeouts or silently re-connect when the connection is
closed. So I decided to use a rather conservative timeout of just 600 seconds.
You can override this default with the new configuration file directive
"WSTimeout <seconds>" on the global level and per backend.

Regards,
Frank

------=OPENWEBMAIL_ATT_0.589921429145278
Content-Type: text/x-patch;
	name="pound-2.8-websocket.diff"
Content-Disposition: attachment; filename="pound-2.8-websocket.diff"
Content-Transfer-Encoding: base64

ZGlmZiAtTnVyIFBvdW5kLTIuOC5vcmlnL2NvbmZpZy5jIFBvdW5kLTIuOC9jb25maWcuYwotLS0g
UG91bmQtMi44Lm9yaWcvY29uZmlnLmMJMjAxOC0wNS0xMSAxMjoxNjowNS4wMDAwMDAwMDAgKzAy
MDAKKysrIFBvdW5kLTIuOC9jb25maWcuYwkyMDE4LTA3LTMwIDE0OjEwOjAxLjY5MzY2Nzg1NCAr
MDIwMApAQCAtNzcsNyArNzcsNyBAQAogc3RhdGljIHJlZ2V4X3QgIExpc3RlbkhUVFAsIExpc3Rl
bkhUVFBTLCBFbmQsIEFkZHJlc3MsIFBvcnQsIENlcnQsIHhIVFRQLCBDbGllbnQsIENoZWNrVVJM
Owogc3RhdGljIHJlZ2V4X3QgIEVycjQxNCwgRXJyNTAwLCBFcnI1MDEsIEVycjUwMywgTWF4UmVx
dWVzdCwgSGVhZFJlbW92ZSwgUmV3cml0ZUxvY2F0aW9uLCBSZXdyaXRlRGVzdGluYXRpb247CiBz
dGF0aWMgcmVnZXhfdCAgU2VydmljZSwgU2VydmljZU5hbWUsIFVSTCwgSGVhZFJlcXVpcmUsIEhl
YWREZW55LCBCYWNrRW5kLCBFbWVyZ2VuY3ksIFByaW9yaXR5LCBIQXBvcnQsIEhBcG9ydEFkZHI7
Ci1zdGF0aWMgcmVnZXhfdCAgUmVkaXJlY3QsIFJlZGlyZWN0TiwgVGltZU91dCwgU2Vzc2lvbiwg
VHlwZSwgVFRMLCBJRDsKK3N0YXRpYyByZWdleF90ICBSZWRpcmVjdCwgUmVkaXJlY3ROLCBUaW1l
T3V0LCBXU1RpbWVPdXQsIFNlc3Npb24sIFR5cGUsIFRUTCwgSUQ7CiBzdGF0aWMgcmVnZXhfdCAg
Q2xpZW50Q2VydCwgQWRkSGVhZGVyLCBEaXNhYmxlUHJvdG8sIFNTTEFsbG93Q2xpZW50UmVuZWdv
dGlhdGlvbiwgU1NMSG9ub3JDaXBoZXJPcmRlciwgQ2lwaGVyczsKIHN0YXRpYyByZWdleF90ICBD
QWxpc3QsIFZlcmlmeUxpc3QsIENSTGxpc3QsIE5vSFRUUFMxMSwgR3JhY2UsIEluY2x1ZGUsIENv
bm5UTywgSWdub3JlQ2FzZSwgSFRUUFM7CiBzdGF0aWMgcmVnZXhfdCAgRGlzYWJsZWQsIFRocmVh
ZHMsIENOTmFtZSwgQW5vbnltaXNlLCBFQ0RIQ3VydmU7CkBAIC05Niw2ICs5Niw3IEBACiBzdGF0
aWMgaW50ICBkZWZfZmFjaWxpdHkgPSBMT0dfREFFTU9OOwogc3RhdGljIGludCAgY2xudF90byA9
IDEwOwogc3RhdGljIGludCAgYmVfdG8gPSAxNTsKK3N0YXRpYyBpbnQgIHdzX3RvID0gNjAwOwog
c3RhdGljIGludCAgYmVfY29ubnRvID0gMTU7CiBzdGF0aWMgaW50ICBpZ25vcmVfY2FzZSA9IDA7
CiAjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA4MDBmTApAQCAtMjQyLDYgKzI0
Myw3IEBACiAgICAgcmVzLT5hZGRyLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CiAgICAgcmVz
LT50byA9IGlzX2VtZXJnZW5jeT8gMTIwOiBiZV90bzsKICAgICByZXMtPmNvbm5fdG8gPSBpc19l
bWVyZ2VuY3k/IDEyMDogYmVfY29ubnRvOworICAgIHJlcy0+d3NfdG8gPSBpc19lbWVyZ2VuY3k/
IDEyMDogd3NfdG87CiAgICAgcmVzLT5hbGl2ZSA9IDE7CiAgICAgbWVtc2V0KCZyZXMtPmFkZHIs
IDAsIHNpemVvZihyZXMtPmFkZHIpKTsKICAgICByZXMtPnByaW9yaXR5ID0gNTsKQEAgLTI5Miw2
ICsyOTQsOCBAQAogICAgICAgICAgICAgcmVzLT5wcmlvcml0eSA9IGF0b2kobGluICsgbWF0Y2hl
c1sxXS5ybV9zbyk7CiAgICAgICAgIH0gZWxzZSBpZighcmVnZXhlYygmVGltZU91dCwgbGluLCA0
LCBtYXRjaGVzLCAwKSkgewogICAgICAgICAgICAgcmVzLT50byA9IGF0b2kobGluICsgbWF0Y2hl
c1sxXS5ybV9zbyk7CisgICAgICAgIH0gZWxzZSBpZighcmVnZXhlYygmV1NUaW1lT3V0LCBsaW4s
IDQsIG1hdGNoZXMsIDApKSB7CisgICAgICAgICAgICByZXMtPndzX3RvID0gYXRvaShsaW4gKyBt
YXRjaGVzWzFdLnJtX3NvKTsKICAgICAgICAgfSBlbHNlIGlmKCFyZWdleGVjKCZDb25uVE8sIGxp
biwgNCwgbWF0Y2hlcywgMCkpIHsKICAgICAgICAgICAgIHJlcy0+Y29ubl90byA9IGF0b2kobGlu
ICsgbWF0Y2hlc1sxXS5ybV9zbyk7CiAgICAgICAgIH0gZWxzZSBpZighcmVnZXhlYygmSEFwb3J0
LCBsaW4sIDQsIG1hdGNoZXMsIDApKSB7CkBAIC0xMzQwLDYgKzEzNDQsOCBAQAogICAgICAgICAg
ICAgYWxpdmVfdG8gPSBhdG9pKGxpbiArIG1hdGNoZXNbMV0ucm1fc28pOwogICAgICAgICB9IGVs
c2UgaWYoIXJlZ2V4ZWMoJlRpbWVPdXQsIGxpbiwgNCwgbWF0Y2hlcywgMCkpIHsKICAgICAgICAg
ICAgIGJlX3RvID0gYXRvaShsaW4gKyBtYXRjaGVzWzFdLnJtX3NvKTsKKyAgICAgICAgfSBlbHNl
IGlmKCFyZWdleGVjKCZXU1RpbWVPdXQsIGxpbiwgNCwgbWF0Y2hlcywgMCkpIHsKKyAgICAgICAg
ICAgIHdzX3RvID0gYXRvaShsaW4gKyBtYXRjaGVzWzFdLnJtX3NvKTsKICAgICAgICAgfSBlbHNl
IGlmKCFyZWdleGVjKCZDb25uVE8sIGxpbiwgNCwgbWF0Y2hlcywgMCkpIHsKICAgICAgICAgICAg
IGJlX2Nvbm50byA9IGF0b2kobGluICsgbWF0Y2hlc1sxXS5ybV9zbyk7CiAgICAgICAgIH0gZWxz
ZSBpZighcmVnZXhlYygmSWdub3JlQ2FzZSwgbGluLCA0LCBtYXRjaGVzLCAwKSkgewpAQCAtMTQ2
Nyw2ICsxNDczLDcgQEAKICAgICB8fCByZWdjb21wKCZFbWVyZ2VuY3ksICJeWyBcdF0qRW1lcmdl
bmN5WyBcdF0qJCIsIFJFR19JQ0FTRSB8IFJFR19ORVdMSU5FIHwgUkVHX0VYVEVOREVEKQogICAg
IHx8IHJlZ2NvbXAoJlByaW9yaXR5LCAiXlsgXHRdKlByaW9yaXR5WyBcdF0rKFsxLTldKVsgXHRd
KiQiLCBSRUdfSUNBU0UgfCBSRUdfTkVXTElORSB8IFJFR19FWFRFTkRFRCkKICAgICB8fCByZWdj
b21wKCZUaW1lT3V0LCAiXlsgXHRdKlRpbWVPdXRbIFx0XSsoWzEtOV1bMC05XSopWyBcdF0qJCIs
IFJFR19JQ0FTRSB8IFJFR19ORVdMSU5FIHwgUkVHX0VYVEVOREVEKQorICAgIHx8IHJlZ2NvbXAo
JldTVGltZU91dCwgIl5bIFx0XSpXU1RpbWVPdXRbIFx0XSsoWzEtOV1bMC05XSopWyBcdF0qJCIs
IFJFR19JQ0FTRSB8IFJFR19ORVdMSU5FIHwgUkVHX0VYVEVOREVEKQogICAgIHx8IHJlZ2NvbXAo
JkhBcG9ydCwgIl5bIFx0XSpIQXBvcnRbIFx0XSsoWzEtOV1bMC05XSopWyBcdF0qJCIsIFJFR19J
Q0FTRSB8IFJFR19ORVdMSU5FIHwgUkVHX0VYVEVOREVEKQogICAgIHx8IHJlZ2NvbXAoJkhBcG9y
dEFkZHIsICJeWyBcdF0qSEFwb3J0WyBcdF0rKFteIFx0XSspWyBcdF0rKFsxLTldWzAtOV0qKVsg
XHRdKiQiLCBSRUdfSUNBU0UgfCBSRUdfTkVXTElORSB8IFJFR19FWFRFTkRFRCkKICAgICB8fCBy
ZWdjb21wKCZSZWRpcmVjdCwgIl5bIFx0XSpSZWRpcmVjdFsgXHRdK1wiKC4rKVwiWyBcdF0qJCIs
IFJFR19JQ0FTRSB8IFJFR19ORVdMSU5FIHwgUkVHX0VYVEVOREVEKQpAQCAtMTYzMiw2ICsxNjM5
LDcgQEAKICAgICByZWdmcmVlKCZFbWVyZ2VuY3kpOwogICAgIHJlZ2ZyZWUoJlByaW9yaXR5KTsK
ICAgICByZWdmcmVlKCZUaW1lT3V0KTsKKyAgICByZWdmcmVlKCZXU1RpbWVPdXQpOwogICAgIHJl
Z2ZyZWUoJkhBcG9ydCk7CiAgICAgcmVnZnJlZSgmSEFwb3J0QWRkcik7CiAgICAgcmVnZnJlZSgm
UmVkaXJlY3QpOwpkaWZmIC1OdXIgUG91bmQtMi44Lm9yaWcvaHR0cC5jIFBvdW5kLTIuOC9odHRw
LmMKLS0tIFBvdW5kLTIuOC5vcmlnL2h0dHAuYwkyMDE4LTA1LTExIDEyOjE2OjA1LjAwMDAwMDAw
MCArMDIwMAorKysgUG91bmQtMi44L2h0dHAuYwkyMDE4LTA3LTMwIDE0OjEwOjAxLjY5MzY2Nzg1
NCArMDIwMApAQCAtNTQxLDcgKzU0MSw3IEBACiB2b2lkCiBkb19odHRwKHRocl9hcmcgKmFyZykK
IHsKLSAgICBpbnQgICAgICAgICAgICAgICAgIGNsXzExLCBiZV8xMSwgcmVzLCBjaHVua2VkLCBu
LCBzb2NrLCBub19jb250LCBza2lwLCBjb25uX2Nsb3NlZCwgZm9yY2VfMTAsIHNvY2tfcHJvdG8s
IGlzX3JwYzsKKyAgICBpbnQgICAgICAgICAgICAgICAgIGNsXzExLCBiZV8xMSwgcmVzLCBjaHVu
a2VkLCBuLCBzb2NrLCBub19jb250LCBza2lwLCBjb25uX2Nsb3NlZCwgZm9yY2VfMTAsIHNvY2tf
cHJvdG8sIGlzX3JwYywgaXNfd3M7CiAgICAgTElTVEVORVIgICAgICAgICAgICAqbHN0bjsKICAg
ICBTRVJWSUNFICAgICAgICAgICAgICpzdmM7CiAgICAgQkFDS0VORCAgICAgICAgICAgICAqYmFj
a2VuZCwgKmN1cl9iYWNrZW5kLCAqb2xkX2JhY2tlbmQ7CkBAIC02NjIsNiArNjYyLDcgQEAKICAg
ICBmb3IoY2xfMTEgPSBiZV8xMSA9IDA7OykgewogICAgICAgICByZXNfYnl0ZXMgPSBMMDsKICAg
ICAgICAgaXNfcnBjID0gLTE7CisgICAgICAgIGlzX3dzID0gMDsKICAgICAgICAgdl9ob3N0WzBd
ID0gcmVmZXJlclswXSA9IHVfYWdlbnRbMF0gPSB1X25hbWVbMF0gPSAnXDAnOwogICAgICAgICBj
b25uX2Nsb3NlZCA9IDA7CiAgICAgICAgIGZvcihuID0gMDsgbiA8IE1BWEhFQURFUlM7IG4rKykK
QEAgLTY4OSw2ICs2OTAsOCBAQAogICAgICAgICAgICAgICAgIGlzX3JwYyA9IDE7CiAgICAgICAg
ICAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChyZXF1ZXN0ICsgbWF0Y2hlc1sxXS5ybV9zbywgIlJQ
Q19PVVRfREFUQSIsIG1hdGNoZXNbMV0ucm1fZW8gLSBtYXRjaGVzWzFdLnJtX3NvKSkKICAgICAg
ICAgICAgICAgICBpc19ycGMgPSAwOworICAgICAgICAgICAgZWxzZSBpZighc3RybmNhc2VjbXAo
cmVxdWVzdCArIG1hdGNoZXNbMV0ucm1fc28sICJHRVQiLCBtYXRjaGVzWzFdLnJtX2VvIC0gbWF0
Y2hlc1sxXS5ybV9zbykpCisgICAgICAgICAgICAgICAgaXNfd3MgfD0gMHgxOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgYWRkcjJzdHIoY2FkZHIsIE1BWEJVRiAtIDEsICZmcm9tX2hv
c3QsIDEpOwogICAgICAgICAgICAgbG9nbXNnKExPR19XQVJOSU5HLCAiKCVseCkgZTUwMSBiYWQg
cmVxdWVzdCBcIiVzXCIgZnJvbSAlcyIsIHB0aHJlYWRfc2VsZigpLCByZXF1ZXN0LCBjYWRkcik7
CkBAIC03MzMsNiArNzM2LDEzIEBACiAgICAgICAgICAgICBjYXNlIEhFQURFUl9DT05ORUNUSU9O
OgogICAgICAgICAgICAgICAgIGlmKCFzdHJjYXNlY21wKCJjbG9zZSIsIGJ1ZikpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbm5fY2xvc2VkID0gMTsKKyAgICAgICAgICAgICAgICAvKiBDb25uZWN0
aW9uOiB1cGdyYWRlICovCisgICAgICAgICAgICAgICAgZWxzZSBpZighcmVnZXhlYygmQ09OTl9V
UEdSRCwgYnVmLCAwLCBOVUxMLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgaXNfd3MgfD0gMHgy
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBIRUFERVJfVVBHUkFE
RToKKyAgICAgICAgICAgICAgICBpZighc3RyY2FzZWNtcCgid2Vic29ja2V0IiwgYnVmKSkKKyAg
ICAgICAgICAgICAgICAgICAgaXNfd3MgfD0gMHg0OwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBIRUFERVJfVFJBTlNGRVJfRU5DT0RJTkc6CiAgICAgICAgICAgICAg
ICAgaWYoIXN0cmNhc2VjbXAoImNodW5rZWQiLCBidWYpKQpAQCAtMTQwMiwxMiArMTQxMiwyMSBA
QAogICAgICAgICAgICAgLyogc29tZSByZXNwb25zZSBjb2RlcyAoMXh4LCAyMDQsIDMwNCkgaGF2
ZSBubyBjb250ZW50ICovCiAgICAgICAgICAgICBpZighbm9fY29udCAmJiAhcmVnZXhlYygmUkVT
UF9JR04sIHJlc3BvbnNlLCAwLCBOVUxMLCAwKSkKICAgICAgICAgICAgICAgICBub19jb250ID0g
MTsKKyAgICAgICAgICAgIGlmKCFzdHJuY2FzZWNtcCgiMTAxIiwgcmVzcG9uc2UgKyA5LCAzKSkK
KyAgICAgICAgICAgICAgICBpc193cyB8PSAweDEwOwogCiAgICAgICAgICAgICBmb3IoY2h1bmtl
ZCA9IDAsIGNvbnQgPSAtMUwsIG4gPSAxOyBuIDwgTUFYSEVBREVSUyAmJiBoZWFkZXJzW25dOyBu
KyspIHsKICAgICAgICAgICAgICAgICBzd2l0Y2goY2hlY2tfaGVhZGVyKGhlYWRlcnNbbl0sIGJ1
ZikpIHsKICAgICAgICAgICAgICAgICBjYXNlIEhFQURFUl9DT05ORUNUSU9OOgogICAgICAgICAg
ICAgICAgICAgICBpZighc3RyY2FzZWNtcCgiY2xvc2UiLCBidWYpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29ubl9jbG9zZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0
aW9uOiB1cGdyYWRlICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIXJlZ2V4ZWMoJkNP
Tk5fVVBHUkQsIGJ1ZiwgMCwgTlVMTCwgMCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpc193
cyB8PSAweDIwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEhFQURFUl9VUEdSQURFOgorICAgICAgICAgICAgICAgICAgICBpZighc3RyY2FzZWNtcCgi
d2Vic29ja2V0IiwgYnVmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3dzIHw9IDB4NDA7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgSEVBREVS
X1RSQU5TRkVSX0VOQ09ESU5HOgogICAgICAgICAgICAgICAgICAgICBpZighc3RyY2FzZWNtcCgi
Y2h1bmtlZCIsIGJ1ZikpIHsKQEAgLTE1NzEsNiArMTU5MCwxMTQgQEAKICAgICAgICAgICAgICAg
ICAgICAgY2xlYW5fYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYoaXNfd3MgPT0gMHg3NykgeworICAgICAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogc3BlY2lhbCBtb2RlIGZvciBXZWJzb2Nr
ZXRzIC0gY29udGVudCB1bnRpbCBFT0YKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
ICAgICBjaGFyIG9uZTsKKyAgICAgICAgICAgICAgICBCSU8gICpjbF91bmJ1ZjsKKyAgICAgICAg
ICAgICAgICBCSU8gICpiZV91bmJ1ZjsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcG9sbGZkIHBb
Ml07CisKKyAgICAgICAgICAgICAgICBjbF8xMSA9IGJlXzExID0gMDsKKworICAgICAgICAgICAg
ICAgIG1lbXNldChwLCAwLCBzaXplb2YocCkpOworICAgICAgICAgICAgICAgIEJJT19nZXRfZmQo
Y2wsICZwWzBdLmZkKTsKKyAgICAgICAgICAgICAgICBwWzBdLmV2ZW50cyA9IFBPTExJTiB8IFBP
TExQUkk7CisgICAgICAgICAgICAgICAgQklPX2dldF9mZChiZSwgJnBbMV0uZmQpOworICAgICAg
ICAgICAgICAgIHBbMV0uZXZlbnRzID0gUE9MTElOIHwgUE9MTFBSSTsKKworICAgICAgICAgICAg
ICAgIHdoaWxlIChCSU9fcGVuZGluZyhjbCkgfHwgQklPX3BlbmRpbmcoYmUpIHx8IHBvbGwocCwg
MiwgY3VyX2JhY2tlbmQtPndzX3RvICogMTAwMCkgPiAwKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogZmlyc3QgcmVhZCB3aGF0ZXZlciBpcyBhbHJl
YWR5IGluIHRoZSBpbnB1dCBidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlKEJJT19wZW5kaW5nKGNsKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoQklPX3JlYWQoY2wsICZvbmUsIDEpICE9IDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2dtc2coTE9HX05PVElDRSwgIiglbHgpIGVycm9yIHJlYWQgd3MgcmVxdWVz
dCBwZW5kaW5nOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRf
c2VsZigpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
ZWFuX2FsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJJT193cml0ZShi
ZSwgJm9uZSwgMSkgIT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGVycm5v
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dtc2coTE9HX05PVElDRSwgIigl
bHgpIGVycm9yIHdyaXRlIHdzIHJlcXVlc3QgcGVuZGluZzogJXMiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9zZWxmKCksIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5fYWxsKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEJJT19mbHVzaChiZSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgd2hpbGUoQklPX3BlbmRpbmcoYmUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZihCSU9fcmVhZChiZSwgJm9uZSwgMSkgIT0gMSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvZ21zZyhMT0dfTk9USUNFLCAiKCVseCkgZXJyb3IgcmVhZCB3cyByZXNw
b25zZSBwZW5kaW5nOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJl
YWRfc2VsZigpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsZWFuX2FsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJJT193cml0
ZShjbCwgJm9uZSwgMSkgIT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGVy
cm5vKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dtc2coTE9HX05PVElDRSwg
IiglbHgpIGVycm9yIHdyaXRlIHdzIHJlc3BvbnNlIHBlbmRpbmc6ICVzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfc2VsZigpLCBzdHJlcnJvcihlcnJubykp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuX2FsbCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc19ieXRlcysrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIEJJT19mbHVzaChjbCk7CisKKyAgICAgICAgICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgICAgICAgICAgICogZmluZCB0aGUgc29ja2V0IEJJTyBpbiB0aGUgY2hh
aW4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmICgoY2xf
dW5idWYgPSBCSU9fZmluZF90eXBlKGNsLCBsc3RuLT5jdHg/IEJJT19UWVBFX1NTTCA6IEJJT19U
WVBFX1NPQ0tFVCkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb2dtc2co
TE9HX1dBUk5JTkcsICIoJWx4KSBlcnJvciBnZXQgdW5idWZmZXJlZDogJXMiLCBwdGhyZWFkX3Nl
bGYoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbl9h
bGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoKGJlX3VuYnVmID0gQklPX2ZpbmRfdHlwZShi
ZSwgY3VyX2JhY2tlbmQtPmN0eD8gQklPX1RZUEVfU1NMIDogQklPX1RZUEVfU09DS0VUKSkgPT0g
TlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nbXNnKExPR19XQVJOSU5HLCAiKCVs
eCkgZXJyb3IgZ2V0IHVuYnVmZmVyZWQ6ICVzIiwgcHRocmVhZF9zZWxmKCksIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbl9hbGwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIGNvcHkgdGlsbCBFT0YKKyAgICAg
ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmKHBbMF0ucmV2ZW50cykg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gQklPX3JlYWQoY2xfdW5idWYsIGJ1Ziwg
TUFYQlVGKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcyA8PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZihCSU9fd3JpdGUoYmUsIGJ1ZiwgcmVzKSAhPSByZXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihlcnJubykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9nbXNnKExPR19OT1RJQ0UsICIoJWx4KSBlcnJvciBjb3B5IHdz
IHJlcXVlc3QgYm9keTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHRocmVhZF9zZWxmKCksIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xlYW5fYWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCSU9fZmx1c2goYmUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgcFswXS5yZXZlbnRzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZihwWzFdLnJldmVudHMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcyA9IEJJT19yZWFkKGJlX3VuYnVmLCBidWYsIE1BWEJVRik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZihyZXMgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYoQklPX3dyaXRlKGNsLCBidWYsIHJlcykgIT0gcmVzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYoZXJybm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z21zZyhMT0dfTk9USUNFLCAiKCVseCkgZXJyb3IgY29weSB3cyByZXNwb25zZSBib2R5OiAlcyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX3NlbGYoKSwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbl9hbGwoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc19ieXRlcyArPSBy
ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklPX2ZsdXNoKGNsKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBbMV0ucmV2ZW50cyA9
IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgZW5kX3JlcSA9IGN1cl90aW1lKCk7CmRpZmYgLU51ciBQ
b3VuZC0yLjgub3JpZy9wb3VuZC44IFBvdW5kLTIuOC9wb3VuZC44Ci0tLSBQb3VuZC0yLjgub3Jp
Zy9wb3VuZC44CTIwMTgtMDUtMTEgMTI6MTY6MDUuMDAwMDAwMDAwICswMjAwCisrKyBQb3VuZC0y
LjgvcG91bmQuOAkyMDE4LTA3LTMwIDE0OjEwOjAxLjY5MzY2Nzg1NCArMDIwMApAQCAtMjg5LDYg
KzI4OSwxMyBAQAogLkIgVGltZU91dAogdmFsdWUuIFRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRk
ZW4gZm9yIHNwZWNpZmljIGJhY2stZW5kcy4KIC5UUAorXGZCV1NUaW1lT3V0XGZSIHZhbHVlCitI
b3cgbG9uZyBzaG91bGQKKy5CIFBvdW5kCit3YWl0IGZvciBkYXRhIGZyb20gZWl0aGVyIGJhY2st
ZW5kIG9yIGNsaWVudCBpbiBhIGNvbm5lY3Rpb24gdXBncmFkZWQgdG8KK2EgV2ViU29ja2V0IChp
biBzZWNvbmRzKS4gRGVmYXVsdDogNjAwIHNlY29uZHMuCitUaGlzIHZhbHVlIGNhbiBiZSBvdmVy
cmlkZGVuIGZvciBzcGVjaWZpYyBiYWNrLWVuZHMuCisuVFAKIFxmQkdyYWNlXGZSIHZhbHVlCiBI
b3cgbG9uZyBzaG91bGQKIC5CIFBvdW5kCkBAIC03NjIsNiArNzY5LDExIEBACiAuSSBDb25uVE8K
IHZhbHVlLgogLlRQCitcZkJXU1RpbWVPdXRcZlIgdmFsCitPdmVycmlkZSB0aGUgZ2xvYmFsCisu
SSBXU1RpbWVPdXQKK3ZhbHVlLgorLlRQCiBcZkJIQXBvcnRcZlIgWyBhZGRyZXNzIF0gcG9ydAog
QSBwb3J0IChhbmQgb3B0aW9uYWwgYWRkcmVzcykgdG8gYmUgdXNlZCBmb3Igc2VydmVyIGZ1bmN0
aW9uIGNoZWNrcy4gU2VlIGJlbG93CiB0aGUgIkhpZ2ggQXZhaWxhYmlsaXR5IiBzZWN0aW9uIGZv
ciBhIG1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbi4gQnkgZGVmYXVsdApkaWZmIC1OdXIgUG91bmQt
Mi44Lm9yaWcvcG91bmQuYyBQb3VuZC0yLjgvcG91bmQuYwotLS0gUG91bmQtMi44Lm9yaWcvcG91
bmQuYwkyMDE4LTA1LTExIDEyOjE2OjA1LjAwMDAwMDAwMCArMDIwMAorKysgUG91bmQtMi44L3Bv
dW5kLmMJMjAxOC0wNy0zMCAxNDoxMDowMS42OTM2Njc4NTQgKzAyMDAKQEAgLTQ3LDYgKzQ3LDcg
QEAKIExJU1RFTkVSICAgICpsaXN0ZW5lcnM7ICAgICAgICAgLyogYWxsIGF2YWlsYWJsZSBsaXN0
ZW5lcnMgKi8KIAogcmVnZXhfdCBIRUFERVIsICAgICAgICAgICAgIC8qIEFsbG93ZWQgaGVhZGVy
ICovCisgICAgICAgIENPTk5fVVBHUkQsICAgICAgICAgLyogdXBncmFkZSBpbiBjb25uZWN0aW9u
IGhlYWRlciAqLwogICAgICAgICBDSFVOS19IRUFELCAgICAgICAgIC8qIGNodW5rIGhlYWRlciBs
aW5lICovCiAgICAgICAgIFJFU1BfU0tJUCwgICAgICAgICAgLyogcmVzcG9uc2VzIGZvciB3aGlj
aCB3ZSBza2lwIHJlc3BvbnNlICovCiAgICAgICAgIFJFU1BfSUdOLCAgICAgICAgICAgLyogcmVz
cG9uc2VzIGZvciB3aGljaCB3ZSBpZ25vcmUgY29udGVudCAqLwpAQCAtMjg3LDYgKzI4OCw3IEBA
CiAKICAgICAvKiBwcmVwYXJlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKi8KICAgICBpZihyZWdjb21w
KCZIRUFERVIsICJeKFthLXowLTkhIyQlJicqKy5eX2B8fi1dKyk6WyBcdF0qKC4qKVsgXHRdKiQi
LCBSRUdfSUNBU0UgfCBSRUdfTkVXTElORSB8IFJFR19FWFRFTkRFRCkKKyAgICB8fCByZWdjb21w
KCZDT05OX1VQR1JELCAiKF58WyBcdCxdKXVwZ3JhZGUoWyBcdCxdfCQpIiwgUkVHX0lDQVNFIHwg
UkVHX05FV0xJTkUgfCBSRUdfRVhURU5ERUQpCiAgICAgfHwgcmVnY29tcCgmQ0hVTktfSEVBRCwg
Il4oWzAtOWEtZl0rKS4qJCIsIFJFR19JQ0FTRSB8IFJFR19ORVdMSU5FIHwgUkVHX0VYVEVOREVE
KQogICAgIHx8IHJlZ2NvbXAoJlJFU1BfU0tJUCwgIl5IVFRQLzEuMSAxMDAuKiQiLCBSRUdfSUNB
U0UgfCBSRUdfTkVXTElORSB8IFJFR19FWFRFTkRFRCkKICAgICB8fCByZWdjb21wKCZSRVNQX0lH
TiwgIl5IVFRQLzEuWzAxXSAoMTBbMS05XXwxWzEtOV1bMC05XXwyMDR8MzBbNDU2XSkuKiQiLCBS
RUdfSUNBU0UgfCBSRUdfTkVXTElORSB8IFJFR19FWFRFTkRFRCkKZGlmZiAtTnVyIFBvdW5kLTIu
OC5vcmlnL3BvdW5kLmggUG91bmQtMi44L3BvdW5kLmgKLS0tIFBvdW5kLTIuOC5vcmlnL3BvdW5k
LmgJMjAxOC0wNS0xMSAxMjoxNjowNS4wMDAwMDAwMDAgKzAyMDAKKysrIFBvdW5kLTIuOC9wb3Vu
ZC5oCTIwMTgtMDctMzAgMTQ6MTA6MDEuNjk3NjY3ODU1ICswMjAwCkBAIC0yNzYsNiArMjc2LDcg
QEAKICAgICAgICAgICAgIGNvbnRyb2xfc29jazsgICAgICAgLyogY29udHJvbCBzb2NrZXQgKi8K
IAogZXh0ZXJuIHJlZ2V4X3QgIEhFQURFUiwgICAgIC8qIEFsbG93ZWQgaGVhZGVyICovCisgICAg
ICAgICAgICAgICAgQ09OTl9VUEdSRCwgLyogdXBncmFkZSBpbiBjb25uZWN0aW9uIGhlYWRlciAq
LwogICAgICAgICAgICAgICAgIENIVU5LX0hFQUQsIC8qIGNodW5rIGhlYWRlciBsaW5lICovCiAg
ICAgICAgICAgICAgICAgUkVTUF9TS0lQLCAgLyogcmVzcG9uc2VzIGZvciB3aGljaCB3ZSBza2lw
IHJlc3BvbnNlICovCiAgICAgICAgICAgICAgICAgUkVTUF9JR04sICAgLyogcmVzcG9uc2VzIGZv
ciB3aGljaCB3ZSBpZ25vcmUgY29udGVudCAqLwpAQCAtMzE5LDYgKzMyMCw3IEBACiAgICAgaW50
ICAgICAgICAgICAgICAgICBwcmlvcml0eTsgICAvKiBwcmlvcml0eSAqLwogICAgIGludCAgICAg
ICAgICAgICAgICAgdG87ICAgICAgICAgLyogcmVhZC93cml0ZSB0aW1lLW91dCAqLwogICAgIGlu
dCAgICAgICAgICAgICAgICAgY29ubl90bzsgICAgLyogY29ubmVjdGlvbiB0aW1lLW91dCAqLwor
ICAgIGludCAgICAgICAgICAgICAgICAgd3NfdG87ICAgICAgLyogd2Vic29ja2V0IHRpbWUtb3V0
ICovCiAgICAgc3RydWN0IGFkZHJpbmZvICAgICBoYV9hZGRyOyAgICAvKiBIQSBhZGRyZXNzL3Bv
cnQgKi8KICAgICBjaGFyICAgICAgICAgICAgICAgICp1cmw7ICAgICAgIC8qIGZvciByZWRpcmVj
dG9ycyAqLwogICAgIGludCAgICAgICAgICAgICAgICAgcmVkaXJfcmVxOyAgLyogdGhlIHJlZGly
ZWN0IHNob3VsZCBpbmNsdWRlIHRoZSByZXF1ZXN0IHBhdGggKi8KQEAgLTQ0MCw2ICs0NDIsNyBA
QAogI2RlZmluZSBIRUFERVJfVVJJICAgICAgICAgICAgICAgICAgOQogI2RlZmluZSBIRUFERVJf
REVTVElOQVRJT04gICAgICAgICAgMTAKICNkZWZpbmUgSEVBREVSX0VYUEVDVCAgICAgICAgICAg
ICAgIDExCisjZGVmaW5lIEhFQURFUl9VUEdSQURFICAgICAgICAgICAgICAxMwogCiAvKiBjb250
cm9sIHJlcXVlc3Qgc3R1ZmYgKi8KIHR5cGVkZWYgZW51bSAgICB7CmRpZmYgLU51ciBQb3VuZC0y
Ljgub3JpZy9zdmMuYyBQb3VuZC0yLjgvc3ZjLmMKLS0tIFBvdW5kLTIuOC5vcmlnL3N2Yy5jCTIw
MTgtMDUtMTEgMTI6MTY6MDUuMDAwMDAwMDAwICswMjAwCisrKyBQb3VuZC0yLjgvc3ZjLmMJMjAx
OC0wNy0zMCAxNDoxMDowMS42OTc2Njc4NTUgKzAyMDAKQEAgLTM5NSw2ICszOTUsNyBAQAogICAg
ICAgICB7ICJVc2VyLWFnZW50IiwgICAgICAgICAxMCwgSEVBREVSX1VTRVJfQUdFTlQgfSwKICAg
ICAgICAgeyAiRGVzdGluYXRpb24iLCAgICAgICAgMTEsIEhFQURFUl9ERVNUSU5BVElPTiB9LAog
ICAgICAgICB7ICJFeHBlY3QiLCAgICAgICAgICAgICA2LCAgSEVBREVSX0VYUEVDVCB9LAorICAg
ICAgICB7ICJVcGdyYWRlIiwgICAgICAgICAgICA3LCAgSEVBREVSX1VQR1JBREUgfSwKICAgICAg
ICAgeyAiIiwgICAgICAgICAgICAgICAgICAgMCwgIEhFQURFUl9PVEhFUiB9LAogICAgIH07CiAg
ICAgaW50IGk7Cg==

------=OPENWEBMAIL_ATT_0.589921429145278--

--
To unsubscribe send an email with subject unsubscribe to [email protected]
Please contact [email protected] for questions.