From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 15 Jul 2004 10:50:04 -0500 From: Subject: Re: [Bluez-devel] l2cap connection problems To: Marcel Holtmann Cc: bluez-devel@lists.sourceforge.net MIME-Version: 1.0 Message-Id: Content-Type: multipart/mixed; boundary="-----e4f5e71b7389120b8797a609baede3bb" List-ID: -------e4f5e71b7389120b8797a609baede3bb Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Never mind the non-blocking server/client for the moment. In the meantime I am just working with some simple code to test l2cap connections (attached init_bt_v2.c). The socket wrapper functions and HCI wrapper functions I am using are defined in the attached file hotdec_sock.c. I still am not able to consistently establish L2CAP connections to the server. I have tried switching the role of the server to master at different places in the code without any luck. From the hcidumps at the client and server, it looks like L2CAP connection request and response packets are being dropped quite frequently. Sometimes the L2CAP connect req is sent by the client but not received at the server. Other times the connect rsp is sent by the server and not received at the client. Every once in a while everything goes through and the connection succeeds. Also, what PSM values should I be using and what HCI layer initialization do I need to perform? Thanks in advance for your help. -------e4f5e71b7389120b8797a609baede3bb Content-Type: application/octet-stream; name="hotdec_sock.c" Content-Disposition: inline; filename="hotdec_sock.c" Content-Transfer-Encoding: base64 I2RlZmluZSBIT1RERUNfU09DS19DCgojaW5jbHVkZSAiaG90ZGVjX3NvY2suaCIKI2RlZmlu ZSBERUJVRwoKI2lmZGVmIERFQlVHCiNpbmNsdWRlIDxzdGRhcmcuaD4KI2luY2x1ZGUgPGVy cm5vLmg+Ci8vIGRlYnVnKCkKLy8gYSBjb25kaXRpb25hbCBwcmludGYoKSBmb3IgZGVidWdn aW5nCnZvaWQgZGVidWcoY2hhciAqZm10LCAuLi4pCnsgCiAgdmFfbGlzdCBhcDsKICB2YV9z dGFydChhcCwgZm10KTsKICBmcHJpbnRmKHN0ZGVyciwgIkRFQlVHOiAiKTsKICB2ZnByaW50 ZihzdGRlcnIsIGZtdCwgYXApOwogIHZhX2VuZChhcCk7Cn0gCiNlbHNlCnZvaWQgZGVidWco Y2hhciAqZm10LCAuLi4pCnsKICA7Cn0KI2VuZGlmCgovLyB0Y3Bfc29ja2V0KCkKLy8gcmV0 dXJucyBhIHRjcCBzb2NrZXQKaW50IHRjcF9zb2NrZXQoKQp7CiAgcmV0dXJuIHNvY2tldChB Rl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7Cn0KCgovLyB1ZHBfc29ja2V0KCkKLy8gcmV0dXJu cyBhIHVkcCBzb2NrZXQKaW50IHVkcF9zb2NrZXQoKQp7CiAgcmV0dXJuIHNvY2tldChBRl9J TkVULCBTT0NLX0RHUkFNLCAwKTsKfQoKaW50IGwyX3NvY2tldCgpCnsKICByZXR1cm4gc29j a2V0KFBGX0JMVUVUT09USCwgU09DS19TRVFQQUNLRVQsIEJUUFJPVE9fTDJDQVApOwp9CgoK aW50IGhjaV9zb2NrZXQoKQp7CiAgc3RydWN0IHNvY2thZGRyX2hjaSBhZGRyOwogIGludCBz b2NrOwogIHByaW50ZigiQ3JlYXRpbmcgSENJIHNvY2tldC4uLiIpOwogIGlmICgoc29jayA9 IHNvY2tldChBRl9CTFVFVE9PVEgsIFNPQ0tfUkFXLCBCVFBST1RPX0hDSSkpIDwgMCkgewog ICAgcGVycm9yKCJzb2NrZXQiKTsKICB9CiAgcHJpbnRmKCJcdFx0T0tcbiIpOwogIHByaW50 ZigiQ2FsbGluZyBpb2N0bCByZXNldC4uLiIpOwogIGlmKCBpb2N0bChzb2NrLCBIQ0lERVZS RVNFVCwgMCkgPCAwICl7CiAgIHByaW50ZigiUmVzZXQgZmFpbGVkXG4iKTsgCiAgIGV4aXQo MSk7CiAgfQogIHByaW50ZigiXHRcdE9LXG4iKTsKCiAgbWVtc2V0KCZhZGRyLCAwLCBzaXpl b2YoYWRkcikpOwogIHByaW50ZigiQmluZGluZyBzb2NrZXQuLi4iKTsKICBhZGRyLmhjaV9m YW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAgYWRkci5oY2lfZGV2ID0gMDsKICBpZiAoIGJpbmQo c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpIDwgMCkgewog ICAgcGVycm9yKCJiaW5kIik7CiAgICBleGl0KDEpOwogIH0KICBwcmludGYoIlx0T0tcbiIp OwogIHByaW50ZigiQm91bmQgYXQgc29ja2V0OiVkLCBkZXZpY2U6IDBcbiIsIHNvY2spOwog IHJldHVybiBzb2NrOwp9CgoKLy9oY2lfaW5pdCgpCi8vcmVzdGFydHMgaGNpIGxheWVyIChm aWx0ZXJzIGV0YykKaW50IGhjaV9pbml0KGludCBkZXYpCnsKICBpbnQgc29ja19idDsKICBj aGFyIGJ1ZmZbMTAwXTsKICBpbnQgaiwgaSwgb3B0LCBvcHRzaXplOwogIHN0cnVjdCBzb2Nr YWRkcl9oY2kgYWRkcjsKICBzdHJ1Y3QgaGNpX2ZpbHRlciBmbHQ7CgogIHByaW50ZigiQ3Jl YXRpbmcgc29ja2V0Li4uIik7CiAgaWYgKChzb2NrX2J0ID0gc29ja2V0KEFGX0JMVUVUT09U SCwgU09DS19SQVcsIEJUUFJPVE9fSENJKSkgPCAwKSB7CiAgICBwZXJyb3IoInNvY2tldCIp OwogICAgZXhpdCgxKTsKICB9CiAgcHJpbnRmKCJcdFx0T0tcbiIpOwogLyoKICBwcmludGYo IkJpbmRpbmcgc29ja2V0Li4uIik7CiAgYWRkci5oY2lfZmFtaWx5ID0gQUZfQkxVRVRPT1RI OwogIGFkZHIuaGNpX2RldiA9IGRldjsKICBpZiAoIGJpbmQoc29ja19idCwgKHN0cnVjdCBz b2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpIDwgMCkgewogICAgcGVycm9yKCJiaW5k Iik7CiAgICBleGl0KDEpOwogIH0KICBwcmludGYoIlx0T0tcbiIpOwogIHByaW50ZigiQm91 bmQgYXQgc29ja2V0OiVkLCBkZXZpY2U6IDBcbiIsIHNvY2tfYnQpOwogICovCiAgcHJpbnRm KCJET1dOLWluZyBkZXZpY2UuLi4iKTsKICBpZiAoaW9jdGwoc29ja19idCwgSENJREVWRE9X TiwgMCkpIHsKICAgIHBlcnJvcigidXAiKTsKICAgIGV4aXQoMSk7CiAgfQogIHByaW50Zigi XHRPS1xuIik7CgogIHByaW50ZigiVVAtaW5nIGRldmljZS4uLiIpOwogIGlmIChpb2N0bChz b2NrX2J0LCBIQ0lERVZVUCwgMCkpIHsKICAgIHBlcnJvcigidXAiKTsKICAgIGV4aXQoMSk7 CiAgfQoKICAvKgogIHByaW50ZigiXHRPS1xuIik7CiAgb3B0ID0gMTsKICBwcmludGYoIlNl dHRpbmcgc29ja2V0IG9wdGlvbnMuLi4iKTsKICBpZiAoKGkgPSBzZXRzb2Nrb3B0KHNvY2tf YnQsIFNPTF9IQ0ksIEhDSV9EQVRBX0RJUiwgJm9wdCwgc2l6ZW9mKG9wdCkpKSA8IDApIHsK ICAgIHBlcnJvcigic2V0c29ja29wdCIpOwogICAgZXhpdCgxKTsKICB9CiAgcHJpbnRmKCJc dE9LXG4iKTsKCiovCi8qCiAgcHJpbnRmKCJTZXR0aW5nIGZpbHRlcnMuLi4iKTsKCiAgLy8g ZmlsdGVyIG91dCBjb21tYW5kIHBhY2tldHMgCiAgaGNpX2ZpbHRlcl9jbGVhcigmZmx0KTsK ICBoY2lfZmlsdGVyX2FsbF9ldmVudHMoJmZsdCk7CiAgaGNpX2ZpbHRlcl9hbGxfcHR5cGVz KCZmbHQpOwoKICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGZsdCk7IGkrKykKICAgIHByaW50 ZigiJTAyeDoiLCAodW5zaWduZWQgY2hhcikoKigodW5zaWduZWQgY2hhciAqKSgmZmx0KSAr IGkpKSk7CgogIGlmICggc2V0c29ja29wdChzb2NrX2J0LCBTT0xfSENJLCBIQ0lfRklMVEVS LCAmZmx0LCBzaXplb2YoZmx0KSkgPCAwKSB7CiAgICBwZXJyb3IoInNldHNvY2tvcHQiKTsK ICAgIGV4aXQoMSk7CiAgfQogIHByaW50ZigiXHRPS1xuIik7CiAgcHJpbnRmKCJTZXR0aW5n IHJhdy4uLiIpOwogIGlmICggaW9jdGwoc29ja19idCwgSENJU0VUUkFXLCBzaXplb2YoYWRk cikpIDwgMCkgewogICAgcGVycm9yKCJzZXRyYXciKTsKICAgIGV4aXQoMSk7CiAgfQogIHBy aW50ZigiXHRPS1xuIik7CiAgcHJpbnRmKCJSYXcgc29ja2V0OiVkXG4iLCBzb2NrX2J0KTsK Ki8KICByZXR1cm4gc29ja19idDsKfQoKLy8gaGNpX3Jlc2V0KCkKLy8gcmVzZXRzIGJsdWV0 b290aCBtb2R1bGUKaW50IGhjaV9yZXNldChpbnQgc29ja19idCkKewogIGludCBydDsKICBj aGFyIHJwYXJhbVszXTsKICBzdHJ1Y3QgaGNpX3JlcXVlc3QgcmVzZXRfcmVxOwogIGRlYnVn KCJpbiByZXNldF9jdHJsXG4iKTsKICByZXNldF9yZXEub2dmID0gT0dGX0hPU1RfQ1RMOwog IHJlc2V0X3JlcS5vY2YgPSBPQ0ZfUkVTRVQ7CiAgcmVzZXRfcmVxLmNwYXJhbSA9IE5VTEw7 CiAgcmVzZXRfcmVxLnJwYXJhbSA9IHJwYXJhbTsKICByZXNldF9yZXEucmxlbiA9IDM7CiAg cnQgPSBoY2lfc2VuZF9yZXEoc29ja19idCwgJnJlc2V0X3JlcSwgMTAwMCk7CiAgcGVycm9y KCJoY2lfcmVzZXQiKTsKICByZXR1cm4gcnQ7Cn0KCi8vIGhjaV9zY2FuX2VuYWJsZSgpCi8v IGVuYWJsZSBzY2FucyBmb3IgY29ubmVjdGluZyBjbGllbnRzIAppbnQgaGNpX3NjYW5fZW5h YmxlKGludCBzb2NrX2J0KQp7CiAgaW50IHJ0OwogIGNoYXIgY3BhcmFtOwogIGNoYXIgcnBh cmFtWzNdOwogIHN0cnVjdCBoY2lfcmVxdWVzdCBzY2FuX3JlcTsKICBkZWJ1ZygiaW4gZW5f c2Nhbl9jdHJsXG4iKTsKICBzY2FuX3JlcS5vZ2YgPSBPR0ZfSE9TVF9DVEw7CiAgc2Nhbl9y ZXEub2NmID0gT0NGX1dSSVRFX1NDQU5fRU5BQkxFOwogIGNwYXJhbSA9IFNDQU5fSU5RVUlS WXxTQ0FOX1BBR0U7CiAgc2Nhbl9yZXEuY3BhcmFtID0gJmNwYXJhbTsKICBzY2FuX3JlcS5j bGVuID0gMTsKICBzY2FuX3JlcS5ycGFyYW0gPSBycGFyYW07CiAgc2Nhbl9yZXEucmxlbiA9 IDM7CiAgcnQgPSBoY2lfc2VuZF9yZXEoc29ja19idCwgJnNjYW5fcmVxLCAyMDAwKTsKICBp ZighKHJ0IDwgMCkpCiAgICByZXR1cm4gMTsKICByZXR1cm4gMDsKfQoKCi8vIGhjaV9zZXRf cGFnZV90aW1lb3V0Ci8vIFNldHMgdGhlIHRpbWUgdGhhdCBhIGRldmljZSB3aWxsIHdhaXQg Zm9yIGEgY29ubmVjdGlvbiBhY2NlcHRhbmNlCi8vIGJlZm9yZSBzZW5kaW5nIGEgY29ubmVj dGlvbiBmYWlsdXJlCmludCBoY2lfc2V0X3BhZ2VfdGltZW91dChpbnQgc29ja19idCwgdWlu dDE2X3QgdGltZW91dCkKewogIGludCBydDsKICBjaGFyIHJwYXJhbVszXTsKICB3cml0ZV9w YWdlX3RpbWVvdXRfY3Agd3JpdGVfVE87CiAgc3RydWN0IGhjaV9yZXF1ZXN0IHJlcTsKICAK ICByZXEub2dmID0gT0dGX0hPU1RfQ1RMOwogIHJlcS5vY2YgPSBPQ0ZfV1JJVEVfUEFHRV9U SU1FT1VUOwogIHdyaXRlX1RPLnRpbWVvdXQgPSB0aW1lb3V0OwogIHJlcS5jcGFyYW0gPSAm d3JpdGVfVE87CiAgcmVxLmNsZW4gPSBXUklURV9QQUdFX1RJTUVPVVRfQ1BfU0laRTsKICBy ZXEucnBhcmFtID0gcnBhcmFtOwogIHJlcS5ybGVuID0gMzsKICBydCA9IGhjaV9zZW5kX3Jl cShzb2NrX2J0LCAmcmVxLCAyMDAwKTsKICBwcmludGYoIlxuc2V0dGluZyBwYWdlIHRpbWVv dXQgdG8gJWRcbiIsIHdyaXRlX1RPLnRpbWVvdXQpOwogIGlmKCEocnQgPCAwKSkKICAgIHJl dHVybiAxOwogIHJldHVybiAwOwp9IAoKCi8vIGhjaV9yZWFkX3BhZ2VfdGltZW91dAovLyBS ZWFkcyB0aGUgdGltZSB0aGF0IGEgZGV2aWNlIHdpbGwgd2FpdCBmb3IgYSBjb25uZWN0aW9u IGFjY2VwdGFuY2UKLy8gYmVmb3JlIHNlbmRpbmcgYSBjb25uZWN0aW9uIGZhaWx1cmUKaW50 IGhjaV9yZWFkX3BhZ2VfdGltZW91dChpbnQgc29ja19idCkKewogIGludCBydDsKICBjaGFy IGNwYXJhbTsKICByZWFkX3BhZ2VfdGltZW91dF9ycCByZWFkX1RPOwogIHN0cnVjdCBoY2lf cmVxdWVzdCByZXE7CiAgCiAgcmVxLm9nZiA9IE9HRl9IT1NUX0NUTDsKICByZXEub2NmID0g T0NGX1JFQURfUEFHRV9USU1FT1VUOwogIHJlcS5jcGFyYW0gPSAmY3BhcmFtOwogIHJlcS5j bGVuID0gMTsKICByZXEucnBhcmFtID0gJnJlYWRfVE87CiAgcmVxLnJsZW4gPSBSRUFEX1BB R0VfVElNRU9VVF9SUF9TSVpFOwogIHJ0ID0gaGNpX3NlbmRfcmVxKHNvY2tfYnQsICZyZXEs IDIwMDApOwogIHByaW50ZigiXG5wYWdlIHRpbWVvdXQgaXMgJWRcbiIsIHJlYWRfVE8udGlt ZW91dCk7CiAgaWYoIShydCA8IDApKQogICAgcmV0dXJuIDE7CiAgcmV0dXJuIDA7Cn0gCgoK Ly8gaGNpX3NldF9jb25uZWN0aW9uX2FjY2VwdF90aW1lb3V0Ci8vIFNldHMgdGhlIHRpbWVv dXQgYmVmb3JlIGEgZGV2aWNlIGNhbiBkZW55IG9yIHJlamVjdCBhIGNvbm5lY3Rpb24gcmVx dWVzdAppbnQgaGNpX3NldF9jb25uZWN0aW9uX2FjY2VwdF90aW1lb3V0KGludCBzb2NrX2J0 LCB1aW50MTZfdCB0aW1lb3V0KQp7CiAgaW50IHJ0OwogIGNoYXIgcnBhcmFtWzNdOwogIHVp bnQxNl90IHdyaXRlX1RPOwogIHN0cnVjdCBoY2lfcmVxdWVzdCByZXE7CiAgCiAgcmVxLm9n ZiA9IE9HRl9IT1NUX0NUTDsKICByZXEub2NmID0gMHgwMDE2OwogIHdyaXRlX1RPID0gdGlt ZW91dDsKICByZXEuY3BhcmFtID0gJndyaXRlX1RPOwogIHJlcS5jbGVuID0gc2l6ZW9mKHVp bnQxNl90KTsKICByZXEucnBhcmFtID0gcnBhcmFtOwogIHJlcS5ybGVuID0gMzsKICBydCA9 IGhjaV9zZW5kX3JlcShzb2NrX2J0LCAmcmVxLCAyMDAwKTsKICBwcmludGYoIlxuc2V0dGlu ZyBjb25uZWN0aW9uIGFjY2VwdCB0aW1lb3V0IHRvICVkXG4iLCB3cml0ZV9UTyk7CiAgaWYo IShydCA8IDApKQogICAgcmV0dXJuIDE7CiAgcmV0dXJuIDA7Cn0gCgoKLy8gaGNpX3JlYWRf Y29ubmVjdGlvbl9hY2NlcHRfdGltZW91dAovLyBSZWFkcyB0aGUgdGltZW91dCBiZWZvcmUg YSBkZXZpY2UgY2FuIGRlbnkgb3IgcmVqZWN0IGEgY29ubmVjdGlvbiByZXF1ZXN0CmludCBo Y2lfcmVhZF9jb25uZWN0aW9uX2FjY2VwdF90aW1lb3V0KGludCBzb2NrX2J0KQp7CiAgaW50 IHJ0OwogIGNoYXIgY3BhcmFtOwogIHVpbnQxNl90IHJlYWRfVE87CiAgc3RydWN0IGhjaV9y ZXF1ZXN0IHJlcTsKICAKICByZXEub2dmID0gT0dGX0hPU1RfQ1RMOwogIHJlcS5vY2YgPSAw eDAwMTU7CiAgcmVxLmNwYXJhbSA9ICZjcGFyYW07CiAgcmVxLmNsZW4gPSAxOwogIHJlcS5y cGFyYW0gPSAmcmVhZF9UTzsKICByZXEucmxlbiA9IHNpemVvZih1aW50MTZfdCk7CiAgcnQg PSBoY2lfc2VuZF9yZXEoc29ja19idCwgJnJlcSwgMjAwMCk7CiAgcHJpbnRmKCJcbmNvbm5l Y3Rpb24gYWNjZXB0IHRpbWVvdXQgaXMgJWRcbiIsIHJlYWRfVE8pOwogIGlmKCEocnQgPCAw KSkKICAgIHJldHVybiAxOwogIHJldHVybiAwOwp9IAoKCi8vIGFkZHJfcGFyc2UoKQovLyBT cGxpdHMgYSB0aGUgc3RyaW5nIGdpdmVuIGluIDxwYXJzZV9zdHI+IHRvIHR3byB3aGVyZSB0 aGUgCi8vIGNvbG9uICgiOiIpIGNoYXJhY3RlciBpcyBmb3VuZC4gVGhlIHBhcnQgYmVmb3Jl IHRoZSBjb2xvbgovLyBnb2VzIHRvIDxob3N0PiBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIGNv bG9uIGdvZXMgdG8gPHBvcnQ+CmludCBhZGRyUGFyc2UgKGNoYXIgKnBhcnNlX3N0ciwgY2hh ciAqaG9zdCxjaGFyICpwb3J0KQp7CiAgY2hhciB0bXBfc3RyWzEyOF07CiAgY2hhciAqdG1w OwogIHN0cmNweSAodG1wX3N0cixwYXJzZV9zdHIpOwogIHRtcCA9IChjaGFyICopc3RydG9r KHRtcF9zdHIsIjoiKTsKICBpZiAoIHRtcD09TlVMTCApIHsKICAgIGZwcmludGYgKHN0ZGVy ciwiVXNhZ2UgaXMgPGhvc3Q+Ojxwb3J0Tm8+XG4iKTsKICAgIHJldHVybiAtMTsKICB9CiAg c3RyY3B5KGhvc3QsdG1wKTsKCiAgdG1wID0gKGNoYXIgKilzdHJ0b2soTlVMTCwiOiIpOwog IGlmICggdG1wPT1OVUxMICkgewogICAgZnByaW50ZiAoc3RkZXJyLCJVc2FnZSBpcyA8aG9z dD46PHBvcnRObz5cbiIpOwogICAgcmV0dXJuIC0yOwogIH0KICBzdHJjcHkocG9ydCx0bXAp OwogIHJldHVybiAwOwp9CgoKLy8gYmluZF9zb2NrX2xvY2FsKCkKLy8gYmluZHMgYSBzb2Nr ZXQgb2YgPHR5cGU+IHRvIHRoZSBnaXZlbiA8cG9ydD4gb24gbG9jYWwgaG9zdAovLyByZXR1 cm5zIHJlc3VsdCBvZiBkZWZhdWx0IGJpbmQgY29tbWFuZAppbnQgYmluZF9zb2NrX2xvY2Fs KGludCBwb3J0LCBpbnQgdHlwZSkKewogIGludCBzb2NrZDsgICAgICAgICAgICAgICAgLy9z b2NrZXQgZGVzY3JpcHRvcgogIGludCBib3VuZDsKICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc29j a2E7IC8vc29ja2V0IGFkZHJlc3MKICBzdHJ1Y3Qgc29ja2FkZHJfbDIgc29ja2FfYnQ7IC8v c29ja2V0IGFkZHJlc3MKICBpZiAodHlwZSA9PSBUWVBFX1RDUCkgewogICAgc29ja2QgPSBz b2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwogICAgc29ja2Euc2luX2ZhbWlseSA9 IEFGX0lORVQ7CiAgICBzb2NrYS5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwogICAgc29ja2Eu c2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CiAgICBib3VuZCA9IGJpbmQo c29ja2QsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNvY2thLCBzaXplb2Yoc3RydWN0IHNvY2th ZGRyKSApOwogIH0KICBlbHNlIGlmICh0eXBlID09IFRZUEVfVURQKSB7CiAgICBzb2NrZCA9 IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKICAgIHNvY2thLnNpbl9mYW1pbHkg PSBBRl9JTkVUOwogICAgc29ja2Euc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKICAgIHNvY2th LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOwogICAgYm91bmQgPSBiaW5k KHNvY2tkLCAoc3RydWN0IHNvY2thZGRyICopICZzb2NrYSwgc2l6ZW9mKHN0cnVjdCBzb2Nr YWRkcikgKTsKICB9CiAgZWxzZSBpZiAodHlwZSA9PSBUWVBFX0JUKSB7CiAgICBzb2NrZCA9 IHNvY2tldChQRl9CTFVFVE9PVEgsIFNPQ0tfU0VRUEFDS0VULCBCVFBST1RPX0wyQ0FQKTsK ICAgIHBlcnJvcigic29ja2V0IChUWVBFX0JUKToiKTsKICAgIG1lbXNldCgmc29ja2FfYnQs IDAsIHNpemVvZihzb2NrYV9idCkpOwogICAgc29ja2FfYnQubDJfZmFtaWx5ID0gQUZfQkxV RVRPT1RIOwogICAgbWVtY3B5KHNvY2thX2J0LmwyX2JkYWRkci5iLCBCREFERFJfQU5ZLCA2 KTsKICAgIHNvY2thX2J0LmwyX3BzbSA9IGh0b2JzKDQwOTcpOwogICAgYm91bmQgPSBiaW5k KHNvY2tkLCAoc3RydWN0IHNvY2thZGRyICopICZzb2NrYV9idCwgc2l6ZW9mKHNvY2thX2J0 KSk7ICAgCiAgfQogIGlmIChib3VuZCA+PSAwKSB7CiAgICByZXR1cm4gc29ja2Q7CiAgfQog IGVsc2UgewogICAgcGVycm9yKCJiaW5kIGxvY2FsIik7CiAgICByZXR1cm4gYm91bmQ7CiAg fQp9CgoKLy8gYmluZF9zb2NrX2xvY2FsMigpCi8vIGJpbmRzIGEgc29ja2V0IG9mIDx0eXBl PiB0byB0aGUgZ2l2ZW4gPHBvcnQ+IG9uIGxvY2FsIGhvc3QKLy8gcmV0dXJucyByZXN1bHQg b2YgZGVmYXVsdCBiaW5kIGNvbW1hbmQKaW50IGJpbmRfc29ja19zdHIyKGNoYXIgKmFkZHJf c3RyLCBpbnQgdHlwZSkKeyAKICBpbnQgc29ja2Q7CiAgaW50IGJvdW5kOwogIGNoYXIgaG9z dFsyNTZdLCBwb3J0WzI1Nl07ICAgLy91c2VkIGZvciBwYXJzaW5nIG91dCB0aGUgaG9zdCBh bmQgcG9ydAogIHN0cnVjdCBob3N0ZW50ICplbnRpdHk7CiAgc3RydWN0IHNvY2thZGRyX2wy IHNvY2thX2J0OyAvL2JsdWV0b290aCBzb2NrZXQgYWRkcmVzcwogIHN0cnVjdCBzb2NrYWRk cl9pbiBzb2NrYTsgICAgLy9pbmV0IHNvY2tldCBhZGRyZXNzCiAgaWYgKHR5cGUgPT0gVFlQ RV9UQ1ApIHsKICAgIGFkZHJQYXJzZShhZGRyX3N0ciwgaG9zdCwgcG9ydCk7ICAgICAKICAg IHNvY2tkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKICAgIHNvY2thLnNp bl9mYW1pbHkgPSBBRl9JTkVUOwogICAgc29ja2Euc2luX3BvcnQgPSBodG9ucyhhdG9pKHBv cnQpKTsKICAgIGVudGl0eSA9IGdldGhvc3RieW5hbWUoaG9zdCk7CiAgICBzb2NrYS5zaW5f YWRkciA9ICooKHN0cnVjdCBpbl9hZGRyICopZW50aXR5LT5oX2FkZHIpOwogICAgYm91bmQg PSBiaW5kKHNvY2tkLCAoc3RydWN0IHNvY2thZGRyICopICZzb2NrYSwgc2l6ZW9mKHN0cnVj dCBzb2NrYWRkcikgKTsKICB9CiAgZWxzZSBpZiAodHlwZSA9PSBUWVBFX1VEUCkgewogICAg YWRkclBhcnNlKGFkZHJfc3RyLCBob3N0LCBwb3J0KTsgICAgIAogICAgc29ja2QgPSBzb2Nr ZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CiAgICBzb2NrYS5zaW5fZmFtaWx5ID0gQUZf SU5FVDsKICAgIHNvY2thLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShwb3J0KSk7CiAgICBlbnRp dHkgPSBnZXRob3N0YnluYW1lKGhvc3QpOwogICAgc29ja2Euc2luX2FkZHIgPSAqKChzdHJ1 Y3QgaW5fYWRkciAqKWVudGl0eS0+aF9hZGRyKTsKICAgIGJvdW5kID0gYmluZChzb2NrZCwg KHN0cnVjdCBzb2NrYWRkciAqKSAmc29ja2EsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICk7 CiAgfQogIGVsc2UgaWYgKHR5cGUgPT0gVFlQRV9CVCkgewogICAgc29ja2QgPSBzb2NrZXQo UEZfQkxVRVRPT1RILCBTT0NLX1NFUVBBQ0tFVCwgQlRQUk9UT19MMkNBUCk7CiAgICBtZW1z ZXQoJnNvY2thX2J0LCAwLCBzaXplb2Yoc29ja2FfYnQpKTsKICAgIHNvY2thX2J0LmwyX2Zh bWlseSA9IEFGX0JMVUVUT09USDsKICAgIHNvY2thX2J0LmwyX3BzbSA9IGh0b2JzKDQwOTcp OwogICAgYmFzd2FwKCZzb2NrYV9idC5sMl9iZGFkZHIsIHN0cnRvYmEoYWRkcl9zdHIpKTsK ICAgIHByaW50ZigiYWRkcj0lc1xuIixiYXRvc3RyKCZzb2NrYV9idC5sMl9iZGFkZHIpKTsK ICAgIGJvdW5kID0gYmluZChzb2NrZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc29ja2FfYnQs IHNpemVvZihzb2NrYSkpOyAgIAogIH0KICBpZiAoYm91bmQgPj0gMCkgewogICAgcmV0dXJu IHNvY2tkOwogIH0KICBlbHNlIHsKICAgIHByaW50Zigic29ja2QgPSAlZDsiLCBzb2NrZCk7 CiAgICBwZXJyb3IoImJpbmQiKTsKICAgIHJldHVybiBib3VuZDsKICB9Cn0KLy8gYmluZF9z b2NrX2xvY2FsKCkKLy8gYmluZHMgYSBzb2NrZXQgb2YgPHR5cGU+IHRvIHRoZSBnaXZlbiA8 cG9ydD4gb24gbG9jYWwgaG9zdAovLyByZXR1cm5zIHJlc3VsdCBvZiBkZWZhdWx0IGJpbmQg Y29tbWFuZAppbnQgYmluZF9zb2NrX3N0cihpbnQgKnNvY2tkLCBjaGFyICphZGRyX3N0ciwg aW50IHR5cGUpCnsKICBpbnQgYm91bmQ7CiAgY2hhciBob3N0WzI1Nl0sIHBvcnRbMjU2XTsg ICAvL3VzZWQgZm9yIHBhcnNpbmcgb3V0IHRoZSBob3N0IGFuZCBwb3J0CiAgc3RydWN0IGhv c3RlbnQgKmVudGl0eTsKICBzdHJ1Y3Qgc29ja2FkZHJfbDIgc29ja2FfYnQ7IC8vYmx1ZXRv b3RoIHNvY2tldCBhZGRyZXNzCiAgc3RydWN0IHNvY2thZGRyX2luIHNvY2thOyAgICAvL2lu ZXQgc29ja2V0IGFkZHJlc3MKICBiemVybygmc29ja2EsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk ZHIpKTsKICBpZiAodHlwZSA9PSBUWVBFX1RDUCkgewogICAgYWRkclBhcnNlKGFkZHJfc3Ry LCBob3N0LCBwb3J0KTsgICAgIAogICAgcHJpbnRmKCJob3N0ID0gJXMsIHBvcnQgPSAlc1xu IiwgaG9zdCwgcG9ydCk7CiAgICAqc29ja2QgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJF QU0sIDApOwogICAgc29ja2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgICBzb2NrYS5zaW5f cG9ydCA9IGh0b25zKGF0b2kocG9ydCkpOwogICAgZW50aXR5ID0gZ2V0aG9zdGJ5bmFtZSho b3N0KTsKICAgIGlmIChlbnRpdHkgPT0gTlVMTCkKICAgICAgcHJpbnRmKCJudWxsIGVudGl0 eVxuIik7CiAgICBzb2NrYS5zaW5fYWRkciA9ICooKHN0cnVjdCBpbl9hZGRyICopKGVudGl0 eS0+aF9hZGRyKSk7CiAgICBib3VuZCA9IGJpbmQoKnNvY2tkLCAoc3RydWN0IHNvY2thZGRy ICopICZzb2NrYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKTsKICB9CiAgZWxzZSBpZiAo dHlwZSA9PSBUWVBFX1VEUCkgewogICAgYWRkclBhcnNlKGFkZHJfc3RyLCBob3N0LCBwb3J0 KTsgICAgIAogICAgKnNvY2tkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOwog ICAgc29ja2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgICBzb2NrYS5zaW5fcG9ydCA9IGh0 b25zKGF0b2kocG9ydCkpOwogICAgZW50aXR5ID0gZ2V0aG9zdGJ5bmFtZShob3N0KTsKICAg IHNvY2thLnNpbl9hZGRyID0gKigoc3RydWN0IGluX2FkZHIgKillbnRpdHktPmhfYWRkcik7 CiAgICBib3VuZCA9IGJpbmQoKnNvY2tkLCAoc3RydWN0IHNvY2thZGRyICopICZzb2NrYSwg c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKTsKICB9CiAgZWxzZSBpZiAodHlwZSA9PSBUWVBF X0JUKSB7CiAgICAqc29ja2QgPSBzb2NrZXQoUEZfQkxVRVRPT1RILCBTT0NLX1NFUVBBQ0tF VCwgQlRQUk9UT19MMkNBUCk7CiAgICBtZW1zZXQoJnNvY2thX2J0LCAwLCBzaXplb2Yoc29j a2FfYnQpKTsKICAgIHNvY2thX2J0LmwyX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKICAgIHNv Y2thX2J0LmwyX3BzbSA9IGh0b2JzKDQwOTcpOwogICAgYmFzd2FwKCZzb2NrYV9idC5sMl9i ZGFkZHIsIHN0cnRvYmEoYWRkcl9zdHIpKTsKICAgIGJvdW5kID0gYmluZCgqc29ja2QsIChz dHJ1Y3Qgc29ja2FkZHIgKikgJnNvY2thX2J0LCBzaXplb2Yoc29ja2EpKTsgICAKICB9CiAg aWYgKGJvdW5kID49IDApIHsKICAgIHJldHVybiAqc29ja2Q7CiAgfQogIGVsc2UgewogICAg cHJpbnRmKCJzb2NrZCA9ICVkOyIsICpzb2NrZCk7CiAgICBwcmludGYoIiBlcnJvciA9ICVk OyIsIGVycm5vKTsKICAgIHBlcnJvcigiYmluZCIpOwogICAgcmV0dXJuIGJvdW5kOyAKICB9 Cn0KCi8vIHNldF9ub25ibG9ja19zb2NrKCkKLy8gdGhhdCdzIHJpZ2h0IQppbnQgc2V0X25v bmJsb2NrX3NvY2soaW50IHNvY2tkKSB7CiAgaW50IGZsYWdzLCBpOwogIGZsYWdzID0gZmNu dGwoc29ja2QsIEZfR0VURkwpOwogIGRlYnVnKCIgKGdldCBmY3RsIHJldHVybmVkICVpKSAi LCBmbGFncyk7CiAgZmxhZ3MgfD0gT19OT05CTE9DSzsKICBpID0gZmNudGwoc29ja2QsIEZf U0VURkwsIGZsYWdzKTsKICBkZWJ1ZygiIChzZXQgZmN0bCByZXR1cm5lZCAlaSkgIiwgaSk7 Cn0KCgovLyBsaXN0ZW5fc29jaygpCi8vIG1ha2VzIGEgc29jayBsaXN0ZW4gdG8gZ2l2ZW4g PHBvcnQ+IGZvciBpbmNvbWluZyBjb25uZWN0aW9ucyBvZiA8dHlwZT4KLy8gd2lsbCByZXR1 cm4gdGhlIGRlZmF1bHQgcmV0dXJuIHZhbHVlIG9mIHRoZSBsaXN0ZW4gdW5peCBjbWQKLy8g dXNlciBjYW4gbGF0ZXIgcnVuIGFjY2VwdF9zb2NrKCkgb24gdGhhdCBzb2NrZXQKLy8gQXNz dW1lIHRoYXQgdGhlcmUgd2FzIGEgY2FsbCBsaWtlOgovLyAgc29ja2QgPSBiaW5kX3NvY2tf bG9jYWwocG9ydCwgdHlwZSk7Ci8vIE5PVEU6IGJhY2tsb2cgaXMgMTAgYnkgZGVmYXVsdC4K aW50IGxpc3Rlbl9zb2NrKGludCBzb2NrZCwgaW50IHR5cGUpCnsKICBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gc29ja2E7IC8vc29ja2V0IGFkZHJlc3MKCiAgaWYgKHR5cGUgPT0gVFlQRV9UQ1Ap IHsKICAgIHJldHVybiBsaXN0ZW4oc29ja2QsIDEwKTsgICAKICB9CiAgZWxzZSBpZiAodHlw ZSA9PSBUWVBFX0JUKSB7CiAgICByZXR1cm4gbGlzdGVuKHNvY2tkLCAxMCk7CiAgICA7CiAg fQp9ICAKCi8vIGNvbm5lY3Rfc29jaygpCi8vIHdpbGwgY29ubmVjdCB0byBibHVldG9vdGgg c29ja2V0CmludCBjb25uZWN0X2J0KGludCBzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfbDIgYWRk cikgewogIHJldHVybiBjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwg c2l6ZW9mKGFkZHIpKTsKfQoKCgoKCi8vIGFjY2VwdF9zb2NrKCkKLy8gcHV0cyB0aGUgYWNj ZXB0ZWQgY29ubmVjdGlvbiB0byBzb2NrZXQgbnVtYmVyIGl0IHJldHVybnMKLy8gYW5kIHRo ZSBzb3VyY2UgYWRkcmVzcyBpbiB0aGUgcGFyYW1ldGVyIDxzcmNfYWRkcj4KLy8gbmVlZCBh IGxpc3RlbmluZyBzb2NrZXQgPHNvY2tkX2xpc3Rlbj4KLy8gRklYTUU6IHdpbGwgYmUgYSB3 cmFwcGVyLWZ1bmN0aW9uIGlmIHByb2JsZW1zIGFyaXNlCmludCBhY2NlcHRfc29jayhpbnQg c29ja2RfbGlzdGVuLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCAqc2l6ZSkKewogIHJl dHVybiBhY2NlcHQoc29ja2RfbGlzdGVuLCBhZGRyLCBzaXplKTsKfQoKCgovLyBtYWtlX2Jj KCkKLy8gbWFrZXMgYSBzb2NrZXQgYnJvYWRjYXN0aW5nCmludCBtYWtlX2JjKGludCBzb2Nr ZCkKewogY29uc3QgaW50IG9uID0gMTsKIHJldHVybiBzZXRzb2Nrb3B0KHNvY2tkLCBTT0xf U09DS0VULCBTT19CUk9BRENBU1QsICZvbiwgc2l6ZW9mKG9uKSk7Cn0KCgovLyByZXVzZV9h ZGRyKCkKLy8gbWFrZXMgYSBzb2NrZXQgYWRkcmVzcyBzaGFyZWQKaW50IHJldXNlX2FkZHIo aW50IHNvY2spCnsKICBpbnQgcjsKICBpbnQgb25lID0gNTsKICByID0gc2V0c29ja29wdChz b2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZvbmUsIHNpemVvZihvbmUpKTsKICBw ZXJyb3IoInJldXNlX2FkZHIgU09fUkVVU0VBRERSIik7CiAgcmV0dXJuIHI7Cn0KCgovLyBh c3NpZ25fYWRkcl9zdHIoKQovLyBjcmVhdGVzIGFuIGFkZHJlc3Mgc3RydWN0dXJlIGZvciB1 c2UgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGl0CnZvaWQgKmFkZHJfYnlfbmFtZShjaGFy ICpob3N0LCBpbnQgcG9ydCwgaW50IHR5cGUpCnsgCiAgaW50IHI7CiAgc3RydWN0IGhvc3Rl bnQgKmVudGl0eTsKICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNvY2thOwogIHN0cnVjdCBzb2Nr YWRkcl9sMiAqc29ja2FfYnQ7CgoKICBpZiAodHlwZSA9PSBUWVBFX1RDUCB8fCB0eXBlID09 IFRZUEVfVURQKSB7CiAgICBzb2NrYSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltYWxsb2Mo c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwogICAgZW50aXR5ID0gZ2V0aG9zdGJ5bmFt ZShob3N0KTsKICAgIGlmIChlbnRpdHkgPT0gTlVMTCkgewogICAgICBwZXJyb3IoImFkZHJf YnlfbmFtZSgpOiBnZXRob3N0YnluYW1lIik7CiAgICAgIHJldHVybiAoc3RydWN0IHNvY2th ZGRyX2luICopKC0xKTsKICAgIH0KICAgIHNvY2thLT5zaW5fYWRkciA9ICooKHN0cnVjdCBp bl9hZGRyICopKGVudGl0eS0+aF9hZGRyKSk7CiAgICBzb2NrYS0+c2luX2ZhbWlseSA9IEFG X0lORVQ7CiAgICBzb2NrYS0+c2luX3BvcnQgPSBodG9ucyhwb3J0KTsKICAgIHJldHVybiBz b2NrYTsKICB9CiAgZWxzZSBpZiAodHlwZSA9PSBUWVBFX0JUKSB7CiAgICBzb2NrYV9idCA9 IChzdHJ1Y3Qgc29ja2FkZHJfbDIgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9s MikpOwogICAgc29ja2FfYnQtPmwyX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKICAgIHNvY2th X2J0LT5sMl9wc20gPSBodG9icyg0MDk3KTsKICAgIGJhc3dhcCgmKHNvY2thX2J0LT5sMl9i ZGFkZHIpLCBzdHJ0b2JhKGhvc3QpKTsgICAgCiAgICBwZXJyb3IoImJhc3dhcCIpOwogICAg cmV0dXJuIHNvY2thX2J0OwogIH0KfQoK -------e4f5e71b7389120b8797a609baede3bb Content-Type: application/octet-stream; name="hotdec_sock.h" Content-Disposition: inline; filename="hotdec_sock.h" Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN5cy90 aW1lLmg+CiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4K I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KI2luY2x1ZGUgPGFycGEvaW5ldC5oPgojaW5jbHVk ZSA8bmV0ZGIuaD4KI2luY2x1ZGUgPGJsdWV0b290aC5oPgojaW5jbHVkZSA8cmVzb2x2Lmg+ CiNpbmNsdWRlIDxsMmNhcC5oPgojaW5jbHVkZSA8aGNpLmg+CiNpbmNsdWRlIDxoY2lfbGli Lmg+CiNpbmNsdWRlIDxmY250bC5oPgoKLy8gdHlwZXMgZm9yIGhvdGRlY19zb2NrLnR5cGUK I2RlZmluZSBUWVBFX1VEUCAxCiNkZWZpbmUgVFlQRV9UQ1AgMgojZGVmaW5lIFRZUEVfQlQg MwoKLy8gY29ubmVjdGlvbiBzdGF0dXMgZm9yIGhvdGRlY19zb2NrCiNkZWZpbmUgU1RBVFVT X0NPTk4gMQojZGVmaW5lIFNUQVRVU19ESVNDIDIKCnN0cnVjdCBob3RkZWNfc29jayB7CiAg aW50ICB0eXBlOyAgICAgICAgICAgIC8vIHVkcCwgdGNwIG9yIGJsdWV0b290aCB0eXBlCiAg aW50IHN0YXR1czsgICAgICAgICAgIC8vIGNvbm5lY3RlZCBvciBub3QKICBpbnQgc29ja2V0 X25vOyAgICAgICAgLy8gc29ja2V0IGRlc2NyaXB0b3IKICBpbnQgYmxvY2tpbmc7ICAgICAg ICAgLy8gPSAxIGlmIGJsb2NraW5nLCAwIGVsc2UgKGJsb2NraW5nIGlzIGRlZmF1bHQpCiAg aW50IHNlbnRfbXNnX2NvdW50OyAgIC8vIHRvdGFsIG5vLiBvZiBtZXNzYWdlcyBhZnRlciBp bml0aWFsaXphdGlvbgogIGludCByZWN2X21zZ19jb3VudDsKICBzdHJ1Y3Qgc29ja2FkZHJf aW4gcmVtb3RlQWRkcjsKICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9jYWxBZGRyOwp9OwoKCi8v IHR5cGUgb2YgbWVzc2FnZXMKI2RlZmluZSBDT05UUk9MX01TRyAxCiNkZWZpbmUgU1RSRUFN X01TRyAyCgovLyBkaXJlY3Rpb24KI2RlZmluZSBJTkNPTUlOR19NU0cgMQojZGVmaW5lIE9V VEdPSU5UX01TRyAyCgpzdHJ1Y3QgaG90ZGVjX21zZyB7CiAgaW50IHR5cGU7ICAgICAgICAg ICAgIC8vIGNvbnRyb2wgKHJlYWwtdGltZSksIG9yIHN0cmVhbQogIGludCBkaXJlY3Rpb247 ICAgICAgICAvLyBpbmNvbWluZyBvciBvdXRnb2luZyAgCiAgaW50IGhlYWRlcl9sZW47ICAg ICAgIC8vIGxlbmd0aCBvZiBoZWFkZXIKICBpbnQgYm9keV9sZW47ICAgICAgICAgLy8gbGVu Z3RoIG9mIG1haW4gbWVzc2FnZQogIGNoYXIgKmhlYWRlcjsgICAgICAgICAKICBjaGFyICpi b2R5OwogIHVuaW9uIHsKICAgc3RydWN0IGhvdGRlY19zb2NrICpkZXN0OwogICBzdHJ1Y3Qg aG90ZGVjX3NvY2sgKnNyYzsKICB9IHNvY2s7Cn07CgojaWZuZGVmIEhPVERFQ19TT0NLX0MK ZXh0ZXJuIHZvaWQgZGVidWcoY2hhciAqZm10LCAuLi4pOwpleHRlcm4gaW50IHVkcF9zb2Nr ZXQoKTsKZXh0ZXJuIGludCBsMl9zb2NrZXQoKTsKZXh0ZXJuIGludCBoY2lfc29ja2V0KCk7 CmV4dGVybiBpbnQgaGNpX3NjYW5fZW5hYmxlKGludCBzb2NrX2J0KTsKZXh0ZXJuIGludCBo Y2lfcmVzZXQoaW50IHNvY2tfYnQpOwpleHRlcm4gaW50IGhjaV9pbml0KGludCBzb2NrX2J0 KTsKZXh0ZXJuIGludCB0Y3Bfc29ja2V0KCk7CmV4dGVybiBpbnQgYWRkclBhcnNlIChjaGFy ICpwYXJzZV9zdHIsIGNoYXIgKmhvc3QsY2hhciAqcG9ydCk7CmV4dGVybiBpbnQgYmluZF9z b2NrX2xvY2FsKGludCBwb3J0LCBpbnQgdHlwZSk7CmV4dGVybiBpbnQgYmluZF9zb2NrX3N0 cihpbnQgKnNvY2tkLCBjaGFyICphZGRyX3N0ciwgaW50IHR5cGUpOwpleHRlcm4gaW50IGJp bmRfc29ja19zdHIyKGNoYXIgKmFkZHJfc3RyLCBpbnQgdHlwZSk7CmV4dGVybiBpbnQgc2V0 X25vbmJsb2NrX3NvY2soaW50IHNvY2tkKTsKZXh0ZXJuIGludCBsaXN0ZW5fc29jayhpbnQg c29ja2QsIGludCB0eXBlKTsKZXh0ZXJuIGludCBhY2NlcHRfc29jayhpbnQgc29ja2RfbGlz dGVuLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCAqc2l6ZSk7CmV4dGVybiB2b2lkICph ZGRyX2J5X25hbWUoY2hhciAqaG9zdCwgaW50IHBvcnQsIGludCB0eXBlKTsKZXh0ZXJuIGlu dCBtYWtlX2JjKGludCBzb2NrZCk7CmV4dGVybiBpbnQgcmV1c2VfYWRkcihpbnQgc29jayk7 CmV4dGVybiBpbnQgcmVzZXRfYnQoKTsKI2VuZGlmCg== -------e4f5e71b7389120b8797a609baede3bb Content-Type: application/octet-stream; name="Makefile" Content-Disposition: inline; filename="Makefile" Content-Transfer-Encoding: base64 Q0M9Z2NjCklOQ0xVREU9LUkvdXNyL2luY2x1ZGUvYmx1ZXRvb3RoCkxJQlM9LWxibHVldG9v dGggLWxtCkNGTEFHUz0tZyAkKElOQ0xVREUpICQoTElCUykKCnJ1bjogaG90ZGVjX3NvY2su byBpbml0X2J0X3YyLmMKCSQoQ0MpIC1vIHJ1biAkKENGTEFHUykgaG90ZGVjX3NvY2subyBp bml0X2J0X3YyLmMKCmhvdGRlY19zb2NrLm86IGhvdGRlY19zb2NrLmggaG90ZGVjX3NvY2su YwoJJChDQykgLW8gaG90ZGVjX3NvY2subyAgLWMgJChJTkNMVURFKSBob3RkZWNfc29jay5j CgouUEhPTlk6IGNsZWFuCgpjbGVhbjoKCS1ybSAqbyBydW4gCg== -------e4f5e71b7389120b8797a609baede3bb Content-Type: application/octet-stream; name="init_bt_v2.c" Content-Disposition: inline; filename="init_bt_v2.c" Content-Transfer-Encoding: base64 I2luY2x1ZGUgImhvdGRlY19zb2NrLmgiCiNkZWZpbmUgQ0xJRU5UX01PREUgMQojZGVmaW5l IFNFUlZFUl9NT0RFIDIKCmludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CiAg aW50IHNvY2sxLCBzb2NrMjsKICBpbnQgc19sb2NhbF9idDsKICBpbnQgb3B0LCBsZW4sIG1v ZGU7CiAgaW50IGk7CiAgaW50IHNfaGNpOwogIHN0cnVjdCBzb2NrYWRkcl9sMiAqc2FfYnQs cmVtX2FkZHI7CiAgY2hhciBidWZbMjU2XTsKCgogIGlmKGFyZ2MgIT0gMikKICB7CiAgICBw cmludGYoInVzYWdlOiAuL3J1biAtLXNlcnZlci8tLWNsaWVudFxuIik7CiAgICBleGl0KDAp OwogIH0KICBpZihzdHJjbXAoYXJndlsxXSwgIi0tY2xpZW50IikgPT0gMCkKICAgIG1vZGUg PSBDTElFTlRfTU9ERTsKICBlbHNlIGlmKHN0cmNtcChhcmd2WzFdLCAiLS1zZXJ2ZXIiKSA9 PSAwKQogICAgbW9kZSA9IFNFUlZFUl9NT0RFOwoKICBzX2hjaSA9IGhjaV9zb2NrZXQoKTsK ICAvL2hjaV9yZXNldChzX2hjaSk7CiAgLy9oY2lfaW5pdChzX2hjaSk7CiAgaGNpX3NjYW5f ZW5hYmxlKHNfaGNpKTsgCiAgLy9oY2lfcmVhZF9wYWdlX3RpbWVvdXQoc19oY2kpOwogIC8v aGNpX3NldF9wYWdlX3RpbWVvdXQoc19oY2ksIDYzMDAwKTsKICAvL2hjaV9yZWFkX3BhZ2Vf dGltZW91dChzX2hjaSk7CiAgLy9oY2lfcmVhZF9jb25uZWN0aW9uX2FjY2VwdF90aW1lb3V0 KHNfaGNpKTsKICAvL2hjaV9zZXRfY29ubmVjdGlvbl9hY2NlcHRfdGltZW91dChzX2hjaSwg NjIwMCk7CiAgLy9oY2lfcmVhZF9jb25uZWN0aW9uX2FjY2VwdF90aW1lb3V0KHNfaGNpKTsK ICBjbG9zZShzX2hjaSk7IAoKICBpZihtb2RlID09IFNFUlZFUl9NT0RFKSAKICB7IAogICAg cHJpbnRmKCJ0YWxlOlxuIik7CiAgICBzX2xvY2FsX2J0ID0gYmluZF9zb2NrX2xvY2FsKDAs IFRZUEVfQlQpOwogICAgcHJpbnRmKCJsb2NhbCBzb2NrZXQgaXMgbm8gJWRcbiIsIHNfbG9j YWxfYnQpOwogICAgbGVuID0gbGlzdGVuX3NvY2soc19sb2NhbF9idCwgVFlQRV9CVCk7CiAg ICBwcmludGYoImxpc3RlbiByZXR1cm5zICVkXG4iLCBsZW4pOwogICAgb3B0ID0gc2l6ZW9m KHJlbV9hZGRyKTsKCiAgICAvKiBpID0gZ2V0c29ja29wdChzX2xvY2FsX2J0LCBTT0xfTDJD QVAsIEwyQ0FQX0xNLCAmb3B0LCAmbGVuKTsKICAgIHByaW50ZigiZ2V0c29ja29wdCA9ICVk IG9wdGlvbnMgYXJlICVkXG4iLCBpLCBvcHQpOwogICAgb3B0IHw9IEwyQ0FQX0xNX01BU1RF UjsKICAgIHNldHNvY2tvcHQoc19sb2NhbF9idCwgU09MX0wyQ0FQLCBMMkNBUF9MTSwgJm9w dCwgc2l6ZW9mKG9wdCkpOwogICAgcHJpbnRmKCJzZXRzb2Nrb3B0ID0gJWRcbiIsIGkpOwog ICAgaSA9IGdldHNvY2tvcHQoc19sb2NhbF9idCwgU09MX0wyQ0FQLCBMMkNBUF9MTSwgJm9w dCwgJmxlbik7CiAgICBwcmludGYoImdldHNvY2tvcHQgPSAlZCBvcHRpb25zIGFyZSAlZFxu IiwgaSwgb3B0KTsgKi8KCiAgICBzb2NrMSA9IGFjY2VwdChzX2xvY2FsX2J0LCAoc3RydWN0 IHNvY2thZGRyICopJnJlbV9hZGRyLCAmb3B0KTsKICAgIHByaW50ZigiMSBpblxuIik7CiAg ICBnZXRzb2Nrb3B0KHNvY2sxLCBTT0xfTDJDQVAsIEwyQ0FQX0xNLCAmb3B0LCAmbGVuKTsK ICAgIG9wdCB8PSBMMkNBUF9MTV9NQVNURVI7CiAgICBzZXRzb2Nrb3B0KHNvY2sxLCBTT0xf TDJDQVAsIEwyQ0FQX0xNLCAmb3B0LCBzaXplb2Yob3B0KSk7CiAgICAKICAgIHNvY2syID0g YWNjZXB0KHNfbG9jYWxfYnQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcmVtX2FkZHIsICZvcHQp OwogICAgcHJpbnRmKCIyIGluXG4iKTsKICAgIGdldHNvY2tvcHQoc29jazIsIFNPTF9MMkNB UCwgTDJDQVBfTE0sICZvcHQsICZsZW4pOwogICAgb3B0IHw9IEwyQ0FQX0xNX01BU1RFUjsK ICAgIHNldHNvY2tvcHQoc29jazIsIFNPTF9MMkNBUCwgTDJDQVBfTE0sICZvcHQsIHNpemVv ZihvcHQpKTsKCiAgICBwcmludGYoInNvY2tldCBubydzID0gJWQsICVkXG4iLCBzb2NrMSwg c29jazIpOwoKICAgIHdoaWxlKDEpIHsKICAgICAgd3JpdGUoc29jazEsICJIZWxsbyIsIHNp emVvZigiSGVsbG8iKSk7CiAgICAgIHdyaXRlKHNvY2syLCAiSGVsbG8iLCBzaXplb2YoIkhl bGxvIikpOwogICAgICBwcmludGYoImxlbiA9ICVkXG4iLCBsZW4pOwogICAgICB1c2xlZXAo MTAwMDApOwogICAgfQoKICB9CgoKICBlbHNlIGlmKG1vZGUgPT0gQ0xJRU5UX01PREUpIAog IHsgCiAgICBzX2xvY2FsX2J0ID0gYmluZF9zb2NrX2xvY2FsKDAsIFRZUEVfQlQpOwogICAg c2FfYnQgPSBhZGRyX2J5X25hbWUoIjAwOjQwOjA1OkMxOjdBOjIwIiwgMCwgVFlQRV9CVCk7 CiAgICBwcmludGYoInNfbG9jYWxfYnQgPSAlZCwgYWRkcj0lc1xuIiwKICAgICAgICAgICBz X2xvY2FsX2J0LCBiYXRvc3RyKCYoc2FfYnQtPmwyX2JkYWRkcikpKTsKICAgIGkgPSBjb25u ZWN0KHNfbG9jYWxfYnQsIChzdHJ1Y3Qgc29ja2FkZHIgKilzYV9idCwgc2l6ZW9mKCpzYV9i dCkpOwogICAgcHJpbnRmKCJjb25uZWN0ZWQgc29jayA9ICVkXG4iLCBpKTsKICAgIGlmIChp IDwgMCkKICAgICAgcGVycm9yKCJidCBjb25uZWN0Iik7CiAgICB3aGlsZSAoaT49MCkgewog ICAgICAgbGVuID0gcmVhZChzX2xvY2FsX2J0LCBidWYsIDI1Nik7CiAgICAgIGlmIChsZW4g PiAwKQogICAgICBwcmludGYoIlJlY2VpdmVkIFwiJXNcIlxuIiwgYnVmKTsKICAgIH0KICAg IGNsb3NlKHNfbG9jYWxfYnQpOwogIH0KfQoK -------e4f5e71b7389120b8797a609baede3bb--