Some thoughts
Evgeniy Shtrenyov <[email protected]> Sun, 13 Dec 2020 14:15:32 +0300
| Newsgroups | gmane.network.siproxd |
|---|---|
| Message-ID | <20201213141532.5cec340b@shtren> |
--MP_/tPp.QEg0g7a5HXMVYtA2CuH Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello, I'm using siproxd for some years and I have some ideas about it. May be some of them will be useful, may be not. May be I'm wrong somewhere. I wrote some plugins to siproxd and I want to tell about some of them. I'm using Internet Service Provider (ISP) with hard NAT, so I'm using STUN plugin to fix addresses in connections with PBX. But because of ISP NAT I've got another kinds of problems. First problem is loosing NAT port for incoming traffic because of rare exchange. This problem persists in SIP UDP traffic exchange between siproxd and PBX where usual traffic is (re-)registration traffic with some packets per minutes. Nearly 30-45 seconds after absence of packet exchange ISP NAT "forgets" about traffic transferring between external port and local port, so all incoming packet will be lost. This problem causes loosing INVITE packets, loosing incoming calls. I wrote small plugin called "plugin_keepalive" which just sends UDP packets with "\r\n\r\n". RFC 5626 includes similar keep-alive for TCP, but not for UDP, so this method is non-standart. But in practice I've seen phones with this kind of keep-alive: Siemens Gigaset C610A DECT Base sends these packets. As I remember some of servers answered with "\r\n" for these packets (may be "ekiga" did that?). I've added such "pinging" for local clients (telephones), because of firewalls. I've configured firewall on internal interface for host with siproxd just for incoming packet exchange with remembering state, but not outgouing. It's usefull if someone hacks siproxd - it will not get permission to scan whole network. But to keep firewall exchange state it is have to make any exchange for some time. There is one problem with this plugin. I have not found any way how to select only UDP servers/clients from siproxd structures, excluding TCP. I have not worked with TCP client/servers at all, but it looks like that this plugin will send UDP "pings" for all defined hosts. Second problem caused by ISP NAT is local call loops for RTP. When I'm trying to call from one telephone to another, call goes to siproxd and to SIP PBX. SIP PBX sends call to siproxd again and to called local telephone. At first point of view it looks good. But STUN plugin and/or SIP PBX changes RTP media IP address to external IP address (Internet IP address), so siproxd have to send RTP traffic to external IP-address. For example: siproxd have ISP LAN address 192.X.Y.Z and ISP Internet address 1.2.3.4. After INVITE/OK exchange siproxd will have to send all RTP data to 1.2.3.4 because SIP PBX told this address to siproxd for exchange. But ISP NAT does not allow such forwarding when sending packets to external NAT address (1.2.3.4) goes back to internal NAT address (192.X.Y.Z). So all RTP packets are lost. So I wrote small plugin called "plugin_fix_nat_call_loop", which changes media IP-address in incoming INVITE/UPDATE/OK SDP packets from external NAT IP address (got by STUN plugin for example) to local outbound IP-address. It makes RTP loop for local calls on outbound interface, so local calls RTP goes "properly" through siproxd. This is not beautiful solution, but it helps. In addition I wrote plugin which changes SDP username and session name which is called "plugin_sdp_name". These fields sometimes are useless for connections, but it shows SIP software/hardware, and I want to hide that. :-) These plugins may be are not good, may be there are some errors, but it may be interesting for someone. May be just an ideas of these plugins helps someone to write own plugin. ------ In addition I just want to tell some my thoughts about siproxd. Yesterday I've built lastest release version 0.8.3 and I was badly surprised: it allocates too much memory! Previous version 0.8.2 allocates ~4.5 megabytes, last version allocates ~18 megabytes. I'm using old PC for router and SIP proxy tasks (Pentium 2 with 366MHz and 64 megabytes of RAM), so eating so much memory is unacceptable. I've read changelog and reduced URLMAP_SIZE to 64 and RTPPROXY_SIZE to 64, and... now it eats just 2.5 megabytes and it's wonderful! I do not need such huge count of simultaneously connections, but there is no way to change it without patching. Nothing says that just these values makes siproxd so "hungry". I think that these values can be set by any "user-friendly" way: parameter of "configure" or may be memory can be allocated dynamically and these parameters can be moved to siproxd.conf. Another thought is about blacklist plugin. I have not found any "proper" way to disable that during building, just patching Makefile.in and/or Makefile.am. I have not tried to use this plugin, may be it's good, but it requires SQLite. I have no SQLite and do not want to build it. But there is no check for SQLite presence during "configure" and no way to exclude blacklist plugin from building. :-( Third thought is about current version of "plugin_stripheader". It uses "strndup" function. My old FreeBSD does not have such function. So... I've wrote another "bad" patch for that (plugin_stripheader_strndup.patch). May be strndup can be replaced to any other function or can use rewritten strndup function (or may be presence of strndup in system will be checked by "configure")? :-) And the last thought is about RTP, NAT and keep-alive. Because of NAT there can be 2 possible problems with RTP. First problem is that NAT ports are not controlled by SIP peers. So if peers want to exchange RTP packets NAT ports have to be opened/forwarded. There is only one way to open NAT ports: just send a packet. I'm not controlling ISP NAT, but potentially such situation can persist: while making a call SIP PBX may send RTP packet first for any reason. RTP packets will go to ISP NAT potentially closed ports and potentially NAT can answer by ICMP for all RTP packets from SIP PBX that port is closed. And... potentially SIP PBX may be will not like that. So I think that when RTP proxy makes relay it may send stub empty packets just to kick NAT. Other problem with NAT is missing packet for some time and loosing RTP port on NAT. So... I think that siproxd can send periodically empty packets just to save activity for NAT. RTP clients should ignore these empty packets (I hope :-) ). I've wrote small dirty patch (siproxd_keepalive.patch) to send it. In addition: there is other problem with NAT: it can give random ports for RTP. There is no external port checking for RTP streams, but it can be done using STUN for example. STUN can send packets for STUN server from all RTP ports and getting real RTP port address; or sending packets to STUN can be done before making relay. That is not a proper/good solution for all NATs. NAT is real pain, but... Sometimes there is no good choise for ISP. ------ With Best Regards, Evgeniy Shtrenyov --MP_/tPp.QEg0g7a5HXMVYtA2CuH Content-Type: application/octet-stream; name=plugin_fix_nat_call_loop.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=plugin_fix_nat_call_loop.c LyogbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgPHBsdWdpbi5oPiAqLwojZGVmaW5l IFBMVUdJTl9OQU1FCXBsdWdpbl9maXhfbmF0X2NhbGxfbG9vcAoKI2luY2x1ZGUgImNvbmZpZy5o IgoKI2luY2x1ZGUgPHN0cmluZy5oPgoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8 bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4K CiNpbmNsdWRlIDxvc2lwcGFyc2VyMi9vc2lwX3BhcnNlci5oPgojaW5jbHVkZSA8b3NpcHBhcnNl cjIvc2RwX21lc3NhZ2UuaD4KCiNpbmNsdWRlICJzaXByb3hkLmgiCiNpbmNsdWRlICJwbHVnaW5z LmgiCiNpbmNsdWRlICJsb2cuaCIKCiNkZWZpbmUgWFNUUihYKSAjWAojZGVmaW5lIFNUUihYKSBY U1RSKFgpCgoKc3RhdGljIGNoYXIgY29uc3QgaWRlbnRbXSA9ICIkSWQ6IHBsdWdpbl9maXhfbmF0 X2NhbGxfbG9vcC5jIDQ0MCAyMDEwLTAxLTA3IDExOjMwOjI3WiBldmdlbml5ICQiOwoKc3RhdGlj IGNoYXIgbmFtZVtdID0gU1RSKFBMVUdJTl9OQU1FKTsKc3RhdGljIGNoYXIgZGVzY1tdID0gIlRo aXMgcGx1Z2luIGZpeGVzIElQLWFkZHJlc3Mgb2YgcmVjZWl2ZWQgSU5WSVRFIG1lc3NhZ2VzIGZv ciBsb29wIGNhbGxzIGluc2lkZSBOQVQiOwoKZXh0ZXJuIHN0cnVjdCBzaXByb3hkX2NvbmZpZyBj b25maWd1cmF0aW9uOwoKc3RhdGljIGludCBwcm9jZXNzX3BhY2tldChpbnQgc3RhZ2UsIHNpcF90 aWNrZXRfdCAqdGlja2V0KTsKc3RhdGljIGludCBmaXhfc2RwX2FkZHJlc3Moc2RwX21lc3NhZ2Vf dCAgKnNkcCk7CgovKiAKICogSW5pdGlhbGl6YXRpb24uCiAqIENhbGxlZCBvbmNlIHN1cmluZyBz aXByb3hkIHN0YXJ0dXAuCiAqLwppbnQgIFBMVUdJTl9JTklUKHBsdWdpbl9kZWZfdCAqcGx1Z2lu X2RlZikKewoJcGx1Z2luX2RlZi0+YXBpX3ZlcnNpb24gPSBTSVBST1hEX0FQSV9WRVJTSU9OOwoJ CgkvKgoJKglOYW1lIGFuZCBkZXNjcmlwdGl2ZSB0ZXh0IG9mIHRoZSBwbHVnaW4KCSovCglwbHVn aW5fZGVmLT5uYW1lID0gbmFtZTsKCXBsdWdpbl9kZWYtPmRlc2MgPSBkZXNjOwoJCglwbHVnaW5f ZGVmLT5leGVfbWFzayA9IFBMVUdJTl9QUkVfUFJPWFk7CgoJSU5GTygiJXMgaXMgaW5pdGlhbGl6 ZWQiLCBuYW1lKTsKCXJldHVybiBTVFNfU1VDQ0VTUzsKfQoKLyoKICogUHJvY2Vzc2luZy4KICog CiAqLwppbnQgIFBMVUdJTl9QUk9DRVNTKGludCBzdGFnZSwgc2lwX3RpY2tldF90ICp0aWNrZXQp CnsKCWludCBzdHMgPSBTVFNfU1VDQ0VTUzsKCQoJaWYoc3RhZ2UgPT0gUExVR0lOX1BSRV9QUk9Y WSkKCXsKCQlzdHMgPSBwcm9jZXNzX3BhY2tldChzdGFnZSwgdGlja2V0KTsKCX0KCQoJcmV0dXJu IHN0czsKfQoKLyoKICogRGUtSW5pdGlhbGl6YXRpb24uCiAqIENhbGxlZCBkdXJpbmcgc2h1dGRv d24gb2Ygc2lwcm94ZC4KICovCmludCAgUExVR0lOX0VORChwbHVnaW5fZGVmX3QgKnBsdWdpbl9k ZWYpCnsKCUlORk8oIiVzIGVuZHMgaGVyZSIsIG5hbWUpOwoJcmV0dXJuIFNUU19TVUNDRVNTOwp9 CgpzdGF0aWMgaW50IHByb2Nlc3NfcGFja2V0KGludCBzdGFnZSwgc2lwX3RpY2tldF90ICp0aWNr ZXQpCnsKCWludCBzdHMgPSBTVFNfRkFJTFVSRTsKCW9zaXBfYm9keV90ICpib2R5ID0gTlVMTDsK CW9zaXBfbWVzc2FnZV90ICptc2cgPSB0aWNrZXQtPnNpcG1zZzsKCW9zaXBfY29udGVudF90eXBl X3QgKmNvbnRlbnRfdHlwZSA9IE5VTEw7CglzZHBfbWVzc2FnZV90ICAqc2RwID0gTlVMTDsKCWlu dCB0aWNrZXRfZGlyZWN0aW9uID0gdGlja2V0LT5kaXJlY3Rpb24sIGJ1ZmxlbjsKCWNoYXIgY2xl bls4XSwgKmJ1ZmYgPSBOVUxMOwoJaW50IHJjOwoJCglpZihjb25maWd1cmF0aW9uLnJ0cF9wcm94 eV9lbmFibGUgPT0gMCkKCXsKCQlyZXR1cm4gU1RTX1NVQ0NFU1M7Cgl9CgkKCWlmKCEoKHRpY2tl dC0+ZGlyZWN0aW9uID09IFJFUVRZUF9JTkNPTUlORwoJCSYmIChNU0dfSVNfSU5WSVRFKG1zZykg fHwgTVNHX0lTX1VQREFURShtc2cpKSkKCQl8fCAodGlja2V0X2RpcmVjdGlvbiA9PSBSRVNUWVBf SU5DT01JTkcKCQkmJiAoTVNHX0lTX1JFU1BPTlNFX0ZPUihtc2csICJJTlZJVEUiKQoJCXx8IE1T R19JU19SRVNQT05TRV9GT1IobXNnLCAiVVBEQVRFIikpKSkpCgl7CgkJcmV0dXJuIFNUU19TVUND RVNTOwoJfQoJCgkvKgoJKglDaGVja2luZyBmb3IgZGF0YSBjb250ZW50LXR5cGUKCSovCgljb250 ZW50X3R5cGUgPSBvc2lwX21lc3NhZ2VfZ2V0X2NvbnRlbnRfdHlwZShtc2cpOwoJaWYoY29udGVu dF90eXBlID09IE5VTEwKCQl8fCBjb250ZW50X3R5cGUtPnR5cGUgPT0gTlVMTAoJCXx8IGNvbnRl bnRfdHlwZS0+c3VidHlwZSA9PSBOVUxMCgkJfHwgc3RybmNtcChjb250ZW50X3R5cGUtPnR5cGUs ICJhcHBsaWNhdGlvbiIsIHNpemVvZigiYXBwbGljYXRpb24iKSkgIT0gMAoJCXx8IHN0cm5jbXAo Y29udGVudF90eXBlLT5zdWJ0eXBlLCAic2RwIiwgc2l6ZW9mKCJzZHAiKSkgIT0gMCkKCXsKCQly ZXR1cm4gU1RTX1NVQ0NFU1M7Cgl9CgkKCXN0cyA9IG9zaXBfbWVzc2FnZV9nZXRfYm9keShtc2cs IDAsICZib2R5KTsKCWlmKHN0cyAhPSAwKQoJewoJCURFQlVHQyhEQkNMQVNTX1BMVUdJTiwgIiVz OiBubyBTRFAgZm91bmQgaW4gbWVzc2FnZSIsIG5hbWUpOwoJCXJldHVybiBTVFNfU1VDQ0VTUzsK CX0KCQoJc3RzID0gc2lwX2JvZHlfdG9fc3RyKGJvZHksICZidWZmLCAmYnVmbGVuKTsKCWlmKHN0 cyAhPSAwKQoJewoJCUVSUk9SKCIlczogdW5hYmxlIHRvIHNpcF9ib2R5X3RvX3N0ciIsIG5hbWUp OwoJCXJldHVybiBTVFNfRkFJTFVSRTsKCX0KCQoJc3RzID0gc2RwX21lc3NhZ2VfaW5pdCgmc2Rw KTsKCXN0cyA9IHNkcF9tZXNzYWdlX3BhcnNlKHNkcCwgYnVmZik7Cglvc2lwX2ZyZWUoYnVmZik7 CgkKCWlmIChzdHMgIT0gMCkKCXsKCQlFUlJPUigiJXM6IHVuYWJsZSB0byBzZHBfbWVzc2FnZV9w YXJzZSBib2R5IiwgbmFtZSk7CgkJc2RwX21lc3NhZ2VfZnJlZShzZHApOwoJCXJldHVybiBTVFNf RkFJTFVSRTsKCX0KCQoJcmMgPSBmaXhfc2RwX2FkZHJlc3Moc2RwKTsKCQoJaWYocmMgIT0gU1RT X1NVQ0NFU1MpCgl7CgkJc2RwX21lc3NhZ2VfZnJlZShzZHApOwoJCUVSUk9SKCIlczogdW5hYmxl IHRvIGZpeCBTRFAgYWRkcmVzcyIsIG5hbWUpOwoJCXJldHVybiBTVFNfRkFJTFVSRTsKCX0KCQoJ c3RzID0gb3NpcF9saXN0X3JlbW92ZSgmKG1zZy0+Ym9kaWVzKSwgMCk7Cglvc2lwX2JvZHlfZnJl ZShib2R5KTsKCQoJLyoKCSoJRHVtcGluZyBuZXcgYm9keQoJKi8KCXNkcF9tZXNzYWdlX3RvX3N0 cihzZHAsICZidWZmKTsKCWJ1ZmxlbiA9IHN0cmxlbihidWZmKTsKCQoJLyoKCSoJRnJlZWluZyBT RFAgc3RydWN0dXJlCgkqLwoJc2RwX21lc3NhZ2VfZnJlZShzZHApOwoJCgkvKgoJKglJbmNsdWRp bmcgbmV3IGJvZHkKCSovCglzaXBfbWVzc2FnZV9zZXRfYm9keShtc2csIGJ1ZmYsIGJ1Zmxlbik7 CgkKCWlmKHN0cyAhPSAwKQoJewoJCUVSUk9SKCIlczogdW5hYmxlIHRvIHNpcF9tZXNzYWdlX3Nl dF9ib2R5IGJvZHkiLCBuYW1lKTsKCX0KCQoJLyoKCSoJRnJlZWluZyBjb250ZW50IGxlbmd0aCBy ZXNvdXJjZSBhbmQgaW5jbHVkaW5nIG5ldyBvbmUKCSovCglvc2lwX2NvbnRlbnRfbGVuZ3RoX2Zy ZWUobXNnLT5jb250ZW50X2xlbmd0aCk7Cgltc2ctPmNvbnRlbnRfbGVuZ3RoID0gTlVMTDsKCXNw cmludGYoY2xlbiwgIiVsZCIsIChsb25nKWJ1Zmxlbik7CglpZihvc2lwX21lc3NhZ2Vfc2V0X2Nv bnRlbnRfbGVuZ3RoKG1zZywgY2xlbikgIT0gT1NJUF9TVUNDRVNTKQoJewoJCUVSUk9SKCIlczog dW5hYmxlIHRvIHNldCBuZXcgY29udGVudCBsZW5ndGgiLCBuYW1lKTsKCQlyZXR1cm4gU1RTX0ZB SUxVUkU7Cgl9CgkKCS8qCgkqCUZyZWVpbmcgbmV3IGJvZHkgc3RyaW5nCgkqLwoJb3NpcF9mcmVl KGJ1ZmYpOwoJCglyZXR1cm4gU1RTX1NVQ0NFU1M7Cn0KCiNkZWZpbmUgU1RSTENQWShEU1QsIFNS QywgQlNJWkUpIChzdHJuY3B5KChEU1QpLCAoU1JDKSwgKEJTSVpFKSksIChEU1QpWyhCU0laRSkg LSAxXSA9ICdcMCcsIChEU1QpKQoKc3RhdGljIGludCBmaXhfc2RwX2FkZHJlc3Moc2RwX21lc3Nh Z2VfdCAgKnNkcCkKewoJaW50IG1zZ19wb3J0OwoJaW50IGlwX21hdGNoLCBuZWVkX2FkZHJfZml4 aW5nOwoJY2hhciAqbmV3X2FkZHJfc3RyID0gTlVMTCwgKnNkcF9yZWN2X2FkZHJfc3RyID0gTlVM TDsKCXN0cnVjdCBpbl9hZGRyIHplcm9zX3Npbiwgb3V0c2lkZV9zaW4sIGlmYWNlX3Npbiwgc2Rw X3NpbjsKCWludCBtZWRpYV9zdHJlYW1fbm87CgljaGFyIG91dHNpZGVfYWRkcl9zdHJbMTZdLCBp ZmFjZV9hZGRyX3N0clsxNl0sIHNkcF9hZGRyX3N0clsxNl07CgkKCW1lbXNldCgmemVyb3Nfc2lu LCAwLCBzaXplb2YoemVyb3Nfc2luKSk7CgltZW1zZXQoJm91dHNpZGVfc2luLCAwLCBzaXplb2Yo b3V0c2lkZV9zaW4pKTsKCW1lbXNldCgmaWZhY2Vfc2luLCAwLCBzaXplb2YoaWZhY2Vfc2luKSk7 CgltZW1zZXQoJnNkcF9zaW4sIDAsIHNpemVvZihzZHBfc2luKSk7CgkKCWlmKGNvbmZpZ3VyYXRp b24ub3V0Ym91bmRfaG9zdCA9PSBOVUxMCgkJfHwgc3RybGVuKGNvbmZpZ3VyYXRpb24ub3V0Ym91 bmRfaG9zdCkgPT0gMCkKCXsKCQkvKgoJCSoJSWYgaG9zdG5hbWUgaXMgZW1wdHkgLSBubyB3YXkg dG8gY2hlY2sgYWRkcmVzcwoJCSovCgkJcmV0dXJuIFNUU19TVUNDRVNTOwoJfQoJCglpZihzZHAt Pm9fYWRkcnR5cGUgJiYgc2RwLT5vX2FkZHIgJiYgc3RyY21wKHNkcC0+b19hZGRydHlwZSwgIklQ NCIpICE9IDApCgl7CgkJV0FSTigiJXM6IHVuc3VwcG9ydGVkIFNEUCBvcmlnaW4gYWRkcmVzcyB0 eXBlOiBbJXNdOyBvbmx5IElQNCBpcyBzdXBwb3J0ZWQuIiwKCQkJbmFtZSwgc2RwLT5vX2FkZHJ0 eXBlKTsKCQkKCQlyZXR1cm4gU1RTX1NVQ0NFU1M7Cgl9CgkKCWlmKHNkcC0+Y19jb25uZWN0aW9u ID09IE5VTEwgfHwgc2RwLT5jX2Nvbm5lY3Rpb24tPmNfYWRkciA9PSBOVUxMKQoJewoJCS8qCgkJ KglObyBuZWVkIHRvIGZpeCBhbnl0aGluZwoJCSovCgkJcmV0dXJuIFNUU19TVUNDRVNTOwoJfQoJ CglpZihzZHAtPmNfY29ubmVjdGlvbi0+Y19hZGRydHlwZSAmJiBzdHJjbXAoc2RwLT5jX2Nvbm5l Y3Rpb24tPmNfYWRkcnR5cGUsICJJUDQiKSAhPSAwKQoJewoJCVdBUk4oIiVzOiB1bnN1cHBvcnRl ZCBTRFAgY29ubmVjdGlvbiBhZGRyZXNzIHR5cGU6IFslc107IG9ubHkgSVA0IGlzIHN1cHBvcnRl ZC4iLAoJCQluYW1lLCBzZHAtPmNfY29ubmVjdGlvbi0+Y19hZGRydHlwZSk7Cgl9CgkKCXNkcF9y ZWN2X2FkZHJfc3RyID0gc2RwLT5jX2Nvbm5lY3Rpb24tPmNfYWRkcjsKCQoJaWYodXRpbHNfaW5l dF9hdG9uKHNkcF9yZWN2X2FkZHJfc3RyLCAmc2RwX3NpbikgPD0gMCkKCXsKCQlFUlJPUigiJXM6 IHVuYWJsZSB0byBwYXJzZSBTRFAgSVAgYWRkcmVzcyIsIG5hbWUpOwoJCQoJCXJldHVybiBTVFNf RkFJTFVSRTsKCX0KCQoJaWYoZ2V0X2lwX2J5X2hvc3QoY29uZmlndXJhdGlvbi5vdXRib3VuZF9o b3N0LCAmb3V0c2lkZV9zaW4pICE9IFNUU19TVUNDRVNTKQoJewoJCUVSUk9SKCIlczogdW5hYmxl IHRvIGNvbnZlcnQgY29uZmlndXJlZCBvdXRib3VuZCBhZGRyZXNzIFslc10gdG8gSVAiLAoJCQlu YW1lLCBjb25maWd1cmF0aW9uLm91dGJvdW5kX2hvc3QpOwoJCQoJCXJldHVybiBTVFNfRkFJTFVS RTsKCX0KCQoJaWYoZ2V0X2ludGVyZmFjZV9yZWFsX2lwKElGX09VVEJPVU5ELCAmaWZhY2Vfc2lu KSAhPSBTVFNfU1VDQ0VTUykKCXsKCQlFUlJPUigiJXM6IHVuYWJsZSB0byBnZXQgb3V0Ym91bmQg aW50ZXJmYWNlIGFkZHJlc3MiLCBuYW1lKTsKCQkKCQlyZXR1cm4gU1RTX0ZBSUxVUkU7Cgl9CgkK CVNUUkxDUFkoaWZhY2VfYWRkcl9zdHIsIHV0aWxzX2luZXRfbnRvYShpZmFjZV9zaW4pLCBzaXpl b2YoaWZhY2VfYWRkcl9zdHIpKTsKCVNUUkxDUFkob3V0c2lkZV9hZGRyX3N0ciwgdXRpbHNfaW5l dF9udG9hKG91dHNpZGVfc2luKSwgc2l6ZW9mKG91dHNpZGVfYWRkcl9zdHIpKTsKCVNUUkxDUFko c2RwX2FkZHJfc3RyLCB1dGlsc19pbmV0X250b2Eoc2RwX3NpbiksIHNpemVvZihzZHBfYWRkcl9z dHIpKTsKCQoJLyoKCSoJQ2hlY2tpbmcgZm9yIG91ciBJUCBhZGRyZXNzCgkqLwoJaXBfbWF0Y2gg PSAwOwoJCgkvKgoJKglDb21wYXJlIHdpdGggMC4wLjAuMAoJKi8KCWlmKG1lbWNtcCgmc2RwX3Np biwgJnplcm9zX3Npbiwgc2l6ZW9mKHNkcF9zaW4pKSA9PSAwKQoJewoJCS8qCgkJKglOb3QgYW4g b3VyIGFkZHJlc3MKCQkqLwoJCWlwX21hdGNoID0gMDsKCX0KCWVsc2UgaWYobWVtY21wKCZzZHBf c2luLCAmaWZhY2Vfc2luLCBzaXplb2Yoc2RwX3NpbikpID09IDApCgl7CgkJLyoKCQkqCU5vIG5l ZWQgdG8gZml4LCBpdCdzIGFsbHJlYWR5IGV4dGVybmFsIGlmYWNlIGFkZHJlc3MKCQkqLwoJCWlw X21hdGNoID0gMDsKCX0KCWVsc2UgaWYobWVtY21wKCZzZHBfc2luLCAmb3V0c2lkZV9zaW4sIHNp emVvZihzZHBfc2luKSkgPT0gMCkKCXsKCQlpcF9tYXRjaCA9IDE7Cgl9CgkKCS8qCgkqCUNoZWNr aW5nIGZvciBvdXIgcG9ydCByYW5nZQoJKi8KCW5lZWRfYWRkcl9maXhpbmcgPSAwOwoJaWYoaXBf bWF0Y2ggIT0gMCkKCXsKCQlmb3IgKG1lZGlhX3N0cmVhbV9ubyA9IDA7CgkJCXNkcF9tZXNzYWdl X21fcG9ydF9nZXQoc2RwLCBtZWRpYV9zdHJlYW1fbm8pICE9IE5VTEw7CgkJCW1lZGlhX3N0cmVh bV9ubyArKykKCQl7CgkJCW1zZ19wb3J0ID0gYXRvaShzZHBfbWVzc2FnZV9tX3BvcnRfZ2V0KHNk cCwgbWVkaWFfc3RyZWFtX25vKSk7CgkJCQoJCQlpZiAoKG1zZ19wb3J0ID49IGNvbmZpZ3VyYXRp b24ucnRwX3BvcnRfbG93KSAmJiAobXNnX3BvcnQgPD0gY29uZmlndXJhdGlvbi5ydHBfcG9ydF9o aWdoKSkKCQkJewoJCQkJbmVlZF9hZGRyX2ZpeGluZyA9IDE7CgkJCX0KCQkJCgkJCURFQlVHQyhE QkNMQVNTX1BMVUdJTiwKCQkJCSIlczogbWVkaWEgcG9ydCBvZiBTRFAgcGFja2V0OiAlZDsgaXMg cG9ydCBpbiBvdXIgcmFuZ2UgWyV1IDw9ICV1IDw9ICV1XTogJXMiLAoJCQkJbmFtZSwgbXNnX3Bv cnQsIGNvbmZpZ3VyYXRpb24ucnRwX3BvcnRfbG93LCBtc2dfcG9ydCwgY29uZmlndXJhdGlvbi5y dHBfcG9ydF9oaWdoLAoJCQkJbmVlZF9hZGRyX2ZpeGluZz8iWUVTIjoiTk8iKTsKCQkJCgkJCWlm KG5lZWRfYWRkcl9maXhpbmcpCgkJCXsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoJCiAgICAgICAg REVCVUdDKERCQ0xBU1NfUExVR0lOLAoJCSIlczogU0RQIGFkZHJlc3M6IFslc10sIGludGVyZmFj ZSBhZGRyZXNzOiBbJXNdLCBcCm91dGJvdW5kIGFkZHJlc3M6IFslc107IHBvcnQgcmFuZ2UgbWF0 Y2hlczogJXMsIG5lZWQgZml4aW5nOiAlcyIsCgkJbmFtZSwKCQlzZHBfYWRkcl9zdHIsCgkJaWZh Y2VfYWRkcl9zdHIsCgkJY29uZmlndXJhdGlvbi5vdXRib3VuZF9ob3N0LAoJCW5lZWRfYWRkcl9m aXhpbmc/IllFUyI6KGlwX21hdGNoPyJOTyI6Ik5PVCBDSEVDS0VEIiksCgkJbmVlZF9hZGRyX2Zp eGluZz8iWUVTIjoiTk8iKTsKCgkKCWlmKG5lZWRfYWRkcl9maXhpbmcpCgl7CgkJbmV3X2FkZHJf c3RyID0gb3NpcF9tYWxsb2MoSE9TVE5BTUVfU0laRSk7CgkKCQlpZihuZXdfYWRkcl9zdHIgPT0g TlVMTCkKCQl7CgkJCUVSUk9SKCIlczogY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IGhv c3RuYW1lIiwgbmFtZSk7CgkJCgkJCXJldHVybiBTVFNfRkFJTFVSRTsKCQl9CgkJCgkJU1RSTENQ WShuZXdfYWRkcl9zdHIsIGlmYWNlX2FkZHJfc3RyLCBIT1NUTkFNRV9TSVpFKTsKCQkKCQlERUJV R0MoREJDTEFTU19QTFVHSU4sICIlczogZml4aW5nIFNEUCBhZGRyZXNzIGZyb20gWyVzXSB0byBb JXNdIiwKCQkJIG5hbWUsIHNkcF9hZGRyX3N0ciwgbmV3X2FkZHJfc3RyKTsKCQkKCQlvc2lwX2Zy ZWUoc2RwLT5jX2Nvbm5lY3Rpb24tPmNfYWRkcik7CgkJc2RwLT5jX2Nvbm5lY3Rpb24tPmNfYWRk ciA9IG5ld19hZGRyX3N0cjsKCX0KCWVsc2UKCXsKCQlERUJVR0MoREJDTEFTU19QTFVHSU4sICIl czogbm8gZml4aW5nOiBub3QgYW4gb3V0IHBvcnQiLCBuYW1lKTsKCX0KCQoJcmV0dXJuIFNUU19T VUNDRVNTOwp9Cg== --MP_/tPp.QEg0g7a5HXMVYtA2CuH Content-Type: application/octet-stream; name=plugin_keepalive.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=plugin_keepalive.c LyogbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgPHBsdWdpbi5oPiAqLwojZGVmaW5l IFBMVUdJTl9OQU1FIHBsdWdpbl9rZWVwYWxpdmUKCiNpbmNsdWRlICJjb25maWcuaCIKCiNpbmNs dWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2luY2x1ZGUgPHN5cy90eXBlcy5o PgojaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CgojaW5jbHVk ZSA8c3lzL3RpbWUuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RkbGliLmg+CgoK I2luY2x1ZGUgPG9zaXBwYXJzZXIyL29zaXBfcGFyc2VyLmg+CiNpbmNsdWRlIDxvc2lwcGFyc2Vy Mi9zZHBfbWVzc2FnZS5oPgoKI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KI2luY2x1ZGUgPG5ldGlu ZXQvaW4uaD4KCiNpbmNsdWRlICJzaXByb3hkLmgiCiNpbmNsdWRlICJwbHVnaW5zLmgiCiNpbmNs dWRlICJsb2cuaCIKCnN0YXRpYyBjaGFyIGNvbnN0IGlkZW50W10gPSAiJElkOiBwbHVnaW5fa2Vl cGFsaXZlLmMsdiAxLjIgMjAxOS8wNy8yMSAyMDo1MToxMCBldmdlbml5IEV4cCBldmdlbml5ICQi OwoKLyoKKglQbHVnLWluIGlkZW50aWZpY2F0aW9uCiovCnN0YXRpYyBjaGFyIG5hbWVbXSA9ICJw bHVnaW5fa2VlcGFsaXZlIjsKc3RhdGljIGNoYXIgZGVzY1tdID0gIlNlbmRzIGtlZXBhbGl2ZSBw YWNrZXRzIHRvIHNlcnZlcnMgYW5kIGxvY2FsIGNsaWVudHMgdG8gZml4IE5BVC9maXJld2FsbCB0 aW1lb3V0IHByb2JsZW1zIjsKCi8qCioJZ2xvYmFsIGNvbmZpZ3VyYXRpb24gc3RvcmFnZSAtIHJl cXVpcmVkIGZvciBjb25maWcgZmlsZSBsb2NhdGlvbgoqLwpleHRlcm4gc3RydWN0IHNpcHJveGRf Y29uZmlnIGNvbmZpZ3VyYXRpb247CgovKgoqCVRhYmxlIHRvIGhvbGQgdGhlIGNsaWVudCByZWdp c3RyYXRpb25zCiovCmV4dGVybiBzdHJ1Y3QgdXJsbWFwX3MgdXJsbWFwW1VSTE1BUF9TSVpFXTsK CnN0cnVjdCBwaW5nZWRfaG9zdAp7Cgljb25zdCBjaGFyICpob3N0OwoJaW50IHBvcnQ7CglzdHJ1 Y3QgaW5fYWRkciBhZGRyOwp9OwoKLyoKKglTdG9yYWdlIG9mIHBpbmdlZCBhZGRyZXNzIGZvciBl eGNsdXNpb24gb2YgbXVsdGlwbGUgcGluZ2luZyBvZiB0aGUgc2FtZSBhZGRyZXNzCiovCnN0YXRp YyBzdHJ1Y3QgcGluZ2VkX2hvc3Qgc2ltcGxlX3BpbmdlZF9ob3N0c1tVUkxNQVBfU0laRSAqIDJd OwoKc3RhdGljIGludCBwaW5nX2J5X3NpbXBsZShpbnQgc3RhZ2UsIHNpcF90aWNrZXRfdCAqdGlj a2V0KTsKc3RhdGljIGludCBwaW5nX2J5X3NpbXBsZV90aW1lcl9ldmVudChpbnQgc3RhZ2UsIHNp cF90aWNrZXRfdCAqdGlja2V0KTsKc3RhdGljIGludCBwaW5nX2J5X3NpbXBsZV9pbmNvbWluZyhp bnQgc3RhZ2UsIHNpcF90aWNrZXRfdCAqdGlja2V0KTsKc3RhdGljIGludCBzZW5kX3NpbXBsZV9w aW5nKHN0cnVjdCBpbl9hZGRyICphZGRyLCB1bnNpZ25lZCBpbnQgcG9ydCk7CgovKgoqCXBsdWdp biBjb25maWd1cmF0aW9uIHN0b3JhZ2UKKi8Kc3RhdGljIHN0cnVjdCBwbHVnaW5fY29uZmlnCnsK CWludCBwZXJpb2Q7CglpbnQgcGluZ19sb2NhbDsKCWludCBwaW5nX3JlbW90ZTsKfSBwbHVnaW5f Y2ZnOwoKLyoKKglJbnN0cnVjdGlvbnMgZm9yIGNvbmZpZyBwYXJzZXIKKi8Kc3RhdGljIGNmZ29w dHNfdCBwbHVnaW5fY2ZnX29wdHNbXSA9IHsKCS8qCgkqCVBpbmcgcGVyaW9kIChkZWZhdWx0OiAx MCkKCSovCgl7ICJwbHVnaW5fa2VlcGFsaXZlX3BlcmlvZCIsIFRZUF9JTlQ0LCAmcGx1Z2luX2Nm Zy5wZXJpb2QsIHsxMCwgTlVMTH0gfSwKCQoJLyoKCSoJUGluZyBsb2NhbCBob3N0cyAoZGVmYXVs dDogMCAtIE5PKQoJKgkwIC0gbm8KCSoJMSAtIHllcwoJKi8KCXsgInBsdWdpbl9rZWVwYWxpdmVf bG9jYWwiLCBUWVBfSU5UNCwgJnBsdWdpbl9jZmcucGluZ19sb2NhbCwgezAsIE5VTEx9IH0sCgkK CS8qCgkqCVBpbmcgcmVtb3RlIGhvc3RzIChkZWZhdWx0OiAxIC0gWUVTKQoJKgkwIC0gbm8KCSoJ MSAtIHllcwoJKi8KCXsgInBsdWdpbl9rZWVwYWxpdmVfcmVtb3RlIiwgVFlQX0lOVDQsICZwbHVn aW5fY2ZnLnBpbmdfcmVtb3RlLCB7MSwgTlVMTH0gfSwKCQoJezAsIDAsIDB9Cn07CgpzdGF0aWMg dW5zaWduZWQgaW50IHBpbmdlZF9ob3N0c19nbG9iYWwgPSAwOwoKLyogCioJSW5pdGlhbGl6YXRp b24uCioJQ2FsbGVkIG9uY2Ugc3VyaW5nIHNpcHJveGQgc3RhcnR1cC4KKi8KaW50IFBMVUdJTl9J TklUKHBsdWdpbl9kZWZfdCAqcGx1Z2luX2RlZikKewoJLyoKCSoJQVBJIHZlcnNpb24gbnVtYmVy IG9mIHNpcHJveGQgdGhhdCB0aGlzIHBsdWdpbiBpcyBidWlsdCBhZ2FpbnN0LgoJKglUaGlzIGNv bnN0YW50IHdpbGwgY2hhbmdlIHdoZW5ldmVyIGNoYW5nZXMgdG8gdGhlIEFQSSBhcmUgbWFkZQoJ Kgl0aGF0IHJlcXVpcmUgYWRhcHRpb25zIGluIHRoZSBwbHVnaW4uCgkqLwoJcGx1Z2luX2RlZi0+ YXBpX3ZlcnNpb24gPSBTSVBST1hEX0FQSV9WRVJTSU9OOwoJCgkvKgoJKglOYW1lIGFuZCBkZXNj cmlwdGl2ZSB0ZXh0IG9mIHRoZSBwbHVnaW4KCSovCglwbHVnaW5fZGVmLT5uYW1lID0gbmFtZTsK CXBsdWdpbl9kZWYtPmRlc2MgPSBkZXNjOwoKCS8qCgkqCUV4ZWN1dGlvbiBtYXNrIC0gZHVyaW5n IHdoYXQgc3RhZ2VzIG9mIFNJUCBwcm9jZXNzaW5nIHNoYWxsCgkqCXRoZSBwbHVnaW4gYmUgY2Fs bGVkLgoJKglVc2luZyBQTFVHSU5fUE9TVF9QUk9YWSwgYmVjYXVzZSBvZiB1c2VyLWFnZW50IG1v ZGlmaWNhdGlvbnMKCSoJYnkgcHJveHkKCSovCgkKCXBsdWdpbl9kZWYtPmV4ZV9tYXNrID0gUExV R0lOX1RJTUVSIHwgUExVR0lOX1BST0NFU1NfUkFXOwoJCgkvKgoJKglSZWFkIHRoZSBjb25maWcg ZmlsZQoJKi8KCWlmKHJlYWRfY29uZmlnKGNvbmZpZ3VyYXRpb24uY29uZmlnZmlsZSwKCQkJY29u ZmlndXJhdGlvbi5jb25maWdfc2VhcmNoLAoJCQlwbHVnaW5fY2ZnX29wdHMsIG5hbWUpID09IFNU U19GQUlMVVJFKQoJewoJCUVSUk9SKCJQbHVnaW4gJyVzJzogY291bGQgbm90IGxvYWQgY29uZmln IGZpbGUiLCBuYW1lKTsKCQlyZXR1cm4gU1RTX0ZBSUxVUkU7Cgl9CgkKCW1lbXNldChzaW1wbGVf cGluZ2VkX2hvc3RzLCAwLCBzaXplb2Yoc2ltcGxlX3BpbmdlZF9ob3N0cykpOwoJCglJTkZPKCIl cyBpcyBpbml0aWFsaXplZCIsIG5hbWUpOwoJcmV0dXJuIFNUU19TVUNDRVNTOwp9CgovKgoqCVBy b2Nlc3NpbmcuCiovCmludCBQTFVHSU5fUFJPQ0VTUyhpbnQgc3RhZ2UsIHNpcF90aWNrZXRfdCAq dGlja2V0KQp7CglpbnQgc3RzID0gU1RTX1NVQ0NFU1M7CgkKCXN0cyA9IHBpbmdfYnlfc2ltcGxl KHN0YWdlLCB0aWNrZXQpOwoJCglyZXR1cm4gc3RzOwp9CgovKgoqCURlLUluaXRpYWxpemF0aW9u LgoqCUNhbGxlZCBkdXJpbmcgc2h1dGRvd24gb2Ygc2lwcm94ZC4gR2l2ZXMgdGhlIHBsdWdpbiB0 aGUgY2hhbmNlCioJdG8gY2xlYW4gdXAgaXRzIG1lc3MgKGUuZy4gZHluYW1pYyBtZW1vcnkgYWxs b2NhdGlvbiwgZGF0YWJhc2UKKgljb25uZWN0aW9ucywgd2hhdGV2ZXIgdGhlIHBsdWdpbiBtZXNz ZXMgYXJvdW5kIHdpdGgpCiovCmludCBQTFVHSU5fRU5EKHBsdWdpbl9kZWZfdCAqcGx1Z2luX2Rl ZikKewoJSU5GTygiJXMgZW5kcyBoZXJlIiwgbmFtZSk7CglyZXR1cm4gU1RTX1NVQ0NFU1M7Cn0K Ci8qCioJU2VuZGluZyBzaW1wbGUgQ1IgTEYgQ1IgTEYgcGFja2V0cwoqLwpzdGF0aWMgaW50IHBp bmdfYnlfc2ltcGxlKGludCBzdGFnZSwgc2lwX3RpY2tldF90ICp0aWNrZXQpCnsKCWludCBzdHMg PSBTVFNfU1VDQ0VTUzsKCQoJc3dpdGNoKHN0YWdlKQoJewoJCWNhc2UgUExVR0lOX1RJTUVSOgoJ CQlzdHMgPSBwaW5nX2J5X3NpbXBsZV90aW1lcl9ldmVudChzdGFnZSwgdGlja2V0KTsKCQlicmVh azsKCQkKCQljYXNlIFBMVUdJTl9QUk9DRVNTX1JBVzoKCQkJc3RzID0gcGluZ19ieV9zaW1wbGVf aW5jb21pbmcoc3RhZ2UsIHRpY2tldCk7CgkJYnJlYWs7CgkJCgkJZGVmYXVsdDoKCQkJCgkJYnJl YWs7Cgl9CgkKCXJldHVybiBzdHM7Cn0KCiNkZWZpbmUgVFNfQ01QKGEsIGIsIENNUCkgXAoJKCgo YSktPnR2X3NlYyA9PSAoYiktPnR2X3NlYyk/IFwKCSgoYSktPnR2X25zZWMgQ01QIChiKS0+dHZf bnNlYyk6IFwKCSgoYSktPnR2X3NlYyBDTVAgKGIpLT50dl9zZWMpKQoKCgovKgoqCVNlbmRpbmcg InNpbXBsZSIgcGluZ3M6IGp1c3Qgc2VuZCBhbiBVRFAgcGFja2V0CioJd2l0aG91dCBhbnkgaW50 ZXJlc3RpbmcgcGF5bG9hZAoqLwpzdGF0aWMgaW50IHBpbmdfYnlfc2ltcGxlX3RpbWVyX2V2ZW50 KGludCBzdGFnZSwgc2lwX3RpY2tldF90ICp0aWNrZXQpCnsKCXN0YXRpYyBzdHJ1Y3QgdGltZXNw ZWMgdHNfbmV4dF9zZW5kaW5nID0gezAsIDB9OwoJc3RydWN0IHRpbWVzcGVjIHRzX25vdzsKCQoJ aW50IHN0czsKCQoJdW5zaWduZWQgaW50IGksIGogPSAwOwoJdW5zaWduZWQgaW50IHBpbmdlZF9l bmRfaWR4OwoJCglvc2lwX3VyaV90ICpwaW5nX3VybHNbMl0sICpwaW5nX3VybDsKCWludCBwaW5n X3VybF9jb3VudCwgcGluZ191cmxfbnVtOwoJY2hhciAqc2lwX2hvc3QsICpzaXBfcG9ydCwgKnNp cF9pcDsKCWludCBpc2lwX3BvcnQ7CglpbnQgZm91bmQgPSAwOwoJCglzdHJ1Y3QgaW5fYWRkciBw aW5nX2FkZHI7CgkKCWlmKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHNfbm93KSkK CXsKCQlFUlJPUigiJXM6IGNsb2NrX2dldHRpbWUgZmFpbGVkIiwgbmFtZSk7CgkJCgkJcmV0dXJu IFNUU19TVUNDRVNTOwoJfQoJCgkvKgoJKglJcyB0aW1lciBkb25lPwoJKi8KCWlmKFRTX0NNUCgm dHNfbm93LCAmdHNfbmV4dF9zZW5kaW5nLCA8KSkKCXsKCQlyZXR1cm4gU1RTX1NVQ0NFU1M7Cgl9 CgkKCW1lbWNweSgmdHNfbmV4dF9zZW5kaW5nLCAmdHNfbm93LCBzaXplb2Yoc3RydWN0IHRpbWVz cGVjKSk7Cgl0c19uZXh0X3NlbmRpbmcudHZfc2VjICs9IHBsdWdpbl9jZmcucGVyaW9kOwoJCglw aW5nZWRfZW5kX2lkeCA9IDA7CgkKCS8qCgkqCUxvb3AgdGhyb3VnaCBhbGwgVVJMcwoJKi8KCWZv cihpID0gMDsgaSA8IFVSTE1BUF9TSVpFOyBpICsrKQoJewoJCS8qCgkJKglVc2luZyBvbmx5IGFj dGl2ZSByZWNvcmRzCgkJKi8KCQlpZih1cmxtYXBbaV0uYWN0aXZlID09IDApCgkJewoJCQljb250 aW51ZTsKCQl9CgkJCgkJLyoKCQkqCVNlbGVjdGluZyBVUkxzIHRvIHBpbmcKCQkqLwoJCXBpbmdf dXJsX2NvdW50ID0gMDsKCQkKCQlpZihwbHVnaW5fY2ZnLnBpbmdfbG9jYWwpCgkJewoJCQlwaW5n X3VybHNbcGluZ191cmxfY291bnQgKytdID0gdXJsbWFwW2ldLnRydWVfdXJsOwoJCX0KCQkKCQlp ZihwbHVnaW5fY2ZnLnBpbmdfcmVtb3RlKQoJCXsKCQkJcGluZ191cmxzW3BpbmdfdXJsX2NvdW50 ICsrXSA9IHVybG1hcFtpXS5yZWdfdXJsOwoJCX0KCQkKCQkKCQlmb3IocGluZ191cmxfbnVtID0g MDsgcGluZ191cmxfbnVtIDwgcGluZ191cmxfY291bnQ7IHBpbmdfdXJsX251bSArKykKCQl7CgkJ CS8qCgkJCSoJR2V0dGluZyBob3N0IG9mIFVSTAoJCQkqLwoJCQlwaW5nX3VybCA9IHBpbmdfdXJs c1twaW5nX3VybF9udW1dOwoJCQkKCQkJc2lwX2hvc3QgPSBvc2lwX3VyaV9nZXRfaG9zdChwaW5n X3VybCk7CgkJCXNpcF9wb3J0ID0gb3NpcF91cmlfZ2V0X3BvcnQocGluZ191cmwpOwoJCQkKCQkJ aWYoc2lwX2hvc3QgPT0gTlVMTCkKCQkJewoJCQkJY29udGludWU7CgkJCX0KCQkJCgkJCWlmKHNp cF9wb3J0KQoJCQl7CgkJCQlpc2lwX3BvcnQgPSBhdG9pKHNpcF9wb3J0KTsKCQkJfQoJCQllbHNl CgkJCXsKCQkJCWlzaXBfcG9ydCA9IFNJUF9QT1JUOwoJCQl9CgkJCQoJCQkvKgoJCQkqCUNoZWNr aW5nIGZvciBob3N0IGFsbHJlYWR5IGlzIHBpbmdlZCB3aXRob3V0IHJlc29sdXRpb24KCQkJKi8K CQkJZm91bmQgPSAwOwoJCQlmb3IoaiA9IDA7IGogPCBwaW5nZWRfZW5kX2lkeDsgaiArKykKCQkJ ewoJCQkJaWYoc3RyY21wKHNpcF9ob3N0LCBzaW1wbGVfcGluZ2VkX2hvc3RzW2pdLmhvc3QpID09 IDAKCQkJCQkmJiBpc2lwX3BvcnQgPT0gc2ltcGxlX3BpbmdlZF9ob3N0c1tqXS5wb3J0KQoJCQkJ ewoJCQkJCWZvdW5kID0gMTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkKCQkJLyoKCQkJKglJ ZiBob3N0IGlzIHBpbmdlZCAtIHNraXBwaW5nIGl0CgkJCSovCgkJCWlmKGZvdW5kKQoJCQl7CgkJ CQljb250aW51ZTsKCQkJfQoJCQkKCQkJbWVtc2V0KCZwaW5nX2FkZHIsIDAsIHNpemVvZihwaW5n X2FkZHIpKTsKCQkJCgkJCS8qCgkJCSoJVHJ5aW5nIHRvIGNvbnZlcnQgYWRkcmVzcyB0byBJUCAv IHJlc29sdmUKCQkJKi8KCQkJc3RzID0gZ2V0X2lwX2J5X2hvc3Qoc2lwX2hvc3QsICZwaW5nX2Fk ZHIpOwoJCQlpZihzdHMgPT0gU1RTX0ZBSUxVUkUpCgkJCXsKCQkJCURFQlVHQyhEQkNMQVNTX1BM VUdJTiwKCQkJCQkiJXM6IGNhbm5vdCByZXNvbHZlIFNJUCBhZGRyZXNzIFslc10iLCBuYW1lLCBz aXBfaG9zdCk7CgkJCQljb250aW51ZTsKCQkJfQoJCQkKCQkJc2lwX2lwID0gdXRpbHNfaW5ldF9u dG9hKHBpbmdfYWRkcik7CgkJCQoJCQkvKgoJCQkqCVdhcyBhbnkgcGFja2V0IGFsbHJlYWR5IHNl bnQgdG8gdGhlIHNhbWUgSVAgYWRkcmVzcz8KCQkJKi8KCQkJZm91bmQgPSAwOwoJCQlmb3IoaiA9 IDA7IGogPCBwaW5nZWRfZW5kX2lkeDsgaiArKykKCQkJewoJCQkJaWYoaXNpcF9wb3J0ID09IHNp bXBsZV9waW5nZWRfaG9zdHNbal0ucG9ydAoJCQkJCSYmIG1lbWNtcCgmcGluZ19hZGRyLCAmc2lt cGxlX3BpbmdlZF9ob3N0c1tqXS5hZGRyLCBzaXplb2YocGluZ19hZGRyKSkgPT0gMCkKCQkJCXsK CQkJCQlmb3VuZCA9IDE7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJCgkJCS8qCgkJCSoJSWYg cGFja2V0IHdhcyBzZW50IHRvIHRoZSBzYW1lIElQIC0gc2tpcHBpbmcgaXQKCQkJKi8KCQkJaWYo Zm91bmQpCgkJCXsKCQkJCURFQlVHQyhEQkNMQVNTX1BMVUdJTiwKCQkJCSIlczogc2tpcHBpbmcg cGluZyB0byBbJXNdOiBwaW5nIHBhY2tldCB3YXMgYWxscmVhZHkgc2VudCB0byB0aGUgc2FtZSBh ZGRyZXNzIFslczoldV0gZm9yIGhvc3Q6IFslc10iLAoJCQkJbmFtZSwgc2lwX2hvc3QsIHNpcF9p cCwgaXNpcF9wb3J0LCBzaW1wbGVfcGluZ2VkX2hvc3RzW2pdLmhvc3QpOwoJCQkJCgkJCQljb250 aW51ZTsKCQkJfQoJCQkKCQkJLyoKCQkJKglTZW5kaW5nIHBhY2tldAoJCQkqLwoJCQlERUJVR0Mo REJDTEFTU19QTFVHSU4sCgkJCQkiJXM6IHNlbmRpbmcgcGluZyBwYWNrZXQgdG8gWyVzOiVkXSwg SVA6ICVzIC4uLiIsCgkJCQluYW1lLCBzaXBfaG9zdCwgaXNpcF9wb3J0LCBzaXBfaXApOwoJCQkK CQkJc3RzID0gc2VuZF9zaW1wbGVfcGluZygmcGluZ19hZGRyLCBpc2lwX3BvcnQpOwoJCQkKCQkJ aWYoc3RzID09IFNUU19TVUNDRVNTKQoJCQl7CgkJCQlERUJVR0MoREJDTEFTU19QTFVHSU4sICIl czogc2VuZGluZyBwaW5nIHBhY2tldCB0byBbJXM6JWRdIGlzIGRvbmUhIiwKCQkJCQluYW1lLCBz aXBfaG9zdCwgaXNpcF9wb3J0KTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCVdBUk4oIiVzOiBVbmFi bGUgdG8gc2VuZCBwaW5nIHBhY2tldCB0byBbJXM6JWRdISIsCgkJCQkJbmFtZSwgc2lwX2hvc3Qs IGlzaXBfcG9ydCk7CgkJCX0KCQkJCgkJCS8qCgkJCSoJU2F2aW5nIGFkZHJlc3Mgb2YgcGluZ2Vk IGhvc3QuCgkJCSoJUGluZyBzZW5kaW5nIGVycm9ycyBhcmUgaWdub3JlZCwgYmVjYXVzZSBvZiBw cm9iYWJpbGl0eSBvZiByZXBlYXRpbmcgZXJyb3JzLgoJCQkqLwoJCQlzaW1wbGVfcGluZ2VkX2hv c3RzW3BpbmdlZF9lbmRfaWR4XS5ob3N0ID0gc2lwX2hvc3Q7CgkJCXNpbXBsZV9waW5nZWRfaG9z dHNbcGluZ2VkX2VuZF9pZHhdLnBvcnQgPSBpc2lwX3BvcnQ7CgkJCW1lbWNweSgmc2ltcGxlX3Bp bmdlZF9ob3N0c1twaW5nZWRfZW5kX2lkeF0uYWRkciwgJnBpbmdfYWRkciwgc2l6ZW9mKHBpbmdf YWRkcikpOwoJCQkKCQkJcGluZ2VkX2VuZF9pZHggKys7CgkJfQoJfQoJCglwaW5nZWRfaG9zdHNf Z2xvYmFsID0gcGluZ2VkX2VuZF9pZHg7CgkKCXJldHVybiBTVFNfU1VDQ0VTUzsKfQoKLyoKKglT ZW5kIFBJTkcgcGFja2V0CiovCnN0YXRpYyBpbnQgc2VuZF9zaW1wbGVfcGluZyhzdHJ1Y3QgaW5f YWRkciAqYWRkciwgdW5zaWduZWQgaW50IHBvcnQpCnsKCWludCBzdHM7CgljaGFyIHBpbmdfcGF5 bG9hZFtdID0gIlxyXG5cclxuIjsgLyogUElORyBmcm9tIFJGQyA1NjI2ICh2aW9sYXRpb24pICov CglzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBheWxvYWRfc2l6ZSA9IHNpemVvZihwaW5nX3Bh eWxvYWQpIC0gMTsKCQoJc3RzID0gc2lwc29ja19zZW5kKCphZGRyLCBwb3J0LCBQUk9UT19VRFAs IHBpbmdfcGF5bG9hZCwgcGF5bG9hZF9zaXplKTsKCQoJcmV0dXJuIHN0czsKfQoKLyoKKglEcm9w cGluZyBQT05HIHBhY2tldHMKKi8Kc3RhdGljIGludCBwaW5nX2J5X3NpbXBsZV9pbmNvbWluZyhp bnQgc3RhZ2UsIHNpcF90aWNrZXRfdCAqdGlja2V0KQp7CgljaGFyIHBvbmdfcGF5bG9hZFtdID0g IlxyXG4iOyAvKiBQT05HIGZyb20gUkZDIDU2MjYgKHZpb2xhdGlvbikgKi8KCXN0YXRpYyBjb25z dCB1bnNpZ25lZCBpbnQgcG9uZ19wYXlsb2FkX3NpemUgPSBzaXplb2YocG9uZ19wYXlsb2FkKSAt IDE7CgljaGFyIHplcm9fcG9uZ19wYXlsb2FkW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07 CglzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHplcm9fcG9uZ19wYXlsb2FkX3NpemUgPSBzaXpl b2YoemVyb19wb25nX3BheWxvYWQpOwoJY29uc3QgY2hhciAqaXA7Cgl1bnNpZ25lZCBpbnQgcG9y dDsKCXVuc2lnbmVkIGludCBpOwoJaW50IGZvdW5kOwoJaW50IHN0cyA9IFNUU19TVUNDRVNTOwoJ CgkvKgoJKglJZiB3ZSBnb3QgYSBQT05HIHBhY2tldAoJKi8KCWlmKCh0aWNrZXQtPnJhd19idWZm ZXJfbGVuID09IHBvbmdfcGF5bG9hZF9zaXplCgkJJiYgIW1lbWNtcCh0aWNrZXQtPnJhd19idWZm ZXIsIHBvbmdfcGF5bG9hZCwgcG9uZ19wYXlsb2FkX3NpemUpKQoJCXx8ICh0aWNrZXQtPnJhd19i dWZmZXJfbGVuID09IHplcm9fcG9uZ19wYXlsb2FkX3NpemUKCQkmJiAhbWVtY21wKHRpY2tldC0+ cmF3X2J1ZmZlciwgemVyb19wb25nX3BheWxvYWQsIHplcm9fcG9uZ19wYXlsb2FkX3NpemUpKSkK CXsKCQlpcCA9IHV0aWxzX2luZXRfbnRvYSh0aWNrZXQtPmZyb20uc2luX2FkZHIpOwoJCXBvcnQg PSBudG9ocyh0aWNrZXQtPmZyb20uc2luX3BvcnQpOwoJCQoJCS8qCgkJKglUcnlpbmcgdG8gY2hl Y2s6IHdhcyBpdCBzZW5kIGJ5IHBsdWdpbiBvciBub3QuLi4KCQkqLwoJCWZvdW5kID0gMDsKCQlm b3IoaSA9IDA7IGkgPCBwaW5nZWRfaG9zdHNfZ2xvYmFsOyBpICsrKQoJCXsKCQkJaWYoc2ltcGxl X3BpbmdlZF9ob3N0c1tpXS5wb3J0ID09IHBvcnQKCQkJCSYmICFtZW1jbXAoJnNpbXBsZV9waW5n ZWRfaG9zdHNbaV0uYWRkciwgJnRpY2tldC0+ZnJvbS5zaW5fYWRkciwgc2l6ZW9mKHRpY2tldC0+ ZnJvbS5zaW5fYWRkcikpKQoJCQl7CgkJCQlmb3VuZCA9IDE7CgkJCQlicmVhazsKCQkJfQoJCX0K CQkKCQkvKgoJCSoJVGhpcyBwYWNrZXQgaXMgbm90IGFuIG91ciBwYWNrZXQKCQkqLwoJCWlmKGZv dW5kKQoJCXsKCQkJREVCVUdDKERCQ0xBU1NfUExVR0lOLCAiJXM6IGdvdCBQT05HIGZyb20gJXM6 JXU6IG5vdCBhbiBvdXIgcGFja2V0IiwKCQkJCW5hbWUsIGlwLCBwb3J0KTsKCQkJCgkJCXJldHVy biBzdHM7CgkJfQoJCQoJCS8qCgkJKglSZW1vdmluZyBwaW5nZWQgYWRkcmVzcyBmcm9tIHBpbmdl ZCBsaXN0CgkJKi8KCQltZW1zZXQoc2ltcGxlX3BpbmdlZF9ob3N0cyArIGksIDAsIHNpemVvZigq c2ltcGxlX3BpbmdlZF9ob3N0cykpOwoJCQoJCURFQlVHQyhEQkNMQVNTX1BMVUdJTiwgIiVzOiBn b3QgUE9ORyBwYWNrZXQgZnJvbSAlczoldSIsIG5hbWUsIGlwLCBwb3J0KTsKCQkKCQlyZXR1cm4g U1RTX0ZBTFNFOwoJfQoJCglyZXR1cm4gc3RzOwp9Cg== --MP_/tPp.QEg0g7a5HXMVYtA2CuH Content-Type: application/octet-stream; name=plugin_sdp_name.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=plugin_sdp_name.c LyogbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgPHBsdWdpbi5oPiAqLwojZGVmaW5l IFBMVUdJTl9OQU1FIHBsdWdpbl9zZHBfbmFtZQoKI2luY2x1ZGUgImNvbmZpZy5oIgoKI2luY2x1 ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgoKI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8YXJw YS9pbmV0Lmg+CgojaW5jbHVkZSA8b3NpcHBhcnNlcjIvb3NpcF9wYXJzZXIuaD4KI2luY2x1ZGUg PG9zaXBwYXJzZXIyL3NkcF9tZXNzYWdlLmg+CgojaW5jbHVkZSAic2lwcm94ZC5oIgojaW5jbHVk ZSAicGx1Z2lucy5oIgojaW5jbHVkZSAibG9nLmgiCgpzdGF0aWMgY2hhciBjb25zdCBpZGVudFtd ID0gIiRJZDogcGx1Z2luX3NkcF9uYW1lLmMsdiAxLjIgMjAxOS8wNy8yMSAyMDo1MjoyMCBldmdl bml5IEV4cCBldmdlbml5ICQiOwoKLyoKKglQbHVnLWluIGlkZW50aWZpY2F0aW9uCiovCnN0YXRp YyBjaGFyIG5hbWVbXSA9ICJwbHVnaW5fc2RwX25hbWUiOwpzdGF0aWMgY2hhciBkZXNjW10gPSAi Q2hhbmdlcyBzZXNzaW9uIG5hbWUgaW4gU0RQIjsKCi8qCioJZ2xvYmFsIGNvbmZpZ3VyYXRpb24g c3RvcmFnZSAtIHJlcXVpcmVkIGZvciBjb25maWcgZmlsZSBsb2NhdGlvbgoqLwpleHRlcm4gc3Ry dWN0IHNpcHJveGRfY29uZmlnIGNvbmZpZ3VyYXRpb247CgovKgoqCXBsdWdpbiBjb25maWd1cmF0 aW9uIHN0b3JhZ2UKKi8Kc3RhdGljIHN0cnVjdCBwbHVnaW5fY29uZmlnCnsKCWNoYXIgKm9fdXNl cm5hbWU7CgljaGFyICpzOwoJaW50IHNfaXNfdXNlcl9hZ2VudDsKfSBwbHVnaW5fY2ZnOwoKLyoK KglJbnN0cnVjdGlvbnMgZm9yIGNvbmZpZyBwYXJzZXIKKi8Kc3RhdGljIGNmZ29wdHNfdCBwbHVn aW5fY2ZnX29wdHNbXSA9IHsKCS8qCgkqCVZhbHVlIG9mICJvPSIgcGFyYW1ldGVyIG9mIFNEUAoJ Ki8KCXsgInBsdWdpbl9zZHBfbmFtZV9vX3VzZXJuYW1lIiwgVFlQX1NUUklORywgJnBsdWdpbl9j Zmcub191c2VybmFtZSwgezAsIE5VTEx9IH0sCgkKCS8qCgkqCVZhbHVlIG9mICJzPSIgcGFyYW1l dGVyIG9mIFNEUAoJKi8KCXsgInBsdWdpbl9zZHBfbmFtZV9zIiwgVFlQX1NUUklORywgJnBsdWdp bl9jZmcucywgezAsIE5VTEx9IH0sCgkKCS8qCgkqCVNldCAicz0iIHRvIFVzZXItQWdlbnQgb2Yg U0lQIHBhY2tldAoJKgkwIC0gZG9uJ3Qgc2V0CgkqCTEgLSBzZXQKCSovCgl7ICJwbHVnaW5fc2Rw X25hbWVfc19pc191YSIsIFRZUF9JTlQ0LCAmcGx1Z2luX2NmZy5zX2lzX3VzZXJfYWdlbnQsIHsw LCBOVUxMfX0sCgl7MCwgMCwgMH0KfTsKCnN0YXRpYyBpbnQgZml4X3N0cihjaGFyICpzdHIsIGlu dCBhbGxvd2VkX3NwYWNlKTsKCi8qIAoqCUluaXRpYWxpemF0aW9uLgoqCUNhbGxlZCBvbmNlIHN1 cmluZyBzaXByb3hkIHN0YXJ0dXAuCiovCmludCBQTFVHSU5fSU5JVChwbHVnaW5fZGVmX3QgKnBs dWdpbl9kZWYpCnsKCS8qCgkqCUFQSSB2ZXJzaW9uIG51bWJlciBvZiBzaXByb3hkIHRoYXQgdGhp cyBwbHVnaW4gaXMgYnVpbHQgYWdhaW5zdC4KCSoJVGhpcyBjb25zdGFudCB3aWxsIGNoYW5nZSB3 aGVuZXZlciBjaGFuZ2VzIHRvIHRoZSBBUEkgYXJlIG1hZGUKCSoJdGhhdCByZXF1aXJlIGFkYXB0 aW9ucyBpbiB0aGUgcGx1Z2luLgoJKi8KCXBsdWdpbl9kZWYtPmFwaV92ZXJzaW9uID0gU0lQUk9Y RF9BUElfVkVSU0lPTjsKCQoJLyoKCSoJTmFtZSBhbmQgZGVzY3JpcHRpdmUgdGV4dCBvZiB0aGUg cGx1Z2luCgkqLwoJcGx1Z2luX2RlZi0+bmFtZSA9IG5hbWU7CglwbHVnaW5fZGVmLT5kZXNjID0g ZGVzYzsKCgkvKgoJKglFeGVjdXRpb24gbWFzayAtIGR1cmluZyB3aGljaCBzdGFnZXMgb2YgU0lQ IHByb2Nlc3NpbmcgdGhhdCBwbHVnaW4KCSoJc2hhbGwgYmUgY2FsbGVkLgoJKglVc2luZyBQTFVH SU5fUE9TVF9QUk9YWSwgYmVjYXVzZSBvZiBzZXNzaW9uIG5hbWVzIG1vZGlmaWNhdGlvbnMKCSoJ YnkgcHJveHkuCgkqLwoJcGx1Z2luX2RlZi0+ZXhlX21hc2sgPSBQTFVHSU5fUE9TVF9QUk9YWTsK CQoJLyoKCSoJUmVhZCB0aGUgY29uZmlnIGZpbGUKCSovCglpZihyZWFkX2NvbmZpZyhjb25maWd1 cmF0aW9uLmNvbmZpZ2ZpbGUsCgkJCWNvbmZpZ3VyYXRpb24uY29uZmlnX3NlYXJjaCwKCQkJcGx1 Z2luX2NmZ19vcHRzLCBuYW1lKSA9PSBTVFNfRkFJTFVSRSkKCXsKCQlFUlJPUigiUGx1Z2luICcl cyc6IGNvdWxkIG5vdCBsb2FkIGNvbmZpZyBmaWxlIiwgbmFtZSk7CgkJcmV0dXJuIFNUU19GQUlM VVJFOwoJfQoJCglpZihwbHVnaW5fY2ZnLm9fdXNlcm5hbWUgJiYgZml4X3N0cihwbHVnaW5fY2Zn Lm9fdXNlcm5hbWUsIDApKQoJewoJCVdBUk4oIiVzOiBvPSB1c2VybmFtZSBjb25zaXN0cyB1bmFj Y2VwdGFibGUgc3ltYm9scywgaXQgd2FzIGZpeGVkIHRvIFslc10iLAoJCQluYW1lLCBwbHVnaW5f Y2ZnLm9fdXNlcm5hbWUpOwoJfQoJCglpZihwbHVnaW5fY2ZnLnMgJiYgZml4X3N0cihwbHVnaW5f Y2ZnLnMsIDEpKQoJewoJCVdBUk4oIiVzOiBzPSBzZXNzaW9uIG5hbWUgY29uc2lzdHMgdW5hY2Nl cHRhYmxlIHN5bWJvbHMsIGl0IHdhcyBmaXhlZCB0byBbJXNdIiwKCQkJbmFtZSwgcGx1Z2luX2Nm Zy5zKTsKCX0KCQoJSU5GTygiJXMgaXMgaW5pdGlhbGl6ZWQiLCBuYW1lKTsKCXJldHVybiBTVFNf U1VDQ0VTUzsKfQoKc3RhdGljIGludCBmaXhfc3RyKGNoYXIgKnN0ciwgaW50IGFsbG93ZWRfc3Bh Y2UpCnsKCWludCBjaGFuZ2VzID0gMDsKCWNoYXIgYzsKCQoJd2hpbGUoKnN0cikKCXsKCQljID0g KnN0cjsKCQkKCQlpZighaXNhc2NpaShjKSB8fCAoIWlzZ3JhcGgoYykgJiYgKChhbGxvd2VkX3Nw YWNlICYmICFpc3NwYWNlKGMpKSB8fCAhYWxsb3dlZF9zcGFjZSkpKQoJCXsKCQkJKnN0ciA9ICct JzsKCQkJY2hhbmdlcyArKzsKCQl9CgkJCgkJc3RyICsrOwoJfQoJCglyZXR1cm4gY2hhbmdlczsK fQoKLyoKKglQcm9jZXNzaW5nLgoqLwppbnQgUExVR0lOX1BST0NFU1MoaW50IHN0YWdlLCBzaXBf dGlja2V0X3QgKnRpY2tldCkKewoJaW50IHN0czsKCWludCB0eXBlOwoJY2hhciAqYnVmZjsKCXNp emVfdCBidWZsZW47Cglvc2lwX2JvZHlfdCAqYm9keTsKCXNkcF9tZXNzYWdlX3QgICpzZHA7Cglp bnQgY29udGVudF9sZW5ndGg7Cglvc2lwX2NvbnRlbnRfdHlwZV90ICpjb250ZW50X3R5cGU7Cglj aGFyIGNsZW5fYnVmWzhdOyAvKiBjb250ZW50IGxlbmd0aDogcHJvYmFibHkgbmV2ZXIgbW9yZSB0 aGFuIDcgZGlnaXRzICEqLwoJb3NpcF9oZWFkZXJfdCAqdWFfaGRyOwoJY2hhciAqb3JpZ19zZXNz X25hbWUsICpuZXdfc2Vzc19uYW1lOwoJY2hhciAqb3JpZ19zZXNzX3VzZXJuYW1lLCAqc2Vzc19p ZCwgKnNlc3NfdmVyc2lvbiwgKnNlc3NfbmV0dHlwZSwgKnNlc3NfYWRkcnR5cGUsICpzZXNzX2Fk ZHI7CgljaGFyICpidWY7CgkKCQoJLyoKCSoJTW9kaWZ5aW5nIFNEUCBpbiBvdXRnb2luZyBtZXNz YWdlcyBvbmx5CgkqLwoJdHlwZSA9IHRpY2tldC0+ZGlyZWN0aW9uOwoJaWYodHlwZSAhPSBSRVFU WVBfT1VUR09JTkcgJiYgdHlwZSAhPSBSRVNUWVBfT1VUR09JTkcpCgl7CgkJcmV0dXJuIFNUU19T VUNDRVNTOwoJfQoJCgkKCS8qCgkqCVNlbGVjdGluZyAicz0iIHZhbHVlCgkqLwoJbmV3X3Nlc3Nf bmFtZSA9IE5VTEw7CglpZihwbHVnaW5fY2ZnLnMgIT0gTlVMTCkKCXsKCQlpZihzdHJsZW4ocGx1 Z2luX2NmZy5zKSA+IDApCgkJewoJCQluZXdfc2Vzc19uYW1lID0gcGx1Z2luX2NmZy5zOwoJCX0K CQllbHNlCgkJewoJCQluZXdfc2Vzc19uYW1lID0gIiAiOwoJCX0KCX0KCWVsc2UgaWYocGx1Z2lu X2NmZy5zX2lzX3VzZXJfYWdlbnQpCgl7CgkJb3NpcF9tZXNzYWdlX2dldF91c2VyX2FnZW50KHRp Y2tldC0+c2lwbXNnLCAwLCAmdWFfaGRyKTsKCQkKCQlpZih1YV9oZHIpCgkJewoJCQluZXdfc2Vz c19uYW1lID0gdWFfaGRyLT5odmFsdWU7CgkJfQoJfQoJCgkKCS8qCgkqCUNoZWNraW5nIGlmIG5v dGhpbmcgdG8gZG8KCSovCglpZihwbHVnaW5fY2ZnLm9fdXNlcm5hbWUgPT0gTlVMTCAmJiBwbHVn aW5fY2ZnLnMgPT0gTlVMTCkKCXsKCQlyZXR1cm4gU1RTX1NVQ0NFU1M7Cgl9CgkKCS8qCgkqCUNo ZWNraW5nIHRoYXQgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgcGF5bG9hZCAiYXBwbGljYXRpb24vc2Rw IgoJKi8KCgkvKiAKCSoJR2V0dGluZyBjb250ZW50IGxlbmd0aAoJKi8KCWNvbnRlbnRfbGVuZ3Ro ID0gMDsKCWlmKHRpY2tldC0+c2lwbXNnICYmIHRpY2tldC0+c2lwbXNnLT5jb250ZW50X2xlbmd0 aCAKCQkmJiB0aWNrZXQtPnNpcG1zZy0+Y29udGVudF9sZW5ndGgtPnZhbHVlKQoJewoJCXN0cyA9 IHNzY2FuZih0aWNrZXQtPnNpcG1zZy0+Y29udGVudF9sZW5ndGgtPnZhbHVlLCAiJWkiLCAmY29u dGVudF9sZW5ndGgpOwoJfQoKCS8qCgkqCUNoZWNraW5nIGlmIHdlIGhhdmUgYSBjb250ZW50IHR5 cGUgZGVmaW5lZCBhbmQgdGhhdCBwYXlsb2FkIGxlbmd0aCA+MAoJKi8KCWNvbnRlbnRfdHlwZSA9 IG9zaXBfbWVzc2FnZV9nZXRfY29udGVudF90eXBlKHRpY2tldC0+c2lwbXNnKTsKCWlmKGNvbnRl bnRfbGVuZ3RoIDw9IDAgfHwgY29udGVudF90eXBlID09IE5VTEwKCQl8fCBjb250ZW50X3R5cGUt PnR5cGUgPT0gTlVMTCB8fCBjb250ZW50X3R5cGUtPnN1YnR5cGUgPT0gTlVMTCkKCXsKCQlyZXR1 cm4gU1RTX1NVQ0NFU1M7Cgl9CgoJLyoKCSoJQ2hlY2tpbmcgY29udGVudCB0eXBlOiBpdCBtdXN0 IGJlICJhcHBsaWNhdGlvbi9zZHAiCgkqLwoJaWYoc3RybmNtcChjb250ZW50X3R5cGUtPnR5cGUs ICJhcHBsaWNhdGlvbiIsIHNpemVvZigiYXBwbGljYXRpb24iKSkgIT0gMAoJCXx8IHN0cm5jbXAo Y29udGVudF90eXBlLT5zdWJ0eXBlLCAic2RwIiwgc2l6ZW9mKCJzZHAiKSkgIT0gMCkKCXsKCQly ZXR1cm4gU1RTX1NVQ0NFU1M7Cgl9CgoJLyoKCSoJUGFyc2luZyB0aGUgcGF5bG9hZAoJKglHZXR0 aW5nIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvZiB0aGUgU0lQIHBhY2tldAoJKi8KCXN0cyA9 IG9zaXBfbWVzc2FnZV9nZXRfYm9keSh0aWNrZXQtPnNpcG1zZywgMCwgJmJvZHkpOwoJaWYoc3Rz ICE9IDApCgl7CgkJREVCVUdDKERCQ0xBU1NfUExVR0lOLCAiJXM6IG5vIGJvZHkgZm91bmQgaW4g U0RQIG1lc3NhZ2UiLCBuYW1lKTsKCQlyZXR1cm4gU1RTX1NVQ0NFU1M7Cgl9CgkKCS8qCgkqCUR1 bXBpbmcgaXQgaW50byBhIGJ1ZmZlcgoJKi8KCXN0cyA9IHNpcF9ib2R5X3RvX3N0cihib2R5LCAm YnVmZiwgJmJ1Zmxlbik7CglpZihzdHMgIT0gMCkKCXsKCQlXQVJOKCIlczogdW5hYmxlIHRvIHNp cF9ib2R5X3RvX3N0ciIsIG5hbWUpOwoJCXJldHVybiBTVFNfU1VDQ0VTUzsKCX0KCQoJLyoKCSoJ QW5kIHBhcnNpbmcgaXQgaW50byBhbiBTRFAgc3RydWN0dXJlCgkqLwoJc3RzID0gc2RwX21lc3Nh Z2VfaW5pdCgmc2RwKTsKCQoJc3RzID0gc2RwX21lc3NhZ2VfcGFyc2Uoc2RwLCBidWZmKTsKCQoJ aWYoc3RzICE9IDApCgl7CgkJV0FSTigiJXM6IHVuYWJsZSB0byBzZHBfbWVzc2FnZV9wYXJzZSgp IGJvZHkiLCBuYW1lKTsKCQkKCQlEVU1QX0JVRkZFUigtMSwgYnVmZiwgYnVmbGVuKTsKCQkKCQlv c2lwX2ZyZWUoYnVmZik7CgkJCgkJYnVmZiA9IE5VTEw7CgkJCgkJc2RwX21lc3NhZ2VfZnJlZShz ZHApOwoJCXJldHVybiBTVFNfU1VDQ0VTUzsKCX0KCQoJb3NpcF9mcmVlKGJ1ZmYpOwoJYnVmZiA9 IE5VTEw7CgoJCgkvKgoJKglTZXR0aW5nIG5ldyAicz0iIHZhbHVlIHRvIFNEUAoJKi8KCWlmKG5l d19zZXNzX25hbWUgJiYgc3RybGVuKG5ld19zZXNzX25hbWUpID4gMCkKCXsKCQlvcmlnX3Nlc3Nf bmFtZSA9IHNkcF9tZXNzYWdlX3NfbmFtZV9nZXQoc2RwKTsKCQkKCQlidWYgPSBvc2lwX3N0cmR1 cChuZXdfc2Vzc19uYW1lKTsKCQkKCQlpZihidWYpCgkJewoJCQlERUJVR0MoREJDTEFTU19QTFVH SU4sICIlczogY2hhbmdpbmcgU0RQIHNlc3Npb24gbmFtZSBmcm9tIFslc10gdG8gWyVzXSIsCgkJ CQluYW1lLCBvcmlnX3Nlc3NfbmFtZT9vcmlnX3Nlc3NfbmFtZToiIiwgbmV3X3Nlc3NfbmFtZSk7 CgkJCQoJCQlzZHBfbWVzc2FnZV9zX25hbWVfc2V0KHNkcCwgYnVmKTsKCQkJb3NpcF9mcmVlKG9y aWdfc2Vzc19uYW1lKTsKCQl9CgkJZWxzZQoJCXsKCQkJRVJST1IoIiVzOiBhbGxvY2F0aW9uIGVy cm9yIGZvciBuZXcgU0RQIHNlc3Npb24gbmFtZSIsIG5hbWUpOwoJCX0KCX0KCQoJLyoKCSoJU2V0 dGluZyBuZXcgIm89IiB2YWx1ZSB0byBTRFAKCSovCglpZihwbHVnaW5fY2ZnLm9fdXNlcm5hbWUg JiYgc3RybGVuKHBsdWdpbl9jZmcub191c2VybmFtZSkgPiAwKQoJewoJCWJ1ZiA9IG9zaXBfc3Ry ZHVwKHBsdWdpbl9jZmcub191c2VybmFtZSk7CgkJb3JpZ19zZXNzX3VzZXJuYW1lID0gc2RwX21l c3NhZ2Vfb191c2VybmFtZV9nZXQoc2RwKTsKCQlzZXNzX2lkID0gc2RwX21lc3NhZ2Vfb19zZXNz X2lkX2dldChzZHApOwoJCXNlc3NfdmVyc2lvbiA9IHNkcF9tZXNzYWdlX29fc2Vzc192ZXJzaW9u X2dldChzZHApOwoJCXNlc3NfbmV0dHlwZSA9IHNkcF9tZXNzYWdlX29fbmV0dHlwZV9nZXQoc2Rw KTsKCQlzZXNzX2FkZHJ0eXBlID0gc2RwX21lc3NhZ2Vfb19hZGRydHlwZV9nZXQoc2RwKTsKCQlz ZXNzX2FkZHIgPSBzZHBfbWVzc2FnZV9vX2FkZHJfZ2V0KHNkcCk7CgkJCgkJaWYoYnVmKQoJCXsK CQkJREVCVUdDKERCQ0xBU1NfUExVR0lOLCAiJXM6IGNoYW5naW5nIFNEUCBzZXNzaW9uIHVzZXJu YW1lIGZyb20gWyVzXSB0byBbJXNdIiwKCQkJCW5hbWUsIG9yaWdfc2Vzc191c2VybmFtZT9vcmln X3Nlc3NfdXNlcm5hbWU6IiIsIHBsdWdpbl9jZmcub191c2VybmFtZSk7CgkJCQoJCQlvc2lwX2Zy ZWUob3JpZ19zZXNzX3VzZXJuYW1lKTsKCQkJc2RwX21lc3NhZ2Vfb19vcmlnaW5fc2V0KHNkcCwg YnVmLCBzZXNzX2lkLCBzZXNzX3ZlcnNpb24sIHNlc3NfbmV0dHlwZSwgc2Vzc19hZGRydHlwZSwg c2Vzc19hZGRyKTsKCQl9CgkJZWxzZQoJCXsKCQkJRVJST1IoIiVzOiBhbGxvY2F0aW9uIGVycm9y IGZvciBuZXcgU0RQIHNlc3Npb24gdXNlcm5hbWUiLCBuYW1lKTsKCQl9Cgl9CgkKCS8qCgkqCVJl cGxhY2luZyB0aGUgb3JpZ2luYWwgcGF5bG9hZCB3aXRoIHRoZSBuZXcgbW9kaWZpZWQgcGF5bG9h ZAoJKglSZW1vdmluZyBvbGQgYm9keSBmcm9tIFNJUCBwYWNrZXQKCSovCglzdHMgPSBvc2lwX2xp c3RfcmVtb3ZlKCYodGlja2V0LT5zaXBtc2ctPmJvZGllcyksIDApOwoJb3NpcF9ib2R5X2ZyZWUo Ym9keSk7Cglib2R5ID0gTlVMTDsKCQoJLyoKCSoJRHVtcGluZyBuZXcgYm9keSB0byBidWZmZXIK CSovCglzZHBfbWVzc2FnZV90b19zdHIoc2RwLCAmYnVmZik7CglidWZsZW4gPSBzdHJsZW4oYnVm Zik7CgoJLyoKCSoJRnJlZWluZyBzZHAgc3RydWN0dXJlIChubyBsb25nZXIgbmVlZGVkKQoJKi8K CXNkcF9tZXNzYWdlX2ZyZWUoc2RwKTsKCXNkcCA9IE5VTEw7CgoJLyoKCSoJUHV0dGluZyBuZXcg Ym9keSBpbnRvIFNJUCBtZXNzYWdlCgkqLwoJc3RzID0gc2lwX21lc3NhZ2Vfc2V0X2JvZHkodGlj a2V0LT5zaXBtc2csIGJ1ZmYsIGJ1Zmxlbik7CglpZihzdHMgIT0gMCkKCXsKCQlFUlJPUigiJXM6 IHVuYWJsZSB0byBzaXBfbWVzc2FnZV9zZXRfYm9keSBib2R5IiwgbmFtZSk7CgkJRFVNUF9CVUZG RVIoLTEsIGJ1ZmYsIGJ1Zmxlbik7CgkJYnVmbGVuID0gMDsKCX0KCQoJLyoKCSoJRnJlZWluZyBi dWZmZXIKCSovCglvc2lwX2ZyZWUoYnVmZik7CglidWZmID0gTlVMTDsKCgkKCS8qCgkqCVNldHRp bmcgbmV3IGNvbnRlbnQgbGVuZ3RoCgkqCVJlbW92aW5nIG9sZCBjb250ZW50IGxlZ2h0IGZpZWxk CgkqLwoJb3NpcF9jb250ZW50X2xlbmd0aF9mcmVlKHRpY2tldC0+c2lwbXNnLT5jb250ZW50X2xl bmd0aCk7Cgl0aWNrZXQtPnNpcG1zZy0+Y29udGVudF9sZW5ndGggPSBOVUxMOwoJCgkvKgoJKglT ZXR0aW5nIG5ldyBjb250ZW50IGxlbmd0aAoJKi8KCXNwcmludGYoY2xlbl9idWYsICIlbGQiLCAo bG9uZylidWZsZW4pOwoJaWYob3NpcF9tZXNzYWdlX3NldF9jb250ZW50X2xlbmd0aCh0aWNrZXQt PnNpcG1zZywgY2xlbl9idWYpICE9IE9TSVBfU1VDQ0VTUykKCXsKCQlFUlJPUigiJXM6IHVuYWJs ZSB0byBzZXQgbmV3IGNvbnRlbnQgbGVuZ3RoIiwgbmFtZSk7CgkJcmV0dXJuIFNUU19GQUlMVVJF OwoJfQoJCglyZXR1cm4gU1RTX1NVQ0NFU1M7Cn0KCi8qCioJRGUtSW5pdGlhbGl6YXRpb24uCioJ Q2FsbGVkIGR1cmluZyBzaHV0ZG93biBvZiBzaXByb3hkLiBHaXZlcyB0aGUgcGx1Z2luIHRoZSBj aGFuY2UKKgl0byBjbGVhbiB1cCBpdHMgbWVzcyAoZS5nLiBkeW5hbWljIG1lbW9yeSBhbGxvY2F0 aW9uLCBkYXRhYmFzZQoqCWNvbm5lY3Rpb25zLCB3aGF0ZXZlciB0aGUgcGx1Z2luIG1lc3NlcyBh cm91bmQgd2l0aCkKKi8KaW50IFBMVUdJTl9FTkQocGx1Z2luX2RlZl90ICpwbHVnaW5fZGVmKQp7 CglJTkZPKCIlcyBlbmRzIGhlcmUiLCBuYW1lKTsKCXJldHVybiBTVFNfU1VDQ0VTUzsKfQo= --MP_/tPp.QEg0g7a5HXMVYtA2CuH Content-Type: application/octet-stream; name=plugin_striphader_strndup.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=plugin_striphader_strndup.patch LS0tIHNpcHJveGQtMC44LjMvc3JjL3BsdWdpbl9zdHJpcGhlYWRlci5jLm9yaWcJU2F0IERlYyAx MiAxNDozNzozMiAyMDIwCisrKyBzaXByb3hkLTAuOC4zL3NyYy9wbHVnaW5fc3RyaXBoZWFkZXIu YwlTYXQgRGVjIDEyIDE0OjQyOjE2IDIwMjAKQEAgLTg3LDYgKzg3LDI5IEBACiAgICByZXR1cm4g U1RTX1NVQ0NFU1M7CiB9CiAKK3N0YXRpYyBjaGFyICpfc3RybmR1cChjb25zdCBjaGFyICpzLCBz aXplX3QgbikKK3sKKyAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocyk7CisgICBjaGFyICpidWY7Cisg ICAKKyAgIGlmKGxlbiA+IG4pCisgICB7CisgICAgICAgbGVuID0gbjsKKyAgIH0KKyAgIAorICAg YnVmID0gbWFsbG9jKGxlbiArIDEpOworICAgCisgICBpZihidWYgPT0gTlVMTCkKKyAgIHsKKyAg ICAgICByZXR1cm4gTlVMTDsKKyAgIH0KKyAgIAorICAgbWVtY3B5KGJ1ZiwgcywgbGVuKTsKKyAg IGJ1ZltsZW5dID0gJ1wwJzsKKyAgIAorICAgcmV0dXJuIGJ1ZjsKK30KKwogLyoKICAqIFByb2Nl c3NpbmcuCiAgKiAKQEAgLTEwNiw3ICsxMjksNyBAQAogICAgICAgICAgICAgIHBsdWdpbl9jZmcu aGVhZGVyX3JlbW92ZS5zdHJpbmdbaV0sIGkpOwogICAgICAgaWYgKHN0cmNocihwbHVnaW5fY2Zn LmhlYWRlcl9yZW1vdmUuc3RyaW5nW2ldLCc6JykpIHsKICAgICAgICAgICBpbnQgbGVuPXN0cmNo cihwbHVnaW5fY2ZnLmhlYWRlcl9yZW1vdmUuc3RyaW5nW2ldLCc6JykgLSBwbHVnaW5fY2ZnLmhl YWRlcl9yZW1vdmUuc3RyaW5nW2ldOwotICAgICAgICAgIGhlYWRlcl9yZW1vdmUgPSBzdHJuZHVw KHBsdWdpbl9jZmcuaGVhZGVyX3JlbW92ZS5zdHJpbmdbaV0sIGxlbik7CisgICAgICAgICAgaGVh ZGVyX3JlbW92ZSA9IF9zdHJuZHVwKHBsdWdpbl9jZmcuaGVhZGVyX3JlbW92ZS5zdHJpbmdbaV0s IGxlbik7CiAgICAgICAgICAgaGVhZGVyX3JlbW92ZV9hcmdzID0gc3RyZHVwKHN0cmNocihwbHVn aW5fY2ZnLmhlYWRlcl9yZW1vdmUuc3RyaW5nW2ldLCc6JykrMSk7CiAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgaGVhZGVyX3JlbW92ZSA9IHN0cmR1cChwbHVnaW5fY2ZnLmhlYWRlcl9yZW1vdmUu c3RyaW5nW2ldKTsK --MP_/tPp.QEg0g7a5HXMVYtA2CuH Content-Type: application/octet-stream; name=siproxd_keepalive.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=siproxd_keepalive.patch LS0tIHNpcHJveGQtMC44LjMvc3JjL3J0cHByb3h5X3JlbGF5LmMub3JpZwlGcmkgSnVuIDE3IDE5 OjE3OjE3IDIwMTEKKysrIHNpcHJveGQtMC44LjMvc3JjL3J0cHByb3h5X3JlbGF5LmMJRnJpIERl YyAgNCAxMjozNzowMiAyMDIwCkBAIC03OCw2ICs3OCw4IEBACiBzdGF0aWMgdm9pZCAqcnRwcHJv eHlfbWFpbih2b2lkICppKTsKIHN0YXRpYyB2b2lkIHJ0cHByb3h5X2tpbGwoIHZvaWQgKTsKIHN0 YXRpYyBpbnQgIHJ0cF9yZWNyZWF0ZV9mZHNldCh2b2lkKTsKK3N0YXRpYyB2b2lkIHJ0cF9zZW5k X2tlZXBhbGl2ZSAoaW50IHJ0cF9wcm94eXRhYmxlX2lkeCk7CitzdGF0aWMgaW50IHNlbmRfa2Vl cGFsaXZlX3BrdChpbnQgc29jaywgY29uc3Qgc3RydWN0IGluX2FkZHIgKmxvY2FsX2FkZHIsIGlu dCBsb2NhbF9wb3J0LCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqcmVtb3RlX2FkZHIsIGludCByZW1v dGVfcG9ydCk7CiBzdGF0aWMgaW50ICBtYXRjaF9zb2NrZXQgKGludCBydHBfcHJveHl0YWJsZV9p ZHgpOwogc3RhdGljIHZvaWQgZXJyb3JfaGFuZGxlciAoaW50IHJ0cF9wcm94eXRhYmxlX2lkeCwg aW50IHNvY2tldF90eXBlKTsKIApAQCAtNDU0LDYgKzQ1NiwxMSBAQAogICAgICAgaWYgKGN1cnJl bnRfdHYudHZfc2VjID4gbGFzdF90di50dl9zZWMpIHsKICAgICAgICAgIGxhc3RfdHYudHZfc2Vj ID0gY3VycmVudF90di50dl9zZWMgKyAxMCA7CiAgICAgICAgICBmb3IgKGk9MDtpPFJUUFBST1hZ X1NJWkU7IGkrKykgeworICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqVHJ5aW5nIHRv IHNlbmQga2VlcC1hbGl2ZSBwYWNrZXQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcnRw X3NlbmRfa2VlcGFsaXZlKGkpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIChydHBf cHJveHl0YWJsZVtpXS5ydHBfcnhfc29jayAhPSAwKSAmJgogICAgICAgICAgICAgICAgICAoKHJ0 cF9wcm94eXRhYmxlW2ldLnRpbWVzdGFtcCtjb25maWd1cmF0aW9uLnJ0cF90aW1lb3V0KSA8IAog ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdHYudHZfc2VjKSkgewpAQCAtNzk2LDEwICs4MDMs MTggQEAKICAgIC8qIHRyeSB0byBmaW5kIHRoZSBtYXRjaGluZyBzb2NrZXQgZm9yIHJldHVybiBw YXRoLiBUaGlzIGhhcyB0byBiZSBkb25lIGZvcgogICAgICogYm90aCBkaXJlY3Rpb25zLCB0aGUg bmV3IHNvY2tldCBhbmQgaWYgb25lIGZvdW5kLCBpdCBtdXN0IGxpbmsgYmFjay4gKi8KICAgIGk9 bWF0Y2hfc29ja2V0KGZyZWVpZHgpOwotICAgaWYgKGk+PTAgJiYgaTxSVFBQUk9YWV9TSVpFKSBq PW1hdGNoX3NvY2tldChpKTsKKyAgIGlmIChpPj0wICYmIGk8UlRQUFJPWFlfU0laRSkgeworICAg ICAgaj1tYXRjaF9zb2NrZXQoaSk7CisgICAgICBydHBfc2VuZF9rZWVwYWxpdmUoaSk7CisgICB9 CiAKICAgIC8qIHByZXBhcmUgRkQgc2V0IGZvciBuZXh0IHNlbGVjdCBvcGVyYXRpb24gKi8KICAg IHJ0cF9yZWNyZWF0ZV9mZHNldCgpOworICAgCisgICAvKgorICAgICogU2VuZGluZyBpbml0aWFs IGtlZXAtYWxpdmUgcGFja2V0IHRvIGtpY2sgTkFUCisgICAgKi8KKyAgIHJ0cF9zZW5kX2tlZXBh bGl2ZShmcmVlaWR4KTsKIAogICAgLyogd2FrZXVwL3NpZ25hbCBydHBfcHJveHl0aHJlYWQgZnJv bSBzZWxlY3QoKSBoaWJlcm5hdGlvbiAqLwogICAgaWYgKCFwdGhyZWFkX2VxdWFsKHJ0cHByb3h5 X3RpZCwgcHRocmVhZF9zZWxmKCkpKQpAQCAtMTAzMiw2ICsxMDQ3LDYyIEBACiAgICByZXR1cm47 CiB9CiAKKy8qCisgKiBydHBfc2VuZF9rZWVwYWxpdmUKKyAqIEp1c3Qgc2VuZHMgZW1wdHkgUlRQ L1JUQ1AgcGFja2V0cyB0byBraWNrLW9mZiBOQVQKKyAqLworc3RhdGljIHZvaWQgcnRwX3NlbmRf a2VlcGFsaXZlIChpbnQgcnRwX3Byb3h5dGFibGVfaWR4KSB7CisgICBjb25zdCBydHBfcHJveHl0 YWJsZV90ICpzcmMsICpkc3Q7CisgICAKKyAgIGRzdCA9IHJ0cF9wcm94eXRhYmxlICsgcnRwX3By b3h5dGFibGVfaWR4OworICAgCisgICBpZihkc3QtPm9wcG9zaXRlX2VudHJ5IDwgMSkKKyAgIHsK KyAgICAgIHJldHVybjsKKyAgIH0KKworICAgc3JjID0gcnRwX3Byb3h5dGFibGUgKyBkc3QtPm9w cG9zaXRlX2VudHJ5IC0gMTsKKyAgIAorICAgaWYoZHN0LT5ydHBfdHhfc29jayA+IDApIHsKKyAg ICAgIHNlbmRfa2VlcGFsaXZlX3BrdChkc3QtPnJ0cF90eF9zb2NrLCAmc3JjLT5sb2NhbF9pcGFk ZHIsIHNyYy0+bG9jYWxfcG9ydCwgJmRzdC0+cmVtb3RlX2lwYWRkciwgZHN0LT5yZW1vdGVfcG9y dCk7CisgICB9CisgICAKKyAgIGlmKGRzdC0+cnRwX2Nvbl90eF9zb2NrID4gMCkgeworICAgICAg c2VuZF9rZWVwYWxpdmVfcGt0KGRzdC0+cnRwX2Nvbl90eF9zb2NrLCAmc3JjLT5sb2NhbF9pcGFk ZHIsIHNyYy0+bG9jYWxfcG9ydCArIDEsICZkc3QtPnJlbW90ZV9pcGFkZHIsIGRzdC0+cmVtb3Rl X3BvcnQgKyAxKTsKKyAgIH0KKyAgIAorfQorCisjZGVmaW5lIFNUUkxDUFkoRFNULCBTUkMsIEJV RlNJWkUpIChzdHJuY3B5KChEU1QpLCAoU1JDKSwgKEJVRlNJWkUpKSwgKERTVClbKEJVRlNJWkUp IC0gMV0gPSAnXDAnLCAoRFNUKSkKKworLyoKKyAqIHNlbmRfa2VlcGFsaXZlX3BrdAorICogSnVz dCBzZW5kcyBlbXB0eSBwYWNrZXQgdG8ga2ljay1vZmYgTkFUCisgKi8KK3N0YXRpYyBpbnQgc2Vu ZF9rZWVwYWxpdmVfcGt0KGludCBzb2NrLCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqbG9jYWxfYWRk ciwgaW50IGxvY2FsX3BvcnQsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpyZW1vdGVfYWRkciwgaW50 IHJlbW90ZV9wb3J0KSB7CisgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworICAgY2hhciBzcmNf YWRkclsxNl0sIGRzdF9hZGRyWzE2XTsKKyAgIAorICAgU1RSTENQWShzcmNfYWRkciwgdXRpbHNf aW5ldF9udG9hKCpsb2NhbF9hZGRyKSwgc2l6ZW9mKHNyY19hZGRyKSk7CisgICBTVFJMQ1BZKGRz dF9hZGRyLCB1dGlsc19pbmV0X250b2EoKnJlbW90ZV9hZGRyKSwgc2l6ZW9mKGRzdF9hZGRyKSk7 CisgICAKKyAgIERFQlVHQyhEQkNMQVNTX1JUUCwiU2VuZGluZyBSVFAga2VlcC1hbGl2ZSBwYWNr ZXQgZnJvbSAlczoldSB0byAlczoldSIsCisgICAgICAgICAgICAgICAgc3JjX2FkZHIsIGxvY2Fs X3BvcnQsIGRzdF9hZGRyLCByZW1vdGVfcG9ydCk7CisgICAKKyAgIG1lbXNldCgmc2luLCAwLCBz aXplb2Yoc2luKSk7CisgICAKKyAgIHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgIG1lbWNw eSgmc2luLnNpbl9hZGRyLCByZW1vdGVfYWRkciwgc2l6ZW9mKHNpbi5zaW5fYWRkcikpOworICAg c2luLnNpbl9wb3J0ID0gaHRvbnMocmVtb3RlX3BvcnQpOworICAgCisgICBpZihzZW5kdG8oc29j aywgTlVMTCwgMCwgMCwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopJnNpbiwgKHNvY2tsZW5fdClz aXplb2Yoc2luKSkgPCAwKSB7CisgICAgICBFUlJPUigiVW5hYmxlIHRvIHNlbmQgUlRQIGtlZXAt YWxpdmUgcGFja2V0IGZyb20gJXM6JWQgdG8gJXM6JWQ6ICVzIiwKKyAgICAgICAgICAgICAgICB1 dGlsc19pbmV0X250b2EoKmxvY2FsX2FkZHIpLCBsb2NhbF9wb3J0LCB1dGlsc19pbmV0X250b2Eo KnJlbW90ZV9hZGRyKSwgcmVtb3RlX3BvcnQsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1 cm4gLTE7CisgICB9CisgICAKKyAgIHJldHVybiAwOworfQogCiAvKgogICogbWF0Y2hfc29ja2V0 Cg== --MP_/tPp.QEg0g7a5HXMVYtA2CuH Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --MP_/tPp.QEg0g7a5HXMVYtA2CuH Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Siproxd-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/siproxd-users --MP_/tPp.QEg0g7a5HXMVYtA2CuH--