summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author杨威 <[email protected]>2024-10-11 06:08:50 +0000
committer杨威 <[email protected]>2024-10-11 06:08:50 +0000
commit70d21f28c36fc93280352c9284de6529afcbe5be (patch)
tree4bfc3669ca0da512ceb897167feda65dcaefa1af
parent2e35a795285499e064b91435ad90777f90419f68 (diff)
Rebase dev 2.0
-rw-r--r--CMakeLists.txt2
-rw-r--r--conf/stellar.toml29
-rw-r--r--decoders/CMakeLists.txt11
-rw-r--r--decoders/appid/CMakeLists.txt1
-rw-r--r--decoders/appid/appid.c49
-rw-r--r--decoders/appid/appid_internal.h25
-rw-r--r--decoders/lpi/CMakeLists.txt12
-rw-r--r--decoders/lpi/lpi_plugin.cpp783
-rw-r--r--decoders/lpi/lpi_plugin.h227
-rw-r--r--decoders/lpi/openvpn_ident.cpp183
-rw-r--r--decoders/lpi/quic_ident.cpp237
-rw-r--r--decoders/lpi/version.map10
-rw-r--r--decoders/lpi_plus/.gitignore (renamed from decoders/lpi/.gitignore)0
-rw-r--r--decoders/lpi_plus/CMakeLists.txt13
-rw-r--r--decoders/lpi_plus/libprotoident/CMakeLists.txt (renamed from decoders/lpi/libprotoident/CMakeLists.txt)0
-rw-r--r--decoders/lpi_plus/libprotoident/libprotoident.cc (renamed from decoders/lpi/libprotoident/libprotoident.cc)4
-rw-r--r--decoders/lpi_plus/libprotoident/libprotoident.h (renamed from decoders/lpi/libprotoident/libprotoident.h)17
-rw-r--r--decoders/lpi_plus/libprotoident/proto_common.cc (renamed from decoders/lpi/libprotoident/proto_common.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/proto_common.h (renamed from decoders/lpi/libprotoident/proto_common.h)0
-rw-r--r--decoders/lpi_plus/libprotoident/proto_manager.cc (renamed from decoders/lpi/libprotoident/proto_manager.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/proto_manager.h (renamed from decoders/lpi/libprotoident/proto_manager.h)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_300heroes.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_300heroes.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_360safeguard.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_360safeguard.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_4d.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_4d.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_acestream.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_acestream.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_afp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_afp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_airdroid.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_airdroid.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_airmedia.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_airmedia.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_akamai.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_akamai.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_amp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_amp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_antcoin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_antcoin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_appearin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_appearin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_apple_push.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_apple_push.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ares.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ares.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_badbaidu.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_badbaidu.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_baofeng_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_baofeng_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_beam.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_beam.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_bitcoin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_bitcoin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_bitextend.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_bitextend.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_bittorrent.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_bittorrent.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_blackdesert.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_blackdesert.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_blizzard.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_blizzard.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_btsync.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_btsync.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_bwsyncandshare.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_bwsyncandshare.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_cacaoweb.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_cacaoweb.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_cgp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_cgp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_chatango.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_chatango.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_cisco_vpn.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_cisco_vpn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_clashofclans.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_clashofclans.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_classin_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_classin_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_clubbox.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_clubbox.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_cod_waw.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_cod_waw.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_conquer.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_conquer.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_crashplan.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_crashplan.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_crossfire_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_crossfire_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_cryptic.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_cryptic.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_cvs.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_cvs.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_dahua_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_dahua_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_dash.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_dash.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_dell_backup.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_dell_backup.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_destiny.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_destiny.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_diablo3.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_diablo3.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_dianping_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_dianping_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_directconnect.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_directconnect.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_dnf.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_dnf.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_dns.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_dns.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_dogecoin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_dogecoin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_douyu.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_douyu.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_douyu_chat.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_douyu_chat.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_duelingnetwork.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_duelingnetwork.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_dvrns.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_dvrns.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_dxp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_dxp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ea_games.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ea_games.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_emule.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_emule.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ethernetip.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ethernetip.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_eye.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_eye.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_facebook_turn.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_facebook_turn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_fb_message.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_fb_message.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_fbcdn_ssl.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_fbcdn_ssl.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ffxiv.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ffxiv.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_filenori.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_filenori.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_flash.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_flash.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_fliggy.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_fliggy.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_fring.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_fring.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ftpcontrol.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ftpcontrol.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ftpdata.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ftpdata.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_fuckcoin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_fuckcoin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_funshion.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_funshion.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_gamespy.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_gamespy.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_gcafe_updater.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_gcafe_updater.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_giop.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_giop.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_git.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_git.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_glupteba.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_glupteba.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_gnutella.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_gnutella.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_goku.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_goku.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_googlehangouts.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_googlehangouts.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_graalonlineera.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_graalonlineera.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_guildwars2.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_guildwars2.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_hamachi.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_hamachi.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_harveys.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_harveys.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_hearthstone.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_hearthstone.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_hola.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_hola.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_hots_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_hots_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_http.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_http.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_http_badport.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_http_badport.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_http_nonstandard.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_http_nonstandard.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_http_tunnel.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_http_tunnel.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_https.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_https.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ica.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ica.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_icep.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_icep.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_id.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_id.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_idrivesync.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_idrivesync.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ihexin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ihexin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_imap.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_imap.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_imaps.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_imaps.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_imesh.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_imesh.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_invalid.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_invalid.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_invalid_bittorrent.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_invalid_bittorrent.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_invalid_http.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_invalid_http.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_invalid_pop.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_invalid_pop.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_invalid_smtp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_invalid_smtp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ipfs.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ipfs.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ipop.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ipop.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ipsharkk.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ipsharkk.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_irc.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_irc.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_java.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_java.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_jedi.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_jedi.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_jx3online.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_jx3online.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_kakao.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_kakao.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_kankan_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_kankan_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_kaseya.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_kaseya.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_kaspersky.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_kaspersky.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_kik.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_kik.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_kingofglory_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_kingofglory_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_kuaibo.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_kuaibo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ldap.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ldap.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_lifeforge.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_lifeforge.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_line.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_line.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_litecoin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_litecoin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_llp2p.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_llp2p.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_maplestory_china.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_maplestory_china.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_maxicloud.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_maxicloud.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_message4u.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_message4u.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_minecraft.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_minecraft.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mitglieder.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mitglieder.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mms.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mms.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mongo.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mongo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mp2p.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mp2p.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_msn.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_msn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_msnc.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_msnc.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_msnv.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_msnv.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_munin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_munin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mysql.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mysql.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mystery_8000.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mystery_8000.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mystery_9000.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mystery_9000.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mystery_conn.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mystery_conn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mystery_iG.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mystery_iG.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mystery_pspr.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mystery_pspr.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mystery_rxxf.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mystery_rxxf.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mystery_symantec.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mystery_symantec.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_mzinga.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_mzinga.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_naverp2p.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_naverp2p.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ncsoft.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ncsoft.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ndt_tput.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ndt_tput.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_netbios.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_netbios.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_netcat_cctv.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_netcat_cctv.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_netmfp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_netmfp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_nntp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_nntp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_nntps.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_nntps.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_nofirstpkt.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_nofirstpkt.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_nomachine.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_nomachine.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_nopayload.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_nopayload.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_norton_backup.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_norton_backup.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_notes_rpc.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_notes_rpc.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_nsq.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_nsq.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_omegle.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_omegle.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_openvpn.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_openvpn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ourworld.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ourworld.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_palringo.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_palringo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_paltalk.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_paltalk.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_pandatv.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_pandatv.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_pando.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_pando.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_pathofexile.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_pathofexile.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_pdbox.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_pdbox.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_pop3.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_pop3.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_pop3s.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_pop3s.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_postgresql.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_postgresql.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_pptp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_pptp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_psn_store.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_psn_store.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_qcloud_ilvb.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_qcloud_ilvb.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_qq_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_qq_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_qqdownload.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_qqdownload.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_qqlive_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_qqlive_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_qqspeedmobile_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_qqspeedmobile_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_qvod.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_qvod.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rabbitmq.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rabbitmq.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ragnarokonline.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ragnarokonline.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_razor.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_razor.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rbls.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rbls.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rdp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rdp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_realmofthemadgod.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_realmofthemadgod.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_realvnc.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_realvnc.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rejection.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rejection.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_relay.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_relay.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_remote_manipulator.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_remote_manipulator.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_revolver_nblbt.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_revolver_nblbt.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rfb.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rfb.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rpcscan.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rpcscan.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rrtv.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rrtv.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rsync.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rsync.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rtmp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rtmp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_rtsp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_rtsp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_runescape.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_runescape.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_s7comm.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_s7comm.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_saprouter.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_saprouter.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_saszombieassault4.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_saszombieassault4.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_second_life.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_second_life.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_shoutcast.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_shoutcast.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_silkroadonline.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_silkroadonline.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_sip.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_sip.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_skyforge.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_skyforge.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_skype_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_skype_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_smb.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_smb.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_smite_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_smite_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_smtp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_smtp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_smtps.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_smtps.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_socks4.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_socks4.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_socks5.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_socks5.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_spdy.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_spdy.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_speedify.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_speedify.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_speedin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_speedin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_speedtest.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_speedtest.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_spotify.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_spotify.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ssh.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ssh.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ssjj.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ssjj.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_ssl.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_ssl.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_steam.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_steam.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_stratum.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_stratum.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_stun.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_stun.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_supl.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_supl.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_svn.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_svn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_talesrunner.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_talesrunner.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tankionline.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tankionline.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tankix.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tankix.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_taobao.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_taobao.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tds.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tds.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_teamviewer.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_teamviewer.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_telecomkey.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_telecomkey.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_telegram.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_telegram.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_telnet.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_telnet.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_telnet_exploit.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_telnet_exploit.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tencent_games.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tencent_games.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tenfivecoin.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tenfivecoin.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tensafe.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tensafe.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tera.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tera.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tetrisonline.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tetrisonline.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_thedivision.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_thedivision.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tip.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tip.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tor.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tor.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_tpkt.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_tpkt.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_trackmania.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_trackmania.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_transocks.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_transocks.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_trion.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_trion.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_trojan_win32_generic_sb.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_trojan_win32_generic_sb.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_trojan_zeroaccess.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_trojan_zeroaccess.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_twitcasting.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_twitcasting.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_twitch_irc.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_twitch_irc.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_utherverse.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_utherverse.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_vainglory.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_vainglory.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_vhdp2p.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_vhdp2p.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_viber.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_viber.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_vmware.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_vmware.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_vodlocker.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_vodlocker.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_vpnrobot_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_vpnrobot_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_vpnunlimited_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_vpnunlimited_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_warcraft3.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_warcraft3.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_web_junk.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_web_junk.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_webex_stun.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_webex_stun.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_weblogic.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_weblogic.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_wechat.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_wechat.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_weibo.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_weibo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_weiqi.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_weiqi.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_whatsapp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_whatsapp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_whois.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_whois.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_winmx.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_winmx.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_wizard101.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_wizard101.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_wns.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_wns.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_wow.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_wow.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_wuala.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_wuala.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_xiami.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_xiami.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_xmpp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_xmpp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_xmpps.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_xmpps.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_xunlei.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_xunlei.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_xunlei_accel.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_xunlei_accel.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_xymon.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_xymon.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_yahoo.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_yahoo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_yahoo_error.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_yahoo_error.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_yahoo_games.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_yahoo_games.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_yahoo_webcam.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_yahoo_webcam.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_youku.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_youku.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_yy_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_yy_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_zabbix.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_zabbix.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_zero.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_zero.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_zoom_tcp.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_zoom_tcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/lpi_zynga.cc (renamed from decoders/lpi/libprotoident/tcp/lpi_zynga.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/tcp/tcp_protocols.h (renamed from decoders/lpi/libprotoident/tcp/tcp_protocols.h)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_360cn.cc (renamed from decoders/lpi/libprotoident/udp/lpi_360cn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_360p2p.cc (renamed from decoders/lpi/libprotoident/udp/lpi_360p2p.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_aachen_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_aachen_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_acercloud.cc (renamed from decoders/lpi/libprotoident/udp/lpi_acercloud.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_akamai.cc (renamed from decoders/lpi/libprotoident/udp/lpi_akamai.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_akamai_transfer.cc (renamed from decoders/lpi/libprotoident/udp/lpi_akamai_transfer.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_amanda.cc (renamed from decoders/lpi/libprotoident/udp/lpi_amanda.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_apple_facetime_init.cc (renamed from decoders/lpi/libprotoident/udp/lpi_apple_facetime_init.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ard.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ard.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ares.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ares.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ark.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ark.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_arma3_server.cc (renamed from decoders/lpi/libprotoident/udp/lpi_arma3_server.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_arma_server.cc (renamed from decoders/lpi/libprotoident/udp/lpi_arma_server.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_artcp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_artcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_assettocorsa.cc (renamed from decoders/lpi/libprotoident/udp/lpi_assettocorsa.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_avast_secure_dns.cc (renamed from decoders/lpi/libprotoident/udp/lpi_avast_secure_dns.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_backweb.cc (renamed from decoders/lpi/libprotoident/udp/lpi_backweb.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_bacnet.cc (renamed from decoders/lpi/libprotoident/udp/lpi_bacnet.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_baiduyun_p2p.cc (renamed from decoders/lpi/libprotoident/udp/lpi_baiduyun_p2p.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_baofeng_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_baofeng_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_battlefield.cc (renamed from decoders/lpi/libprotoident/udp/lpi_battlefield.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_bjnp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_bjnp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_bmdp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_bmdp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_btsync.cc (renamed from decoders/lpi/libprotoident/udp/lpi_btsync.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_cacaoweb_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_cacaoweb_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_canon_mfnp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_canon_mfnp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_chargen_exploit.cc (renamed from decoders/lpi/libprotoident/udp/lpi_chargen_exploit.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_checkpoint_rdp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_checkpoint_rdp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_chivalry.cc (renamed from decoders/lpi/libprotoident/udp/lpi_chivalry.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_cip_io.cc (renamed from decoders/lpi/libprotoident/udp/lpi_cip_io.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_cirn.cc (renamed from decoders/lpi/libprotoident/udp/lpi_cirn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_cisco_ipsec.cc (renamed from decoders/lpi/libprotoident/udp/lpi_cisco_ipsec.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_cisco_sslvpn.cc (renamed from decoders/lpi/libprotoident/udp/lpi_cisco_sslvpn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_classin_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_classin_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_cloudflare_warp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_cloudflare_warp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_cod.cc (renamed from decoders/lpi/libprotoident/udp/lpi_cod.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_codmobile.cc (renamed from decoders/lpi/libprotoident/udp/lpi_codmobile.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_combatarms.cc (renamed from decoders/lpi/libprotoident/udp/lpi_combatarms.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_combatarms_p2p.cc (renamed from decoders/lpi/libprotoident/udp/lpi_combatarms_p2p.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_contract_wars.cc (renamed from decoders/lpi/libprotoident/udp/lpi_contract_wars.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_crossfire.cc (renamed from decoders/lpi/libprotoident/udp/lpi_crossfire.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_crossout.cc (renamed from decoders/lpi/libprotoident/udp/lpi_crossout.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_csgo.cc (renamed from decoders/lpi/libprotoident/udp/lpi_csgo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_csoriginal.cc (renamed from decoders/lpi/libprotoident/udp/lpi_csoriginal.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dahua.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dahua.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_db2.cc (renamed from decoders/lpi/libprotoident/udp/lpi_db2.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dcc.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dcc.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_demonware.cc (renamed from decoders/lpi/libprotoident/udp/lpi_demonware.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_destiny_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_destiny_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dhcp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dhcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dht_dict.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dht_dict.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dht_other.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dht_other.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_diablo2.cc (renamed from decoders/lpi/libprotoident/udp/lpi_diablo2.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dianping_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dianping_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dianshijia.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dianshijia.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_directconnect.cc (renamed from decoders/lpi/libprotoident/udp/lpi_directconnect.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_discord.cc (renamed from decoders/lpi/libprotoident/udp/lpi_discord.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dns.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dns.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dota2.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dota2.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_doyo.cc (renamed from decoders/lpi/libprotoident/udp/lpi_doyo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_driveshare.cc (renamed from decoders/lpi/libprotoident/udp/lpi_driveshare.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_dtls.cc (renamed from decoders/lpi/libprotoident/udp/lpi_dtls.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_emule.cc (renamed from decoders/lpi/libprotoident/udp/lpi_emule.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_emule_weak.cc (renamed from decoders/lpi/libprotoident/udp/lpi_emule_weak.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_epson.cc (renamed from decoders/lpi/libprotoident/udp/lpi_epson.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_eso.cc (renamed from decoders/lpi/libprotoident/udp/lpi_eso.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_esp_encap.cc (renamed from decoders/lpi/libprotoident/udp/lpi_esp_encap.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ethernetip.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ethernetip.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_eye.cc (renamed from decoders/lpi/libprotoident/udp/lpi_eye.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_fasp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_fasp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_feitwo.cc (renamed from decoders/lpi/libprotoident/udp/lpi_feitwo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_forticlient_sslvpn.cc (renamed from decoders/lpi/libprotoident/udp/lpi_forticlient_sslvpn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_fortinet.cc (renamed from decoders/lpi/libprotoident/udp/lpi_fortinet.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_foscam.cc (renamed from decoders/lpi/libprotoident/udp/lpi_foscam.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_freechal.cc (renamed from decoders/lpi/libprotoident/udp/lpi_freechal.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_freefire.cc (renamed from decoders/lpi/libprotoident/udp/lpi_freefire.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_funshion.cc (renamed from decoders/lpi/libprotoident/udp/lpi_funshion.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_gamespy.cc (renamed from decoders/lpi/libprotoident/udp/lpi_gamespy.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ganglia.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ganglia.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_gangsofspace.cc (renamed from decoders/lpi/libprotoident/udp/lpi_gangsofspace.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_garena.cc (renamed from decoders/lpi/libprotoident/udp/lpi_garena.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_gearsofwar.cc (renamed from decoders/lpi/libprotoident/udp/lpi_gearsofwar.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_gnutella.cc (renamed from decoders/lpi/libprotoident/udp/lpi_gnutella.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_gnutella2.cc (renamed from decoders/lpi/libprotoident/udp/lpi_gnutella2.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_gnutella_weak.cc (renamed from decoders/lpi/libprotoident/udp/lpi_gnutella_weak.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_gotomeeting.cc (renamed from decoders/lpi/libprotoident/udp/lpi_gotomeeting.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_gprs_tunnel.cc (renamed from decoders/lpi/libprotoident/udp/lpi_gprs_tunnel.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_gsm.cc (renamed from decoders/lpi/libprotoident/udp/lpi_gsm.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_h1z1.cc (renamed from decoders/lpi/libprotoident/udp/lpi_h1z1.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_halflife.cc (renamed from decoders/lpi/libprotoident/udp/lpi_halflife.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_haloonline.cc (renamed from decoders/lpi/libprotoident/udp/lpi_haloonline.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_hamachi.cc (renamed from decoders/lpi/libprotoident/udp/lpi_hamachi.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_heliborne.cc (renamed from decoders/lpi/libprotoident/udp/lpi_heliborne.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_heroes_generals.cc (renamed from decoders/lpi/libprotoident/udp/lpi_heroes_generals.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_heroesevolved.cc (renamed from decoders/lpi/libprotoident/udp/lpi_heroesevolved.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_hollachat.cc (renamed from decoders/lpi/libprotoident/udp/lpi_hollachat.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_hots.cc (renamed from decoders/lpi/libprotoident/udp/lpi_hots.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_icp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_icp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_imesh.cc (renamed from decoders/lpi/libprotoident/udp/lpi_imesh.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ipmsg.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ipmsg.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ipv6.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ipv6.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_isakmp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_isakmp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_jedi.cc (renamed from decoders/lpi/libprotoident/udp/lpi_jedi.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_jedi_academy.cc (renamed from decoders/lpi/libprotoident/udp/lpi_jedi_academy.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_kademlia.cc (renamed from decoders/lpi/libprotoident/udp/lpi_kademlia.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_kankan.cc (renamed from decoders/lpi/libprotoident/udp/lpi_kankan.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_kaspersky.cc (renamed from decoders/lpi/libprotoident/udp/lpi_kaspersky.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_kazaa.cc (renamed from decoders/lpi/libprotoident/udp/lpi_kazaa.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_kingofglory_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_kingofglory_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_kuguo.cc (renamed from decoders/lpi/libprotoident/udp/lpi_kuguo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_l2tp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_l2tp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_lansync.cc (renamed from decoders/lpi/libprotoident/udp/lpi_lansync.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ldap_ad.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ldap_ad.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_line_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_line_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_linkproof.cc (renamed from decoders/lpi/libprotoident/udp/lpi_linkproof.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_loadout.cc (renamed from decoders/lpi/libprotoident/udp/lpi_loadout.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_lol.cc (renamed from decoders/lpi/libprotoident/udp/lpi_lol.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_mdns.cc (renamed from decoders/lpi/libprotoident/udp/lpi_mdns.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_merakicloud.cc (renamed from decoders/lpi/libprotoident/udp/lpi_merakicloud.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_moh.cc (renamed from decoders/lpi/libprotoident/udp/lpi_moh.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_moonhunters.cc (renamed from decoders/lpi/libprotoident/udp/lpi_moonhunters.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_mp2p.cc (renamed from decoders/lpi/libprotoident/udp/lpi_mp2p.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_msn_cache.cc (renamed from decoders/lpi/libprotoident/udp/lpi_msn_cache.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_msn_video.cc (renamed from decoders/lpi/libprotoident/udp/lpi_msn_video.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_msoffice_mac.cc (renamed from decoders/lpi/libprotoident/udp/lpi_msoffice_mac.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_mta.cc (renamed from decoders/lpi/libprotoident/udp/lpi_mta.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_n2ping.cc (renamed from decoders/lpi/libprotoident/udp/lpi_n2ping.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_natpmp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_natpmp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_netbios.cc (renamed from decoders/lpi/libprotoident/udp/lpi_netbios.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_netcat_cctv_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_netcat_cctv_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_netcore_scan.cc (renamed from decoders/lpi/libprotoident/udp/lpi_netcore_scan.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_netflow.cc (renamed from decoders/lpi/libprotoident/udp/lpi_netflow.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_newerth.cc (renamed from decoders/lpi/libprotoident/udp/lpi_newerth.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_nintendo.cc (renamed from decoders/lpi/libprotoident/udp/lpi_nintendo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_noction.cc (renamed from decoders/lpi/libprotoident/udp/lpi_noction.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_noe.cc (renamed from decoders/lpi/libprotoident/udp/lpi_noe.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_nopayload.cc (renamed from decoders/lpi/libprotoident/udp/lpi_nopayload.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_norton.cc (renamed from decoders/lpi/libprotoident/udp/lpi_norton.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ntp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ntp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ntp_reflect.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ntp_reflect.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_nvidia_gamestream.cc (renamed from decoders/lpi/libprotoident/udp/lpi_nvidia_gamestream.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_nwn.cc (renamed from decoders/lpi/libprotoident/udp/lpi_nwn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_opaserv.cc (renamed from decoders/lpi/libprotoident/udp/lpi_opaserv.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_openvpn.cc (renamed from decoders/lpi/libprotoident/udp/lpi_openvpn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_orbit.cc (renamed from decoders/lpi/libprotoident/udp/lpi_orbit.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_overwatch.cc (renamed from decoders/lpi/libprotoident/udp/lpi_overwatch.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_paladins.cc (renamed from decoders/lpi/libprotoident/udp/lpi_paladins.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_pando.cc (renamed from decoders/lpi/libprotoident/udp/lpi_pando.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_panipani.cc (renamed from decoders/lpi/libprotoident/udp/lpi_panipani.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_planetside2.cc (renamed from decoders/lpi/libprotoident/udp/lpi_planetside2.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_portmap_rpc.cc (renamed from decoders/lpi/libprotoident/udp/lpi_portmap_rpc.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_pplive.cc (renamed from decoders/lpi/libprotoident/udp/lpi_pplive.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ppstream.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ppstream.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_probable_gnutella.cc (renamed from decoders/lpi/libprotoident/udp/lpi_probable_gnutella.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ps4_remoteplay.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ps4_remoteplay.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_psn.cc (renamed from decoders/lpi/libprotoident/udp/lpi_psn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_punkbuster.cc (renamed from decoders/lpi/libprotoident/udp/lpi_punkbuster.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_pyzor.cc (renamed from decoders/lpi/libprotoident/udp/lpi_pyzor.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_qq.cc (renamed from decoders/lpi/libprotoident/udp/lpi_qq.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_qqlive.cc (renamed from decoders/lpi/libprotoident/udp/lpi_qqlive.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_qqpcmgr.cc (renamed from decoders/lpi/libprotoident/udp/lpi_qqpcmgr.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_qqspeedmobile_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_qqspeedmobile_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_quake.cc (renamed from decoders/lpi/libprotoident/udp/lpi_quake.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_quic.cc (renamed from decoders/lpi/libprotoident/udp/lpi_quic.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_qvod_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_qvod_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_radius.cc (renamed from decoders/lpi/libprotoident/udp/lpi_radius.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_raknet.cc (renamed from decoders/lpi/libprotoident/udp/lpi_raknet.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ramseydash.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ramseydash.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_rdp_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_rdp_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_real.cc (renamed from decoders/lpi/libprotoident/udp/lpi_real.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_risingstorm.cc (renamed from decoders/lpi/libprotoident/udp/lpi_risingstorm.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_robocraft.cc (renamed from decoders/lpi/libprotoident/udp/lpi_robocraft.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_rocket_league.cc (renamed from decoders/lpi/libprotoident/udp/lpi_rocket_league.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_rrshare.cc (renamed from decoders/lpi/libprotoident/udp/lpi_rrshare.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_rtcp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_rtcp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_rtmfp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_rtmfp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_rtp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_rtp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_rulesofsurvival.cc (renamed from decoders/lpi/libprotoident/udp/lpi_rulesofsurvival.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_sanandreas_mp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_sanandreas_mp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_second_life.cc (renamed from decoders/lpi/libprotoident/udp/lpi_second_life.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_serialnumberd.cc (renamed from decoders/lpi/libprotoident/udp/lpi_serialnumberd.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_sip.cc (renamed from decoders/lpi/libprotoident/udp/lpi_sip.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_skype.cc (renamed from decoders/lpi/libprotoident/udp/lpi_skype.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_slp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_slp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_smite.cc (renamed from decoders/lpi/libprotoident/udp/lpi_smite.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_snapvpn.cc (renamed from decoders/lpi/libprotoident/udp/lpi_snapvpn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_snmp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_snmp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_sopcast.cc (renamed from decoders/lpi/libprotoident/udp/lpi_sopcast.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_spamfighter.cc (renamed from decoders/lpi/libprotoident/udp/lpi_spamfighter.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_spotify_bcast.cc (renamed from decoders/lpi/libprotoident/udp/lpi_spotify_bcast.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_sql_worm.cc (renamed from decoders/lpi/libprotoident/udp/lpi_sql_worm.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ssdp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ssdp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_starcitizen.cc (renamed from decoders/lpi/libprotoident/udp/lpi_starcitizen.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_starcraft.cc (renamed from decoders/lpi/libprotoident/udp/lpi_starcraft.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_starleaf.cc (renamed from decoders/lpi/libprotoident/udp/lpi_starleaf.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_steam.cc (renamed from decoders/lpi/libprotoident/udp/lpi_steam.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_steam_inhomebroadcast.cc (renamed from decoders/lpi/libprotoident/udp/lpi_steam_inhomebroadcast.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_steam_localbroadcast.cc (renamed from decoders/lpi/libprotoident/udp/lpi_steam_localbroadcast.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_steamfriends.cc (renamed from decoders/lpi/libprotoident/udp/lpi_steamfriends.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_storm_worm.cc (renamed from decoders/lpi/libprotoident/udp/lpi_storm_worm.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_stun.cc (renamed from decoders/lpi/libprotoident/udp/lpi_stun.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_syslog.cc (renamed from decoders/lpi/libprotoident/udp/lpi_syslog.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_talesrunner_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_talesrunner_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_teamspeak.cc (renamed from decoders/lpi/libprotoident/udp/lpi_teamspeak.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_teamviewer.cc (renamed from decoders/lpi/libprotoident/udp/lpi_teamviewer.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_teredo.cc (renamed from decoders/lpi/libprotoident/udp/lpi_teredo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_tf2.cc (renamed from decoders/lpi/libprotoident/udp/lpi_tf2.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_tftp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_tftp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_thecrew.cc (renamed from decoders/lpi/libprotoident/udp/lpi_thecrew.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_thq.cc (renamed from decoders/lpi/libprotoident/udp/lpi_thq.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_torchlight2.cc (renamed from decoders/lpi/libprotoident/udp/lpi_torchlight2.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_tox.cc (renamed from decoders/lpi/libprotoident/udp/lpi_tox.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_traceroute.cc (renamed from decoders/lpi/libprotoident/udp/lpi_traceroute.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_tremulous.cc (renamed from decoders/lpi/libprotoident/udp/lpi_tremulous.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_turbovpn.cc (renamed from decoders/lpi/libprotoident/udp/lpi_turbovpn.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_tvants.cc (renamed from decoders/lpi/libprotoident/udp/lpi_tvants.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ubisoft_games.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ubisoft_games.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_umeye.cc (renamed from decoders/lpi/libprotoident/udp/lpi_umeye.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_unreal.cc (renamed from decoders/lpi/libprotoident/udp/lpi_unreal.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_ventrilo.cc (renamed from decoders/lpi/libprotoident/udp/lpi_ventrilo.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_viber.cc (renamed from decoders/lpi/libprotoident/udp/lpi_viber.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_vivox.cc (renamed from decoders/lpi/libprotoident/udp/lpi_vivox.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_vpnmaster.cc (renamed from decoders/lpi/libprotoident/udp/lpi_vpnmaster.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_vpnrobot_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_vpnrobot_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_vxworks_exploit.cc (renamed from decoders/lpi/libprotoident/udp/lpi_vxworks_exploit.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_warthunder.cc (renamed from decoders/lpi/libprotoident/udp/lpi_warthunder.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_webex.cc (renamed from decoders/lpi/libprotoident/udp/lpi_webex.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_wechat_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_wechat_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_winmessage.cc (renamed from decoders/lpi/libprotoident/udp/lpi_winmessage.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_wireguard.cc (renamed from decoders/lpi/libprotoident/udp/lpi_wireguard.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_wolfet.cc (renamed from decoders/lpi/libprotoident/udp/lpi_wolfet.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_worm_22105.cc (renamed from decoders/lpi/libprotoident/udp/lpi_worm_22105.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_xfire_p2p.cc (renamed from decoders/lpi/libprotoident/udp/lpi_xfire_p2p.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_xlsp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_xlsp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_xunlei.cc (renamed from decoders/lpi/libprotoident/udp/lpi_xunlei.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_xunlei_jsq.cc (renamed from decoders/lpi/libprotoident/udp/lpi_xunlei_jsq.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_xunyou.cc (renamed from decoders/lpi/libprotoident/udp/lpi_xunyou.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_youdao_dict.cc (renamed from decoders/lpi/libprotoident/udp/lpi_youdao_dict.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_youku.cc (renamed from decoders/lpi/libprotoident/udp/lpi_youku.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_yuanfudao.cc (renamed from decoders/lpi/libprotoident/udp/lpi_yuanfudao.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_yy_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_yy_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_zalo_call.cc (renamed from decoders/lpi/libprotoident/udp/lpi_zalo_call.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_zeroaccess_udp.cc (renamed from decoders/lpi/libprotoident/udp/lpi_zeroaccess_udp.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/lpi_zoom.cc (renamed from decoders/lpi/libprotoident/udp/lpi_zoom.cc)0
-rw-r--r--decoders/lpi_plus/libprotoident/udp/udp_protocols.h (renamed from decoders/lpi/libprotoident/udp/udp_protocols.h)0
-rw-r--r--decoders/lpi_plus/libprotoident/version.map (renamed from decoders/lpi/libprotoident/version.map)0
-rw-r--r--decoders/lpi_plus/lpi_plus.h6
-rw-r--r--decoders/lpi_plus/lpip_extend.c558
-rw-r--r--decoders/lpi_plus/lpip_extend.h39
-rw-r--r--decoders/lpi_plus/lpip_module.c392
-rw-r--r--decoders/lpi_plus/version.map11
-rw-r--r--include/stellar/appid.h31
-rw-r--r--include/stellar/module_manager.h3
-rw-r--r--include/stellar/packet_manager.h4
-rw-r--r--include/stellar/session_manager.h4
-rw-r--r--include/stellar/stellar.h2
-rw-r--r--infra/CMakeLists.txt2
-rw-r--r--infra/mq/mq.c2
-rw-r--r--infra/mq/mq_internal.h2
-rw-r--r--infra/mq/test/gtest_mq_main.cpp2
-rw-r--r--infra/packet_manager/packet_manager.c14
-rw-r--r--infra/session_manager/session_manager.c21
-rw-r--r--infra/session_manager/session_manager_runtime.c10
-rw-r--r--infra/stellar_core.c17
-rw-r--r--infra/version.map24
-rw-r--r--test/CMakeLists.txt2
-rw-r--r--test/lpi_plugin/gtest_lpi_plugin.cpp176
-rw-r--r--test/lpi_plugin/test_config/spec.toml11
-rw-r--r--test/lpi_plus/CMakeLists.txt (renamed from test/lpi_plugin/CMakeLists.txt)16
-rw-r--r--test/lpi_plus/gtest_lpip.h16
-rw-r--r--test/lpi_plus/gtest_lpip_main.cpp (renamed from test/lpi_plugin/gtest_lpi_main.cpp)53
-rw-r--r--test/lpi_plus/gtest_lpip_module.c182
-rw-r--r--test/lpi_plus/test_config/spec.toml11
-rw-r--r--test/lpi_plus/test_config/tsg_l7_protocol.conf (renamed from test/lpi_plugin/test_config/tsg_l7_protocol.conf)35
-rw-r--r--test/lpi_plus/test_expect/app_pcap.json (renamed from test/lpi_plugin/test_expect/app_pcap.json)0
-rw-r--r--test/lpi_plus/test_expect/dns_pcap.json (renamed from test/lpi_plugin/test_expect/dns_pcap.json)0
-rw-r--r--test/lpi_plus/test_expect/empty_array.json (renamed from test/lpi_plugin/test_expect/empty_array.json)0
-rw-r--r--test/lpi_plus/test_expect/mixed_pcap.json (renamed from test/lpi_plugin/test_expect/mixed_pcap.json)0
-rw-r--r--test/lpi_plus/test_expect/openvpn_pcap.json (renamed from test/lpi_plugin/test_expect/openvpn_pcap.json)0
-rw-r--r--test/lpi_plus/test_expect/ppp_pcap.json (renamed from test/lpi_plugin/test_expect/ppp_pcap.json)0
-rw-r--r--test/lpi_plus/test_expect/socks_pcap.json (renamed from test/lpi_plugin/test_expect/socks_pcap.json)4
-rw-r--r--test/lpi_plus/test_pcap/app_pcap/1-qq_59361.pcap (renamed from test/lpi_plugin/test_pcap/app_pcap/1-qq_59361.pcap)bin789454 -> 789454 bytes
-rw-r--r--test/lpi_plus/test_pcap/app_pcap/2-qq_8758.pcap (renamed from test/lpi_plugin/test_pcap/app_pcap/2-qq_8758.pcap)bin1042 -> 1042 bytes
-rw-r--r--test/lpi_plus/test_pcap/app_pcap/3-wechat_51876.pcap (renamed from test/lpi_plugin/test_pcap/app_pcap/3-wechat_51876.pcap)bin1213414 -> 1213414 bytes
-rw-r--r--test/lpi_plus/test_pcap/app_pcap/4-wechat_8080.pcap (renamed from test/lpi_plugin/test_pcap/app_pcap/4-wechat_8080.pcap)bin25566 -> 25566 bytes
-rw-r--r--test/lpi_plus/test_pcap/app_pcap/5-wireguard.pcap (renamed from test/lpi_plugin/test_pcap/app_pcap/5-wireguard.pcap)bin38948 -> 38948 bytes
-rw-r--r--test/lpi_plus/test_pcap/app_pcap/6-wireguard1.pcap (renamed from test/lpi_plugin/test_pcap/app_pcap/6-wireguard1.pcap)bin41484 -> 41484 bytes
-rw-r--r--test/lpi_plus/test_pcap/app_pcap/7-wireguard2.pcap (renamed from test/lpi_plugin/test_pcap/app_pcap/7-wireguard2.pcap)bin1740 -> 1740 bytes
-rw-r--r--test/lpi_plus/test_pcap/dns_pcap/1-dns-tcp-single-53-124.88.175.201-8.8.8.8.pcap (renamed from test/lpi_plugin/test_pcap/dns_pcap/1-dns-tcp-single-53-124.88.175.201-8.8.8.8.pcap)bin22503 -> 22503 bytes
-rw-r--r--test/lpi_plus/test_pcap/dns_pcap/2-dns-tcp-single-53-60.13.179.249-8.8.8.8.pcap (renamed from test/lpi_plugin/test_pcap/dns_pcap/2-dns-tcp-single-53-60.13.179.249-8.8.8.8.pcap)bin17860 -> 17860 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/01-http-not-ftp.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/01-http-not-ftp.pcap)bin14400 -> 14400 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/02-stun-rtcp-rtp-22005-8000-39.144.206.199-117.156.19.31.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/02-stun-rtcp-rtp-22005-8000-39.144.206.199-117.156.19.31.pcap)bin19726479 -> 19726479 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/03-ftp-37923-21121-117.145.115.74-218.31.124.234.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/03-ftp-37923-21121-117.145.115.74-218.31.124.234.pcap)bin592 -> 592 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/04-mail_smtp_port_18867_25.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/04-mail_smtp_port_18867_25.pcap)bin1618 -> 1618 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/05-ftp_port_21121-double.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/05-ftp_port_21121-double.pcap)bin1142 -> 1142 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/06-ftp_port_21121-s2c.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/06-ftp_port_21121-s2c.pcap)bin574 -> 574 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/07-ftp_port_21121-c2s.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/07-ftp_port_21121-c2s.pcap)bin592 -> 592 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/08-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/08-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcap)bin1647 -> 1647 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/09-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/09-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcap)bin3142 -> 3142 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/10-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/10-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcap)bin3143 -> 3143 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/11-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/11-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcap)bin3141 -> 3141 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/12-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/12-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcap)bin7537 -> 7537 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/13-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/13-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcap)bin1996 -> 1996 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/14-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/14-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcap)bin10833 -> 10833 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/15-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/15-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap)bin3205 -> 3205 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/16-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/16-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap)bin4256 -> 4256 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/17-gquic-044-146.158.67.194.1044-108.177.14.138.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/17-gquic-044-146.158.67.194.1044-108.177.14.138.443.pcap)bin6804 -> 6804 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/18-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/18-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcap)bin704270 -> 704270 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/19-gquic-048-103.3.138.59.12521-123.125.116.52.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/19-gquic-048-103.3.138.59.12521-123.125.116.52.443.pcap)bin14097 -> 14097 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/20-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/20-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcap)bin2050587 -> 2050587 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/21-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/21-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcap)bin73949 -> 73949 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/22-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/22-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcap)bin49232 -> 49232 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/23-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/23-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcap)bin777583 -> 777583 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/23-prox-quic-217.76.77.70.33232-173.194.220.105.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/23-prox-quic-217.76.77.70.33232-173.194.220.105.443.pcap)bin7783 -> 7783 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/24-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/24-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcap)bin18421 -> 18421 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/25-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/25-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcap)bin38915 -> 38915 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/26-smtp-55426-587-10.130.2.104-67.225.241.247.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/26-smtp-55426-587-10.130.2.104-67.225.241.247.pcap)bin15075 -> 15075 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/27-pop-54776-110-196.188.12.179-192.185.31.244.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/27-pop-54776-110-196.188.12.179-192.185.31.244.pcap)bin2866 -> 2866 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/28-Bole-IGW-SMTP-57719-26-10.130.13.155-50.87.145.154-2.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/28-Bole-IGW-SMTP-57719-26-10.130.13.155-50.87.145.154-2.pcap)bin892 -> 892 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/29-Bole-IGW-SMTP-14636-25-196.189.57.105-68.232.159.216-2.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/29-Bole-IGW-SMTP-14636-25-196.189.57.105-68.232.159.216-2.pcap)bin791 -> 791 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/30-Bole-IGW-SMTP-20997-25-196.190.160.6-64.225.54.152.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/30-Bole-IGW-SMTP-20997-25-196.190.160.6-64.225.54.152.pcap)bin910 -> 910 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/31-Bole-IGW-POP3-50020-110-196.188.3.8-82.98.178.159.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/31-Bole-IGW-POP3-50020-110-196.188.3.8-82.98.178.159.pcap)bin1435 -> 1435 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/32-Bole-IGW-POP3-53357-110-196.189.0.15-39.156.6.106.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/32-Bole-IGW-POP3-53357-110-196.189.0.15-39.156.6.106.pcap)bin1094 -> 1094 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/33-Bole-IGW-IMAP-36734-143-196.189.5.89-101.32.113.90.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/33-Bole-IGW-IMAP-36734-143-196.189.5.89-101.32.113.90.pcap)bin713 -> 713 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/34-Bole-IGW-IMAP-50415-143-196.188.28.149-69.195.110.51.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/34-Bole-IGW-IMAP-50415-143-196.188.28.149-69.195.110.51.pcap)bin5029 -> 5029 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/35-Bole-IGW-SMTP-587-1440-587-196.189.45.189-40.101.92.178.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/35-Bole-IGW-SMTP-587-1440-587-196.189.45.189-40.101.92.178.pcap)bin1034 -> 1034 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/36-Bole-IGW-SMTP-587-37943-587-196.191.120.240-81.19.77.166.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/36-Bole-IGW-SMTP-587-37943-587-196.191.120.240-81.19.77.166.pcap)bin796 -> 796 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/37-dns-response-4029-53-115.24.235.11-8.210.152.150.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/37-dns-response-4029-53-115.24.235.11-8.210.152.150.pcap)bin1472 -> 1472 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/38-stun-dtls.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/38-stun-dtls.pcap)bin461565 -> 461565 bytes
-rw-r--r--test/lpi_plus/test_pcap/mixed_pcap/39-pop3-mistake-redis.pcap (renamed from test/lpi_plugin/test_pcap/mixed_pcap/39-pop3-mistake-redis.pcap)bin921 -> 921 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/01-openvpn-udp-port-1198-first.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/01-openvpn-udp-port-1198-first.pcap)bin264 -> 264 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/02-openvpn-nDPI.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/02-openvpn-nDPI.pcap)bin61903 -> 61903 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/03-openvpn_onestream.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/03-openvpn_onestream.pcap)bin18456 -> 18456 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/04-openvpn-udp-63111.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/04-openvpn-udp-63111.pcap)bin30590 -> 30590 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/05-openvpn-udp-34400.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/05-openvpn-udp-34400.pcap)bin18456 -> 18456 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/06-openvpn-udp-40914.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/06-openvpn-udp-40914.pcap)bin3284 -> 3284 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/07-openvpn.tcp.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/07-openvpn.tcp.pcap)bin22820 -> 22820 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/08-ovpntcp_hmac.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/08-ovpntcp_hmac.pcap)bin18708 -> 18708 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/09-ovpntcp_nohmac.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/09-ovpntcp_nohmac.pcap)bin17556 -> 17556 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/10-openvpn-udp-49941.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/10-openvpn-udp-49941.pcap)bin81387 -> 81387 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/11-ipv6_openvpn.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/11-ipv6_openvpn.pcap)bin2196924 -> 2196924 bytes
-rw-r--r--test/lpi_plus/test_pcap/openvpn_pcap/12-quic-openvpn.pcap (renamed from test/lpi_plugin/test_pcap/openvpn_pcap/12-quic-openvpn.pcap)bin1066308 -> 1066308 bytes
-rw-r--r--test/lpi_plus/test_pcap/ppp_pcap/01-l2tp_netbios.pcap (renamed from test/lpi_plugin/test_pcap/ppp_pcap/01-l2tp_netbios.pcap)bin23328 -> 23328 bytes
-rwxr-xr-xtest/lpi_plus/test_pcap/ppp_pcap/02-l2tp-without-l7_protocol-62176-33445-192.168.10.91-220.43.148.189.pcap (renamed from test/lpi_plugin/test_pcap/ppp_pcap/02-l2tp-without-l7_protocol-62176-33445-192.168.10.91-220.43.148.189.pcap)bin1759 -> 1759 bytes
-rwxr-xr-xtest/lpi_plus/test_pcap/ppp_pcap/03-l2tp_http.pcap (renamed from test/lpi_plugin/test_pcap/ppp_pcap/03-l2tp_http.pcap)bin26747 -> 26747 bytes
-rwxr-xr-xtest/lpi_plus/test_pcap/ppp_pcap/04-l2tp_ctrl_data_full.pcap (renamed from test/lpi_plugin/test_pcap/ppp_pcap/04-l2tp_ctrl_data_full.pcap)bin570920 -> 570920 bytes
-rwxr-xr-xtest/lpi_plus/test_pcap/ppp_pcap/05-pptp_encrypt.pcap (renamed from test/lpi_plugin/test_pcap/ppp_pcap/05-pptp_encrypt.pcap)bin110342 -> 110342 bytes
-rwxr-xr-xtest/lpi_plus/test_pcap/ppp_pcap/06-pptp_http.pcap (renamed from test/lpi_plugin/test_pcap/ppp_pcap/06-pptp_http.pcap)bin7890 -> 7890 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/1-socks45-http-example.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/1-socks45-http-example.pcap)bin9143 -> 9143 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/10-socks5-http-302-frag.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/10-socks5-http-302-frag.pcap)bin5281 -> 5281 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/11-socks5-http-302.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/11-socks5-http-302.pcap)bin2424 -> 2424 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/12-socks5-rdp.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/12-socks5-rdp.pcap)bin852 -> 852 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/13-socks5-reverse.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/13-socks5-reverse.pcap)bin28167 -> 28167 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/14-socks5-smtp-503.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/14-socks5-smtp-503.pcap)bin1836 -> 1836 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/15-socks-http-pass.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/15-socks-http-pass.pcap)bin5593 -> 5593 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/16-socks-https-example.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/16-socks-https-example.pcap)bin34470 -> 34470 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/2-socks5_ftp.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/2-socks5_ftp.pcap)bin5500 -> 5500 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/3-POP3_Sock5_subject.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/3-POP3_Sock5_subject.pcap)bin22195 -> 22195 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/4-SMTP_Sock5_subject.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/4-SMTP_Sock5_subject.pcap)bin20443 -> 20443 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/5-T3-HTTP-URL-SOCKS5.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/5-T3-HTTP-URL-SOCKS5.pcap)bin10011 -> 10011 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/6-T7-HTTP-CONT-SOCKS5.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/6-T7-HTTP-CONT-SOCKS5.pcap)bin7054 -> 7054 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/7-T86-FTP-URL-PORT-BIN-SOCKS5.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/7-T86-FTP-URL-PORT-BIN-SOCKS5.pcap)bin10383 -> 10383 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/8-socks4_http.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/8-socks4_http.pcap)bin2452 -> 2452 bytes
-rw-r--r--test/lpi_plus/test_pcap/socks_pcap/9-socks4-https.pcap (renamed from test/lpi_plugin/test_pcap/socks_pcap/9-socks4-https.pcap)bin8032 -> 8032 bytes
-rw-r--r--test/session_debugger/session_debugger.c5
671 files changed, 1489 insertions, 1769 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 27c88ce..7ff43ca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -81,7 +81,7 @@ add_subdirectory(conf)
add_subdirectory(vendors)
add_subdirectory(deps)
add_subdirectory(infra)
-#add_subdirectory(decoders)
+add_subdirectory(decoders)
add_subdirectory(scripts)
add_subdirectory(include)
add_subdirectory(test)
diff --git a/conf/stellar.toml b/conf/stellar.toml
index d7d1a01..beb2121 100644
--- a/conf/stellar.toml
+++ b/conf/stellar.toml
@@ -10,6 +10,23 @@
cpu_mask = [5, 6, 7, 8, 9, 10, 11, 12]
idle_yield_interval_ms = 900 # range: [0, 60000] (ms)
+[[module]]
+path=""
+init="packet_manager_on_init"
+exit="packet_manager_on_exit"
+
+[[module]]
+path = ""
+init = "polling_manager_on_init"
+exit = "polling_manager_on_exit"
+
+[[module]]
+path=""
+init="session_manager_on_init"
+exit="session_manager_on_exit"
+
+
+
[ip_reassembly]
enable = 1
bucket_entries = 32 # range: [1, 4294967295] (must be power of 2)
@@ -68,17 +85,5 @@
file = "log/stellar.log"
level = "INFO" # TRACE, DEBUG, INFO, WARN, ERROR, FATAL
-[[module]]
-path = ""
-init = "polling_manager_on_init"
-exit = "polling_manager_on_exit"
-[[module]]
-path = ""
-init = "packet_manager_on_init"
-exit = "packet_manager_on_exit"
-[[module]]
-path = ""
-init = "session_manager_on_init"
-exit = "session_manager_on_exit"
diff --git a/decoders/CMakeLists.txt b/decoders/CMakeLists.txt
index 8b3f7a9..efad779 100644
--- a/decoders/CMakeLists.txt
+++ b/decoders/CMakeLists.txt
@@ -1,5 +1,6 @@
-add_subdirectory(http)
-add_subdirectory(lpi)
-add_subdirectory(socks)
-add_subdirectory(stratum)
-add_subdirectory(session_flags) \ No newline at end of file
+add_subdirectory(appid)
+add_subdirectory(lpi_plus)
+#add_subdirectory(http)
+#add_subdirectory(socks)
+#add_subdirectory(stratum)
+#add_subdirectory(session_flags) \ No newline at end of file
diff --git a/decoders/appid/CMakeLists.txt b/decoders/appid/CMakeLists.txt
new file mode 100644
index 0000000..acb1939
--- /dev/null
+++ b/decoders/appid/CMakeLists.txt
@@ -0,0 +1 @@
+add_library(appid appid.c) \ No newline at end of file
diff --git a/decoders/appid/appid.c b/decoders/appid/appid.c
new file mode 100644
index 0000000..642e8e6
--- /dev/null
+++ b/decoders/appid/appid.c
@@ -0,0 +1,49 @@
+#include "appid_internal.h"
+
+#include "stellar/utils.h"
+#include "stellar/mq.h"
+
+
+
+static void appid_message_free(void *msg, void *msg_free_arg __unused)
+{
+ if(msg==NULL)return;
+ FREE(msg);
+}
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-function-type"
+
+static void stellar_appid_on_msg_dispatch(int topic_id __unused,
+ void *msg,
+ on_msg_cb_func* on_msg_cb,
+ void *on_msg_cb_arg,
+ void *dispatch_arg __unused)
+{
+ on_appid_callback *appid_cb = (on_appid_callback *)on_msg_cb;
+ struct appid_message *appid_msg=(struct appid_message *)msg;
+ appid_cb(appid_msg->sess, appid_msg->origin, appid_msg->appid, appid_msg->appid_num, on_msg_cb_arg);
+}
+
+int stellar_appid_subscribe(struct stellar_module_manager *mod_mgr, on_appid_callback *cb, void *args)
+{
+ if(mod_mgr==NULL)return -1;
+ int appid_topic_id=mq_schema_get_topic_id(stellar_module_manager_get_mq_schema(mod_mgr), APPID_MESSAGE_TOPIC);
+ if(appid_topic_id<0)
+ {
+ appid_topic_id=mq_schema_create_topic(stellar_module_manager_get_mq_schema(mod_mgr), APPID_MESSAGE_TOPIC, stellar_appid_on_msg_dispatch, mod_mgr, appid_message_free, NULL);
+ }
+ return mq_schema_subscribe(stellar_module_manager_get_mq_schema(mod_mgr), appid_topic_id, (on_msg_cb_func *)cb, args);
+}
+
+#pragma GCC diagnostic pop
+
+int stellar_appid_create_topic(struct stellar_module_manager *mod_mgr)
+{
+ int app_topic_id=mq_schema_get_topic_id(stellar_module_manager_get_mq_schema(mod_mgr), APPID_MESSAGE_TOPIC);
+ if(app_topic_id < 0)
+ {
+ app_topic_id=mq_schema_create_topic(stellar_module_manager_get_mq_schema(mod_mgr), APPID_MESSAGE_TOPIC, stellar_appid_on_msg_dispatch, NULL,appid_message_free, NULL);
+ }
+ return app_topic_id;
+} \ No newline at end of file
diff --git a/decoders/appid/appid_internal.h b/decoders/appid/appid_internal.h
new file mode 100644
index 0000000..b107806
--- /dev/null
+++ b/decoders/appid/appid_internal.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include "stellar/appid.h"
+
+#define MAX_APPID_NUM 8
+#define APPID_MESSAGE_TOPIC "TOPIC_APPID"
+
+struct appid_message
+{
+ struct session *sess;
+ enum APPID_ORIGIN origin;
+ uint32_t appid_num;
+ int32_t appid[MAX_APPID_NUM];
+ uint32_t surrogate_id[MAX_APPID_NUM];
+ uint32_t packet_sequence[MAX_APPID_NUM];
+};
+
+#ifdef __cplusplus
+}
+#endif \ No newline at end of file
diff --git a/decoders/lpi/CMakeLists.txt b/decoders/lpi/CMakeLists.txt
deleted file mode 100644
index 43528a6..0000000
--- a/decoders/lpi/CMakeLists.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-add_definitions(-fPIC)
-add_subdirectory(libprotoident)
-
-add_library(lpi lpi_plugin.cpp quic_ident.cpp openvpn_ident.cpp)
-target_include_directories(lpi PUBLIC ${CMAKE_SOURCE_DIR}/deps/)
-
-target_link_libraries(lpi libprotoident)
-set_target_properties(lpi PROPERTIES LINK_FLAGS
- "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/version.map")
-
-#install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/stellar_plugin COMPONENT LIBRARIES)
-
diff --git a/decoders/lpi/lpi_plugin.cpp b/decoders/lpi/lpi_plugin.cpp
deleted file mode 100644
index 7591a90..0000000
--- a/decoders/lpi/lpi_plugin.cpp
+++ /dev/null
@@ -1,783 +0,0 @@
-/*
- * dpkt_basic_proto_main.cpp
- *
- * Created on: Aug 7, 2020
- * Author: iie
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <string.h>
-#include <assert.h>
-
-#include "uthash/uthash.h"
-
-
-#include "stellar/utils.h"
-
-#include "stellar/session.h"
-#include "stellar/stellar_exdata.h"
-#include "stellar/stellar_mq.h"
-
-#include "stellar/packet.h"
-#include "stellar/appid.h"
-
-#include "lpi_plugin.h"
-
-const char *dns_name="DNS";
-const char *imap_name="IMAP";
-const char *quic_name="QUIC";
-
-const char *g_app_proto_conffile="./tsgconf/main.conf";
-const char *log_path = (char *)"./tsglog/lpi/";
-
-
-struct lpi_plugin_env
-{
- int level;
- int max_pkts;
- int l7_label_id;
- int l7_bridge_id;
- int plugin_exdata_idx;
- int l7_app_id_exdata_idx;
- int topic_id;
- int plugin_id;
- struct stellar *st;
- char log_path[128];
- char l7_protocol_file[128];
- struct l7_protocol_hash *name_by_id;
- void *logger;
- int tcp_topic_id;
- int udp_topic_id;
-};
-
-struct l7_protocol_hash g_app_name2lpi_id[]={
- {0, LPI_PROTO_UNKNOWN, "UNCATEGORIZED",{}},
- //{0, LPI_PROTO_UNKNOWN, "Unknown_UDP"},
- //{0, LPI_PROTO_UNSUPPORTED, "Unknown_Other"},
- {0, LPI_PROTO_DNS, "DNS", {}},
- {0, LPI_PROTO_FTP_CONTROL, "FTP", {}},
- //{0, LPI_PROTO_FTP_DATA, "FTP", NULL, NULL},
- {0, LPI_PROTP_FTPS, "FTPS", {}},
- {0, LPI_PROTO_HTTP, "HTTP", {}},
- {0, LPI_PROTO_HTTPS, "HTTPS", {}},
- {0, LPI_PROTO_ICMP, "ICMP", {}},
- {0, LPI_PROTO_IKE, "IKE", {}},
- {0, LPI_PROTO_MAIL, "MAIL", {}},
- {0, LPI_PROTO_IMAP, "IMAP", {}},
- {0, LPI_PROTO_IMAPS, "IMAPS", {}},
- {0, LPI_PROTO_UDP_ESP, "IPSEC", {}},
- {0, LPI_PROTO_XMPP, "XMPP", {}},
- {0, LPI_PROTO_UDP_L2TP, "L2TP", {}},
- {0, LPI_PROTO_UDP_NTP, "NTP", {}},
- {0, LPI_PROTO_POP3, "POP3", {}},
- {0, LPI_PROTO_POP3S, "POP3S", {}},
- {0, LPI_PROTO_PPTP, "PPTP", {}},
- {0, LPI_PROTO_UDP_QUIC, "QUIC", {}},
- {0, LPI_PROTO_SIP, "SIP", {}},
- {0, LPI_PROTO_SMB, "SMB", {}},
- {0, LPI_PROTO_SMTP, "SMTP", {}},
- {0, LPI_PROTO_SMTPS, "SMTPS", {}},
- {0, LPI_PROTO_SPDY, "SPDY", {}},
- {0, LPI_PROTO_SSH, "SSH", {}},
- {0, LPI_PROTO_SSL, "SSL", {}},
- {0, LPI_PROTO_SOCKS4, "SOCKS", {}},
- //{0, LPI_PROTO_SOCKS4, "SOCKS4", NULL, NULL},
- //{0, LPI_PROTO_SOCKS5, "SOCKS5", NULL, NULL},
- {0, LPI_PROTO_TELNET, "TELNET", {}},
- {0, LPI_PROTO_UDP_DHCP, "DHCP", {}},
- {0, LPI_PROTO_UDP_RADIUS, "RADIUS", {}},
- {0, LPI_PROTO_OPENVPN, "OPENVPN", {}},
- {0, LPI_PROTO_STUN, "STUN", {}},
- {0, LPI_PROTO_UDP_TEREDO, "TEREDO", {}},
- {0, LPI_PROTO_UDP_DTLS, "DTLS", {}},
- {0, LPI_PROTO_DOH, "DoH", {}},
- {0, LPI_PROTO_UDP_ISAKMP, "ISAKMP", {}},
- {0, LPI_PROTO_UDP_MDNS, "MDNS", {}},
- {0, LPI_PROTO_NETBIOS, "NETBIOS", {}},
- {0, LPI_PROTO_UDP_NETFLOW, "NETFLOW", {}},
- {0, LPI_PROTO_RDP, "RDP", {}},
- {0, LPI_PROTO_UDP_RTCP, "RTCP", {}},
- {0, LPI_PROTO_UDP_RTP, "RTP", {}},
- {0, LPI_PROTO_UDP_SLP, "SLP", {}},
- {0, LPI_PROTO_UDP_SNMP, "SNMP", {}},
- {0, LPI_PROTO_UDP_SSDP, "SSDP", {}},
- {0, LPI_PROTO_UDP_TFTP, "TFTP", {}},
- {0, LPI_PROTO_UDP_BJNP, "BJNP", {}},
- {0, LPI_PROTO_LDAP, "LDAP", {}},
- {0, LPI_PROTO_RTMP, "RTMP", {}},
- {0, LPI_PROTO_RTSP, "RTSP", {}},
- {0, LPI_PROTO_ESNI, "ESNI", {}},
- {0, LPI_PROTO_STRATUM, "Stratum", {}},
- {0, LPI_PROTO_QQ, "QQ", {}},
- {0, LPI_PROTO_WECHAT, "WeChat", {}},
- {0, LPI_PROTO_MMS, "MMS", {}},
- {0, LPI_PROTO_RSYNC, "RSYNC", {}},
- {0, LPI_PROTO_UDP_WIREGUARD, "WIREGUARD", {}},
- };
-
-struct dns_header
-{
- u_int16_t id;
-#if __BYTE_ORDER == __LITTLE_ENDIAN
- u_char rd:1;
- u_char tc:1;
- u_char aa:1;
- u_char opcode:4;
- u_char qr:1;
- u_char rcode:4;
- u_char z:3;
- u_char ra:1;
-#elif __BYTE_ORDER == __BIG_ENDIAN
- u_char qr:1;
- u_char opcode:4;
- u_char aa:1;
- u_char tc:1;
- u_char rd:1;
- u_char ra:1;
- u_char z:3;
- u_char rcode:4;
-#endif
- u_int16_t qdcount;
- u_int16_t ancount;
- u_int16_t aucount;//authority count
- u_int16_t adcount;//additional count
-};
-
-static void get_host_order_port(struct session *sess __unused, unsigned short *sport, unsigned short *dport)
-{
- *sport=0;
- *dport=0;
-//get host order port from stellar session api
-
- const struct packet *pkt = session_get0_current_packet(sess);
- enum flow_type flow_type=session_get_flow_type(sess);
- if(pkt && (flow_type==FLOW_TYPE_C2S || flow_type==FLOW_TYPE_S2C))
- {
- int layer_cnt=packet_get_layer_count(pkt);
- const struct layer *layer = packet_get_layer_by_idx(pkt, layer_cnt - 1);
- if (layer && layer->proto == LAYER_PROTO_TCP)
- {
- *sport = ntohs(layer->hdr.tcp->th_sport);
- *dport = ntohs(layer->hdr.tcp->th_dport);
- }
- if (layer && layer->proto == LAYER_PROTO_UDP)
- {
- *sport = ntohs(layer->hdr.udp->uh_sport);
- *dport = ntohs(layer->hdr.udp->uh_dport);
- }
- //S2C, swap sport and dport
- if(flow_type == FLOW_TYPE_S2C)
- {
- unsigned short tmp = *sport;
- *sport = *dport;
- *dport = tmp;
- }
- }
- return;
-}
-
-static int revise_lpi_result(struct session *sess, const char *scan_data, const int scan_data_len, lpi_module_t* proto, struct traffic_context *context, int l4_is_tcp, int curdir_is_c2s)
-{
- unsigned short sport=0, dport=0;
-
- get_host_order_port(sess, &sport, &dport);
-
- if(sport == 989 || sport == 990 || dport == 989 || dport == 990)
- {
- if(proto->protocol == LPI_PROTO_SSL)
- {
- proto->protocol=(lpi_protocol_t)LPI_PROTP_FTPS;
- proto->category=LPI_CATEGORY_FILES;
- proto->priority=3;
- proto->name="FTPS";
- proto->lpi_callback=NULL;
- return 1;
- }
- }
-
- if(sport==443 || dport==443 || sport==80 || dport==80 || sport==8443 || dport==8443)
- {
- if(app_identify_get_quic_protocol(curdir_is_c2s, (const unsigned char *)scan_data, scan_data_len) != QUIC_VERSION_UNKNOWN)
- {
- //lpi_quic
- proto->protocol=LPI_PROTO_UDP_QUIC;
- proto->category=LPI_CATEGORY_WEB;
- proto->priority=9;
- proto->name=quic_name;
- proto->lpi_callback=NULL;
- return 1;
- }
- }
-
- if((sport==53 || dport==53) && (scan_data_len>12))
- {
- struct dns_header *dns_hdr=NULL;
- if(l4_is_tcp)
- {
- dns_hdr=(struct dns_header *)(scan_data+2);
- }
- else
- {
- dns_hdr=(struct dns_header *)scan_data;
- }
- if((dns_hdr->qr==1 && ntohs(dns_hdr->qdcount)==1) ||
- (dns_hdr->qr==0 && ntohs(dns_hdr->qdcount)==1 && ntohs(dns_hdr->aucount)==0 && ntohs(dns_hdr->ancount)==0))
- {
- proto->protocol=LPI_PROTO_DNS;
- proto->category=LPI_CATEGORY_SERVICES;
- proto->priority=10;
- proto->name=dns_name;
- proto->lpi_callback=NULL;
- return 1;
- }
- }
-
- if(((sport==143 || dport==143)) &&
- (
- (scan_data_len>=11 && memmem(scan_data, scan_data_len, " CAPABILITY", 11)!=NULL) ||
- (scan_data_len>=7 && memmem(scan_data, scan_data_len, " LOGIN ", 7)!=NULL)
- )
- )
- {
- proto->protocol=LPI_PROTO_IMAP;
- proto->category=LPI_CATEGORY_MAIL;
- proto->priority=2;
- proto->name=imap_name;
- proto->lpi_callback=NULL;
- return 1;
- }
- int c2s_pkt_cnt=context->c2s_pkt;
- int s2c_pkt_cnt=context->s2c_pkt;
-
- if(app_identify_guess_openvpn((const unsigned char *)scan_data, scan_data_len, c2s_pkt_cnt, s2c_pkt_cnt, &context->ovpn, l4_is_tcp, curdir_is_c2s)==1)
- {
- proto->protocol=LPI_PROTO_OPENVPN;
- proto->category=LPI_CATEGORY_TUNNELLING;
- proto->priority=4;
- proto->name="OpenVPN";
- proto->lpi_callback=NULL;
- return 1;
- }
-
- return 0;
-}
-
-
-static int set_lpi_same_name(struct l7_protocol_hash *l7_protocol_hash, struct l7_protocol_hash *l7_protocol_elem, int lpi_protocol_id)
-{
- struct l7_protocol_hash *tmp=(struct l7_protocol_hash *)calloc(1, sizeof(struct l7_protocol_hash));
- memcpy(tmp, l7_protocol_elem, sizeof(struct l7_protocol_hash));
-
- tmp->lpi_protocol=lpi_protocol_id;
- HASH_ADD(hh, l7_protocol_hash, lpi_protocol, sizeof(int), tmp);
-
- return 0;
-}
-
-static int get_protocol_id(struct l7_protocol_hash *name_by_id, const lpi_module_t* proto)
-{
- struct l7_protocol_hash *out=NULL;
-
- HASH_FIND(hh, name_by_id, &(proto->protocol), sizeof(int), out);
- if(out!=NULL)
- {
- return out->protocol_id;
- }
-
- return -1;
-}
-
-static struct app_id_message *app_id_messgae_create(unsigned short *id_array, int id_num)
-{
- struct app_id_message *result=CALLOC(struct app_id_message, 1);
- result->origin=ORIGIN_PROTO_IDENTIFY;
- result->magic=MESSAGE_MAGIC;
- result->app_id_num=id_num;
- for(unsigned int i=0; i<result->app_id_num; i++)
- {
- result->app_id[i]=(int)(id_array[i]);
- result->surrogate_id[i]=0;
- }
-
- return result;
-}
-
-static int update_protocol_id(unsigned short *old_id_array, int *old_id_num, unsigned short new_id)
-{
- int i=0;
-
- if(*old_id_num>=MAX_APP_ID_NUM)
- {
- return 0;
- }
-
- for(i=0; i<(*old_id_num); i++)
- {
- if(new_id==old_id_array[i])
- {
- return 0;
- }
- }
-
- old_id_array[(*old_id_num)]=new_id;
- (*old_id_num)++;
-
- return 1;
-}
-
-static int l7_protocol_mapper(struct lpi_plugin_env *g_app_proto_para, const char *filename)
-{
- size_t i=0,ret=0;
- FILE *fp=NULL;
- char line[1024]={0};
- char type_name[32]={0};
- struct l7_protocol_hash *name2lpi=NULL;
- struct l7_protocol_hash *l7_protocol=NULL;
- struct l7_protocol_hash *out=NULL;
-
- fp=fopen(filename, "r");
- if(fp==NULL)
- {
- printf("Open %s failed ...", filename);
- return -1;
- }
-
- for(i=0; i<(sizeof(g_app_name2lpi_id)/sizeof(struct l7_protocol_hash)); i++)
- {
- HASH_ADD(hh, name2lpi, name, strlen(g_app_name2lpi_id[i].name), &(g_app_name2lpi_id[i]));
- }
-
- memset(line, 0, sizeof(line));
-
- while((fgets(line, sizeof(line), fp))!=NULL)
- {
- if(line[0]=='#' || line[0]=='\n' || line[0]=='\r' ||line[0]=='\0')
- {
- continue;
- }
-
- l7_protocol=(struct l7_protocol_hash *)calloc(1, sizeof(struct l7_protocol_hash));
- ret=sscanf(line, "%31s %63s %d", type_name, l7_protocol->name, &l7_protocol->protocol_id);
- assert(ret==3);
-
- HASH_FIND(hh, name2lpi, l7_protocol->name, strlen(l7_protocol->name), out);
- if(out==NULL)
- {
- //MESA_handle_runtime_log(g_app_proto_para->logger, RLOG_LV_FATAL, "INIT_HASH", "Protocol %s identified without registered LPI ID", l7_protocol->name);
- free(l7_protocol);
- continue;
- }
-
- l7_protocol->lpi_protocol=out->lpi_protocol;
- HASH_ADD(hh, g_app_proto_para->name_by_id, lpi_protocol, sizeof(int), l7_protocol);
-
- switch(out->lpi_protocol)
- {
- case LPI_PROTO_DNS:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_UDP_DNS);
- break;
- case LPI_PROTO_SIP:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_UDP_SIP);
- break;
- case LPI_PROTO_SOCKS4:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_SOCKS5);
- break;
- case LPI_PROTO_FTP_CONTROL:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_FTP_DATA);
- break;
- case LPI_PROTO_OPENVPN:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_UDP_OPENVPN);
- break;
- case LPI_PROTO_LDAP:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_TCP_LDAP_AD);
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_UDP_LDAP_AD);
- break;
- case LPI_PROTO_HTTP:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_HTTP_BADPORT);
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_HTTP_TUNNEL);
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_NONSTANDARD_HTTP);
- break;
- case LPI_PROTO_STUN:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_UDP_STUN);
- break;
- case LPI_PROTO_NETBIOS:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_UDP_NETBIOS);
- break;
- case LPI_PROTO_QQ:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_UDP_QQ);
- break;
- case LPI_PROTO_WECHAT:
- set_lpi_same_name(g_app_proto_para->name_by_id, l7_protocol, LPI_PROTO_UDP_WECHAT);
- break;
- default:
- break;
- }
-
- memset(line, 0, sizeof(line));
- }
-
- fclose(fp);
- fp=NULL;
-
- HASH_CLEAR(hh, name2lpi);
-
-#if 0
- HASH_ITER(hh, g_app_proto_para->name_by_id, out ,tmp)
- {
- MESA_handle_runtime_log(g_app_proto_para->logger,
- RLOG_LV_DEBUG,
- "ID_MAPPER",
- "%s lpi_protocol built-in ID is %d and TSG ID is %d",
- out->name,
- out->lpi_protocol,
- out->protocol_id
- );
- }
-#endif
-
- return ret;
-}
-
-static void free_l7_protocol_mapper(struct l7_protocol_hash *hash)
-{
- if(hash==NULL)
- {
- return ;
- }
- struct l7_protocol_hash *out=NULL, *tmp=NULL;
- HASH_ITER(hh, hash, out ,tmp)
- {
- if(out!=NULL)
- {
- HASH_DEL(hash, out);
- free(out);
- out=NULL;
- }
- }
-}
-
-int lpi_update_dpkt(lpi_data_t *data, struct session *sess,
- const char *scan_data, int scan_data_len, char tsproto,
- uint32_t is_c2s)
-{
-
- uint32_t dir = 0;
- if(is_c2s == 1)
- {
- dir = 0;
- }
- else
- {
- dir = 1;
- }
- uint32_t four_bytes;
-
- if (data->observed[dir] > 32 * 1024)
- return 0;
-
- data->observed[dir] += scan_data_len;
-
- if (data->trans_proto == 0)data->trans_proto = tsproto;
-
- if (scan_data == NULL)return 0;
- if (scan_data_len <= 0)return 0;
-
- if (scan_data_len < 4)
- {
- memcpy((char *)&four_bytes, scan_data, scan_data_len);
- four_bytes = (ntohl(four_bytes)) >> (8 * (4 - scan_data_len));
- four_bytes = htonl(four_bytes << (8 * (4 - scan_data_len)));
- }
- else
- {
- four_bytes = (*(uint32_t *)scan_data);
- }
-
- data->payload[dir] = four_bytes;
- data->payload_len[dir] = scan_data_len;
-
- uint16_t source=0;
- uint16_t dest=0;
- get_host_order_port(sess,&source ,&dest);
-
- data->client_port = source;
- data->server_port = dest;
-
-// DONE: no need to set saddr and daddr
-/*
-
- if (pstream != NULL && data->ips[0] == 0
- && (pstream->addr.addrtype == __ADDR_TYPE_IP_PAIR_V4
- || pstream->addr.addrtype == ADDR_TYPE_IPV4))
- {
- if (dir == 1)
- {
- data->ips[0] = pstream->addr.ipv4->saddr;
- data->ips[1] = pstream->addr.ipv4->daddr;
- }
- else
- {
- data->ips[1] = pstream->addr.ipv4->saddr;
- data->ips[0] = pstream->addr.ipv4->daddr;
- }
- }
-*/
- return 1;
-
-}
-
-
-
-static int lpi_detector(struct session *sess, struct traffic_context *context, struct lpi_plugin_env *g_app_proto_para, const char *scan_data, const int scan_data_len, int l4_proto)
-{
- int ret=0,is_update=0;
- //unsigned short sport=0, dport=0;
- lpi_module_t modify_lpi_result={(lpi_protocol_t)0, (lpi_category_t)0, NULL, 0, NULL};
- unsigned short new_protocol_id=0;
- struct l7_protocol_label *l7_protocol=NULL;
- //const struct packet *raw_packet=session_get0_current_packet(sess);
- //int cur_pkt_dir= packet_get_direction(raw_packet);
- int cur_pkt_dir=session_get_flow_type(sess);
- context->pkt_cnt++;
- (cur_pkt_dir==FLOW_TYPE_C2S) ? (context->c2s_pkt++) : (context->s2c_pkt++);
- int is_c2s_pkt=((cur_pkt_dir==FLOW_TYPE_C2S) ? 1 : 0);
- ret=lpi_update_dpkt(&(context->lpi_data), sess, scan_data, scan_data_len, l4_proto, is_c2s_pkt);
- if(!ret)
- {
- return 1;
- }
-
- lpi_module_t *plpi_mod=lpi_guess_protocol(&(context->lpi_data));
- if(plpi_mod==NULL)
- {
- return 1;
- }
-
- if((plpi_mod->protocol==LPI_PROTO_UNKNOWN || plpi_mod->protocol==LPI_PROTO_UDP) &&
- (context->pkt_cnt<g_app_proto_para->max_pkts || context->is_identify==1))
- {
- ret=revise_lpi_result(sess, scan_data, scan_data_len, &modify_lpi_result, context,
- (l4_proto==6?1:0),
- (cur_pkt_dir==FLOW_TYPE_C2S?1:0));
- if(ret==0)
- {
- return 1;
- }
-
- plpi_mod=&modify_lpi_result;
- }
-
- if (plpi_mod->protocol == LPI_PROTO_FTP_CONTROL && context->is_first_payload == 1 && cur_pkt_dir == FLOW_TYPE_S2C)
- {
- if ((((scan_data_len >= 4 && (memcmp(scan_data, "220-", 4) == 0)) || memcmp(scan_data, "220 ", 4) == 0)) &&
- (((scan_data_len >= 7 && (memmem(scan_data, scan_data_len, " ESMTP ", 7) != NULL)) ||
- memmem(scan_data, scan_data_len, " esmtp ", 7) != NULL)))
- {
- // lpi_smtp
- modify_lpi_result.protocol = LPI_PROTO_SMTP;
- modify_lpi_result.category = LPI_CATEGORY_MAIL;
- modify_lpi_result.priority = 2;
- modify_lpi_result.name = "SMTP";
-
- plpi_mod = &modify_lpi_result;
- }
- }
-
- if (plpi_mod->protocol == LPI_PROTO_SMTP && context->is_first_payload == 1 && cur_pkt_dir == FLOW_TYPE_S2C)
- {
- if (
- (scan_data_len >= 4) &&
- (memcmp(scan_data, "220 ", 4) == 0 || memcmp(scan_data, "220-", 4) == 0) &&
- (memmem(scan_data, scan_data_len, "FTPd", 4) != NULL ||
- memmem(scan_data, scan_data_len, "ftpd", 4) != NULL ||
- memmem(scan_data, scan_data_len, "FTPD", 4) != NULL))
- {
- // lpi_ftpcontrol
- modify_lpi_result.protocol = LPI_PROTO_FTP_CONTROL;
- modify_lpi_result.category = LPI_CATEGORY_FILES;
- modify_lpi_result.priority = 3;
- modify_lpi_result.name = "FTP_Control";
-
- plpi_mod = &modify_lpi_result;
- }
- }
-
- new_protocol_id=get_protocol_id(g_app_proto_para->name_by_id, plpi_mod);
-#if 0
- if(new_protocol_id==(unsigned short)-1)
- {
-
- if(plpi_mod->protocol!=LPI_PROTO_UNKNOWN && plpi_mod->protocol!=LPI_PROTO_UDP && plpi_mod->protocol!=LPI_PROTO_UNSUPPORTED)
- {
- MESA_handle_runtime_log(g_app_proto_para->logger,
- RLOG_LV_INFO,
- "UNDEFINE",
- "Protocol Name: %s identified without registered LPI ID=%d, category: %s priority: %d addr: %s",
- plpi_mod->name,
- plpi_mod->protocol,
- lpi_print_category(plpi_mod->category),
- plpi_mod->priority,
- session_get0_readable_addr(sess)
- );
- }
- return 1;
- }
- else
- {
- MESA_handle_runtime_log(g_app_proto_para->logger,
- RLOG_LV_INFO,
- "DEFINE",
- "Protocol Name: %s identified registered LPI ID(%d), category: %s priority: %d addr: %s",
- plpi_mod->name,
- plpi_mod->protocol,
- lpi_print_category(plpi_mod->category),
- plpi_mod->priority,
- session_get0_readable_addr(sess)
- );
- }
-#endif
-
- l7_protocol = (struct l7_protocol_label *)session_exdata_get(sess, g_app_proto_para->l7_app_id_exdata_idx);
- if(l7_protocol==NULL)
- {
- l7_protocol=CALLOC(struct l7_protocol_label, 1);
- l7_protocol->continue_scan_flag = 1;
- session_exdata_set(sess, g_app_proto_para->l7_app_id_exdata_idx, l7_protocol);
- }
-
- is_update=update_protocol_id(l7_protocol->protocol_id, &(l7_protocol->protocol_id_num), new_protocol_id);
- if(is_update==1)
- {
- context->is_identify=1;
- struct app_id_message *msg=app_id_messgae_create(l7_protocol->protocol_id, l7_protocol->protocol_id_num);
- if(session_mq_publish_message(sess, g_app_proto_para->topic_id, msg) < 0)
- {
- FREE(msg);
- }
- //MESA_handle_runtime_log(g_app_proto_para->logger, RLOG_LV_DEBUG, "ADD_PROJECT", "%s identified, ID %d addr: %s", plpi_mod->name, new_protocol_id, session_get0_readable_addr(sess));
- }
-
- if (context->pkt_cnt >= g_app_proto_para->max_pkts || (plpi_mod->category != LPI_CATEGORY_TUNNELLING && plpi_mod->category != LPI_CATEGORY_NAT && plpi_mod->protocol != LPI_PROTO_RDP && plpi_mod->protocol != LPI_PROTO_UDP_RDP && plpi_mod->protocol != LPI_PROTO_UDP_RTP && plpi_mod->protocol != LPI_PROTO_UDP_RTCP))
- {
- l7_protocol->continue_scan_flag=0;
- return 0;
- }
-
- return 1;
-}
-
-static void lpi_plugin_on_session_msg(struct session *sess, int topic_id __unused, const void *msg, void *per_session_ctx __unused, void *plugin_env)
-{
- assert(plugin_env!=NULL);
-
- if(msg==NULL)return;
-
- struct lpi_plugin_env *env=(struct lpi_plugin_env *)plugin_env;
- int identify_continue=0;
- struct traffic_context *context = (struct traffic_context *)session_exdata_get(sess, env->plugin_exdata_idx);
- if(context==NULL)
- {
- context= CALLOC(struct traffic_context, 1);
- context->is_first_payload=1;
- session_exdata_set(sess, env->plugin_exdata_idx, context);
- }
- //size_t payload_len=0;
- //const char *payload=session_get0_current_payload(sess, &payload_len);
-
- uint16_t payload_len=packet_get_payload_len((struct packet*)msg);
- const char *payload=packet_get_payload((struct packet*)msg);
- if (payload!=NULL && payload_len>0 && context->pkt_cnt<env->max_pkts)
- {
- int l4_proto=0;
- enum session_type type= session_get_type(sess);
- if(type == SESSION_TYPE_TCP)
- {
- l4_proto=6;
- }
- if(type == SESSION_TYPE_UDP)
- {
- l4_proto=17;
- }
- identify_continue=lpi_detector(sess, context, env, payload, payload_len, l4_proto);
- context->is_first_payload=0;
- }
- else
- {
- identify_continue=1;
- }
-
- if (identify_continue==0)
- {
- FREE(context);
- session_exdata_set(sess, env->plugin_exdata_idx, NULL);
- stellar_session_plugin_dettach_current_session(sess);
- }
- return;
-}
-
-
-extern "C" void lpi_plugin_unload(void *plugin_env)
-{
- if(plugin_env)
- {
- struct lpi_plugin_env *env=(struct lpi_plugin_env *)plugin_env;
- lpi_free_library();
- free_l7_protocol_mapper(env->name_by_id);
- FREE(plugin_env);
- }
-}
-
-extern "C" void * lpi_plugin_load(struct stellar *st)
-{
- int ret=0;
- struct lpi_plugin_env *env=CALLOC(struct lpi_plugin_env, 1);
- env->st=st;
- env->max_pkts=16;
- strcpy( env->l7_protocol_file, "./tsgconf/tsg_l7_protocol.conf");
-
- ret=lpi_init_library(1); // 1, 2 or 3
- if(ret<0)
- {
- goto INIT_ERROR;
- }
-
- ret=l7_protocol_mapper(env,env->l7_protocol_file);
- if(ret<0)
- {
- goto INIT_ERROR;
- }
-
- env->plugin_id=stellar_session_plugin_register(st, NULL, NULL, env);
- if(env->plugin_id < 0)
- {
- goto INIT_ERROR;
- }
- env->tcp_topic_id=stellar_mq_get_topic_id(st, TOPIC_TCP_INPUT);
- env->udp_topic_id=stellar_mq_get_topic_id(st, TOPIC_UDP_INPUT);
- if(env->tcp_topic_id < 0 || env->udp_topic_id < 0)
- {
- perror("get tcp or udp topic id failed\n");
- exit(-1);
- }
-
- stellar_session_mq_subscribe(st, env->tcp_topic_id, lpi_plugin_on_session_msg, env->plugin_id);
- stellar_session_mq_subscribe(st, env->udp_topic_id, lpi_plugin_on_session_msg, env->plugin_id);
-
- env->plugin_exdata_idx = stellar_exdata_new_index(st, "EXDATA_LPI", stellar_exdata_free_default, NULL);
- env->l7_app_id_exdata_idx = stellar_exdata_new_index(st, "L7_PROTOCOL", stellar_exdata_free_default, NULL);
- env->topic_id=stellar_mq_get_topic_id(st, APP_ID_MESSAGE_TOPIC);
- if(env->topic_id < 0)
- {
- env->topic_id=stellar_mq_create_topic(st, APP_ID_MESSAGE_TOPIC, stellar_msg_free_default, NULL);
- }
- return env;
-
-INIT_ERROR:
- lpi_plugin_unload(env);
- exit(-1);
- return NULL;
-
-}
-
diff --git a/decoders/lpi/lpi_plugin.h b/decoders/lpi/lpi_plugin.h
deleted file mode 100644
index 2fae274..0000000
--- a/decoders/lpi/lpi_plugin.h
+++ /dev/null
@@ -1,227 +0,0 @@
-#pragma once
-
-#include "libprotoident/libprotoident.h"
-#include "uthash/uthash.h"
-
-#define MAX_APP_ID_NUM 8
-
-typedef enum {
- LPI_PROTO_EXTEND_FRIST = LPI_PROTO_LAST,
- LPI_PROTO_IKE, //unsupport
- LPI_PROTO_DOH, //unsupport
- LPI_PROTO_MAIL, //unsupport
- LPI_PROTO_ESNI, //unsupport
- LPI_PROTP_FTPS,
- LPI_PROTO_EXTEND_LAST
-} extend_lpi_protocol_t;
-
-struct l7_protocol_label
-{
- int continue_scan_flag; //0: stop; 1: continue
- int protocol_id_num;
- unsigned short protocol_id[MAX_APP_ID_NUM];
-};
-
-struct l7_protocol_hash
-{
- int protocol_id;
- int lpi_protocol;
- char name[64];
- UT_hash_handle hh;
-};
-
-
-struct ovpn_ctx
-{
- uint64_t local_session_id;
- int contain_local_session_id_pkt_num;
- int valid_opcode_cnt;
-};
-
-struct traffic_context
-{
- unsigned char is_identify;
- unsigned char is_first_payload;
- unsigned short pkt_cnt;
- unsigned short s2c_pkt;
- unsigned short c2s_pkt;
- lpi_data_t lpi_data; // lpi API
- union{
- uint64_t ctx[2];
- struct ovpn_ctx ovpn;
- };
-};
-
-//https://github.com/quicwg/base-drafts/wiki/QUIC-Versions
-enum _QUIC_VERSION
-{
- QUIC_VERSION_UNKNOWN=0,
- //NetApp
- QUANT_VERSION_00=0x45474700,
- QUANT_VERSION_FF=0x454747FF,
-
- //Private Octopus
- PICOQUIC_VERSION_30=0x50435130,
-
- //google
- GQUIC_VERSION_Q001=0x51303031,
- GQUIC_VERSION_Q002=0x51303032,
- GQUIC_VERSION_Q003=0x51303033,
- GQUIC_VERSION_Q004=0x51303034,
- GQUIC_VERSION_Q005=0x51303035,
- GQUIC_VERSION_Q006=0x51303036,
- GQUIC_VERSION_Q007=0x51303037,
- GQUIC_VERSION_Q008=0x51303038,
- GQUIC_VERSION_Q009=0x51303039,
-
- GQUIC_VERSION_Q010=0x51303130,
- GQUIC_VERSION_Q011=0x51303131,
- GQUIC_VERSION_Q012=0x51303132,
- GQUIC_VERSION_Q013=0x51303133,
- GQUIC_VERSION_Q014=0x51303134,
- GQUIC_VERSION_Q015=0x51303135,
- GQUIC_VERSION_Q016=0x51303136,
- GQUIC_VERSION_Q017=0x51303137,
- GQUIC_VERSION_Q018=0x51303138,
- GQUIC_VERSION_Q019=0x51303139,
-
- GQUIC_VERSION_Q020=0x51303230,
- GQUIC_VERSION_Q021=0x51303231,
- GQUIC_VERSION_Q022=0x51303232,
- GQUIC_VERSION_Q023=0x51303233,
- GQUIC_VERSION_Q024=0x51303234,
- GQUIC_VERSION_Q025=0x51303235,
- GQUIC_VERSION_Q026=0x51303236,
- GQUIC_VERSION_Q027=0x51303237,
- GQUIC_VERSION_Q028=0x51303238,
- GQUIC_VERSION_Q029=0x51303239,
-
- GQUIC_VERSION_Q030=0x51303330,
- GQUIC_VERSION_Q031=0x51303331,
- GQUIC_VERSION_Q032=0x51303332,
- GQUIC_VERSION_Q033=0x51303333,
- GQUIC_VERSION_Q034=0x51303334,
- GQUIC_VERSION_Q035=0x51303335,
- GQUIC_VERSION_Q036=0x51303336,
- GQUIC_VERSION_Q037=0x51303337,
- GQUIC_VERSION_Q038=0x51303338,
- GQUIC_VERSION_Q039=0x51303339,
-
- GQUIC_VERSION_Q040=0x51303430,
- GQUIC_VERSION_Q041=0x51303431,
- GQUIC_VERSION_Q042=0x51303432,
- GQUIC_VERSION_Q043=0x51303433,
- GQUIC_VERSION_Q044=0x51303434,
- GQUIC_VERSION_Q045=0x51303435,
- GQUIC_VERSION_Q046=0x51303436,
- GQUIC_VERSION_Q047=0x51303437,
- GQUIC_VERSION_Q048=0x51303438,
- GQUIC_VERSION_Q049=0x51303439,
-
- GQUIC_VERSION_Q050=0x51303530,
- GQUIC_VERSION_Q051=0x51303531,
- GQUIC_VERSION_Q052=0x51303532,
- GQUIC_VERSION_Q053=0x51303533,
- GQUIC_VERSION_Q054=0x51303534,
- GQUIC_VERSION_Q055=0x51303535,
- GQUIC_VERSION_Q056=0x51303536,
- GQUIC_VERSION_Q057=0x51303537,
- GQUIC_VERSION_Q058=0x51303538,
- GQUIC_VERSION_Q059=0x51303539,
-
- GQUIC_VERSION_Q099=0x51303939,
-
- //Google QUIC with TLS 48 - 49 (T048 - T049)
- GQUIC_VERSION_T048=0x54303438,
- GQUIC_VERSION_T049=0x54303439,
-
- //Google QUIC with TLS 50 - 59 (T050 - T059)
- GQUIC_VERSION_T050=0x54303530,
- GQUIC_VERSION_T051=0x54303531,
- GQUIC_VERSION_T052=0x54303532,
- GQUIC_VERSION_T053=0x54303533,
- GQUIC_VERSION_T054=0x54303534,
- GQUIC_VERSION_T055=0x54303535,
- GQUIC_VERSION_T056=0x54303536,
- GQUIC_VERSION_T057=0x54303537,
- GQUIC_VERSION_T058=0x54303538,
- GQUIC_VERSION_T059=0x54303539,
-
- //Google QUIC with TLS 99 (T099)
- GQUIC_VERSION_T099=0x54303939,
-
- //Google Proxied QUIC
- PQUIC_VERSION_PROX=0x50524f58,
-
- //quic-go
- QUIC_GO_VERSION_00=0x51474F00,
- QUIC_GO_VERSION_FF=0x51474FFF,
-
- //quicly
- QUICLY_VERSION_00=0x91c17000,
- QUICLY_VERSION_FF=0x91c170FF,
-
- //Microsoft
- MSQUIC_VERSION_00=0xabcd0000,
- MSQUIC_VERSION_0F=0xabcd000F,
-
- //Mozilla
- MOZQUIC_VERSION_00=0xf123f0c0,
- MOZQUIC_VERSION_0F=0xf123f0cF,
-
- //Facebook
- MVFST_VERSION_00=0xfaceb000,
- MVFST_VERSION_01=0xfaceb001,
- MVFST_VERSION_02=0xfaceb002,
- MVFST_VERSION_03=0xfaceb003,
- MVFST_VERSION_04=0xfaceb004,
- MVFST_VERSION_05=0xfaceb005,
- MVFST_VERSION_06=0xfaceb006,
- MVFST_VERSION_07=0xfaceb007,
- MVFST_VERSION_08=0xfaceb008,
- MVFST_VERSION_09=0xfaceb009,
- MVFST_VERSION_0A=0xfaceb00A,
- MVFST_VERSION_0B=0xfaceb00B,
- MVFST_VERSION_0C=0xfaceb00C,
- MVFST_VERSION_0D=0xfaceb00D,
- MVFST_VERSION_0E=0xfaceb00E,
- MVFST_VERSION_0F=0xfaceb00F,
-
- //IETF
- IQUIC_VERSION_RFC9000=0x00000001,
- IQUIC_VERSION_I001=0xFF000001,
- IQUIC_VERSION_I002=0xFF000002,
- IQUIC_VERSION_I003=0xFF000003,
- IQUIC_VERSION_I004=0xFF000004,
- IQUIC_VERSION_I005=0xFF000005,
- IQUIC_VERSION_I006=0xFF000006,
- IQUIC_VERSION_I007=0xFF000007,
- IQUIC_VERSION_I008=0xFF000008,
- IQUIC_VERSION_I009=0xFF000009,
- IQUIC_VERSION_I010=0xFF00000A,
- IQUIC_VERSION_I011=0xFF00000B,
- IQUIC_VERSION_I012=0xFF00000C,
- IQUIC_VERSION_I013=0xFF00000D,
- IQUIC_VERSION_I014=0xFF00000E,
- IQUIC_VERSION_I015=0xFF00000F,
- IQUIC_VERSION_I016=0xFF000010,
- IQUIC_VERSION_I017=0xFF000011,
- IQUIC_VERSION_I018=0xFF000012,
- IQUIC_VERSION_I019=0xFF000013,
- IQUIC_VERSION_I020=0xFF000014,
- IQUIC_VERSION_I021=0xFF000015,
- IQUIC_VERSION_I022=0xFF000016,
- IQUIC_VERSION_I023=0xFF000017,
- IQUIC_VERSION_I024=0xFF000018,
- IQUIC_VERSION_I025=0xFF000019,
- IQUIC_VERSION_I026=0xFF00001A,
- IQUIC_VERSION_I027=0xFF00001B,
- IQUIC_VERSION_I028=0xFF00001C,
- IQUIC_VERSION_I029=0xFF00001D,
- IQUIC_VERSION_I030=0xFF00001E,
- IQUIC_VERSION_I031=0xFF00001F,
- IQUIC_VERSION_I032=0xFF000020
-};
-
-enum _QUIC_VERSION app_identify_get_quic_protocol(int curdir_is_c2s, const unsigned char *payload, const int payload_len);
-int app_identify_guess_openvpn(const unsigned char *payload, int payload_len, int c2s_pkt_cnt, int s2c_pkt_cnt, struct ovpn_ctx *ovpn, int l4_is_tcp, int curdir_is_c2s); \ No newline at end of file
diff --git a/decoders/lpi/openvpn_ident.cpp b/decoders/lpi/openvpn_ident.cpp
deleted file mode 100644
index 5c40eaf..0000000
--- a/decoders/lpi/openvpn_ident.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * openvpn.c
- *
- * Copyright (C) 2011-22 - ntop.org
- *
- *
- * nDPI is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * nDPI is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with nDPI. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-
-#include <stdint.h>
-#include <arpa/inet.h>
-
-#include "lpi_plugin.h"
-/*
- * OpenVPN TCP / UDP Detection - 128/160 hmac
- *
- * Detection based upon these openvpn protocol properties:
- * - opcode
- * - packet ID
- * - session ID
- *
- * Two (good) packets are needed to perform detection.
- * - First packet from client: save session ID
- * - Second packet from server: report saved session ID
- *
- * TODO
- * - Support PSK only mode (instead of TLS)
- * - Support PSK + TLS mode (PSK used for early authentication)
- * - TLS certificate extraction
- *
- */
-
-#define P_CONTROL_HARD_RESET_CLIENT_V1 (0x01 << 3)
-#define P_CONTROL_HARD_RESET_CLIENT_V2 (0x07 << 3)
-#define P_CONTROL_HARD_RESET_SERVER_V1 (0x02 << 3)
-#define P_CONTROL_HARD_RESET_SERVER_V2 (0x08 << 3)
-#define P_ACK_V1 (0x05 << 3)
-#define P_CONTROL_V1 (0x04 << 3)
-#define P_OPCODE_MASK 0xF8
-#define P_SHA1_HMAC_SIZE 20
-#define P_HMAC_128 16 // (RSA-)MD5, (RSA-)MD4, ..others
-#define P_HMAC_160 20 // (RSA-|DSA-)SHA(1), ..others, SHA1 is openvpn default
-#define P_HMAC_NONE 0
-#define P_HARD_RESET_PACKET_ID_OFFSET(hmac_size) (9 + hmac_size)
-#define P_PACKET_ID_ARRAY_LEN_OFFSET(hmac_size) (P_HARD_RESET_PACKET_ID_OFFSET(hmac_size) + 8)
-#define P_HARD_RESET_CLIENT_MAX_COUNT 5
-
-static inline uint32_t get_packet_id(const uint8_t * payload, uint8_t hms) {
- return(ntohl(*(uint32_t*)(payload + P_HARD_RESET_PACKET_ID_OFFSET(hms))));
-}
-
-static inline int8_t check_pkid_and_detect_hmac_size(const uint8_t * payload) {
- // try to guess
- if((int)get_packet_id(payload, P_HMAC_160) != 0)
- return P_HMAC_160;
-
- if((int)get_packet_id(payload, P_HMAC_128) != 0 )
- return P_HMAC_128;
-
- if((int)get_packet_id(payload, P_HMAC_NONE) != 0)
- return P_HMAC_NONE;
-
- return(-1);
-}
-
-int app_identify_guess_openvpn(const unsigned char *payload, int payload_len, int c2s_pkt_cnt, int s2c_pkt_cnt, struct ovpn_ctx *ovpn, int l4_is_tcp, int curdir_is_c2s)
-{
- const uint8_t * session_remote;
- uint8_t opcode;
- uint8_t alen;
- int8_t hmac_size;
- int8_t failed = 0;
-
- if (c2s_pkt_cnt > 5)
- {
- if (ovpn->contain_local_session_id_pkt_num == P_HARD_RESET_CLIENT_MAX_COUNT - 1 && ovpn->valid_opcode_cnt == P_HARD_RESET_CLIENT_MAX_COUNT)
- return 1;
- return -1;
- }
-
- if (payload_len >= 40)
- {
- // skip openvpn TCP transport packet size
- if (l4_is_tcp)
- payload += 2, payload_len -= 2;
-
- opcode = payload[0] & P_OPCODE_MASK;
- if (curdir_is_c2s == 1 &&
- (opcode == P_CONTROL_HARD_RESET_CLIENT_V1 ||
- opcode == P_CONTROL_HARD_RESET_CLIENT_V2 ||
- opcode == P_ACK_V1 ||
- opcode == P_CONTROL_V1))
- {
- ovpn->valid_opcode_cnt++;
- }
- // for UDP, trying to identify by opcode and first packet length
- if (l4_is_tcp == 0)
- {
- if ((c2s_pkt_cnt == 1 || s2c_pkt_cnt == 1) && (((payload_len == 112) && ((opcode == 168) || (opcode == 192))) || ((payload_len == 80) && ((opcode == 184) || (opcode == 88) || (opcode == 160) || (opcode == 168) || (opcode == 200)))))
- {
- return 1;
- }
- }
-
- if(s2c_pkt_cnt >= 1 && curdir_is_c2s == 0)return 0;
-
- if (curdir_is_c2s == 1 && c2s_pkt_cnt <= P_HARD_RESET_CLIENT_MAX_COUNT && (opcode == P_CONTROL_HARD_RESET_CLIENT_V1 || opcode == P_CONTROL_HARD_RESET_CLIENT_V2 || opcode == P_ACK_V1 || opcode == P_CONTROL_V1))
- {
- if (check_pkid_and_detect_hmac_size(payload) >= 0)
- {
- if (c2s_pkt_cnt > 1)
- {
- if (memcmp(&ovpn->local_session_id, payload + 1, 8) == 0)
- {
- ovpn->contain_local_session_id_pkt_num++;
- }
- }
- memcpy(&ovpn->local_session_id, payload + 1, 8);
- }
- }
- else if (c2s_pkt_cnt >= 1 && c2s_pkt_cnt <= P_HARD_RESET_CLIENT_MAX_COUNT &&
- (opcode == P_CONTROL_HARD_RESET_SERVER_V1 || opcode == P_CONTROL_HARD_RESET_SERVER_V2))
- {
-
- hmac_size = check_pkid_and_detect_hmac_size(payload);
-
- if (hmac_size >= 0)
- {
- u_int16_t offset = P_PACKET_ID_ARRAY_LEN_OFFSET(hmac_size);
-
- alen = payload[offset];
-
- if (alen > 0)
- {
- offset += 1 + alen * 4;
-
- if ((offset + 8) <= payload_len)
- {
- session_remote = &payload[offset];
-
- if (memcmp(&ovpn->local_session_id, session_remote, 8) == 0)
- {
-
- return 1;
- }
- else
- {
-
- failed = 1;
- }
- }
- else
- failed = 1;
- }
- else
- failed = 1;
- }
- else
- failed = 1;
- }
- else
- failed = 1;
-
- if (failed)
- return -1;
- }
-
- return 0;
-} \ No newline at end of file
diff --git a/decoders/lpi/quic_ident.cpp b/decoders/lpi/quic_ident.cpp
deleted file mode 100644
index f1d5659..0000000
--- a/decoders/lpi/quic_ident.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-#include <arpa/inet.h>
-#include "lpi_plugin.h"
-
-#define GQUIC_PUBLIC_FLAG_VERSION 0x01
-#define GQUIC_PUBLIC_FLAG_RST 0x02
-#define GQUIC_PUBLIC_FLAG_NONCE 0x04
-#define GQUIC_PUBLIC_FLAG_CID 0x08
-#define GQUIC_PUBLIC_FLAG_PKT_NUM 0x30
-
-//GQIIC Frame type
-#define GQUIC_SPECIAL_FRAME_FLAG 0xE0 // Special Frame Types
-#define GQUIC_SPECIAL_FRAME_STREAM 0x80
-#define GQUIC_SPECIAL_FRAME_ACK 0x40
-#define GQUIC_SPECIAL_FRAME_CONGEST_FB 0x20
-
-#define GQUIC_SPECIAL_FRAME_STREAM_FIN 0x40 // FIN
-#define GQUIC_SPECIAL_FRAME_STREAM_DLEN 0x20 //stream length
-#define GQUIC_SPECIAL_FRAME_STREAM_OFFSET 0x1C //offset header field
-#define GQUIC_SPECIAL_FRAME_STREAM_ID 0x03 //offset header field
-
-#define GQUIC_REGULAR_FRAME_PADDING 0x00
-#define GQUIC_REGULAR_FRAME_RST_STREAM 0x01
-#define GQUIC_REGULAR_FRAME_CONNECTION_CLOSE 0x02
-#define GQUIC_REGULAR_FRAME_GOAWAY 0x03
-#define GQUIC_REGULAR_FRAME_WINDOW_UPDATE 0x04
-#define GQUIC_REGULAR_FRAME_BLOCKED 0x05
-#define GQUIC_REGULAR_FRAME_STOP_WAITING 0x06
-#define GQUIC_REGULAR_FRAME_PING 0x07
-
-#define GQUIC_SPECIAL_FRAME_FLAG 0xE0 // Special Frame Types
-#define GQUIC_SPECIAL_FRAME_STREAM 0x80
-#define GQUIC_SPECIAL_FRAME_ACK 0x40
-#define GQUIC_SPECIAL_FRAME_CONGEST_FB 0x20
-
-#define GQUIC_SPECIAL_FRAME_STREAM_FIN 0x40 // FIN
-#define GQUIC_SPECIAL_FRAME_STREAM_DLEN 0x20 //stream length
-#define GQUIC_SPECIAL_FRAME_STREAM_OFFSET 0x1C //offset header field
-#define GQUIC_SPECIAL_FRAME_STREAM_ID 0x03 //offset header field
-
-#define GQUIC_REGULAR_FRAME_PADDING 0x00
-#define GQUIC_REGULAR_FRAME_RST_STREAM 0x01
-#define GQUIC_REGULAR_FRAME_CONNECTION_CLOSE 0x02
-#define GQUIC_REGULAR_FRAME_GOAWAY 0x03
-#define GQUIC_REGULAR_FRAME_WINDOW_UPDATE 0x04
-#define GQUIC_REGULAR_FRAME_BLOCKED 0x05
-#define GQUIC_REGULAR_FRAME_STOP_WAITING 0x06
-#define GQUIC_REGULAR_FRAME_PING 0x07
-
-//IQIIC Frame type (GQUIC_Q046 is iQUIC 17)
-#define IQUIC_FRAME_PADDING 0x00
-#define IQUIC_FRAME_PING 0x10
-#define IQUIC_FRAME_ACK_HEX02 0x20
-#define IQUIC_FRAME_ACK_HEX03 0x30
-#define IQUIC_FRAME_RESET_STREAM 0x40
-#define IQUIC_FRAME_STOP_SENDING 0x50
-#define IQUIC_FRAME_CRYPTO 0x60
-#define IQUIC_FRAME_NEW_TOKEN 0x70
-#define IQUIC_FRAME_STREAM_HEX08 0x80
-#define IQUIC_FRAME_STREAM_HEX09 0x90
-#define IQUIC_FRAME_STREAM_HEX0A 0xA0
-#define IQUIC_FRAME_STREAM_HEX0B 0xB0
-#define IQUIC_FRAME_STREAM_HEX0C 0xC0
-#define IQUIC_FRAME_STREAM_HEX0D 0xD0
-#define IQUIC_FRAME_STREAM_HEX0E 0xE0
-#define IQUIC_FRAME_STREAM_HEX0F 0xF0
-#define IQUIC_FRAME_MAX_DATA 0x01
-#define IQUIC_FRAME_MAX_STREAM_DATA 0x11
-#define IQUIC_FRAME_MAX_STREAMS_HEX12 0x21
-#define IQUIC_FRAME_MAX_STREAMS_HEX13 0x31
-#define IQUIC_FRAME_DATA_BLOCKED 0x41
-#define IQUIC_FRAME_STREAM_DATA_BLOCKED 0x51
-#define IQUIC_FRAME_STREAMS_BLOCKED_HEX16 0x61
-#define IQUIC_FRAME_STREAMS_BLOCKED_HEX17 0x71
-#define IQUIC_FRAME_NEW_CONNECTION_ID 0x81
-#define IQUIC_FRAME_RETIRE_CONNECTION_ID 0x91
-#define IQUIC_FRAME_PATH_CHALLENGE 0xA1
-#define IQUIC_FRAME_PATH_RESPONSE 0xB1
-#define IQUIC_FRAME_CONNECTION_CLOSE_HEX1C 0xC1
-#define IQUIC_FRAME_CONNECTION_CLOSE_HEX1D 0xD1
-
-
-/**************************************************************************/
-/* Message tag */
-/**************************************************************************/
-#define CHLO 0x43484C4F
-#define SHLO 0x53484C4F
-#define REJ 0x52454A00
-#define PRST 0x50525354
-
-
-/**************************************************************************/
-/* Tag */
-/**************************************************************************/
-#define TAG_PAD 0x50414400
-#define TAG_SNI 0x534E4900
-#define TAG_VER 0x56455200
-#define TAG_CCS 0x43435300
-#define TAG_UAID 0x55414944
-#define TAG_PDMD 0x50444d44
-#define TAG_STK 0x53544b00
-#define TAG_SNO 0x534E4F00
-#define TAG_PROF 0x50524F46
-#define TAG_SCFG 0x53434647
-#define TAG_RREJ 0x5252454A
-#define TAG_CRT 0x435254FF
-#define TAG_AEAD 0x41454144
-#define TAG_SCID 0x53434944
-#define TAG_PUBS 0x50554253
-#define TAG_KEXS 0x4B455853
-#define TAG_OBIT 0x4F424954
-#define TAG_EXPY 0x45585059
-#define TAG_NONC 0x4E4F4E43
-#define TAG_MSPC 0x4D535043
-#define TAG_TCID 0x54434944
-#define TAG_SRBF 0x53524246
-#define TAG_ICSL 0x4943534C
-#define TAG_SCLS 0x53434C53
-#define TAG_COPT 0x434F5054
-#define TAG_CCRT 0x43435254
-#define TAG_IRTT 0x49525454
-#define TAG_CFCW 0x43464357
-#define TAG_SFCW 0x53464357
-#define TAG_CETV 0x43455456
-#define TAG_XLCT 0x584C4354
-#define TAG_NONP 0x4E4F4E50
-#define TAG_CSCT 0x43534354
-#define TAG_CTIM 0x4354494D
-#define TAG_MIDS 0x4D494453
-#define TAG_FHOL 0x46484F4C
-#define TAG_STTL 0x5354544C
-#define TAG_SMHL 0x534D484C
-#define TAG_TBKP 0x54424B50
-
-/* Public Reset Tag */
-#define TAG_RNON 0x524E4F4E
-#define TAG_RSEQ 0x52534551
-#define TAG_CADR 0x43414452
-
-#define EXTENSION_SERVER_NAME 0x0000
-#define EXTENSION_SUPPORT_GROUP 0x000A
-#define EXTENSION_APP_PROT_NEGO 0x0010 //application layer protocol negotiation
-#define EXTENSION_SIG_ALGORITHM 0x000D
-#define EXTENSION_KEY_SHARE 0x0033
-#define EXTENSION_PSK_EXCHANGE 0x002D
-#define EXTENSION_SUPP_SSL_VER 0x002B
-#define EXTENSION_QUIC_PARAM 0xFFA5
-#define EXTENSION_COMPRESS_CERT 0x001B
-
-#define EXT_QUIC_PARAM_MAX_IDLE_TIMEOUT 0x01
-#define EXT_QUIC_PARAM_MAX_UDP_PAYLOAD 0x03
-#define EXT_QUIC_PARAM_MAX_INIT_DATA 0x04
-#define EXT_QUIC_PARAM_MAX_STREAM_BIDI_LOCAL 0x05
-#define EXT_QUIC_PARAM_MAX_STREAM_BIDI_REMOTE 0x06
-#define EXT_QUIC_PARAM_MAX_STREAM_UNI 0x07
-#define EXT_QUIC_PARAM_MAX_STREAMS_BIDI 0x08
-#define EXT_QUIC_PARAM_MAX_STREAMS_UNI 0x09
-#define EXT_QUIC_PARAM_MAX_FRAME_SIZE 0x20
-#define EXT_QUIC_PARAM_INIT_SRC_CONN_ID 0x0F
-#define EXT_QUIC_PARAM_USER_AGENT 0x7129
-#define EXT_QUIC_PARAM_NOT_YET_SUPPORTED 0x712B
-#define EXT_QUIC_PARAM_QUIC_VERSION 0x80004752
-#define EXT_QUIC_PARAM_GREASE_LOW4 0x91D24E9B
-#define EXT_QUIC_PARAM_GREASE_HIGH4 0xEA666DE7
-
-#define EXTENSION_QUIC_PARAM_UA 0x7129
-#define EXTENSION_QUIC_PARAM_VERSION 0x4752
-
-enum _QUIC_VERSION app_identify_get_quic_protocol(int curdir_is_c2s, const unsigned char *payload, const int payload_len)
-{
- enum _QUIC_VERSION quic_version = QUIC_VERSION_UNKNOWN;
-
- if(payload_len<5)
- {
- return QUIC_VERSION_UNKNOWN;
- }
-
- // Q001~Q043: 0x80 is currently unused, and must be set to 0
-
- // The most significant bit (0x80) of byte 0 (the first byte) is set to 1 for long headers
- (payload[0] & 0x80) ? (quic_version = (enum _QUIC_VERSION)ntohl(*(unsigned int *)(payload + 1))) : QUIC_VERSION_UNKNOWN;
- if (
- (quic_version == GQUIC_VERSION_Q099) ||
- (quic_version == PICOQUIC_VERSION_30) ||
- (quic_version == PQUIC_VERSION_PROX) ||
- (quic_version == GQUIC_VERSION_T099) ||
- (quic_version >= GQUIC_VERSION_Q044 && quic_version <= GQUIC_VERSION_Q050) ||
- (quic_version >= GQUIC_VERSION_Q051 && quic_version <= GQUIC_VERSION_Q059) ||
- (quic_version >= GQUIC_VERSION_T048 && quic_version <= GQUIC_VERSION_T049) ||
- (quic_version >= GQUIC_VERSION_T050 && quic_version <= GQUIC_VERSION_T059) ||
- (quic_version >= QUANT_VERSION_00 && quic_version <= QUANT_VERSION_FF) ||
- (quic_version >= QUIC_GO_VERSION_00 && quic_version <= QUIC_GO_VERSION_FF) ||
- (quic_version >= QUICLY_VERSION_00 && quic_version <= QUICLY_VERSION_FF) ||
- (quic_version >= MSQUIC_VERSION_00 && quic_version <= MSQUIC_VERSION_0F) ||
- (quic_version >= MOZQUIC_VERSION_00 && quic_version <= MOZQUIC_VERSION_0F) ||
- (quic_version >= MVFST_VERSION_00 && quic_version <= MVFST_VERSION_0F) ||
- (quic_version >= IQUIC_VERSION_I001 && quic_version <= IQUIC_VERSION_I032) ||
- (quic_version == IQUIC_VERSION_RFC9000))
- {
- return quic_version;
- }
-
- char public_flags=payload[0];
- int used_len = 1;
- if(curdir_is_c2s==0 && public_flags & GQUIC_PUBLIC_FLAG_VERSION)
- {
- return QUIC_VERSION_UNKNOWN;
- }
- if((!public_flags)&GQUIC_PUBLIC_FLAG_PKT_NUM)
- {
- if(public_flags&GQUIC_PUBLIC_FLAG_VERSION) //Public Reset Packet
- {
- return QUIC_VERSION_UNKNOWN;// todo
- }
- else // Version Negotiation Packet
- {
- return QUIC_VERSION_UNKNOWN;
- }
- }
- if(public_flags&GQUIC_PUBLIC_FLAG_CID)
- {
- used_len+=sizeof(unsigned long long); // CID length
- }
-
- if(payload_len>=(int)(used_len+sizeof(int)) && public_flags&GQUIC_PUBLIC_FLAG_VERSION && (*(unsigned char *)(payload+used_len)==0x51))
- {
- quic_version=(enum _QUIC_VERSION)ntohl(*(unsigned int *)(payload+used_len));
- used_len+=sizeof(int); // skip version
- }
-
- if(quic_version<GQUIC_VERSION_Q001 || quic_version>GQUIC_VERSION_Q043)
- {
- return QUIC_VERSION_UNKNOWN;
- }
-
- return quic_version;
-}
-
diff --git a/decoders/lpi/version.map b/decoders/lpi/version.map
deleted file mode 100644
index 63ee411..0000000
--- a/decoders/lpi/version.map
+++ /dev/null
@@ -1,10 +0,0 @@
-VERS_2.4{
-global:
-extern "C" {
- lpi_plugin_load;
- lpi_plugin_unload;
- GIT_VERSION_*;
-};
-
-local: *;
-};
diff --git a/decoders/lpi/.gitignore b/decoders/lpi_plus/.gitignore
index 43c6efe..43c6efe 100644
--- a/decoders/lpi/.gitignore
+++ b/decoders/lpi_plus/.gitignore
diff --git a/decoders/lpi_plus/CMakeLists.txt b/decoders/lpi_plus/CMakeLists.txt
new file mode 100644
index 0000000..b5da11a
--- /dev/null
+++ b/decoders/lpi_plus/CMakeLists.txt
@@ -0,0 +1,13 @@
+add_definitions(-fPIC)
+add_subdirectory(libprotoident)
+
+add_library(lpi_plus lpip_module.c lpip_extend.c)
+target_include_directories(lpi_plus PUBLIC ${CMAKE_SOURCE_DIR}/deps/)
+target_include_directories(lpi_plus PUBLIC ${CMAKE_SOURCE_DIR}/decoders/)
+
+target_link_libraries(lpi_plus libprotoident appid)
+set_target_properties(lpi_plus PROPERTIES LINK_FLAGS
+ "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/version.map")
+
+#install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/stellar_plugin COMPONENT LIBRARIES)
+
diff --git a/decoders/lpi/libprotoident/CMakeLists.txt b/decoders/lpi_plus/libprotoident/CMakeLists.txt
index 98de411..98de411 100644
--- a/decoders/lpi/libprotoident/CMakeLists.txt
+++ b/decoders/lpi_plus/libprotoident/CMakeLists.txt
diff --git a/decoders/lpi/libprotoident/libprotoident.cc b/decoders/lpi_plus/libprotoident/libprotoident.cc
index f5baf58..e3f1db1 100644
--- a/decoders/lpi/libprotoident/libprotoident.cc
+++ b/decoders/lpi_plus/libprotoident/libprotoident.cc
@@ -29,12 +29,10 @@
#include <stdio.h>
#include <assert.h>
-//#include <libtrace.h>
#include <inttypes.h>
#include <sys/types.h>
#include <stdint.h>
#include <stdlib.h>
-#include <signal.h>
#include "libprotoident.h"
#include "proto_manager.h"
@@ -53,7 +51,7 @@ static LPIProtocolMap lpi_protocols;
static LPICategoryMap lpi_categories;
static LPICategoryProtocolMap lpi_category_protocols;
-int lpi_init_library(int level) {
+int lpi_init_library() {
if (init_called) {
fprintf(stderr, "WARNING: lpi_init_library has already been called\n");
diff --git a/decoders/lpi/libprotoident/libprotoident.h b/decoders/lpi_plus/libprotoident/libprotoident.h
index 500d26a..3286276 100644
--- a/decoders/lpi/libprotoident/libprotoident.h
+++ b/decoders/lpi_plus/libprotoident/libprotoident.h
@@ -30,8 +30,8 @@
//#include <libtrace.h>
#include <pthread.h>
-#include <list>
#include <stdint.h>
+#include <stdbool.h>
#include <netinet/in.h>
@@ -716,22 +716,12 @@ struct lpi_module {
};
-typedef std::list<lpi_module_t *> ProtoMatchList;
-
-typedef struct lpi_thread {
- int index;
- lpi_module_t *module;
- lpi_data_t *data;
- bool result;
-} lpi_thread_t;
-
-typedef std::list<pthread_t> ThreadList;
/* Initialises the LPI library, by registering all the protocol modules.
*
* @return 0 if initialisation succeeded, -1 otherwise
*/
-int lpi_init_library(int level);
+int lpi_init_library();
/* Shuts down the LPI library, by de-registering all the protocol modules */
void lpi_free_library(void);
@@ -755,9 +745,6 @@ void lpi_init_data(lpi_data_t *data);
*
* @return 0 if the packet was ignored, 1 if the LPI data was updated.
*/
-int lpi_update_dpkt(lpi_data_t *data, struct streaminfo *pstream,
- const char *scan_data, int scan_data_len, char tsproto, uint32_t plseq,
- uint32_t _curdir);
/** Returns a unique string describing the provided protocol.
*
diff --git a/decoders/lpi/libprotoident/proto_common.cc b/decoders/lpi_plus/libprotoident/proto_common.cc
index 3fca68c..3fca68c 100644
--- a/decoders/lpi/libprotoident/proto_common.cc
+++ b/decoders/lpi_plus/libprotoident/proto_common.cc
diff --git a/decoders/lpi/libprotoident/proto_common.h b/decoders/lpi_plus/libprotoident/proto_common.h
index 679f784..679f784 100644
--- a/decoders/lpi/libprotoident/proto_common.h
+++ b/decoders/lpi_plus/libprotoident/proto_common.h
diff --git a/decoders/lpi/libprotoident/proto_manager.cc b/decoders/lpi_plus/libprotoident/proto_manager.cc
index b4c58bf..b4c58bf 100644
--- a/decoders/lpi/libprotoident/proto_manager.cc
+++ b/decoders/lpi_plus/libprotoident/proto_manager.cc
diff --git a/decoders/lpi/libprotoident/proto_manager.h b/decoders/lpi_plus/libprotoident/proto_manager.h
index 9e5ff62..9e5ff62 100644
--- a/decoders/lpi/libprotoident/proto_manager.h
+++ b/decoders/lpi_plus/libprotoident/proto_manager.h
diff --git a/decoders/lpi/libprotoident/tcp/lpi_300heroes.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_300heroes.cc
index b93d663..b93d663 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_300heroes.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_300heroes.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_360safeguard.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_360safeguard.cc
index dff2244..dff2244 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_360safeguard.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_360safeguard.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_4d.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_4d.cc
index cd7316c..cd7316c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_4d.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_4d.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_acestream.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_acestream.cc
index c6f205c..c6f205c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_acestream.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_acestream.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_afp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_afp.cc
index 194c23f..194c23f 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_afp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_afp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_airdroid.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_airdroid.cc
index ef94071..ef94071 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_airdroid.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_airdroid.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_airmedia.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_airmedia.cc
index 752b8fe..752b8fe 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_airmedia.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_airmedia.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_akamai.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_akamai.cc
index 85d0361..85d0361 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_akamai.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_akamai.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_amp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_amp.cc
index 6e7aa1d..6e7aa1d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_amp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_amp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_antcoin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_antcoin.cc
index 02d57fb..02d57fb 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_antcoin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_antcoin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_appearin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_appearin.cc
index 5ba45a6..5ba45a6 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_appearin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_appearin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_apple_push.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_apple_push.cc
index a678821..a678821 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_apple_push.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_apple_push.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ares.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ares.cc
index 720f318..720f318 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ares.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ares.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_badbaidu.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_badbaidu.cc
index 857be3d..857be3d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_badbaidu.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_badbaidu.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_baofeng_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_baofeng_tcp.cc
index 9a74bfc..9a74bfc 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_baofeng_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_baofeng_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_beam.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_beam.cc
index e9c6401..e9c6401 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_beam.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_beam.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_bitcoin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_bitcoin.cc
index 137e78c..137e78c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_bitcoin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_bitcoin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_bitextend.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_bitextend.cc
index a328211..a328211 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_bitextend.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_bitextend.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_bittorrent.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_bittorrent.cc
index b953003..b953003 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_bittorrent.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_bittorrent.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_blackdesert.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_blackdesert.cc
index ded8c93..ded8c93 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_blackdesert.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_blackdesert.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_blizzard.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_blizzard.cc
index d1b0fdb..d1b0fdb 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_blizzard.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_blizzard.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_btsync.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_btsync.cc
index a0ecd38..a0ecd38 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_btsync.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_btsync.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_bwsyncandshare.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_bwsyncandshare.cc
index acbb51e..acbb51e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_bwsyncandshare.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_bwsyncandshare.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_cacaoweb.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_cacaoweb.cc
index 5f6b57b..5f6b57b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_cacaoweb.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_cacaoweb.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_cgp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_cgp.cc
index 3a8b1c2..3a8b1c2 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_cgp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_cgp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_chatango.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_chatango.cc
index c36ca87..c36ca87 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_chatango.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_chatango.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_cisco_vpn.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_cisco_vpn.cc
index 5e4b22c..5e4b22c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_cisco_vpn.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_cisco_vpn.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_clashofclans.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_clashofclans.cc
index 2574507..2574507 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_clashofclans.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_clashofclans.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_classin_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_classin_tcp.cc
index fcf9697..fcf9697 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_classin_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_classin_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_clubbox.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_clubbox.cc
index 3bf6d74..3bf6d74 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_clubbox.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_clubbox.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_cod_waw.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_cod_waw.cc
index edd4002..edd4002 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_cod_waw.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_cod_waw.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_conquer.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_conquer.cc
index 99bb107..99bb107 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_conquer.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_conquer.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_crashplan.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_crashplan.cc
index fcdb795..fcdb795 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_crashplan.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_crashplan.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_crossfire_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_crossfire_tcp.cc
index 2f73f2b..2f73f2b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_crossfire_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_crossfire_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_cryptic.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_cryptic.cc
index 44f6c1e..44f6c1e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_cryptic.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_cryptic.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_cvs.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_cvs.cc
index 976cb29..976cb29 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_cvs.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_cvs.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_dahua_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_dahua_tcp.cc
index 8e308bb..8e308bb 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_dahua_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_dahua_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_dash.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_dash.cc
index 4355b07..4355b07 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_dash.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_dash.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_dell_backup.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_dell_backup.cc
index 65ede05..65ede05 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_dell_backup.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_dell_backup.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_destiny.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_destiny.cc
index 5066e08..5066e08 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_destiny.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_destiny.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_diablo3.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_diablo3.cc
index 311fc8f..311fc8f 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_diablo3.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_diablo3.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_dianping_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_dianping_tcp.cc
index 3239ea1..3239ea1 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_dianping_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_dianping_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_directconnect.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_directconnect.cc
index 392415e..392415e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_directconnect.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_directconnect.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_dnf.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_dnf.cc
index 3482109..3482109 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_dnf.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_dnf.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_dns.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_dns.cc
index 2f2468b..2f2468b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_dns.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_dns.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_dogecoin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_dogecoin.cc
index 12aa27b..12aa27b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_dogecoin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_dogecoin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_douyu.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_douyu.cc
index 28eb419..28eb419 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_douyu.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_douyu.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_douyu_chat.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_douyu_chat.cc
index dc6e169..dc6e169 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_douyu_chat.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_douyu_chat.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_duelingnetwork.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_duelingnetwork.cc
index 643ebee..643ebee 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_duelingnetwork.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_duelingnetwork.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_dvrns.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_dvrns.cc
index fbc50b2..fbc50b2 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_dvrns.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_dvrns.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_dxp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_dxp.cc
index 1ab0cda..1ab0cda 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_dxp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_dxp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ea_games.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ea_games.cc
index c061bae..c061bae 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ea_games.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ea_games.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_emule.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_emule.cc
index 5e18dc5..5e18dc5 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_emule.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_emule.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ethernetip.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ethernetip.cc
index e309665..e309665 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ethernetip.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ethernetip.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_eye.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_eye.cc
index 294e87e..294e87e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_eye.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_eye.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_facebook_turn.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_facebook_turn.cc
index 95bd2fb..95bd2fb 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_facebook_turn.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_facebook_turn.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_fb_message.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_fb_message.cc
index eeba8c7..eeba8c7 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_fb_message.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_fb_message.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_fbcdn_ssl.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_fbcdn_ssl.cc
index 9ef1232..9ef1232 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_fbcdn_ssl.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_fbcdn_ssl.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ffxiv.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ffxiv.cc
index c934302..c934302 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ffxiv.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ffxiv.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_filenori.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_filenori.cc
index fb0ea02..fb0ea02 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_filenori.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_filenori.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_flash.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_flash.cc
index e56b470..e56b470 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_flash.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_flash.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_fliggy.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_fliggy.cc
index f97e9dc..f97e9dc 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_fliggy.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_fliggy.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_fring.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_fring.cc
index 33dee22..33dee22 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_fring.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_fring.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ftpcontrol.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ftpcontrol.cc
index 0fd7b2e..0fd7b2e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ftpcontrol.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ftpcontrol.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ftpdata.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ftpdata.cc
index dd77395..dd77395 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ftpdata.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ftpdata.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_fuckcoin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_fuckcoin.cc
index e407d1c..e407d1c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_fuckcoin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_fuckcoin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_funshion.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_funshion.cc
index 358f83e..358f83e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_funshion.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_funshion.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_gamespy.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_gamespy.cc
index 7947571..7947571 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_gamespy.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_gamespy.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_gcafe_updater.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_gcafe_updater.cc
index 3cbbd0a..3cbbd0a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_gcafe_updater.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_gcafe_updater.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_giop.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_giop.cc
index 8dc926d..8dc926d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_giop.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_giop.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_git.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_git.cc
index d3481b1..d3481b1 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_git.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_git.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_glupteba.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_glupteba.cc
index 33f0b54..33f0b54 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_glupteba.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_glupteba.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_gnutella.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_gnutella.cc
index 608d825..608d825 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_gnutella.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_gnutella.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_goku.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_goku.cc
index 206589e..206589e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_goku.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_goku.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_googlehangouts.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_googlehangouts.cc
index 49417a9..49417a9 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_googlehangouts.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_googlehangouts.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_graalonlineera.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_graalonlineera.cc
index 44a3ce4..44a3ce4 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_graalonlineera.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_graalonlineera.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_guildwars2.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_guildwars2.cc
index 67e93dc..67e93dc 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_guildwars2.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_guildwars2.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_hamachi.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_hamachi.cc
index 7530132..7530132 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_hamachi.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_hamachi.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_harveys.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_harveys.cc
index 52cdc83..52cdc83 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_harveys.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_harveys.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_hearthstone.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_hearthstone.cc
index 2807a5c..2807a5c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_hearthstone.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_hearthstone.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_hola.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_hola.cc
index 3691028..3691028 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_hola.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_hola.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_hots_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_hots_tcp.cc
index bc95c35..bc95c35 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_hots_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_hots_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_http.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_http.cc
index d32cace..d32cace 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_http.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_http.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_http_badport.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_http_badport.cc
index d0be1f0..d0be1f0 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_http_badport.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_http_badport.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_http_nonstandard.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_http_nonstandard.cc
index db1d394..db1d394 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_http_nonstandard.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_http_nonstandard.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_http_tunnel.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_http_tunnel.cc
index e12a31e..e12a31e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_http_tunnel.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_http_tunnel.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_https.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_https.cc
index dc0bdf9..dc0bdf9 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_https.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_https.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ica.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ica.cc
index 8a54b9b..8a54b9b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ica.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ica.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_icep.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_icep.cc
index 1c0f7d8..1c0f7d8 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_icep.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_icep.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_id.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_id.cc
index 01de0c0..01de0c0 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_id.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_id.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_idrivesync.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_idrivesync.cc
index 5a4379b..5a4379b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_idrivesync.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_idrivesync.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ihexin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ihexin.cc
index 27a1207..27a1207 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ihexin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ihexin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_imap.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_imap.cc
index 98a9ffb..98a9ffb 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_imap.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_imap.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_imaps.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_imaps.cc
index 77bb7d6..77bb7d6 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_imaps.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_imaps.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_imesh.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_imesh.cc
index f73163e..f73163e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_imesh.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_imesh.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_invalid.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid.cc
index 2787bcb..2787bcb 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_invalid.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_invalid_bittorrent.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid_bittorrent.cc
index 7d35b95..7d35b95 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_invalid_bittorrent.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid_bittorrent.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_invalid_http.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid_http.cc
index 09c544b..09c544b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_invalid_http.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid_http.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_invalid_pop.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid_pop.cc
index 2085b31..2085b31 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_invalid_pop.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid_pop.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_invalid_smtp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid_smtp.cc
index a55d89d..a55d89d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_invalid_smtp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_invalid_smtp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ipfs.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ipfs.cc
index 23ab4d1..23ab4d1 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ipfs.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ipfs.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ipop.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ipop.cc
index cac92d9..cac92d9 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ipop.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ipop.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ipsharkk.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ipsharkk.cc
index 1c5259d..1c5259d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ipsharkk.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ipsharkk.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_irc.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_irc.cc
index 1cace1a..1cace1a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_irc.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_irc.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_java.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_java.cc
index 40b505f..40b505f 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_java.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_java.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_jedi.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_jedi.cc
index 2780674..2780674 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_jedi.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_jedi.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_jx3online.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_jx3online.cc
index 80e7cb7..80e7cb7 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_jx3online.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_jx3online.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_kakao.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_kakao.cc
index 6ec17c8..6ec17c8 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_kakao.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_kakao.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_kankan_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_kankan_tcp.cc
index de2a052..de2a052 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_kankan_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_kankan_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_kaseya.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_kaseya.cc
index acc7def..acc7def 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_kaseya.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_kaseya.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_kaspersky.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_kaspersky.cc
index 983e416..983e416 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_kaspersky.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_kaspersky.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_kik.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_kik.cc
index cd6f545..cd6f545 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_kik.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_kik.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_kingofglory_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_kingofglory_tcp.cc
index 330ac34..330ac34 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_kingofglory_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_kingofglory_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_kuaibo.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_kuaibo.cc
index 6f4c89e..6f4c89e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_kuaibo.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_kuaibo.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ldap.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ldap.cc
index 80f8614..80f8614 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ldap.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ldap.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_lifeforge.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_lifeforge.cc
index a216e83..a216e83 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_lifeforge.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_lifeforge.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_line.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_line.cc
index c4f15dd..c4f15dd 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_line.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_line.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_litecoin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_litecoin.cc
index 8039024..8039024 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_litecoin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_litecoin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_llp2p.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_llp2p.cc
index a2e820f..a2e820f 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_llp2p.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_llp2p.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_maplestory_china.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_maplestory_china.cc
index 16fa307..16fa307 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_maplestory_china.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_maplestory_china.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_maxicloud.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_maxicloud.cc
index 000ddde..000ddde 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_maxicloud.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_maxicloud.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_message4u.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_message4u.cc
index 578eaab..578eaab 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_message4u.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_message4u.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_minecraft.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_minecraft.cc
index 434478b..434478b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_minecraft.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_minecraft.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mitglieder.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mitglieder.cc
index 5cf25be..5cf25be 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mitglieder.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mitglieder.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mms.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mms.cc
index 59f6466..59f6466 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mms.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mms.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mongo.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mongo.cc
index e48405d..e48405d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mongo.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mongo.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mp2p.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mp2p.cc
index 0ec6275..0ec6275 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mp2p.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mp2p.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_msn.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_msn.cc
index 003d19d..003d19d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_msn.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_msn.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_msnc.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_msnc.cc
index b734e68..b734e68 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_msnc.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_msnc.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_msnv.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_msnv.cc
index 9db045b..9db045b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_msnv.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_msnv.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_munin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_munin.cc
index ea68858..ea68858 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_munin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_munin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mysql.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mysql.cc
index 96ce748..96ce748 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mysql.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mysql.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mystery_8000.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_8000.cc
index ee58a59..ee58a59 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mystery_8000.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_8000.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mystery_9000.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_9000.cc
index 6d1af54..6d1af54 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mystery_9000.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_9000.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mystery_conn.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_conn.cc
index dcac2b9..dcac2b9 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mystery_conn.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_conn.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mystery_iG.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_iG.cc
index 428bf5e..428bf5e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mystery_iG.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_iG.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mystery_pspr.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_pspr.cc
index d592a11..d592a11 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mystery_pspr.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_pspr.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mystery_rxxf.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_rxxf.cc
index 964977a..964977a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mystery_rxxf.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_rxxf.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mystery_symantec.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_symantec.cc
index 464db00..464db00 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mystery_symantec.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mystery_symantec.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_mzinga.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_mzinga.cc
index 7879731..7879731 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_mzinga.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_mzinga.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_naverp2p.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_naverp2p.cc
index e34535e..e34535e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_naverp2p.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_naverp2p.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ncsoft.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ncsoft.cc
index eeca36b..eeca36b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ncsoft.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ncsoft.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ndt_tput.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ndt_tput.cc
index 640572c..640572c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ndt_tput.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ndt_tput.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_netbios.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_netbios.cc
index 2aff478..2aff478 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_netbios.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_netbios.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_netcat_cctv.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_netcat_cctv.cc
index d8af5c0..d8af5c0 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_netcat_cctv.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_netcat_cctv.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_netmfp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_netmfp.cc
index 28daef2..28daef2 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_netmfp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_netmfp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_nntp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_nntp.cc
index bb1fdda..bb1fdda 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_nntp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_nntp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_nntps.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_nntps.cc
index 85e6ee2..85e6ee2 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_nntps.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_nntps.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_nofirstpkt.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_nofirstpkt.cc
index 4a869c0..4a869c0 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_nofirstpkt.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_nofirstpkt.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_nomachine.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_nomachine.cc
index 125a49e..125a49e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_nomachine.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_nomachine.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_nopayload.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_nopayload.cc
index 783776d..783776d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_nopayload.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_nopayload.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_norton_backup.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_norton_backup.cc
index c97b771..c97b771 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_norton_backup.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_norton_backup.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_notes_rpc.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_notes_rpc.cc
index 4eaff55..4eaff55 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_notes_rpc.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_notes_rpc.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_nsq.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_nsq.cc
index 3bf88c5..3bf88c5 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_nsq.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_nsq.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_omegle.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_omegle.cc
index e9cd832..e9cd832 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_omegle.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_omegle.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_openvpn.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_openvpn.cc
index f9e58be..f9e58be 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_openvpn.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_openvpn.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ourworld.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ourworld.cc
index 650b8eb..650b8eb 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ourworld.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ourworld.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_palringo.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_palringo.cc
index 1f3d346..1f3d346 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_palringo.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_palringo.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_paltalk.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_paltalk.cc
index f039835..f039835 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_paltalk.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_paltalk.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_pandatv.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_pandatv.cc
index a424559..a424559 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_pandatv.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_pandatv.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_pando.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_pando.cc
index 09a1dae..09a1dae 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_pando.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_pando.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_pathofexile.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_pathofexile.cc
index cbb607a..cbb607a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_pathofexile.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_pathofexile.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_pdbox.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_pdbox.cc
index d6b641f..d6b641f 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_pdbox.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_pdbox.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_pop3.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_pop3.cc
index 4243542..4243542 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_pop3.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_pop3.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_pop3s.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_pop3s.cc
index 1d20249..1d20249 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_pop3s.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_pop3s.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_postgresql.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_postgresql.cc
index aefbd80..aefbd80 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_postgresql.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_postgresql.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_pptp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_pptp.cc
index a1f1672..a1f1672 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_pptp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_pptp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_psn_store.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_psn_store.cc
index c34feea..c34feea 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_psn_store.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_psn_store.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_qcloud_ilvb.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_qcloud_ilvb.cc
index be063ec..be063ec 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_qcloud_ilvb.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_qcloud_ilvb.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_qq_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_qq_tcp.cc
index 9da838a..9da838a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_qq_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_qq_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_qqdownload.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_qqdownload.cc
index a0f5803..a0f5803 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_qqdownload.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_qqdownload.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_qqlive_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_qqlive_tcp.cc
index 4863d99..4863d99 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_qqlive_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_qqlive_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_qqspeedmobile_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_qqspeedmobile_tcp.cc
index 5a4d3fc..5a4d3fc 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_qqspeedmobile_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_qqspeedmobile_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_qvod.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_qvod.cc
index 34b6830..34b6830 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_qvod.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_qvod.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rabbitmq.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rabbitmq.cc
index 190204e..190204e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rabbitmq.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rabbitmq.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ragnarokonline.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ragnarokonline.cc
index 27945ba..27945ba 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ragnarokonline.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ragnarokonline.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_razor.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_razor.cc
index c0603cc..c0603cc 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_razor.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_razor.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rbls.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rbls.cc
index 860f626..860f626 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rbls.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rbls.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rdp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rdp.cc
index be979d9..be979d9 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rdp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rdp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_realmofthemadgod.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_realmofthemadgod.cc
index 13f3bc2..13f3bc2 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_realmofthemadgod.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_realmofthemadgod.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_realvnc.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_realvnc.cc
index 77ca4ec..77ca4ec 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_realvnc.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_realvnc.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rejection.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rejection.cc
index 5027e43..5027e43 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rejection.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rejection.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_relay.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_relay.cc
index 41d2c40..41d2c40 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_relay.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_relay.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_remote_manipulator.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_remote_manipulator.cc
index c7a056c..c7a056c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_remote_manipulator.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_remote_manipulator.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_revolver_nblbt.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_revolver_nblbt.cc
index 0867c66..0867c66 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_revolver_nblbt.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_revolver_nblbt.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rfb.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rfb.cc
index 88bbd7a..88bbd7a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rfb.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rfb.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rpcscan.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rpcscan.cc
index 10ad66a..10ad66a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rpcscan.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rpcscan.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rrtv.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rrtv.cc
index a76e89d..a76e89d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rrtv.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rrtv.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rsync.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rsync.cc
index 7ec6fb0..7ec6fb0 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rsync.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rsync.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rtmp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rtmp.cc
index cdf9991..cdf9991 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rtmp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rtmp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_rtsp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_rtsp.cc
index b1f3b90..b1f3b90 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_rtsp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_rtsp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_runescape.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_runescape.cc
index df7b6cc..df7b6cc 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_runescape.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_runescape.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_s7comm.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_s7comm.cc
index e082821..e082821 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_s7comm.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_s7comm.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_saprouter.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_saprouter.cc
index 00283ed..00283ed 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_saprouter.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_saprouter.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_saszombieassault4.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_saszombieassault4.cc
index b63a9fa..b63a9fa 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_saszombieassault4.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_saszombieassault4.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_second_life.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_second_life.cc
index f5bafb1..f5bafb1 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_second_life.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_second_life.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_shoutcast.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_shoutcast.cc
index ab91f77..ab91f77 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_shoutcast.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_shoutcast.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_silkroadonline.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_silkroadonline.cc
index d22e1f2..d22e1f2 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_silkroadonline.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_silkroadonline.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_sip.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_sip.cc
index a5811f1..a5811f1 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_sip.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_sip.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_skyforge.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_skyforge.cc
index 7df48d8..7df48d8 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_skyforge.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_skyforge.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_skype_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_skype_tcp.cc
index 3924650..3924650 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_skype_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_skype_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_smb.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_smb.cc
index e15b6ac..e15b6ac 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_smb.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_smb.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_smite_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_smite_tcp.cc
index 2107284..2107284 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_smite_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_smite_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_smtp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_smtp.cc
index df3eb0d..df3eb0d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_smtp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_smtp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_smtps.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_smtps.cc
index 35c6a84..35c6a84 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_smtps.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_smtps.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_socks4.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_socks4.cc
index bf71109..bf71109 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_socks4.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_socks4.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_socks5.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_socks5.cc
index 0113538..0113538 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_socks5.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_socks5.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_spdy.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_spdy.cc
index b564224..b564224 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_spdy.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_spdy.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_speedify.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_speedify.cc
index 18bacf6..18bacf6 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_speedify.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_speedify.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_speedin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_speedin.cc
index 0b5831a..0b5831a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_speedin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_speedin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_speedtest.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_speedtest.cc
index d8425ca..d8425ca 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_speedtest.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_speedtest.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_spotify.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_spotify.cc
index 5a8b28b..5a8b28b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_spotify.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_spotify.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ssh.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ssh.cc
index 3c9553c..3c9553c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ssh.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ssh.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ssjj.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ssjj.cc
index 15519ba..15519ba 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ssjj.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ssjj.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_ssl.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_ssl.cc
index 5737522..5737522 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_ssl.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_ssl.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_steam.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_steam.cc
index 6c68bf7..6c68bf7 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_steam.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_steam.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_stratum.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_stratum.cc
index a992161..a992161 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_stratum.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_stratum.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_stun.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_stun.cc
index 4526291..4526291 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_stun.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_stun.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_supl.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_supl.cc
index 752b752..752b752 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_supl.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_supl.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_svn.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_svn.cc
index 6a6c36a..6a6c36a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_svn.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_svn.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_talesrunner.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_talesrunner.cc
index d74847e..d74847e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_talesrunner.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_talesrunner.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tankionline.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tankionline.cc
index da9af66..da9af66 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tankionline.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tankionline.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tankix.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tankix.cc
index c85b32e..c85b32e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tankix.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tankix.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_taobao.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_taobao.cc
index 31bf114..31bf114 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_taobao.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_taobao.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tds.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tds.cc
index 4069b70..4069b70 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tds.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tds.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_teamviewer.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_teamviewer.cc
index f33a296..f33a296 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_teamviewer.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_teamviewer.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_telecomkey.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_telecomkey.cc
index a9eb654..a9eb654 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_telecomkey.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_telecomkey.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_telegram.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_telegram.cc
index 704876f..704876f 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_telegram.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_telegram.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_telnet.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_telnet.cc
index 8368cf0..8368cf0 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_telnet.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_telnet.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_telnet_exploit.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_telnet_exploit.cc
index a642870..a642870 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_telnet_exploit.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_telnet_exploit.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tencent_games.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tencent_games.cc
index 72770d7..72770d7 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tencent_games.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tencent_games.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tenfivecoin.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tenfivecoin.cc
index 1aa7256..1aa7256 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tenfivecoin.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tenfivecoin.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tensafe.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tensafe.cc
index 89132de..89132de 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tensafe.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tensafe.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tera.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tera.cc
index a8ca5ca..a8ca5ca 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tera.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tera.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tetrisonline.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tetrisonline.cc
index 1f318b7..1f318b7 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tetrisonline.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tetrisonline.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_thedivision.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_thedivision.cc
index 59001e4..59001e4 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_thedivision.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_thedivision.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tip.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tip.cc
index 63770c8..63770c8 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tip.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tip.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tor.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tor.cc
index c1282f9..c1282f9 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tor.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tor.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_tpkt.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_tpkt.cc
index df4df0a..df4df0a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_tpkt.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_tpkt.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_trackmania.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_trackmania.cc
index a510ccd..a510ccd 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_trackmania.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_trackmania.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_transocks.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_transocks.cc
index 0190a82..0190a82 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_transocks.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_transocks.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_trion.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_trion.cc
index 6177e49..6177e49 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_trion.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_trion.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_trojan_win32_generic_sb.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_trojan_win32_generic_sb.cc
index f7e307d..f7e307d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_trojan_win32_generic_sb.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_trojan_win32_generic_sb.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_trojan_zeroaccess.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_trojan_zeroaccess.cc
index 03c666d..03c666d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_trojan_zeroaccess.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_trojan_zeroaccess.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_twitcasting.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_twitcasting.cc
index 3769bed..3769bed 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_twitcasting.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_twitcasting.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_twitch_irc.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_twitch_irc.cc
index 178505a..178505a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_twitch_irc.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_twitch_irc.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_utherverse.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_utherverse.cc
index cbd9958..cbd9958 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_utherverse.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_utherverse.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_vainglory.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_vainglory.cc
index 7b1e76a..7b1e76a 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_vainglory.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_vainglory.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_vhdp2p.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_vhdp2p.cc
index a4d49f9..a4d49f9 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_vhdp2p.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_vhdp2p.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_viber.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_viber.cc
index eaee6ac..eaee6ac 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_viber.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_viber.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_vmware.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_vmware.cc
index 815894d..815894d 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_vmware.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_vmware.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_vodlocker.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_vodlocker.cc
index 4ce07f0..4ce07f0 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_vodlocker.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_vodlocker.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_vpnrobot_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_vpnrobot_tcp.cc
index cb2f0fa..cb2f0fa 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_vpnrobot_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_vpnrobot_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_vpnunlimited_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_vpnunlimited_tcp.cc
index fc7c41f..fc7c41f 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_vpnunlimited_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_vpnunlimited_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_warcraft3.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_warcraft3.cc
index afd9e5e..afd9e5e 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_warcraft3.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_warcraft3.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_web_junk.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_web_junk.cc
index 1f54312..1f54312 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_web_junk.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_web_junk.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_webex_stun.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_webex_stun.cc
index 33560b9..33560b9 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_webex_stun.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_webex_stun.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_weblogic.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_weblogic.cc
index fc82d72..fc82d72 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_weblogic.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_weblogic.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_wechat.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_wechat.cc
index 9784355..9784355 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_wechat.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_wechat.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_weibo.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_weibo.cc
index ab4fe14..ab4fe14 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_weibo.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_weibo.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_weiqi.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_weiqi.cc
index f272d1c..f272d1c 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_weiqi.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_weiqi.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_whatsapp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_whatsapp.cc
index 5041615..5041615 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_whatsapp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_whatsapp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_whois.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_whois.cc
index f27c60b..f27c60b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_whois.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_whois.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_winmx.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_winmx.cc
index 175aae5..175aae5 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_winmx.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_winmx.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_wizard101.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_wizard101.cc
index e6356c0..e6356c0 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_wizard101.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_wizard101.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_wns.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_wns.cc
index f0d92c8..f0d92c8 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_wns.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_wns.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_wow.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_wow.cc
index 368201b..368201b 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_wow.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_wow.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_wuala.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_wuala.cc
index 3a3c1f5..3a3c1f5 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_wuala.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_wuala.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_xiami.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_xiami.cc
index 0fce5a9..0fce5a9 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_xiami.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_xiami.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_xmpp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_xmpp.cc
index 18fc750..18fc750 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_xmpp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_xmpp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_xmpps.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_xmpps.cc
index 4048dce..4048dce 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_xmpps.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_xmpps.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_xunlei.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_xunlei.cc
index da1fab2..da1fab2 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_xunlei.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_xunlei.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_xunlei_accel.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_xunlei_accel.cc
index 60af3f6..60af3f6 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_xunlei_accel.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_xunlei_accel.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_xymon.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_xymon.cc
index 15f5064..15f5064 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_xymon.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_xymon.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_yahoo.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_yahoo.cc
index 43189b1..43189b1 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_yahoo.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_yahoo.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_yahoo_error.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_yahoo_error.cc
index 381a120..381a120 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_yahoo_error.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_yahoo_error.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_yahoo_games.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_yahoo_games.cc
index 40432d5..40432d5 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_yahoo_games.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_yahoo_games.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_yahoo_webcam.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_yahoo_webcam.cc
index 2cf48f3..2cf48f3 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_yahoo_webcam.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_yahoo_webcam.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_youku.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_youku.cc
index 779b306..779b306 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_youku.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_youku.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_yy_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_yy_tcp.cc
index 1b90d34..1b90d34 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_yy_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_yy_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_zabbix.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_zabbix.cc
index f761109..f761109 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_zabbix.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_zabbix.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_zero.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_zero.cc
index 3904a25..3904a25 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_zero.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_zero.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_zoom_tcp.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_zoom_tcp.cc
index 62dcd93..62dcd93 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_zoom_tcp.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_zoom_tcp.cc
diff --git a/decoders/lpi/libprotoident/tcp/lpi_zynga.cc b/decoders/lpi_plus/libprotoident/tcp/lpi_zynga.cc
index 5c24b02..5c24b02 100644
--- a/decoders/lpi/libprotoident/tcp/lpi_zynga.cc
+++ b/decoders/lpi_plus/libprotoident/tcp/lpi_zynga.cc
diff --git a/decoders/lpi/libprotoident/tcp/tcp_protocols.h b/decoders/lpi_plus/libprotoident/tcp/tcp_protocols.h
index 89c2bf7..89c2bf7 100644
--- a/decoders/lpi/libprotoident/tcp/tcp_protocols.h
+++ b/decoders/lpi_plus/libprotoident/tcp/tcp_protocols.h
diff --git a/decoders/lpi/libprotoident/udp/lpi_360cn.cc b/decoders/lpi_plus/libprotoident/udp/lpi_360cn.cc
index e0e631b..e0e631b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_360cn.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_360cn.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_360p2p.cc b/decoders/lpi_plus/libprotoident/udp/lpi_360p2p.cc
index 251e205..251e205 100644
--- a/decoders/lpi/libprotoident/udp/lpi_360p2p.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_360p2p.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_aachen_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_aachen_udp.cc
index 385fa1e..385fa1e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_aachen_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_aachen_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_acercloud.cc b/decoders/lpi_plus/libprotoident/udp/lpi_acercloud.cc
index a6a7989..a6a7989 100644
--- a/decoders/lpi/libprotoident/udp/lpi_acercloud.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_acercloud.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_akamai.cc b/decoders/lpi_plus/libprotoident/udp/lpi_akamai.cc
index 821b3ce..821b3ce 100644
--- a/decoders/lpi/libprotoident/udp/lpi_akamai.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_akamai.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_akamai_transfer.cc b/decoders/lpi_plus/libprotoident/udp/lpi_akamai_transfer.cc
index ebd63a4..ebd63a4 100644
--- a/decoders/lpi/libprotoident/udp/lpi_akamai_transfer.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_akamai_transfer.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_amanda.cc b/decoders/lpi_plus/libprotoident/udp/lpi_amanda.cc
index 646cc78..646cc78 100644
--- a/decoders/lpi/libprotoident/udp/lpi_amanda.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_amanda.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_apple_facetime_init.cc b/decoders/lpi_plus/libprotoident/udp/lpi_apple_facetime_init.cc
index 12182b4..12182b4 100644
--- a/decoders/lpi/libprotoident/udp/lpi_apple_facetime_init.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_apple_facetime_init.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ard.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ard.cc
index b4a3e7d..b4a3e7d 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ard.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ard.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ares.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ares.cc
index 76e7648..76e7648 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ares.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ares.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ark.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ark.cc
index bb13007..bb13007 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ark.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ark.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_arma3_server.cc b/decoders/lpi_plus/libprotoident/udp/lpi_arma3_server.cc
index 29c5ed0..29c5ed0 100644
--- a/decoders/lpi/libprotoident/udp/lpi_arma3_server.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_arma3_server.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_arma_server.cc b/decoders/lpi_plus/libprotoident/udp/lpi_arma_server.cc
index b0e2f56..b0e2f56 100644
--- a/decoders/lpi/libprotoident/udp/lpi_arma_server.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_arma_server.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_artcp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_artcp.cc
index ddbfa26..ddbfa26 100644
--- a/decoders/lpi/libprotoident/udp/lpi_artcp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_artcp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_assettocorsa.cc b/decoders/lpi_plus/libprotoident/udp/lpi_assettocorsa.cc
index c6860d9..c6860d9 100644
--- a/decoders/lpi/libprotoident/udp/lpi_assettocorsa.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_assettocorsa.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_avast_secure_dns.cc b/decoders/lpi_plus/libprotoident/udp/lpi_avast_secure_dns.cc
index c3ca42e..c3ca42e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_avast_secure_dns.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_avast_secure_dns.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_backweb.cc b/decoders/lpi_plus/libprotoident/udp/lpi_backweb.cc
index 71aa5bf..71aa5bf 100644
--- a/decoders/lpi/libprotoident/udp/lpi_backweb.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_backweb.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_bacnet.cc b/decoders/lpi_plus/libprotoident/udp/lpi_bacnet.cc
index 85b4997..85b4997 100644
--- a/decoders/lpi/libprotoident/udp/lpi_bacnet.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_bacnet.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_baiduyun_p2p.cc b/decoders/lpi_plus/libprotoident/udp/lpi_baiduyun_p2p.cc
index 89354d7..89354d7 100644
--- a/decoders/lpi/libprotoident/udp/lpi_baiduyun_p2p.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_baiduyun_p2p.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_baofeng_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_baofeng_udp.cc
index f982090..f982090 100644
--- a/decoders/lpi/libprotoident/udp/lpi_baofeng_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_baofeng_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_battlefield.cc b/decoders/lpi_plus/libprotoident/udp/lpi_battlefield.cc
index 3d3815b..3d3815b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_battlefield.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_battlefield.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_bjnp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_bjnp.cc
index 97ec24e..97ec24e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_bjnp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_bjnp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_bmdp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_bmdp.cc
index fcbd681..fcbd681 100644
--- a/decoders/lpi/libprotoident/udp/lpi_bmdp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_bmdp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_btsync.cc b/decoders/lpi_plus/libprotoident/udp/lpi_btsync.cc
index 63648d3..63648d3 100644
--- a/decoders/lpi/libprotoident/udp/lpi_btsync.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_btsync.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_cacaoweb_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_cacaoweb_udp.cc
index 5359371..5359371 100644
--- a/decoders/lpi/libprotoident/udp/lpi_cacaoweb_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_cacaoweb_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_canon_mfnp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_canon_mfnp.cc
index 6f08e16..6f08e16 100644
--- a/decoders/lpi/libprotoident/udp/lpi_canon_mfnp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_canon_mfnp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_chargen_exploit.cc b/decoders/lpi_plus/libprotoident/udp/lpi_chargen_exploit.cc
index 81b08d6..81b08d6 100644
--- a/decoders/lpi/libprotoident/udp/lpi_chargen_exploit.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_chargen_exploit.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_checkpoint_rdp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_checkpoint_rdp.cc
index 9e7f13f..9e7f13f 100644
--- a/decoders/lpi/libprotoident/udp/lpi_checkpoint_rdp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_checkpoint_rdp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_chivalry.cc b/decoders/lpi_plus/libprotoident/udp/lpi_chivalry.cc
index 7f29b27..7f29b27 100644
--- a/decoders/lpi/libprotoident/udp/lpi_chivalry.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_chivalry.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_cip_io.cc b/decoders/lpi_plus/libprotoident/udp/lpi_cip_io.cc
index 0a028d2..0a028d2 100644
--- a/decoders/lpi/libprotoident/udp/lpi_cip_io.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_cip_io.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_cirn.cc b/decoders/lpi_plus/libprotoident/udp/lpi_cirn.cc
index 430aa46..430aa46 100644
--- a/decoders/lpi/libprotoident/udp/lpi_cirn.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_cirn.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_cisco_ipsec.cc b/decoders/lpi_plus/libprotoident/udp/lpi_cisco_ipsec.cc
index 0fc95ae..0fc95ae 100644
--- a/decoders/lpi/libprotoident/udp/lpi_cisco_ipsec.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_cisco_ipsec.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_cisco_sslvpn.cc b/decoders/lpi_plus/libprotoident/udp/lpi_cisco_sslvpn.cc
index 9194191..9194191 100644
--- a/decoders/lpi/libprotoident/udp/lpi_cisco_sslvpn.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_cisco_sslvpn.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_classin_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_classin_udp.cc
index 656b752..656b752 100644
--- a/decoders/lpi/libprotoident/udp/lpi_classin_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_classin_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_cloudflare_warp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_cloudflare_warp.cc
index 2d222bb..2d222bb 100644
--- a/decoders/lpi/libprotoident/udp/lpi_cloudflare_warp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_cloudflare_warp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_cod.cc b/decoders/lpi_plus/libprotoident/udp/lpi_cod.cc
index 3cdd444..3cdd444 100644
--- a/decoders/lpi/libprotoident/udp/lpi_cod.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_cod.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_codmobile.cc b/decoders/lpi_plus/libprotoident/udp/lpi_codmobile.cc
index b1daf2e..b1daf2e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_codmobile.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_codmobile.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_combatarms.cc b/decoders/lpi_plus/libprotoident/udp/lpi_combatarms.cc
index 0f4a76b..0f4a76b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_combatarms.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_combatarms.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_combatarms_p2p.cc b/decoders/lpi_plus/libprotoident/udp/lpi_combatarms_p2p.cc
index 512979a..512979a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_combatarms_p2p.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_combatarms_p2p.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_contract_wars.cc b/decoders/lpi_plus/libprotoident/udp/lpi_contract_wars.cc
index 3b96370..3b96370 100644
--- a/decoders/lpi/libprotoident/udp/lpi_contract_wars.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_contract_wars.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_crossfire.cc b/decoders/lpi_plus/libprotoident/udp/lpi_crossfire.cc
index 0410997..0410997 100644
--- a/decoders/lpi/libprotoident/udp/lpi_crossfire.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_crossfire.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_crossout.cc b/decoders/lpi_plus/libprotoident/udp/lpi_crossout.cc
index da8a268..da8a268 100644
--- a/decoders/lpi/libprotoident/udp/lpi_crossout.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_crossout.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_csgo.cc b/decoders/lpi_plus/libprotoident/udp/lpi_csgo.cc
index 6e31057..6e31057 100644
--- a/decoders/lpi/libprotoident/udp/lpi_csgo.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_csgo.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_csoriginal.cc b/decoders/lpi_plus/libprotoident/udp/lpi_csoriginal.cc
index ade9266..ade9266 100644
--- a/decoders/lpi/libprotoident/udp/lpi_csoriginal.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_csoriginal.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dahua.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dahua.cc
index a61730e..a61730e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dahua.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dahua.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_db2.cc b/decoders/lpi_plus/libprotoident/udp/lpi_db2.cc
index 67e3b4c..67e3b4c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_db2.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_db2.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dcc.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dcc.cc
index ea2043c..ea2043c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dcc.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dcc.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_demonware.cc b/decoders/lpi_plus/libprotoident/udp/lpi_demonware.cc
index 12fa9cf..12fa9cf 100644
--- a/decoders/lpi/libprotoident/udp/lpi_demonware.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_demonware.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_destiny_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_destiny_udp.cc
index 2892418..2892418 100644
--- a/decoders/lpi/libprotoident/udp/lpi_destiny_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_destiny_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dhcp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dhcp.cc
index 9b9f362..9b9f362 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dhcp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dhcp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dht_dict.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dht_dict.cc
index 913ae7d..913ae7d 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dht_dict.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dht_dict.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dht_other.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dht_other.cc
index d72cca8..d72cca8 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dht_other.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dht_other.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_diablo2.cc b/decoders/lpi_plus/libprotoident/udp/lpi_diablo2.cc
index 55da20b..55da20b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_diablo2.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_diablo2.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dianping_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dianping_udp.cc
index 19094aa..19094aa 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dianping_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dianping_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dianshijia.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dianshijia.cc
index 74c395e..74c395e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dianshijia.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dianshijia.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_directconnect.cc b/decoders/lpi_plus/libprotoident/udp/lpi_directconnect.cc
index 216bf68..216bf68 100644
--- a/decoders/lpi/libprotoident/udp/lpi_directconnect.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_directconnect.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_discord.cc b/decoders/lpi_plus/libprotoident/udp/lpi_discord.cc
index ebc6556..ebc6556 100644
--- a/decoders/lpi/libprotoident/udp/lpi_discord.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_discord.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dns.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dns.cc
index 6de0580..6de0580 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dns.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dns.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dota2.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dota2.cc
index 45d3127..45d3127 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dota2.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dota2.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_doyo.cc b/decoders/lpi_plus/libprotoident/udp/lpi_doyo.cc
index c007f25..c007f25 100644
--- a/decoders/lpi/libprotoident/udp/lpi_doyo.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_doyo.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_driveshare.cc b/decoders/lpi_plus/libprotoident/udp/lpi_driveshare.cc
index 8de22d6..8de22d6 100644
--- a/decoders/lpi/libprotoident/udp/lpi_driveshare.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_driveshare.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_dtls.cc b/decoders/lpi_plus/libprotoident/udp/lpi_dtls.cc
index 9eee536..9eee536 100644
--- a/decoders/lpi/libprotoident/udp/lpi_dtls.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_dtls.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_emule.cc b/decoders/lpi_plus/libprotoident/udp/lpi_emule.cc
index 6321116..6321116 100644
--- a/decoders/lpi/libprotoident/udp/lpi_emule.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_emule.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_emule_weak.cc b/decoders/lpi_plus/libprotoident/udp/lpi_emule_weak.cc
index ddc7bbe..ddc7bbe 100644
--- a/decoders/lpi/libprotoident/udp/lpi_emule_weak.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_emule_weak.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_epson.cc b/decoders/lpi_plus/libprotoident/udp/lpi_epson.cc
index 8bf1278..8bf1278 100644
--- a/decoders/lpi/libprotoident/udp/lpi_epson.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_epson.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_eso.cc b/decoders/lpi_plus/libprotoident/udp/lpi_eso.cc
index 828c7a1..828c7a1 100644
--- a/decoders/lpi/libprotoident/udp/lpi_eso.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_eso.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_esp_encap.cc b/decoders/lpi_plus/libprotoident/udp/lpi_esp_encap.cc
index f814805..f814805 100644
--- a/decoders/lpi/libprotoident/udp/lpi_esp_encap.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_esp_encap.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ethernetip.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ethernetip.cc
index 1c43f4a..1c43f4a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ethernetip.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ethernetip.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_eye.cc b/decoders/lpi_plus/libprotoident/udp/lpi_eye.cc
index aee7611..aee7611 100644
--- a/decoders/lpi/libprotoident/udp/lpi_eye.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_eye.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_fasp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_fasp.cc
index 23cd183..23cd183 100644
--- a/decoders/lpi/libprotoident/udp/lpi_fasp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_fasp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_feitwo.cc b/decoders/lpi_plus/libprotoident/udp/lpi_feitwo.cc
index e39dd72..e39dd72 100644
--- a/decoders/lpi/libprotoident/udp/lpi_feitwo.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_feitwo.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_forticlient_sslvpn.cc b/decoders/lpi_plus/libprotoident/udp/lpi_forticlient_sslvpn.cc
index 60583b1..60583b1 100644
--- a/decoders/lpi/libprotoident/udp/lpi_forticlient_sslvpn.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_forticlient_sslvpn.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_fortinet.cc b/decoders/lpi_plus/libprotoident/udp/lpi_fortinet.cc
index 55dd680..55dd680 100644
--- a/decoders/lpi/libprotoident/udp/lpi_fortinet.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_fortinet.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_foscam.cc b/decoders/lpi_plus/libprotoident/udp/lpi_foscam.cc
index f200e3b..f200e3b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_foscam.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_foscam.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_freechal.cc b/decoders/lpi_plus/libprotoident/udp/lpi_freechal.cc
index 71166e2..71166e2 100644
--- a/decoders/lpi/libprotoident/udp/lpi_freechal.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_freechal.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_freefire.cc b/decoders/lpi_plus/libprotoident/udp/lpi_freefire.cc
index eb1df58..eb1df58 100644
--- a/decoders/lpi/libprotoident/udp/lpi_freefire.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_freefire.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_funshion.cc b/decoders/lpi_plus/libprotoident/udp/lpi_funshion.cc
index ca00aea..ca00aea 100644
--- a/decoders/lpi/libprotoident/udp/lpi_funshion.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_funshion.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_gamespy.cc b/decoders/lpi_plus/libprotoident/udp/lpi_gamespy.cc
index 573a5ff..573a5ff 100644
--- a/decoders/lpi/libprotoident/udp/lpi_gamespy.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_gamespy.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ganglia.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ganglia.cc
index 1ec3067..1ec3067 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ganglia.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ganglia.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_gangsofspace.cc b/decoders/lpi_plus/libprotoident/udp/lpi_gangsofspace.cc
index 083dca6..083dca6 100644
--- a/decoders/lpi/libprotoident/udp/lpi_gangsofspace.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_gangsofspace.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_garena.cc b/decoders/lpi_plus/libprotoident/udp/lpi_garena.cc
index fa07d9b..fa07d9b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_garena.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_garena.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_gearsofwar.cc b/decoders/lpi_plus/libprotoident/udp/lpi_gearsofwar.cc
index b9169e4..b9169e4 100644
--- a/decoders/lpi/libprotoident/udp/lpi_gearsofwar.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_gearsofwar.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_gnutella.cc b/decoders/lpi_plus/libprotoident/udp/lpi_gnutella.cc
index 1982ccc..1982ccc 100644
--- a/decoders/lpi/libprotoident/udp/lpi_gnutella.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_gnutella.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_gnutella2.cc b/decoders/lpi_plus/libprotoident/udp/lpi_gnutella2.cc
index 15b4a91..15b4a91 100644
--- a/decoders/lpi/libprotoident/udp/lpi_gnutella2.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_gnutella2.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_gnutella_weak.cc b/decoders/lpi_plus/libprotoident/udp/lpi_gnutella_weak.cc
index 106e3a3..106e3a3 100644
--- a/decoders/lpi/libprotoident/udp/lpi_gnutella_weak.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_gnutella_weak.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_gotomeeting.cc b/decoders/lpi_plus/libprotoident/udp/lpi_gotomeeting.cc
index a182129..a182129 100644
--- a/decoders/lpi/libprotoident/udp/lpi_gotomeeting.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_gotomeeting.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_gprs_tunnel.cc b/decoders/lpi_plus/libprotoident/udp/lpi_gprs_tunnel.cc
index 471e106..471e106 100644
--- a/decoders/lpi/libprotoident/udp/lpi_gprs_tunnel.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_gprs_tunnel.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_gsm.cc b/decoders/lpi_plus/libprotoident/udp/lpi_gsm.cc
index d6f6599..d6f6599 100644
--- a/decoders/lpi/libprotoident/udp/lpi_gsm.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_gsm.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_h1z1.cc b/decoders/lpi_plus/libprotoident/udp/lpi_h1z1.cc
index 8cc06a2..8cc06a2 100644
--- a/decoders/lpi/libprotoident/udp/lpi_h1z1.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_h1z1.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_halflife.cc b/decoders/lpi_plus/libprotoident/udp/lpi_halflife.cc
index 430fac6..430fac6 100644
--- a/decoders/lpi/libprotoident/udp/lpi_halflife.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_halflife.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_haloonline.cc b/decoders/lpi_plus/libprotoident/udp/lpi_haloonline.cc
index 12553bf..12553bf 100644
--- a/decoders/lpi/libprotoident/udp/lpi_haloonline.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_haloonline.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_hamachi.cc b/decoders/lpi_plus/libprotoident/udp/lpi_hamachi.cc
index 030175b..030175b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_hamachi.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_hamachi.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_heliborne.cc b/decoders/lpi_plus/libprotoident/udp/lpi_heliborne.cc
index 1444fea..1444fea 100644
--- a/decoders/lpi/libprotoident/udp/lpi_heliborne.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_heliborne.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_heroes_generals.cc b/decoders/lpi_plus/libprotoident/udp/lpi_heroes_generals.cc
index 97c268e..97c268e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_heroes_generals.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_heroes_generals.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_heroesevolved.cc b/decoders/lpi_plus/libprotoident/udp/lpi_heroesevolved.cc
index 235360b..235360b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_heroesevolved.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_heroesevolved.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_hollachat.cc b/decoders/lpi_plus/libprotoident/udp/lpi_hollachat.cc
index a9e5e4d..a9e5e4d 100644
--- a/decoders/lpi/libprotoident/udp/lpi_hollachat.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_hollachat.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_hots.cc b/decoders/lpi_plus/libprotoident/udp/lpi_hots.cc
index 47f0aa4..47f0aa4 100644
--- a/decoders/lpi/libprotoident/udp/lpi_hots.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_hots.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_icp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_icp.cc
index 07cef1a..07cef1a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_icp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_icp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_imesh.cc b/decoders/lpi_plus/libprotoident/udp/lpi_imesh.cc
index b893329..b893329 100644
--- a/decoders/lpi/libprotoident/udp/lpi_imesh.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_imesh.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ipmsg.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ipmsg.cc
index d66b4bd..d66b4bd 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ipmsg.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ipmsg.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ipv6.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ipv6.cc
index bbfb1bc..bbfb1bc 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ipv6.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ipv6.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_isakmp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_isakmp.cc
index b9ab307..b9ab307 100644
--- a/decoders/lpi/libprotoident/udp/lpi_isakmp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_isakmp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_jedi.cc b/decoders/lpi_plus/libprotoident/udp/lpi_jedi.cc
index 1e38292..1e38292 100644
--- a/decoders/lpi/libprotoident/udp/lpi_jedi.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_jedi.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_jedi_academy.cc b/decoders/lpi_plus/libprotoident/udp/lpi_jedi_academy.cc
index 0fbcb9c..0fbcb9c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_jedi_academy.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_jedi_academy.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_kademlia.cc b/decoders/lpi_plus/libprotoident/udp/lpi_kademlia.cc
index 3c33cf1..3c33cf1 100644
--- a/decoders/lpi/libprotoident/udp/lpi_kademlia.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_kademlia.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_kankan.cc b/decoders/lpi_plus/libprotoident/udp/lpi_kankan.cc
index a11ed3c..a11ed3c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_kankan.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_kankan.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_kaspersky.cc b/decoders/lpi_plus/libprotoident/udp/lpi_kaspersky.cc
index 934b528..934b528 100644
--- a/decoders/lpi/libprotoident/udp/lpi_kaspersky.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_kaspersky.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_kazaa.cc b/decoders/lpi_plus/libprotoident/udp/lpi_kazaa.cc
index 9d23a82..9d23a82 100644
--- a/decoders/lpi/libprotoident/udp/lpi_kazaa.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_kazaa.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_kingofglory_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_kingofglory_udp.cc
index 495d19f..495d19f 100644
--- a/decoders/lpi/libprotoident/udp/lpi_kingofglory_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_kingofglory_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_kuguo.cc b/decoders/lpi_plus/libprotoident/udp/lpi_kuguo.cc
index 2586b46..2586b46 100644
--- a/decoders/lpi/libprotoident/udp/lpi_kuguo.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_kuguo.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_l2tp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_l2tp.cc
index f0e6ccd..f0e6ccd 100644
--- a/decoders/lpi/libprotoident/udp/lpi_l2tp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_l2tp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_lansync.cc b/decoders/lpi_plus/libprotoident/udp/lpi_lansync.cc
index af92e7d..af92e7d 100644
--- a/decoders/lpi/libprotoident/udp/lpi_lansync.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_lansync.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ldap_ad.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ldap_ad.cc
index 0724e66..0724e66 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ldap_ad.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ldap_ad.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_line_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_line_udp.cc
index 762e65c..762e65c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_line_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_line_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_linkproof.cc b/decoders/lpi_plus/libprotoident/udp/lpi_linkproof.cc
index 5b8bf4e..5b8bf4e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_linkproof.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_linkproof.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_loadout.cc b/decoders/lpi_plus/libprotoident/udp/lpi_loadout.cc
index 9eec1a7..9eec1a7 100644
--- a/decoders/lpi/libprotoident/udp/lpi_loadout.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_loadout.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_lol.cc b/decoders/lpi_plus/libprotoident/udp/lpi_lol.cc
index 4c663e6..4c663e6 100644
--- a/decoders/lpi/libprotoident/udp/lpi_lol.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_lol.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_mdns.cc b/decoders/lpi_plus/libprotoident/udp/lpi_mdns.cc
index 32445ce..32445ce 100644
--- a/decoders/lpi/libprotoident/udp/lpi_mdns.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_mdns.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_merakicloud.cc b/decoders/lpi_plus/libprotoident/udp/lpi_merakicloud.cc
index 9e2045b..9e2045b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_merakicloud.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_merakicloud.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_moh.cc b/decoders/lpi_plus/libprotoident/udp/lpi_moh.cc
index 9806f33..9806f33 100644
--- a/decoders/lpi/libprotoident/udp/lpi_moh.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_moh.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_moonhunters.cc b/decoders/lpi_plus/libprotoident/udp/lpi_moonhunters.cc
index 2c67cb6..2c67cb6 100644
--- a/decoders/lpi/libprotoident/udp/lpi_moonhunters.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_moonhunters.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_mp2p.cc b/decoders/lpi_plus/libprotoident/udp/lpi_mp2p.cc
index 8130396..8130396 100644
--- a/decoders/lpi/libprotoident/udp/lpi_mp2p.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_mp2p.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_msn_cache.cc b/decoders/lpi_plus/libprotoident/udp/lpi_msn_cache.cc
index 4b83c95..4b83c95 100644
--- a/decoders/lpi/libprotoident/udp/lpi_msn_cache.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_msn_cache.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_msn_video.cc b/decoders/lpi_plus/libprotoident/udp/lpi_msn_video.cc
index 132ccf8..132ccf8 100644
--- a/decoders/lpi/libprotoident/udp/lpi_msn_video.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_msn_video.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_msoffice_mac.cc b/decoders/lpi_plus/libprotoident/udp/lpi_msoffice_mac.cc
index 37551bd..37551bd 100644
--- a/decoders/lpi/libprotoident/udp/lpi_msoffice_mac.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_msoffice_mac.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_mta.cc b/decoders/lpi_plus/libprotoident/udp/lpi_mta.cc
index 0c5318b..0c5318b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_mta.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_mta.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_n2ping.cc b/decoders/lpi_plus/libprotoident/udp/lpi_n2ping.cc
index ee5d7de..ee5d7de 100644
--- a/decoders/lpi/libprotoident/udp/lpi_n2ping.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_n2ping.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_natpmp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_natpmp.cc
index 8680ca6..8680ca6 100644
--- a/decoders/lpi/libprotoident/udp/lpi_natpmp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_natpmp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_netbios.cc b/decoders/lpi_plus/libprotoident/udp/lpi_netbios.cc
index a720219..a720219 100644
--- a/decoders/lpi/libprotoident/udp/lpi_netbios.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_netbios.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_netcat_cctv_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_netcat_cctv_udp.cc
index 4207e2b..4207e2b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_netcat_cctv_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_netcat_cctv_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_netcore_scan.cc b/decoders/lpi_plus/libprotoident/udp/lpi_netcore_scan.cc
index 7dc479f..7dc479f 100644
--- a/decoders/lpi/libprotoident/udp/lpi_netcore_scan.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_netcore_scan.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_netflow.cc b/decoders/lpi_plus/libprotoident/udp/lpi_netflow.cc
index d0bffbb..d0bffbb 100644
--- a/decoders/lpi/libprotoident/udp/lpi_netflow.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_netflow.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_newerth.cc b/decoders/lpi_plus/libprotoident/udp/lpi_newerth.cc
index 90a38b4..90a38b4 100644
--- a/decoders/lpi/libprotoident/udp/lpi_newerth.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_newerth.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_nintendo.cc b/decoders/lpi_plus/libprotoident/udp/lpi_nintendo.cc
index b3bef84..b3bef84 100644
--- a/decoders/lpi/libprotoident/udp/lpi_nintendo.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_nintendo.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_noction.cc b/decoders/lpi_plus/libprotoident/udp/lpi_noction.cc
index 473039f..473039f 100644
--- a/decoders/lpi/libprotoident/udp/lpi_noction.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_noction.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_noe.cc b/decoders/lpi_plus/libprotoident/udp/lpi_noe.cc
index 9de88ef..9de88ef 100644
--- a/decoders/lpi/libprotoident/udp/lpi_noe.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_noe.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_nopayload.cc b/decoders/lpi_plus/libprotoident/udp/lpi_nopayload.cc
index 911605c..911605c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_nopayload.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_nopayload.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_norton.cc b/decoders/lpi_plus/libprotoident/udp/lpi_norton.cc
index 2eb06b2..2eb06b2 100644
--- a/decoders/lpi/libprotoident/udp/lpi_norton.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_norton.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ntp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ntp.cc
index b9053c1..b9053c1 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ntp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ntp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ntp_reflect.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ntp_reflect.cc
index 5a91cf5..5a91cf5 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ntp_reflect.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ntp_reflect.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_nvidia_gamestream.cc b/decoders/lpi_plus/libprotoident/udp/lpi_nvidia_gamestream.cc
index 3a956b4..3a956b4 100644
--- a/decoders/lpi/libprotoident/udp/lpi_nvidia_gamestream.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_nvidia_gamestream.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_nwn.cc b/decoders/lpi_plus/libprotoident/udp/lpi_nwn.cc
index 497f636..497f636 100644
--- a/decoders/lpi/libprotoident/udp/lpi_nwn.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_nwn.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_opaserv.cc b/decoders/lpi_plus/libprotoident/udp/lpi_opaserv.cc
index 346e65c..346e65c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_opaserv.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_opaserv.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_openvpn.cc b/decoders/lpi_plus/libprotoident/udp/lpi_openvpn.cc
index 2a1e678..2a1e678 100644
--- a/decoders/lpi/libprotoident/udp/lpi_openvpn.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_openvpn.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_orbit.cc b/decoders/lpi_plus/libprotoident/udp/lpi_orbit.cc
index a190644..a190644 100644
--- a/decoders/lpi/libprotoident/udp/lpi_orbit.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_orbit.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_overwatch.cc b/decoders/lpi_plus/libprotoident/udp/lpi_overwatch.cc
index ca22205..ca22205 100644
--- a/decoders/lpi/libprotoident/udp/lpi_overwatch.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_overwatch.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_paladins.cc b/decoders/lpi_plus/libprotoident/udp/lpi_paladins.cc
index 274dd8e..274dd8e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_paladins.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_paladins.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_pando.cc b/decoders/lpi_plus/libprotoident/udp/lpi_pando.cc
index e23e7ec..e23e7ec 100644
--- a/decoders/lpi/libprotoident/udp/lpi_pando.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_pando.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_panipani.cc b/decoders/lpi_plus/libprotoident/udp/lpi_panipani.cc
index 1559d2a..1559d2a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_panipani.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_panipani.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_planetside2.cc b/decoders/lpi_plus/libprotoident/udp/lpi_planetside2.cc
index bb4ba48..bb4ba48 100644
--- a/decoders/lpi/libprotoident/udp/lpi_planetside2.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_planetside2.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_portmap_rpc.cc b/decoders/lpi_plus/libprotoident/udp/lpi_portmap_rpc.cc
index 7660892..7660892 100644
--- a/decoders/lpi/libprotoident/udp/lpi_portmap_rpc.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_portmap_rpc.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_pplive.cc b/decoders/lpi_plus/libprotoident/udp/lpi_pplive.cc
index aaabde9..aaabde9 100644
--- a/decoders/lpi/libprotoident/udp/lpi_pplive.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_pplive.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ppstream.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ppstream.cc
index 36b9537..36b9537 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ppstream.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ppstream.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_probable_gnutella.cc b/decoders/lpi_plus/libprotoident/udp/lpi_probable_gnutella.cc
index e3d908e..e3d908e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_probable_gnutella.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_probable_gnutella.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ps4_remoteplay.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ps4_remoteplay.cc
index 748a57d..748a57d 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ps4_remoteplay.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ps4_remoteplay.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_psn.cc b/decoders/lpi_plus/libprotoident/udp/lpi_psn.cc
index 2753713..2753713 100644
--- a/decoders/lpi/libprotoident/udp/lpi_psn.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_psn.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_punkbuster.cc b/decoders/lpi_plus/libprotoident/udp/lpi_punkbuster.cc
index 852f918..852f918 100644
--- a/decoders/lpi/libprotoident/udp/lpi_punkbuster.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_punkbuster.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_pyzor.cc b/decoders/lpi_plus/libprotoident/udp/lpi_pyzor.cc
index 8071ac8..8071ac8 100644
--- a/decoders/lpi/libprotoident/udp/lpi_pyzor.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_pyzor.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_qq.cc b/decoders/lpi_plus/libprotoident/udp/lpi_qq.cc
index 7011f09..7011f09 100644
--- a/decoders/lpi/libprotoident/udp/lpi_qq.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_qq.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_qqlive.cc b/decoders/lpi_plus/libprotoident/udp/lpi_qqlive.cc
index 2a92787..2a92787 100644
--- a/decoders/lpi/libprotoident/udp/lpi_qqlive.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_qqlive.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_qqpcmgr.cc b/decoders/lpi_plus/libprotoident/udp/lpi_qqpcmgr.cc
index 1e53999..1e53999 100644
--- a/decoders/lpi/libprotoident/udp/lpi_qqpcmgr.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_qqpcmgr.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_qqspeedmobile_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_qqspeedmobile_udp.cc
index e6dd21c..e6dd21c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_qqspeedmobile_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_qqspeedmobile_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_quake.cc b/decoders/lpi_plus/libprotoident/udp/lpi_quake.cc
index 9528d57..9528d57 100644
--- a/decoders/lpi/libprotoident/udp/lpi_quake.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_quake.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_quic.cc b/decoders/lpi_plus/libprotoident/udp/lpi_quic.cc
index eeb50b2..eeb50b2 100644
--- a/decoders/lpi/libprotoident/udp/lpi_quic.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_quic.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_qvod_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_qvod_udp.cc
index 78e7b70..78e7b70 100644
--- a/decoders/lpi/libprotoident/udp/lpi_qvod_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_qvod_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_radius.cc b/decoders/lpi_plus/libprotoident/udp/lpi_radius.cc
index a1c2567..a1c2567 100644
--- a/decoders/lpi/libprotoident/udp/lpi_radius.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_radius.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_raknet.cc b/decoders/lpi_plus/libprotoident/udp/lpi_raknet.cc
index e33f05f..e33f05f 100644
--- a/decoders/lpi/libprotoident/udp/lpi_raknet.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_raknet.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ramseydash.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ramseydash.cc
index 00702ae..00702ae 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ramseydash.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ramseydash.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_rdp_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_rdp_udp.cc
index 1086fe2..1086fe2 100644
--- a/decoders/lpi/libprotoident/udp/lpi_rdp_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_rdp_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_real.cc b/decoders/lpi_plus/libprotoident/udp/lpi_real.cc
index 8617a04..8617a04 100644
--- a/decoders/lpi/libprotoident/udp/lpi_real.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_real.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_risingstorm.cc b/decoders/lpi_plus/libprotoident/udp/lpi_risingstorm.cc
index 89ab4ef..89ab4ef 100644
--- a/decoders/lpi/libprotoident/udp/lpi_risingstorm.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_risingstorm.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_robocraft.cc b/decoders/lpi_plus/libprotoident/udp/lpi_robocraft.cc
index 52dd3e7..52dd3e7 100644
--- a/decoders/lpi/libprotoident/udp/lpi_robocraft.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_robocraft.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_rocket_league.cc b/decoders/lpi_plus/libprotoident/udp/lpi_rocket_league.cc
index 1947153..1947153 100644
--- a/decoders/lpi/libprotoident/udp/lpi_rocket_league.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_rocket_league.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_rrshare.cc b/decoders/lpi_plus/libprotoident/udp/lpi_rrshare.cc
index 04644f8..04644f8 100644
--- a/decoders/lpi/libprotoident/udp/lpi_rrshare.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_rrshare.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_rtcp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_rtcp.cc
index acbca15..acbca15 100644
--- a/decoders/lpi/libprotoident/udp/lpi_rtcp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_rtcp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_rtmfp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_rtmfp.cc
index efc5846..efc5846 100644
--- a/decoders/lpi/libprotoident/udp/lpi_rtmfp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_rtmfp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_rtp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_rtp.cc
index bc9d2d5..bc9d2d5 100644
--- a/decoders/lpi/libprotoident/udp/lpi_rtp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_rtp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_rulesofsurvival.cc b/decoders/lpi_plus/libprotoident/udp/lpi_rulesofsurvival.cc
index 2323b23..2323b23 100644
--- a/decoders/lpi/libprotoident/udp/lpi_rulesofsurvival.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_rulesofsurvival.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_sanandreas_mp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_sanandreas_mp.cc
index d0575c0..d0575c0 100644
--- a/decoders/lpi/libprotoident/udp/lpi_sanandreas_mp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_sanandreas_mp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_second_life.cc b/decoders/lpi_plus/libprotoident/udp/lpi_second_life.cc
index 0dc07be..0dc07be 100644
--- a/decoders/lpi/libprotoident/udp/lpi_second_life.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_second_life.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_serialnumberd.cc b/decoders/lpi_plus/libprotoident/udp/lpi_serialnumberd.cc
index 1244da5..1244da5 100644
--- a/decoders/lpi/libprotoident/udp/lpi_serialnumberd.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_serialnumberd.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_sip.cc b/decoders/lpi_plus/libprotoident/udp/lpi_sip.cc
index 6f7839b..6f7839b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_sip.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_sip.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_skype.cc b/decoders/lpi_plus/libprotoident/udp/lpi_skype.cc
index 10ce3fe..10ce3fe 100644
--- a/decoders/lpi/libprotoident/udp/lpi_skype.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_skype.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_slp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_slp.cc
index 2de78d0..2de78d0 100644
--- a/decoders/lpi/libprotoident/udp/lpi_slp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_slp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_smite.cc b/decoders/lpi_plus/libprotoident/udp/lpi_smite.cc
index c18caa2..c18caa2 100644
--- a/decoders/lpi/libprotoident/udp/lpi_smite.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_smite.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_snapvpn.cc b/decoders/lpi_plus/libprotoident/udp/lpi_snapvpn.cc
index e5ab71f..e5ab71f 100644
--- a/decoders/lpi/libprotoident/udp/lpi_snapvpn.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_snapvpn.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_snmp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_snmp.cc
index 7e72434..7e72434 100644
--- a/decoders/lpi/libprotoident/udp/lpi_snmp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_snmp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_sopcast.cc b/decoders/lpi_plus/libprotoident/udp/lpi_sopcast.cc
index 608168f..608168f 100644
--- a/decoders/lpi/libprotoident/udp/lpi_sopcast.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_sopcast.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_spamfighter.cc b/decoders/lpi_plus/libprotoident/udp/lpi_spamfighter.cc
index 1b3eb9b..1b3eb9b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_spamfighter.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_spamfighter.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_spotify_bcast.cc b/decoders/lpi_plus/libprotoident/udp/lpi_spotify_bcast.cc
index 9c9dde3..9c9dde3 100644
--- a/decoders/lpi/libprotoident/udp/lpi_spotify_bcast.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_spotify_bcast.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_sql_worm.cc b/decoders/lpi_plus/libprotoident/udp/lpi_sql_worm.cc
index bd257e0..bd257e0 100644
--- a/decoders/lpi/libprotoident/udp/lpi_sql_worm.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_sql_worm.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ssdp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ssdp.cc
index 48b9f50..48b9f50 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ssdp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ssdp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_starcitizen.cc b/decoders/lpi_plus/libprotoident/udp/lpi_starcitizen.cc
index 97fe392..97fe392 100644
--- a/decoders/lpi/libprotoident/udp/lpi_starcitizen.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_starcitizen.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_starcraft.cc b/decoders/lpi_plus/libprotoident/udp/lpi_starcraft.cc
index 636514b..636514b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_starcraft.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_starcraft.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_starleaf.cc b/decoders/lpi_plus/libprotoident/udp/lpi_starleaf.cc
index 1da25d8..1da25d8 100644
--- a/decoders/lpi/libprotoident/udp/lpi_starleaf.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_starleaf.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_steam.cc b/decoders/lpi_plus/libprotoident/udp/lpi_steam.cc
index 37f492c..37f492c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_steam.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_steam.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_steam_inhomebroadcast.cc b/decoders/lpi_plus/libprotoident/udp/lpi_steam_inhomebroadcast.cc
index c45d12a..c45d12a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_steam_inhomebroadcast.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_steam_inhomebroadcast.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_steam_localbroadcast.cc b/decoders/lpi_plus/libprotoident/udp/lpi_steam_localbroadcast.cc
index e54bc04..e54bc04 100644
--- a/decoders/lpi/libprotoident/udp/lpi_steam_localbroadcast.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_steam_localbroadcast.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_steamfriends.cc b/decoders/lpi_plus/libprotoident/udp/lpi_steamfriends.cc
index 6c35e1b..6c35e1b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_steamfriends.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_steamfriends.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_storm_worm.cc b/decoders/lpi_plus/libprotoident/udp/lpi_storm_worm.cc
index 71b0ba7..71b0ba7 100644
--- a/decoders/lpi/libprotoident/udp/lpi_storm_worm.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_storm_worm.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_stun.cc b/decoders/lpi_plus/libprotoident/udp/lpi_stun.cc
index a6eedce..a6eedce 100644
--- a/decoders/lpi/libprotoident/udp/lpi_stun.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_stun.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_syslog.cc b/decoders/lpi_plus/libprotoident/udp/lpi_syslog.cc
index e57e159..e57e159 100644
--- a/decoders/lpi/libprotoident/udp/lpi_syslog.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_syslog.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_talesrunner_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_talesrunner_udp.cc
index 4c54332..4c54332 100644
--- a/decoders/lpi/libprotoident/udp/lpi_talesrunner_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_talesrunner_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_teamspeak.cc b/decoders/lpi_plus/libprotoident/udp/lpi_teamspeak.cc
index 503288a..503288a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_teamspeak.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_teamspeak.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_teamviewer.cc b/decoders/lpi_plus/libprotoident/udp/lpi_teamviewer.cc
index 48e5635..48e5635 100644
--- a/decoders/lpi/libprotoident/udp/lpi_teamviewer.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_teamviewer.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_teredo.cc b/decoders/lpi_plus/libprotoident/udp/lpi_teredo.cc
index 41f62a1..41f62a1 100644
--- a/decoders/lpi/libprotoident/udp/lpi_teredo.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_teredo.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_tf2.cc b/decoders/lpi_plus/libprotoident/udp/lpi_tf2.cc
index b931ec3..b931ec3 100644
--- a/decoders/lpi/libprotoident/udp/lpi_tf2.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_tf2.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_tftp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_tftp.cc
index c931386..c931386 100644
--- a/decoders/lpi/libprotoident/udp/lpi_tftp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_tftp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_thecrew.cc b/decoders/lpi_plus/libprotoident/udp/lpi_thecrew.cc
index 8ff2653..8ff2653 100644
--- a/decoders/lpi/libprotoident/udp/lpi_thecrew.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_thecrew.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_thq.cc b/decoders/lpi_plus/libprotoident/udp/lpi_thq.cc
index f074932..f074932 100644
--- a/decoders/lpi/libprotoident/udp/lpi_thq.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_thq.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_torchlight2.cc b/decoders/lpi_plus/libprotoident/udp/lpi_torchlight2.cc
index a2543fe..a2543fe 100644
--- a/decoders/lpi/libprotoident/udp/lpi_torchlight2.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_torchlight2.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_tox.cc b/decoders/lpi_plus/libprotoident/udp/lpi_tox.cc
index 0a25bb6..0a25bb6 100644
--- a/decoders/lpi/libprotoident/udp/lpi_tox.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_tox.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_traceroute.cc b/decoders/lpi_plus/libprotoident/udp/lpi_traceroute.cc
index 7d57089..7d57089 100644
--- a/decoders/lpi/libprotoident/udp/lpi_traceroute.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_traceroute.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_tremulous.cc b/decoders/lpi_plus/libprotoident/udp/lpi_tremulous.cc
index 211bc5f..211bc5f 100644
--- a/decoders/lpi/libprotoident/udp/lpi_tremulous.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_tremulous.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_turbovpn.cc b/decoders/lpi_plus/libprotoident/udp/lpi_turbovpn.cc
index 2ed502a..2ed502a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_turbovpn.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_turbovpn.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_tvants.cc b/decoders/lpi_plus/libprotoident/udp/lpi_tvants.cc
index 3f00e65..3f00e65 100644
--- a/decoders/lpi/libprotoident/udp/lpi_tvants.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_tvants.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ubisoft_games.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ubisoft_games.cc
index d64475d..d64475d 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ubisoft_games.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ubisoft_games.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_umeye.cc b/decoders/lpi_plus/libprotoident/udp/lpi_umeye.cc
index e8e63ec..e8e63ec 100644
--- a/decoders/lpi/libprotoident/udp/lpi_umeye.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_umeye.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_unreal.cc b/decoders/lpi_plus/libprotoident/udp/lpi_unreal.cc
index 9699ac2..9699ac2 100644
--- a/decoders/lpi/libprotoident/udp/lpi_unreal.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_unreal.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_ventrilo.cc b/decoders/lpi_plus/libprotoident/udp/lpi_ventrilo.cc
index 1b4bbc8..1b4bbc8 100644
--- a/decoders/lpi/libprotoident/udp/lpi_ventrilo.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_ventrilo.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_viber.cc b/decoders/lpi_plus/libprotoident/udp/lpi_viber.cc
index 68ff880..68ff880 100644
--- a/decoders/lpi/libprotoident/udp/lpi_viber.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_viber.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_vivox.cc b/decoders/lpi_plus/libprotoident/udp/lpi_vivox.cc
index be7aeae..be7aeae 100644
--- a/decoders/lpi/libprotoident/udp/lpi_vivox.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_vivox.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_vpnmaster.cc b/decoders/lpi_plus/libprotoident/udp/lpi_vpnmaster.cc
index df7c4c9..df7c4c9 100644
--- a/decoders/lpi/libprotoident/udp/lpi_vpnmaster.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_vpnmaster.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_vpnrobot_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_vpnrobot_udp.cc
index 414491d..414491d 100644
--- a/decoders/lpi/libprotoident/udp/lpi_vpnrobot_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_vpnrobot_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_vxworks_exploit.cc b/decoders/lpi_plus/libprotoident/udp/lpi_vxworks_exploit.cc
index f54358b..f54358b 100644
--- a/decoders/lpi/libprotoident/udp/lpi_vxworks_exploit.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_vxworks_exploit.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_warthunder.cc b/decoders/lpi_plus/libprotoident/udp/lpi_warthunder.cc
index b98a78e..b98a78e 100644
--- a/decoders/lpi/libprotoident/udp/lpi_warthunder.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_warthunder.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_webex.cc b/decoders/lpi_plus/libprotoident/udp/lpi_webex.cc
index c02d456..c02d456 100644
--- a/decoders/lpi/libprotoident/udp/lpi_webex.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_webex.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_wechat_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_wechat_udp.cc
index 677182c..677182c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_wechat_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_wechat_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_winmessage.cc b/decoders/lpi_plus/libprotoident/udp/lpi_winmessage.cc
index d966be7..d966be7 100644
--- a/decoders/lpi/libprotoident/udp/lpi_winmessage.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_winmessage.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_wireguard.cc b/decoders/lpi_plus/libprotoident/udp/lpi_wireguard.cc
index 8ad6b1a..8ad6b1a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_wireguard.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_wireguard.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_wolfet.cc b/decoders/lpi_plus/libprotoident/udp/lpi_wolfet.cc
index 6cb2612..6cb2612 100644
--- a/decoders/lpi/libprotoident/udp/lpi_wolfet.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_wolfet.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_worm_22105.cc b/decoders/lpi_plus/libprotoident/udp/lpi_worm_22105.cc
index 94619ea..94619ea 100644
--- a/decoders/lpi/libprotoident/udp/lpi_worm_22105.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_worm_22105.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_xfire_p2p.cc b/decoders/lpi_plus/libprotoident/udp/lpi_xfire_p2p.cc
index 6523c5a..6523c5a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_xfire_p2p.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_xfire_p2p.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_xlsp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_xlsp.cc
index f680f33..f680f33 100644
--- a/decoders/lpi/libprotoident/udp/lpi_xlsp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_xlsp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_xunlei.cc b/decoders/lpi_plus/libprotoident/udp/lpi_xunlei.cc
index 9bf34bb..9bf34bb 100644
--- a/decoders/lpi/libprotoident/udp/lpi_xunlei.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_xunlei.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_xunlei_jsq.cc b/decoders/lpi_plus/libprotoident/udp/lpi_xunlei_jsq.cc
index 84f6f72..84f6f72 100644
--- a/decoders/lpi/libprotoident/udp/lpi_xunlei_jsq.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_xunlei_jsq.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_xunyou.cc b/decoders/lpi_plus/libprotoident/udp/lpi_xunyou.cc
index 77682ad..77682ad 100644
--- a/decoders/lpi/libprotoident/udp/lpi_xunyou.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_xunyou.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_youdao_dict.cc b/decoders/lpi_plus/libprotoident/udp/lpi_youdao_dict.cc
index cd4af1c..cd4af1c 100644
--- a/decoders/lpi/libprotoident/udp/lpi_youdao_dict.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_youdao_dict.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_youku.cc b/decoders/lpi_plus/libprotoident/udp/lpi_youku.cc
index 2ce64ea..2ce64ea 100644
--- a/decoders/lpi/libprotoident/udp/lpi_youku.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_youku.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_yuanfudao.cc b/decoders/lpi_plus/libprotoident/udp/lpi_yuanfudao.cc
index ef17857..ef17857 100644
--- a/decoders/lpi/libprotoident/udp/lpi_yuanfudao.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_yuanfudao.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_yy_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_yy_udp.cc
index bb06d75..bb06d75 100644
--- a/decoders/lpi/libprotoident/udp/lpi_yy_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_yy_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_zalo_call.cc b/decoders/lpi_plus/libprotoident/udp/lpi_zalo_call.cc
index 1d07777..1d07777 100644
--- a/decoders/lpi/libprotoident/udp/lpi_zalo_call.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_zalo_call.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_zeroaccess_udp.cc b/decoders/lpi_plus/libprotoident/udp/lpi_zeroaccess_udp.cc
index 03a3e7a..03a3e7a 100644
--- a/decoders/lpi/libprotoident/udp/lpi_zeroaccess_udp.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_zeroaccess_udp.cc
diff --git a/decoders/lpi/libprotoident/udp/lpi_zoom.cc b/decoders/lpi_plus/libprotoident/udp/lpi_zoom.cc
index 4ad3ca5..4ad3ca5 100644
--- a/decoders/lpi/libprotoident/udp/lpi_zoom.cc
+++ b/decoders/lpi_plus/libprotoident/udp/lpi_zoom.cc
diff --git a/decoders/lpi/libprotoident/udp/udp_protocols.h b/decoders/lpi_plus/libprotoident/udp/udp_protocols.h
index 71fe45a..71fe45a 100644
--- a/decoders/lpi/libprotoident/udp/udp_protocols.h
+++ b/decoders/lpi_plus/libprotoident/udp/udp_protocols.h
diff --git a/decoders/lpi/libprotoident/version.map b/decoders/lpi_plus/libprotoident/version.map
index 0624251..0624251 100644
--- a/decoders/lpi/libprotoident/version.map
+++ b/decoders/lpi_plus/libprotoident/version.map
diff --git a/decoders/lpi_plus/lpi_plus.h b/decoders/lpi_plus/lpi_plus.h
new file mode 100644
index 0000000..72844d2
--- /dev/null
+++ b/decoders/lpi_plus/lpi_plus.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#include "stellar/module_manager.h"
+struct lpi_plus_mapper;
+struct lpi_plus_mapper *stellar_module_get_lpip(struct stellar_module_manager *mod_mgr);
+const char *lpi_plus_appid2name(struct lpi_plus_mapper *mapper, int appid); \ No newline at end of file
diff --git a/decoders/lpi_plus/lpip_extend.c b/decoders/lpi_plus/lpip_extend.c
new file mode 100644
index 0000000..79b3849
--- /dev/null
+++ b/decoders/lpi_plus/lpip_extend.c
@@ -0,0 +1,558 @@
+#include "lpip_extend.h"
+#include <stdlib.h>
+#include <string.h>
+
+const char *dns_name="DNS";
+const char *imap_name="IMAP";
+const char *quic_name="QUIC";
+const char *ftps_name="FTPS";
+const char *openvpn_name="OpenVPN";
+const char *smtp_name="SMTP";
+const char *ftp_control_name="FTP_Control";
+
+#define P_CONTROL_HARD_RESET_CLIENT_V1 (0x01 << 3)
+#define P_CONTROL_HARD_RESET_CLIENT_V2 (0x07 << 3)
+#define P_CONTROL_HARD_RESET_SERVER_V1 (0x02 << 3)
+#define P_CONTROL_HARD_RESET_SERVER_V2 (0x08 << 3)
+#define P_ACK_V1 (0x05 << 3)
+#define P_CONTROL_V1 (0x04 << 3)
+#define P_OPCODE_MASK 0xF8
+#define P_SHA1_HMAC_SIZE 20
+#define P_HMAC_128 16 // (RSA-)MD5, (RSA-)MD4, ..others
+#define P_HMAC_160 20 // (RSA-|DSA-)SHA(1), ..others, SHA1 is openvpn default
+#define P_HMAC_NONE 0
+#define P_HARD_RESET_PACKET_ID_OFFSET(hmac_size) (9 + hmac_size)
+#define P_PACKET_ID_ARRAY_LEN_OFFSET(hmac_size) (P_HARD_RESET_PACKET_ID_OFFSET(hmac_size) + 8)
+#define P_HARD_RESET_CLIENT_MAX_COUNT 5
+
+static inline uint32_t get_packet_id(const uint8_t * payload, uint8_t hms) {
+ return(ntohl(*(uint32_t*)(payload + P_HARD_RESET_PACKET_ID_OFFSET(hms))));
+}
+
+static inline int8_t check_pkid_and_detect_hmac_size(const uint8_t * payload) {
+ // try to guess
+ if((int)get_packet_id(payload, P_HMAC_160) != 0)
+ return P_HMAC_160;
+
+ if((int)get_packet_id(payload, P_HMAC_128) != 0 )
+ return P_HMAC_128;
+
+ if((int)get_packet_id(payload, P_HMAC_NONE) != 0)
+ return P_HMAC_NONE;
+
+ return(-1);
+}
+
+int lpi_plus_match_openvpn(const unsigned char *payload, size_t payload_sz, int c2s_pkt_cnt, int s2c_pkt_cnt, struct ovpn_ctx *ovpn, unsigned char trans_proto, bool is_c2s_flow)
+{
+ const uint8_t * session_remote;
+ uint8_t opcode;
+ uint8_t alen;
+ int8_t hmac_size;
+ int8_t failed = 0;
+
+ if (trans_proto!=IPPROTO_UDP && trans_proto!=IPPROTO_TCP)return 0;
+
+ if (c2s_pkt_cnt > 5)
+ {
+ if (ovpn->contain_local_session_id_pkt_num == P_HARD_RESET_CLIENT_MAX_COUNT - 1 && ovpn->valid_opcode_cnt == P_HARD_RESET_CLIENT_MAX_COUNT)
+ return 1;
+ return 0;
+ }
+
+ if (payload_sz >= 40)
+ {
+ // skip openvpn TCP transport packet size
+ if (trans_proto==IPPROTO_TCP)payload += 2, payload_sz -= 2;
+
+ opcode = payload[0] & P_OPCODE_MASK;
+ if (is_c2s_flow == 1 &&
+ (opcode == P_CONTROL_HARD_RESET_CLIENT_V1 ||
+ opcode == P_CONTROL_HARD_RESET_CLIENT_V2 ||
+ opcode == P_ACK_V1 ||
+ opcode == P_CONTROL_V1))
+ {
+ ovpn->valid_opcode_cnt++;
+ }
+ // for UDP, trying to identify by opcode and first packet length
+ if (trans_proto==IPPROTO_UDP)
+ {
+ if ((c2s_pkt_cnt == 1 || s2c_pkt_cnt == 1) && (((payload_sz == 112) && ((opcode == 168) || (opcode == 192))) || ((payload_sz == 80) && ((opcode == 184) || (opcode == 88) || (opcode == 160) || (opcode == 168) || (opcode == 200)))))
+ {
+ return 1;
+ }
+ }
+
+ if(s2c_pkt_cnt >= 1 && is_c2s_flow == false)return 0;
+
+ if (is_c2s_flow == true && c2s_pkt_cnt <= P_HARD_RESET_CLIENT_MAX_COUNT && (opcode == P_CONTROL_HARD_RESET_CLIENT_V1 || opcode == P_CONTROL_HARD_RESET_CLIENT_V2 || opcode == P_ACK_V1 || opcode == P_CONTROL_V1))
+ {
+ if (check_pkid_and_detect_hmac_size(payload) >= 0)
+ {
+ if (c2s_pkt_cnt > 1)
+ {
+ if (memcmp(&ovpn->local_session_id, payload + 1, 8) == 0)
+ {
+ ovpn->contain_local_session_id_pkt_num++;
+ }
+ }
+ memcpy(&ovpn->local_session_id, payload + 1, 8);
+ }
+ }
+ else if (c2s_pkt_cnt >= 1 && c2s_pkt_cnt <= P_HARD_RESET_CLIENT_MAX_COUNT &&
+ (opcode == P_CONTROL_HARD_RESET_SERVER_V1 || opcode == P_CONTROL_HARD_RESET_SERVER_V2))
+ {
+
+ hmac_size = check_pkid_and_detect_hmac_size(payload);
+
+ if (hmac_size >= 0)
+ {
+ size_t offset = P_PACKET_ID_ARRAY_LEN_OFFSET(hmac_size);
+
+ alen = payload[offset];
+
+ if (alen > 0)
+ {
+ offset += 1 + alen * 4;
+
+ if ((offset + 8) <= payload_sz)
+ {
+ session_remote = &payload[offset];
+
+ if (memcmp(&ovpn->local_session_id, session_remote, 8) == 0)
+ {
+
+ return 1;
+ }
+ else
+ {
+
+ failed = 1;
+ }
+ }
+ else
+ failed = 1;
+ }
+ else
+ failed = 1;
+ }
+ else
+ failed = 1;
+ }
+ else
+ failed = 1;
+
+ if (failed)
+ return 0;
+ }
+
+ return 0;
+}
+
+#define GQUIC_PUBLIC_FLAG_VERSION 0x01
+#define GQUIC_PUBLIC_FLAG_RST 0x02
+#define GQUIC_PUBLIC_FLAG_NONCE 0x04
+#define GQUIC_PUBLIC_FLAG_CID 0x08
+#define GQUIC_PUBLIC_FLAG_PKT_NUM 0x30
+
+//https://github.com/quicwg/base-drafts/wiki/QUIC-Versions
+enum _QUIC_VERSION
+{
+ QUIC_VERSION_UNKNOWN=0,
+ //NetApp
+ QUANT_VERSION_00=0x45474700,
+ QUANT_VERSION_FF=0x454747FF,
+
+ //Private Octopus
+ PICOQUIC_VERSION_30=0x50435130,
+
+ //google
+ GQUIC_VERSION_Q001=0x51303031,
+ GQUIC_VERSION_Q002=0x51303032,
+ GQUIC_VERSION_Q003=0x51303033,
+ GQUIC_VERSION_Q004=0x51303034,
+ GQUIC_VERSION_Q005=0x51303035,
+ GQUIC_VERSION_Q006=0x51303036,
+ GQUIC_VERSION_Q007=0x51303037,
+ GQUIC_VERSION_Q008=0x51303038,
+ GQUIC_VERSION_Q009=0x51303039,
+
+ GQUIC_VERSION_Q010=0x51303130,
+ GQUIC_VERSION_Q011=0x51303131,
+ GQUIC_VERSION_Q012=0x51303132,
+ GQUIC_VERSION_Q013=0x51303133,
+ GQUIC_VERSION_Q014=0x51303134,
+ GQUIC_VERSION_Q015=0x51303135,
+ GQUIC_VERSION_Q016=0x51303136,
+ GQUIC_VERSION_Q017=0x51303137,
+ GQUIC_VERSION_Q018=0x51303138,
+ GQUIC_VERSION_Q019=0x51303139,
+
+ GQUIC_VERSION_Q020=0x51303230,
+ GQUIC_VERSION_Q021=0x51303231,
+ GQUIC_VERSION_Q022=0x51303232,
+ GQUIC_VERSION_Q023=0x51303233,
+ GQUIC_VERSION_Q024=0x51303234,
+ GQUIC_VERSION_Q025=0x51303235,
+ GQUIC_VERSION_Q026=0x51303236,
+ GQUIC_VERSION_Q027=0x51303237,
+ GQUIC_VERSION_Q028=0x51303238,
+ GQUIC_VERSION_Q029=0x51303239,
+
+ GQUIC_VERSION_Q030=0x51303330,
+ GQUIC_VERSION_Q031=0x51303331,
+ GQUIC_VERSION_Q032=0x51303332,
+ GQUIC_VERSION_Q033=0x51303333,
+ GQUIC_VERSION_Q034=0x51303334,
+ GQUIC_VERSION_Q035=0x51303335,
+ GQUIC_VERSION_Q036=0x51303336,
+ GQUIC_VERSION_Q037=0x51303337,
+ GQUIC_VERSION_Q038=0x51303338,
+ GQUIC_VERSION_Q039=0x51303339,
+
+ GQUIC_VERSION_Q040=0x51303430,
+ GQUIC_VERSION_Q041=0x51303431,
+ GQUIC_VERSION_Q042=0x51303432,
+ GQUIC_VERSION_Q043=0x51303433,
+ GQUIC_VERSION_Q044=0x51303434,
+ GQUIC_VERSION_Q045=0x51303435,
+ GQUIC_VERSION_Q046=0x51303436,
+ GQUIC_VERSION_Q047=0x51303437,
+ GQUIC_VERSION_Q048=0x51303438,
+ GQUIC_VERSION_Q049=0x51303439,
+
+ GQUIC_VERSION_Q050=0x51303530,
+ GQUIC_VERSION_Q051=0x51303531,
+ GQUIC_VERSION_Q052=0x51303532,
+ GQUIC_VERSION_Q053=0x51303533,
+ GQUIC_VERSION_Q054=0x51303534,
+ GQUIC_VERSION_Q055=0x51303535,
+ GQUIC_VERSION_Q056=0x51303536,
+ GQUIC_VERSION_Q057=0x51303537,
+ GQUIC_VERSION_Q058=0x51303538,
+ GQUIC_VERSION_Q059=0x51303539,
+
+ GQUIC_VERSION_Q099=0x51303939,
+
+ //Google QUIC with TLS 48 - 49 (T048 - T049)
+ GQUIC_VERSION_T048=0x54303438,
+ GQUIC_VERSION_T049=0x54303439,
+
+ //Google QUIC with TLS 50 - 59 (T050 - T059)
+ GQUIC_VERSION_T050=0x54303530,
+ GQUIC_VERSION_T051=0x54303531,
+ GQUIC_VERSION_T052=0x54303532,
+ GQUIC_VERSION_T053=0x54303533,
+ GQUIC_VERSION_T054=0x54303534,
+ GQUIC_VERSION_T055=0x54303535,
+ GQUIC_VERSION_T056=0x54303536,
+ GQUIC_VERSION_T057=0x54303537,
+ GQUIC_VERSION_T058=0x54303538,
+ GQUIC_VERSION_T059=0x54303539,
+
+ //Google QUIC with TLS 99 (T099)
+ GQUIC_VERSION_T099=0x54303939,
+
+ //Google Proxied QUIC
+ PQUIC_VERSION_PROX=0x50524f58,
+
+ //quic-go
+ QUIC_GO_VERSION_00=0x51474F00,
+ QUIC_GO_VERSION_FF=0x51474FFF,
+
+ //quicly
+ QUICLY_VERSION_00=0x91c17000,
+ QUICLY_VERSION_FF=0x91c170FF,
+
+ //Microsoft
+ MSQUIC_VERSION_00=0xabcd0000,
+ MSQUIC_VERSION_0F=0xabcd000F,
+
+ //Mozilla
+ MOZQUIC_VERSION_00=0xf123f0c0,
+ MOZQUIC_VERSION_0F=0xf123f0cF,
+
+ //Facebook
+ MVFST_VERSION_00=0xfaceb000,
+ MVFST_VERSION_01=0xfaceb001,
+ MVFST_VERSION_02=0xfaceb002,
+ MVFST_VERSION_03=0xfaceb003,
+ MVFST_VERSION_04=0xfaceb004,
+ MVFST_VERSION_05=0xfaceb005,
+ MVFST_VERSION_06=0xfaceb006,
+ MVFST_VERSION_07=0xfaceb007,
+ MVFST_VERSION_08=0xfaceb008,
+ MVFST_VERSION_09=0xfaceb009,
+ MVFST_VERSION_0A=0xfaceb00A,
+ MVFST_VERSION_0B=0xfaceb00B,
+ MVFST_VERSION_0C=0xfaceb00C,
+ MVFST_VERSION_0D=0xfaceb00D,
+ MVFST_VERSION_0E=0xfaceb00E,
+ MVFST_VERSION_0F=0xfaceb00F,
+
+ //IETF
+ IQUIC_VERSION_RFC9000=0x00000001,
+ IQUIC_VERSION_I001=0xFF000001,
+ IQUIC_VERSION_I002=0xFF000002,
+ IQUIC_VERSION_I003=0xFF000003,
+ IQUIC_VERSION_I004=0xFF000004,
+ IQUIC_VERSION_I005=0xFF000005,
+ IQUIC_VERSION_I006=0xFF000006,
+ IQUIC_VERSION_I007=0xFF000007,
+ IQUIC_VERSION_I008=0xFF000008,
+ IQUIC_VERSION_I009=0xFF000009,
+ IQUIC_VERSION_I010=0xFF00000A,
+ IQUIC_VERSION_I011=0xFF00000B,
+ IQUIC_VERSION_I012=0xFF00000C,
+ IQUIC_VERSION_I013=0xFF00000D,
+ IQUIC_VERSION_I014=0xFF00000E,
+ IQUIC_VERSION_I015=0xFF00000F,
+ IQUIC_VERSION_I016=0xFF000010,
+ IQUIC_VERSION_I017=0xFF000011,
+ IQUIC_VERSION_I018=0xFF000012,
+ IQUIC_VERSION_I019=0xFF000013,
+ IQUIC_VERSION_I020=0xFF000014,
+ IQUIC_VERSION_I021=0xFF000015,
+ IQUIC_VERSION_I022=0xFF000016,
+ IQUIC_VERSION_I023=0xFF000017,
+ IQUIC_VERSION_I024=0xFF000018,
+ IQUIC_VERSION_I025=0xFF000019,
+ IQUIC_VERSION_I026=0xFF00001A,
+ IQUIC_VERSION_I027=0xFF00001B,
+ IQUIC_VERSION_I028=0xFF00001C,
+ IQUIC_VERSION_I029=0xFF00001D,
+ IQUIC_VERSION_I030=0xFF00001E,
+ IQUIC_VERSION_I031=0xFF00001F,
+ IQUIC_VERSION_I032=0xFF000020
+};
+
+int lpi_plus_match_quic(int is_c2s_flow, const unsigned char *payload, size_t payload_sz)
+{
+ enum _QUIC_VERSION quic_version = QUIC_VERSION_UNKNOWN;
+ char public_flags=payload[0];
+ int used_len = 1;
+
+ if(payload_sz<5)
+ {
+ goto QUIC_UNKNOWN;
+ }
+
+ // Q001~Q043: 0x80 is currently unused, and must be set to 0
+
+ // The most significant bit (0x80) of byte 0 (the first byte) is set to 1 for long headers
+ (payload[0] & 0x80) ? (quic_version = (enum _QUIC_VERSION)ntohl(*(unsigned int *)(payload + 1))) : QUIC_VERSION_UNKNOWN;
+ if (
+ (quic_version == GQUIC_VERSION_Q099) ||
+ (quic_version == PICOQUIC_VERSION_30) ||
+ (quic_version == PQUIC_VERSION_PROX) ||
+ (quic_version == GQUIC_VERSION_T099) ||
+ (quic_version >= GQUIC_VERSION_Q044 && quic_version <= GQUIC_VERSION_Q050) ||
+ (quic_version >= GQUIC_VERSION_Q051 && quic_version <= GQUIC_VERSION_Q059) ||
+ (quic_version >= GQUIC_VERSION_T048 && quic_version <= GQUIC_VERSION_T049) ||
+ (quic_version >= GQUIC_VERSION_T050 && quic_version <= GQUIC_VERSION_T059) ||
+ (quic_version >= QUANT_VERSION_00 && quic_version <= QUANT_VERSION_FF) ||
+ (quic_version >= QUIC_GO_VERSION_00 && quic_version <= QUIC_GO_VERSION_FF) ||
+ (quic_version >= QUICLY_VERSION_00 && quic_version <= QUICLY_VERSION_FF) ||
+ (quic_version >= MSQUIC_VERSION_00 && quic_version <= MSQUIC_VERSION_0F) ||
+ (quic_version >= MOZQUIC_VERSION_00 && quic_version <= MOZQUIC_VERSION_0F) ||
+ (quic_version >= MVFST_VERSION_00 && quic_version <= MVFST_VERSION_0F) ||
+ (quic_version >= IQUIC_VERSION_I001 && quic_version <= IQUIC_VERSION_I032) ||
+ (quic_version == IQUIC_VERSION_RFC9000))
+ {
+ goto QUIC_KNOWN;
+ }
+ if(is_c2s_flow==0 && public_flags & GQUIC_PUBLIC_FLAG_VERSION)
+ {
+ goto QUIC_UNKNOWN;
+ }
+ if((!public_flags)&GQUIC_PUBLIC_FLAG_PKT_NUM)
+ {
+ if(public_flags&GQUIC_PUBLIC_FLAG_VERSION) //Public Reset Packet
+ {
+ goto QUIC_UNKNOWN;// todo
+ }
+ else // Version Negotiation Packet
+ {
+ goto QUIC_UNKNOWN;
+ }
+ }
+ if(public_flags&GQUIC_PUBLIC_FLAG_CID)
+ {
+ used_len+=sizeof(unsigned long long); // CID length
+ }
+
+ if(payload_sz>=(size_t)(used_len+sizeof(int)) && public_flags&GQUIC_PUBLIC_FLAG_VERSION && (*(unsigned char *)(payload+used_len)==0x51))
+ {
+ quic_version=(enum _QUIC_VERSION)ntohl(*(unsigned int *)(payload+used_len));
+ used_len+=sizeof(int); // skip version
+ }
+
+ if(quic_version<GQUIC_VERSION_Q001 || quic_version>GQUIC_VERSION_Q043)
+ {
+ goto QUIC_UNKNOWN;
+ }
+
+QUIC_KNOWN:
+ return 1;
+
+QUIC_UNKNOWN:
+ return 0;
+}
+
+
+struct dns_header
+{
+ u_int16_t id;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ u_char rd:1;
+ u_char tc:1;
+ u_char aa:1;
+ u_char opcode:4;
+ u_char qr:1;
+ u_char rcode:4;
+ u_char z:3;
+ u_char ra:1;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+ u_char qr:1;
+ u_char opcode:4;
+ u_char aa:1;
+ u_char tc:1;
+ u_char rd:1;
+ u_char ra:1;
+ u_char z:3;
+ u_char rcode:4;
+#endif
+ u_int16_t qdcount;
+ u_int16_t ancount;
+ u_int16_t aucount;//authority count
+ u_int16_t adcount;//additional count
+};
+
+__thread lpi_module_t per_thread_result;
+lpi_module_t* lpi_plus_extended_guess(struct lpi_plus_detect_context *ctx, lpi_protocol_t lpi_proto, const char *payload, size_t payload_sz)
+{
+ unsigned short sport=ctx->lpi_data.client_port, dport=ctx->lpi_data.server_port;
+
+ memset(&per_thread_result, 0, sizeof(per_thread_result));
+ lpi_module_t *result=&per_thread_result;
+
+ // FTPS
+ if((sport == 989 || sport == 990 || dport == 989 || dport == 990) && lpi_proto == LPI_PROTO_SSL)
+ {
+ result->protocol=(lpi_protocol_t)LPI_PROTP_FTPS;
+ result->category=LPI_CATEGORY_FILES;
+ result->priority=3;
+ result->name=ftps_name;
+ result->lpi_callback=NULL;
+ return result;
+ }
+
+ //QUIC
+ if((sport==443 || dport==443 || sport==80 || dport==80 || sport==8443 || dport==8443)
+ && (lpi_proto==LPI_PROTO_UNKNOWN || lpi_proto==LPI_PROTO_UDP))
+ {
+ if(lpi_plus_match_quic(ctx->current_is_c2s_flow, (const unsigned char *)payload, payload_sz))
+ {
+ //lpi_quic
+ result->protocol=LPI_PROTO_UDP_QUIC;
+ result->category=LPI_CATEGORY_WEB;
+ result->priority=9;
+ result->name=quic_name;
+ result->lpi_callback=NULL;
+ return result;
+ }
+ }
+
+ //DNS
+ if((sport==53 || dport==53) && (payload_sz>12) && (lpi_proto==LPI_PROTO_UNKNOWN || lpi_proto==LPI_PROTO_UDP))
+ {
+ struct dns_header *dns_hdr=NULL;
+ if(ctx->lpi_data.trans_proto==IPPROTO_TCP)
+ {
+ dns_hdr=(struct dns_header *)(payload+2);
+ }
+ else
+ {
+ dns_hdr=(struct dns_header *)payload;
+ }
+ if((dns_hdr->qr==1 && ntohs(dns_hdr->qdcount)==1) ||
+ (dns_hdr->qr==0 && ntohs(dns_hdr->qdcount)==1 && ntohs(dns_hdr->aucount)==0 && ntohs(dns_hdr->ancount)==0))
+ {
+ result->protocol=LPI_PROTO_DNS;
+ result->category=LPI_CATEGORY_SERVICES;
+ result->priority=10;
+ result->name=dns_name;
+ result->lpi_callback=NULL;
+ return result;
+ }
+ }
+
+ //IMAP
+ if(((sport==143 || dport==143))
+ && ((lpi_proto==LPI_PROTO_UNKNOWN) && ctx->lpi_data.trans_proto==IPPROTO_TCP)
+ && (
+ (payload_sz>=11 && memmem(payload, payload_sz, " CAPABILITY", 11)!=NULL) ||
+ (payload_sz>=7 && memmem(payload, payload_sz, " LOGIN ", 7)!=NULL)
+ )
+ )
+ {
+ result->protocol=LPI_PROTO_IMAP;
+ result->category=LPI_CATEGORY_MAIL;
+ result->priority=2;
+ result->name=imap_name;
+ result->lpi_callback=NULL;
+ return result;
+ }
+
+ if( (lpi_proto==LPI_PROTO_UNKNOWN || lpi_proto == LPI_PROTO_UDP)&&
+ 1 == lpi_plus_match_openvpn((const unsigned char *)payload,
+ payload_sz,
+ ctx->detected_c2s_pkt,
+ ctx->detected_s2c_pkt,
+ &ctx->ovpn,
+ ctx->lpi_data.trans_proto,
+ ctx->current_is_c2s_flow))
+ {
+ result->protocol=LPI_PROTO_OPENVPN;
+ result->category=LPI_CATEGORY_TUNNELLING;
+ result->priority=4;
+ result->name=openvpn_name;
+ result->lpi_callback=NULL;
+ return result;
+ }
+
+ //SMTP
+ if (lpi_proto == LPI_PROTO_FTP_CONTROL && ctx->detected_pkt_cnt == 1 && ctx->current_is_c2s_flow==0)
+ {
+ if ((((payload_sz >= 4 && (memcmp(payload, "220-", 4) == 0)) || memcmp(payload, "220 ", 4) == 0)) &&
+ (((payload_sz >= 7 && (memmem(payload, payload_sz, " ESMTP ", 7) != NULL)) ||
+ memmem(payload, payload_sz, " esmtp ", 7) != NULL)))
+ {
+ // lpi_smtp
+ result->protocol = LPI_PROTO_SMTP;
+ result->category = LPI_CATEGORY_MAIL;
+ result->priority = 2;
+ result->name = smtp_name;
+ return result;
+ }
+ }
+
+ if (lpi_proto == LPI_PROTO_SMTP && ctx->detected_pkt_cnt == 1 && ctx->current_is_c2s_flow==0)
+ {
+ if (
+ (payload_sz >= 4) &&
+ (memcmp(payload, "220 ", 4) == 0 || memcmp(payload, "220-", 4) == 0) &&
+ (memmem(payload, payload_sz, "FTPd", 4) != NULL ||
+ memmem(payload, payload_sz, "ftpd", 4) != NULL ||
+ memmem(payload, payload_sz, "FTPD", 4) != NULL))
+ {
+ // lpi_ftpcontrol
+ result->protocol = LPI_PROTO_FTP_CONTROL;
+ result->category = LPI_CATEGORY_FILES;
+ result->priority = 3;
+ result->name = ftp_control_name;
+ return result;
+ }
+ }
+ return NULL;
+} \ No newline at end of file
diff --git a/decoders/lpi_plus/lpip_extend.h b/decoders/lpi_plus/lpip_extend.h
new file mode 100644
index 0000000..0715c00
--- /dev/null
+++ b/decoders/lpi_plus/lpip_extend.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include "libprotoident/libprotoident.h"
+
+typedef enum {
+ LPI_PROTO_EXTEND_FRIST = LPI_PROTO_LAST,
+ LPI_PROTO_IKE, //unsupport
+ LPI_PROTO_DOH, //unsupport
+ LPI_PROTO_MAIL, //unsupport
+ LPI_PROTO_ESNI, //unsupport
+ LPI_PROTP_FTPS,
+ LPI_PROTO_EXTEND_LAST
+} extend_lpi_protocol_t;
+
+struct ovpn_ctx
+{
+ uint64_t local_session_id;
+ int contain_local_session_id_pkt_num;
+ int valid_opcode_cnt;
+};
+
+struct lpi_plus_detect_context
+{
+ unsigned int detected_pkt_cnt;
+ unsigned short detected_s2c_pkt;
+ unsigned short detected_c2s_pkt;
+ unsigned char current_is_c2s_flow;
+ unsigned char stop_detect;
+ lpi_data_t lpi_data; // lpi API
+ union
+ {
+ struct ovpn_ctx ovpn;
+ };
+};
+
+
+int lpi_plus_match_quic(int is_c2s_flow, const unsigned char *payload, size_t payload_sz);
+int lpi_plus_match_openvpn(const unsigned char *payload, size_t payload_sz, int c2s_pkt_cnt, int s2c_pkt_cnt, struct ovpn_ctx *ovpn, unsigned char trans_proto, bool is_c2s_flow);
+lpi_module_t* lpi_plus_extended_guess(struct lpi_plus_detect_context *ctx, lpi_protocol_t lpi_proto, const char *payload, size_t payload_sz); \ No newline at end of file
diff --git a/decoders/lpi_plus/lpip_module.c b/decoders/lpi_plus/lpip_module.c
new file mode 100644
index 0000000..9286a2e
--- /dev/null
+++ b/decoders/lpi_plus/lpip_module.c
@@ -0,0 +1,392 @@
+/*
+ * dpkt_basic_proto_main.cpp
+ *
+ * Created on: Aug 7, 2020
+ * Author: iie
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <assert.h>
+
+#include "uthash/uthash.h"
+
+#include "stellar/utils.h"
+#include "stellar/packet.h"
+#include "stellar/session_manager.h"
+
+#include "appid/appid_internal.h"
+
+#include "lpi_plus.h"
+#include "lpip_extend.h"
+
+
+const char *l7_protocol_file = (char *)"./tsgconf/tsg_l7_protocol.conf";
+
+struct lpi_plus_appid_info
+{
+ int appid;
+ char lpi_name[255];
+ char app_name[255];
+ UT_hash_handle hh_appid;
+ UT_hash_handle hh_lpi_name;
+};
+
+struct lpi_plus_mapper
+{
+ struct lpi_plus_appid_info *hash_name2appid;
+ struct lpi_plus_appid_info *hash_appid2name;
+};
+
+struct lpi_plus_env
+{
+ unsigned int max_pkts;
+ int lpip_session_exdata_idx;
+ int topic_appid;
+ struct stellar_module_manager *mod_mgr;
+ struct lpi_plus_mapper *mapper;
+};
+
+struct lpi_plus_exdata
+{
+ struct lpi_plus_detect_context ctx;
+ int appid[MAX_APPID_NUM];
+ size_t appid_num;
+};
+
+static void lpi_plus_get_host_order_port(struct session *sess __unused, unsigned short *sport, unsigned short *dport)
+{
+ *sport=0;
+ *dport=0;
+//get host order port from stellar session api
+
+ const struct packet *pkt = session_get0_current_packet(sess);
+ enum flow_type flow_type=session_get_flow_type(sess);
+ if(pkt && (flow_type==FLOW_TYPE_C2S || flow_type==FLOW_TYPE_S2C))
+ {
+ int layer_cnt=packet_get_layer_count(pkt);
+ const struct layer *layer = packet_get_layer_by_idx(pkt, layer_cnt - 1);
+ if (layer && layer->proto == LAYER_PROTO_TCP)
+ {
+ *sport = ntohs(layer->hdr.tcp->th_sport);
+ *dport = ntohs(layer->hdr.tcp->th_dport);
+ }
+ if (layer && layer->proto == LAYER_PROTO_UDP)
+ {
+ *sport = ntohs(layer->hdr.udp->uh_sport);
+ *dport = ntohs(layer->hdr.udp->uh_dport);
+ }
+ //S2C, swap sport and dport
+ if(flow_type == FLOW_TYPE_S2C)
+ {
+ unsigned short tmp = *sport;
+ *sport = *dport;
+ *dport = tmp;
+ }
+ }
+ return;
+}
+
+//TODO: fill packet sequence
+static struct appid_message *lpi_plus_message_new(struct session *sess, int *id_array, size_t id_num)
+{
+ struct appid_message *result=CALLOC(struct appid_message, 1);
+ result->origin=ORIGIN_LPI_PLUS;
+ result->sess=sess;
+ result->appid_num=id_num;
+ for(unsigned int i=0; i<result->appid_num; i++)
+ {
+ result->appid[i]=(int)(id_array[i]);
+ result->surrogate_id[i]=0;
+ }
+
+ return result;
+}
+
+static int lpi_plus_appid_update(int current_id_array[], size_t *current_id_num, int incoming_id)
+{
+ size_t i=0;
+
+ if(*current_id_num>=MAX_APPID_NUM)
+ {
+ return 0;
+ }
+
+ for(i=0; i<(*current_id_num); i++)
+ {
+ if(incoming_id==current_id_array[i])
+ {
+ return 0;
+ }
+ }
+
+ current_id_array[(*current_id_num)]=incoming_id;
+ (*current_id_num)++;
+
+ return 1;
+}
+
+static int lpi_plus_name2appid(struct lpi_plus_mapper *mapper, const char *lpi_name, size_t name_sz)
+{
+ struct lpi_plus_appid_info *out=NULL;
+ HASH_FIND(hh_lpi_name, mapper->hash_appid2name, lpi_name, name_sz, out);
+ if(out==NULL)return 0;
+ return out->appid;
+}
+
+const char *lpi_plus_appid2name(struct lpi_plus_mapper *mapper, int appid)
+{
+ struct lpi_plus_appid_info *out=NULL;
+ HASH_FIND(hh_appid, mapper->hash_appid2name, &appid, sizeof(int), out);
+ if(out==NULL)return NULL;
+ return out->app_name;
+}
+
+static struct lpi_plus_mapper *lpi_plus_mapper_new(const char *filename)
+{
+ size_t ret=0;
+ FILE *fp=NULL;
+ char line[1024]={0};
+ char type_name[32]={0};
+ struct lpi_plus_appid_info *appid_info=NULL;
+ struct lpi_plus_appid_info *tmp=NULL;
+
+ fp=fopen(filename, "r");
+ if(fp==NULL)
+ {
+ printf("Open %s failed ...", filename);
+ return NULL;
+ }
+ struct lpi_plus_mapper * mapper=(struct lpi_plus_mapper *)calloc(1, sizeof(struct lpi_plus_mapper));
+ while((fgets(line, sizeof(line), fp))!=NULL)
+ {
+ if(line[0]=='#' || line[0]=='\n' || line[0]=='\r' ||line[0]=='\0')
+ {
+ continue;
+ }
+
+ appid_info=(struct lpi_plus_appid_info *)calloc(1, sizeof(struct lpi_plus_appid_info));
+ ret=sscanf(line, "%31s %63s %d %63s", type_name, appid_info->lpi_name, &appid_info->appid, appid_info->app_name);
+
+ if(ret==3)
+ {
+ strcpy(appid_info->app_name, appid_info->lpi_name);
+ }
+
+ HASH_FIND(hh_lpi_name, mapper->hash_name2appid, appid_info->lpi_name, strlen(appid_info->lpi_name), tmp);
+
+ //deduplicate
+ if(tmp)
+ {
+ free(appid_info);
+ continue;
+ }
+ HASH_ADD_KEYPTR(hh_lpi_name, mapper->hash_name2appid, appid_info->lpi_name, strlen(appid_info->lpi_name), appid_info);
+ HASH_ADD(hh_appid, mapper->hash_appid2name, appid, sizeof(int), appid_info);
+ memset(line, 0, sizeof(line));
+ }
+ fclose(fp);
+ return mapper;
+}
+
+static void lpi_plus_mapper_free(struct lpi_plus_mapper *mapper)
+{
+ if(mapper==NULL)return;
+
+ struct lpi_plus_appid_info *out=NULL, *tmp=NULL;
+ HASH_CLEAR(hh_appid, mapper->hash_appid2name);
+ HASH_ITER(hh_lpi_name, mapper->hash_name2appid, out ,tmp)
+ {
+ HASH_DELETE(hh_lpi_name, mapper->hash_name2appid, out);
+ free(out);
+ }
+ free(mapper);
+}
+
+void lpi_plus_context_update(struct session *sess, struct lpi_plus_detect_context *ctx,
+ const char *scan_data, int scan_data_len)
+{
+ lpi_data_t *data = &ctx->lpi_data;
+ int l4_proto = 0;
+ enum session_type type = session_get_type(sess);
+ if (type == SESSION_TYPE_TCP)
+ {
+ l4_proto = IPPROTO_TCP;
+ }
+ if (type == SESSION_TYPE_UDP)
+ {
+ l4_proto = IPPROTO_UDP;
+ }
+ int cur_pkt_dir = session_get_flow_type(sess);
+ ctx->detected_pkt_cnt++;
+ (cur_pkt_dir == FLOW_TYPE_C2S) ? (ctx->detected_c2s_pkt++) : (ctx->detected_s2c_pkt++);
+ ctx->current_is_c2s_flow = ((cur_pkt_dir == FLOW_TYPE_C2S) ? 1 : 0);
+ uint32_t dir = 0;
+ if(ctx->current_is_c2s_flow)
+ {
+ dir = 0;
+ }
+ else
+ {
+ dir = 1;
+ }
+ uint32_t four_bytes;
+
+ data->observed[dir] += scan_data_len;
+
+ if (data->trans_proto == 0)data->trans_proto = l4_proto;
+
+ if (scan_data_len < 4)
+ {
+ memcpy((char *)&four_bytes, scan_data, scan_data_len);
+ four_bytes = (ntohl(four_bytes)) >> (8 * (4 - scan_data_len));
+ four_bytes = htonl(four_bytes << (8 * (4 - scan_data_len)));
+ }
+ else
+ {
+ four_bytes = (*(uint32_t *)scan_data);
+ }
+
+ data->payload[dir] = four_bytes;
+ data->payload_len[dir] = scan_data_len;
+
+ uint16_t source=0;
+ uint16_t dest=0;
+ lpi_plus_get_host_order_port(sess,&source ,&dest);
+
+ data->client_port = source;
+ data->server_port = dest;
+ return;
+
+}
+
+static int lpi_plus_detect(struct lpi_plus_detect_context *ctx, struct lpi_plus_mapper *mapper, const char *payload, size_t payload_len)
+{
+ lpi_module_t *plpi_mod=lpi_guess_protocol(&(ctx->lpi_data));
+ if(plpi_mod==NULL)return 0;
+
+ lpi_module_t *extend_result = lpi_plus_extended_guess(ctx, plpi_mod->protocol, payload, payload_len);
+ if (extend_result)plpi_mod=extend_result;
+
+ int new_appid=lpi_plus_name2appid(mapper, plpi_mod->name, strlen(plpi_mod->name));
+
+ //if appid won't be outer of tunnel, stop detecting
+ if (new_appid>0
+ && (plpi_mod->category != LPI_CATEGORY_TUNNELLING
+ && plpi_mod->category != LPI_CATEGORY_NAT
+ && plpi_mod->protocol != LPI_PROTO_RDP
+ && plpi_mod->protocol != LPI_PROTO_UDP_RDP
+ && plpi_mod->protocol != LPI_PROTO_UDP_RTP
+ && plpi_mod->protocol != LPI_PROTO_UDP_RTCP))
+ {
+ ctx->stop_detect=1;
+ }
+ return new_appid;
+}
+
+static void lpi_plus_on_session(struct session *sess, struct packet *pkt, void *args)
+{
+ if(pkt==NULL)return;
+ struct lpi_plus_env *env=(struct lpi_plus_env *)args;
+ struct lpi_plus_exdata *exdata = (struct lpi_plus_exdata *)session_get_exdata(sess, env->lpip_session_exdata_idx);
+ if(exdata==NULL)
+ {
+ exdata= CALLOC(struct lpi_plus_exdata, 1);
+ session_set_exdata(sess, env->lpip_session_exdata_idx, exdata);
+ }
+ if(exdata->ctx.stop_detect==1)return;
+ if(exdata->ctx.detected_pkt_cnt>=env->max_pkts)return;
+
+ uint16_t payload_len=packet_get_payload_len(pkt);
+ const char *payload=packet_get_payload(pkt);
+ if (payload!=NULL && payload_len>0)//detect packet with payload only
+ {
+ lpi_plus_context_update(sess, &exdata->ctx, payload, payload_len);
+ int appid=lpi_plus_detect(&exdata->ctx, env->mapper, payload, payload_len);
+ if(appid>0 && lpi_plus_appid_update(exdata->appid, &(exdata->appid_num), appid))
+ {
+ struct appid_message *msg=lpi_plus_message_new(sess, exdata->appid, exdata->appid_num);
+ if(0 > mq_runtime_publish_message(stellar_module_manager_get_mq_runtime(env->mod_mgr),
+ env->topic_appid,
+ msg))FREE(msg);
+ }
+ }
+ return;
+}
+
+static void lpi_plus_exdata_free(int idx __unused, void *ex_ptr, void *arg __unused)
+{
+ if(ex_ptr==NULL)return;
+ FREE(ex_ptr);
+}
+
+void lpi_plus_exit(struct stellar_module_manager *mod_mgr, struct stellar_module *mod)
+{
+ if(mod_mgr==NULL)return;
+ if(mod)
+ {
+ struct lpi_plus_env *env=(struct lpi_plus_env *)stellar_module_get_ctx(mod);
+ lpi_free_library();
+ lpi_plus_mapper_free(env->mapper);
+ FREE(env);
+ stellar_module_free(mod);
+ }
+}
+
+struct stellar_module *lpi_plus_init(struct stellar_module_manager *mod_mgr)
+{
+ if(mod_mgr==NULL)return NULL;
+
+ struct lpi_plus_env *env=CALLOC(struct lpi_plus_env, 1);
+ struct stellar_module *mod=stellar_module_new("LPI_PLUS", env);
+ env->mod_mgr=mod_mgr;
+ env->max_pkts=16;//TODO: load from toml
+
+ struct session_manager *sess_mgr=stellar_module_get_session_manager(mod_mgr);
+ struct mq_schema *mq_s=stellar_module_manager_get_mq_schema(mod_mgr);
+
+ if(sess_mgr==NULL || mq_s==NULL)
+ {
+ goto INIT_ERROR;
+ }
+
+ if(lpi_init_library()<0)
+ {
+ goto INIT_ERROR;
+ }
+ env->mapper=lpi_plus_mapper_new(l7_protocol_file);// TODO: load path from toml
+ if(env->mapper == NULL)
+ {
+ goto INIT_ERROR;
+ }
+
+ session_manager_subscribe_tcp(sess_mgr,lpi_plus_on_session, env);
+ session_manager_subscribe_udp(sess_mgr, lpi_plus_on_session, env);
+
+ env->lpip_session_exdata_idx = session_manager_new_session_exdata_index(sess_mgr, "EXDATA_LPI", lpi_plus_exdata_free, NULL);
+ env->topic_appid=stellar_appid_create_topic(mod_mgr);
+ if(env->topic_appid<0)
+ {
+ goto INIT_ERROR;
+ }
+
+ return mod;
+
+INIT_ERROR:
+ lpi_plus_exit(mod_mgr, mod);
+ exit(-1);
+ return NULL;
+
+}
+
+struct lpi_plus_mapper *stellar_module_get_lpip(struct stellar_module_manager *mod_mgr)
+{
+ if(mod_mgr==NULL)return NULL;
+ struct stellar_module *mod=stellar_module_manager_get_module(mod_mgr, "LPI_PLUS");
+ if(mod==NULL)return NULL;
+ struct lpi_plus_env *lpi_p=(struct lpi_plus_env *)stellar_module_get_ctx(mod);
+ if(lpi_p==NULL)return NULL;
+ return lpi_p->mapper;
+} \ No newline at end of file
diff --git a/decoders/lpi_plus/version.map b/decoders/lpi_plus/version.map
new file mode 100644
index 0000000..179b07f
--- /dev/null
+++ b/decoders/lpi_plus/version.map
@@ -0,0 +1,11 @@
+VERS_2.4{
+global:
+extern "C" {
+ lpi_plus_init;
+ lpi_plus_exit;
+ stellar_appid_subscribe;
+ GIT_VERSION_*;
+};
+
+local: *;
+};
diff --git a/include/stellar/appid.h b/include/stellar/appid.h
index 6d82d71..df30a8f 100644
--- a/include/stellar/appid.h
+++ b/include/stellar/appid.h
@@ -1,16 +1,19 @@
#pragma once
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
#include <stddef.h>
#include <stdint.h>
-#define MESSAGE_MAGIC 0x12345678
-
-#define MAX_APP_ID_NUM 8
-#define APP_ID_MESSAGE_TOPIC "TOPIC_APP_ID"
+#include "stellar/session.h"
+#include "stellar/module_manager.h"
-enum APP_IDENTIFY_ORIGIN
+enum APPID_ORIGIN
{
- ORIGIN_PROTO_IDENTIFY=0,
+ ORIGIN_LPI_PLUS=0,
ORIGIN_APP_SKETCH_USER_DEFINE,
ORIGIN_PROTO_ENGINE,
ORIGIN_APP_SKETCH_BUILT_IN,
@@ -20,12 +23,10 @@ enum APP_IDENTIFY_ORIGIN
ORIGIN_MAX
};
-struct app_id_message
-{
- int magic;
- enum APP_IDENTIFY_ORIGIN origin;
- uint32_t app_id_num;
- int32_t app_id[MAX_APP_ID_NUM];
- uint32_t surrogate_id[MAX_APP_ID_NUM];
- uint32_t packet_sequence[MAX_APP_ID_NUM];
-}; \ No newline at end of file
+typedef void on_appid_callback(struct session *sess, enum APPID_ORIGIN origin, int appid[], size_t appid_num, void *args);
+int stellar_appid_create_topic(struct stellar_module_manager *mod_mgr);
+int stellar_appid_subscribe(struct stellar_module_manager *mod_mgr, on_appid_callback *cb, void *args);
+
+#ifdef __cplusplus
+}
+#endif \ No newline at end of file
diff --git a/include/stellar/module_manager.h b/include/stellar/module_manager.h
index a944186..70ee5a5 100644
--- a/include/stellar/module_manager.h
+++ b/include/stellar/module_manager.h
@@ -8,9 +8,6 @@ extern "C"
#include "stellar/mq.h"
#include "stellar/log.h"
-#define PACKET_MANAGER_MODULE_NAME "packet_manager_module"
-#define SESSION_MANAGER_MODULE_NAME "session_manager_module"
-
struct stellar_module;
struct stellar_module *stellar_module_new(const char *name, void *ctx);
void stellar_module_free(struct stellar_module *mod);
diff --git a/include/stellar/packet_manager.h b/include/stellar/packet_manager.h
index 8270c7b..dd90074 100644
--- a/include/stellar/packet_manager.h
+++ b/include/stellar/packet_manager.h
@@ -8,6 +8,8 @@ extern "C"
#include "stellar/exdata.h"
#include "stellar/packet.h"
+#include "stellar/module_manager.h"
+
enum packet_stage
{
PACKET_STAGE_PREROUTING,
@@ -20,6 +22,8 @@ enum packet_stage
struct packet_manager;
+struct packet_manager *stellar_module_get_packet_manager(struct stellar_module_manager *mod_mgr);
+
int packet_manager_new_packet_exdata_index(struct packet_manager *pkt_mgr, const char *name, exdata_free *func, void *arg);
typedef void on_packet_stage_callback(enum packet_stage stage, struct packet *pkt, void *args);
diff --git a/include/stellar/session_manager.h b/include/stellar/session_manager.h
index 749ccbb..87d4b18 100644
--- a/include/stellar/session_manager.h
+++ b/include/stellar/session_manager.h
@@ -10,8 +10,12 @@ extern "C"
#include "stellar/exdata.h"
#include "stellar/session.h"
+#include "stellar/module_manager.h"
+
struct session_manager;
+struct session_manager *stellar_module_get_session_manager(struct stellar_module_manager *mod_mgr);
+
int session_manager_new_session_exdata_index(struct session_manager *sess_mgr, const char *name, exdata_free *func, void *arg);
typedef void on_session_callback(struct session *sess, struct packet *pkt, void *args);
diff --git a/include/stellar/stellar.h b/include/stellar/stellar.h
index 9dfd711..0be4c6e 100644
--- a/include/stellar/stellar.h
+++ b/include/stellar/stellar.h
@@ -9,6 +9,7 @@ extern "C"
#include "stellar/log.h"
#include "stellar/packet.h"
+#include "stellar/module_manager.h"
struct stellar;
@@ -26,6 +27,7 @@ void stellar_free(struct stellar *st);
void stellar_loopbreak(struct stellar *st);
void stellar_reload_log_level(struct stellar *st);
struct logger *stellar_get_logger(struct stellar *st);
+struct stellar_module_manager *stellar_get_module_manager(struct stellar *st);
#ifdef __cplusplus
}
diff --git a/infra/CMakeLists.txt b/infra/CMakeLists.txt
index 008713e..8dfa468 100644
--- a/infra/CMakeLists.txt
+++ b/infra/CMakeLists.txt
@@ -1,6 +1,6 @@
set(INFRA exdata mq tuple packet_manager packet_io ip_reassembly tcp_reassembly session_manager module_manager polling_manager)
set(DEPS bitmap dablooms interval_tree logger nmx_pool rbtree timeout toml)
-#set(DECODERS http lpi)
+set(DECODERS appid lpi_plus)
set(WHOLE_ARCHIVE ${DEPS} ${INFRA} ${DECODERS})
set(LIBS fieldstat4)
diff --git a/infra/mq/mq.c b/infra/mq/mq.c
index ff503a8..a054e19 100644
--- a/infra/mq/mq.c
+++ b/infra/mq/mq.c
@@ -122,7 +122,7 @@ static int mq_dispatch_one_message(struct mq_topic *topic, struct mq_message *mq
-int mq_runtime_publish_message_at_once(struct mq_runtime *rt, int topic_id, void *msg)
+int mq_runtime_publish_message_immediate(struct mq_runtime *rt, int topic_id, void *msg)
{
if(rt==NULL || rt->schema == NULL)return -1;
diff --git a/infra/mq/mq_internal.h b/infra/mq/mq_internal.h
index 4d60e37..146d222 100644
--- a/infra/mq/mq_internal.h
+++ b/infra/mq/mq_internal.h
@@ -71,7 +71,7 @@ struct mq_runtime
};
int mq_runtime_publish_message_with_priority(struct mq_runtime *rt, int topic_id, void *msg, enum mq_property priority);
-int mq_runtime_publish_message_at_once(struct mq_runtime *rt, int topic_id, void *msg);
+int mq_runtime_publish_message_immediate(struct mq_runtime *rt, int topic_id, void *msg);
#ifdef __cplusplus
}
diff --git a/infra/mq/test/gtest_mq_main.cpp b/infra/mq/test/gtest_mq_main.cpp
index 2f16fcb..a2ee952 100644
--- a/infra/mq/test/gtest_mq_main.cpp
+++ b/infra/mq/test/gtest_mq_main.cpp
@@ -342,7 +342,7 @@ static void test_pub_on_msg_free(void *msg, void *msg_free_arg)
if((long)msg!=env->N_round && (int)(long)msg==env->N_round-1)
{
EXPECT_EQ(mq_runtime_publish_message(env->rt, env->topic_id, (void *)(long)(env->N_round)), -1);//on message free, publish always failed
- EXPECT_EQ(mq_runtime_publish_message_at_once(env->rt, env->topic_id, (void *)(long)(env->N_round)), 0);//on message free, publish at once success
+ EXPECT_EQ(mq_runtime_publish_message_immediate(env->rt, env->topic_id, (void *)(long)(env->N_round)), 0);//on message free, publish at once success
}
return;
}
diff --git a/infra/packet_manager/packet_manager.c b/infra/packet_manager/packet_manager.c
index eba87ec..e492414 100644
--- a/infra/packet_manager/packet_manager.c
+++ b/infra/packet_manager/packet_manager.c
@@ -4,7 +4,8 @@
#include "packet_internal.h"
#include "packet_manager_runtime.h"
#include "packet_manager_internal.h"
-#include "stellar/module_manager.h"
+
+#define PACKET_MANAGER_MODULE_NAME "packet_manager_module"
struct packet_manager_config
{
@@ -290,6 +291,17 @@ void packet_manager_print_stat(struct packet_manager *pkt_mgr, uint16_t thread_i
* packet manager module
******************************************************************************/
+struct packet_manager *stellar_module_get_packet_manager(struct stellar_module_manager *mod_mgr)
+{
+ assert(mod_mgr);
+ struct stellar_module *pkt_mgr_mod = stellar_module_manager_get_module(mod_mgr, PACKET_MANAGER_MODULE_NAME);
+ if (pkt_mgr_mod == NULL)
+ {
+ return NULL;
+ }
+ return (struct packet_manager*)stellar_module_get_ctx(pkt_mgr_mod);
+}
+
struct stellar_module *packet_manager_on_init(struct stellar_module_manager *mod_mgr)
{
assert(mod_mgr);
diff --git a/infra/session_manager/session_manager.c b/infra/session_manager/session_manager.c
index a2b2fd7..5f3820f 100644
--- a/infra/session_manager/session_manager.c
+++ b/infra/session_manager/session_manager.c
@@ -11,9 +11,12 @@
#include "session_internal.h"
#include "session_manager_runtime.h"
+#define SESSION_MANAGER_MODULE_NAME "session_manager_module"
+
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wunused-function"
+
struct session_manager_schema
{
struct exdata_schema *exdata;
@@ -162,14 +165,11 @@ static void clean_session(struct session_manager_runtime *sess_mgr_rt, uint64_t
#define MAX_CLEANED_SESS 1024
struct session *sess = NULL;
struct session *cleaned_sess[MAX_CLEANED_SESS] = {NULL};
- struct exdata_runtime *exdata_rt = NULL;
uint64_t used = session_manager_runtime_clean_session(sess_mgr_rt, now_ms, cleaned_sess, MAX_CLEANED_SESS);
for (uint64_t j = 0; j < used; j++)
{
sess = cleaned_sess[j];
- exdata_rt = (struct exdata_runtime *)session_get_user_data(sess);
- exdata_runtime_free(exdata_rt);
session_manager_runtime_free_session(sess_mgr_rt, sess);
}
}
@@ -421,12 +421,21 @@ int session_manager_subscribe_tcp_stream(struct session_manager *sess_mgr, on_tc
* session manager module
******************************************************************************/
+struct session_manager *stellar_module_get_session_manager(struct stellar_module_manager *mod_mgr)
+{
+ assert(mod_mgr);
+ struct stellar_module *sess_mgr_mod = stellar_module_manager_get_module(mod_mgr, SESSION_MANAGER_MODULE_NAME);
+ if (sess_mgr_mod == NULL)
+ {
+ return NULL;
+ }
+ return stellar_module_get_ctx(sess_mgr_mod);
+}
+
struct stellar_module *session_manager_on_init(struct stellar_module_manager *mod_mgr)
{
assert(mod_mgr);
- struct stellar_module *pkt_mgr_mod = stellar_module_manager_get_module(mod_mgr, PACKET_MANAGER_MODULE_NAME);
- assert(pkt_mgr_mod);
- struct packet_manager *pkt_mgr = stellar_module_get_ctx(pkt_mgr_mod);
+ struct packet_manager *pkt_mgr = stellar_module_get_packet_manager(mod_mgr);
assert(pkt_mgr);
struct stellar_polling_manager *poll_mgr = stellar_module_get_polling_manager(mod_mgr);
assert(poll_mgr);
diff --git a/infra/session_manager/session_manager_runtime.c b/infra/session_manager/session_manager_runtime.c
index f89176c..efb9e42 100644
--- a/infra/session_manager/session_manager_runtime.c
+++ b/infra/session_manager/session_manager_runtime.c
@@ -14,6 +14,12 @@
#include "session_transition.h"
#include "session_manager_runtime.h"
+#include "stellar/exdata.h"
+
+#define SESSION_MANAGER_RUNTIME_LOG_ERROR(format, ...) STELLAR_LOG_ERROR(__thread_local_logger, "session manager runtime", format, ##__VA_ARGS__)
+#define SESSION_MANAGER_RUNTIME_LOG_DEBUG(format, ...) STELLAR_LOG_DEBUG(__thread_local_logger, "session manager runtime", format, ##__VA_ARGS__)
+#define SESSION_MANAGER_RUNTIME_LOG_INFO(format, ...) STELLAR_LOG_INFO(__thread_local_logger, "session manager runtime", format, ##__VA_ARGS__)
+
struct snowflake
{
uint64_t seed;
@@ -1060,6 +1066,10 @@ void session_manager_runtime_free_session(struct session_manager_runtime *sess_m
{
if (sess)
{
+ struct exdata_runtime *exdata_rt = (struct exdata_runtime *)session_get_user_data(sess);
+ exdata_runtime_free(exdata_rt);
+
+ SESSION_MANAGER_RUNTIME_LOG_DEBUG("session %lu closed (%s)", session_get_id(sess), closing_reason_to_str(session_get_closing_reason(sess)));
SESSION_MANAGER_LOG_DEBUG("session %lu closed (%s)", session_get_id(sess), closing_reason_to_str(session_get_closing_reason(sess)));
session_timer_del(sess_mgr_rt->sess_timer, sess);
diff --git a/infra/stellar_core.c b/infra/stellar_core.c
index a63a5bd..81c3c2a 100644
--- a/infra/stellar_core.c
+++ b/infra/stellar_core.c
@@ -52,8 +52,7 @@ static void *worker_thread(void *arg)
struct stellar_module_manager *mod_mgr = st->mod_mgr;
struct mq_runtime *mq_rt = mq_runtime_new(st->mq_schema);
struct stellar_polling_manager *polling_mgr = stellar_module_get_polling_manager(mod_mgr);
- struct stellar_module *pkt_mgr_mod = stellar_module_manager_get_module(mod_mgr, PACKET_MANAGER_MODULE_NAME);
- struct packet_manager *pkt_mgr = stellar_module_get_ctx(pkt_mgr_mod);
+ struct packet_manager *pkt_mgr = stellar_module_get_packet_manager(mod_mgr);
snprintf(thread_name, sizeof(thread_name), "stellar:%d", thread_id);
prctl(PR_SET_NAME, (unsigned long long)thread_name, NULL, NULL, NULL);
@@ -199,7 +198,7 @@ struct stellar *stellar_new(const char *toml_file)
st->mod_mgr = stellar_module_manager_new(toml_file, st->thread_num, st->mq_schema, st->logger);
if (st->mod_mgr == NULL)
{
- CORE_LOG_ERROR("unable to create module manager");
+ CORE_LOG_ERROR("unable to create packet manager");
goto error_out;
}
@@ -290,4 +289,16 @@ struct logger *stellar_get_logger(struct stellar *st)
{
return NULL;
}
+}
+
+struct stellar_module_manager *stellar_get_module_manager(struct stellar *st)
+{
+ if (st)
+ {
+ return st->mod_mgr;
+ }
+ else
+ {
+ return NULL;
+ }
} \ No newline at end of file
diff --git a/infra/version.map b/infra/version.map
index a6163bc..496011a 100644
--- a/infra/version.map
+++ b/infra/version.map
@@ -36,6 +36,12 @@ global:
session_get_stat;
session_get0_readable_addr;
session_set_discard;
+ session_manager_new_session_exdata_index;
+ session_get_exdata;
+ session_set_exdata;
+ session_manager_subscribe_tcp;
+ session_manager_subscribe_udp;
+ session_manager_subscribe_tcp_stream;
stellar_session_plugin_register;
stellar_session_plugin_register_with_hooks;
@@ -49,6 +55,10 @@ global:
stellar_loopbreak;
stellar_get_logger;
stellar_reload_log_level;
+ stellar_get_module_manager;
+
+ stellar_appid_subscribe;
+
log_print;
log_check_level;
@@ -61,14 +71,14 @@ global:
session_manager_on_init;
session_manager_on_exit;
- http_message_*;
- http_decoder_init;
- http_decoder_exit;
- http_decoder_tcp_stream_msg_cb;
- http_url_decode;
+ http_message_*;
+ http_decoder_init;
+ http_decoder_exit;
+ http_decoder_tcp_stream_msg_cb;
+ http_url_decode;
- lpi_plugin_load;
- lpi_plugin_unload;
+ lpi_plus_init;
+ lpi_plus_exit;
local: *;
};
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 1fdc838..7cf7e86 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -2,6 +2,8 @@
add_subdirectory(packet_tool)
add_subdirectory(session_debugger)
#add_subdirectory(lpi_plugin)
+#add_subdirectory(debug_plugin)
+add_subdirectory(lpi_plus)
#add_subdirectory(decoders/http)
#add_subdirectory(decoders/socks)
#add_subdirectory(decoders/stratum)
diff --git a/test/lpi_plugin/gtest_lpi_plugin.cpp b/test/lpi_plugin/gtest_lpi_plugin.cpp
deleted file mode 100644
index 8618c2f..0000000
--- a/test/lpi_plugin/gtest_lpi_plugin.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-
-#include <stdio.h>
-#include <time.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include "lpi_plugin.h"
-
-#include "stellar/stellar.h"
-#include "stellar/session.h"
-#include "stellar/stellar_exdata.h"
-#include "stellar/stellar_mq.h"
-
-#include "cjson/cJSON.h"
-
-
-#define MAX_APP_ID_VALUE 10000
-struct lpi_test_plugin_env
-{
- int test_exdata_idx;
- int l7_exdata_idx;
- int test_app_plugin_id;
- int expect_json_topic_id;
- struct stellar *st;
- char *g_proto_id2name[MAX_APP_ID_VALUE];
-};
-
-static int load_l7_protocol_mapper(const char *filename, struct lpi_test_plugin_env *env)
-{
- memset(env->g_proto_id2name, 0, sizeof(env->g_proto_id2name));
- int ret=0, proto_id=0;;
- FILE *fp=NULL;
- char line[1024]={0};
- char type_name[32]={0};
- char proto_name[32]={0};
-
- fp=fopen(filename, "r");
- if(fp==NULL)
- {
- printf("Open %s failed ...", filename);
- return -1;
- }
-
- memset(line, 0, sizeof(line));
-
- while((fgets(line, sizeof(line), fp))!=NULL)
- {
- if(line[0]=='#' || line[0]=='\n' || line[0]=='\r' ||line[0]=='\0')
- {
- continue;
- }
-
- ret=sscanf(line, "%31s %31s %d", type_name, proto_name, &proto_id);
- env->g_proto_id2name[proto_id] = (char*)calloc(strlen(proto_name)+1, 1);
- strcpy(env->g_proto_id2name[proto_id], proto_name);
- memset(line, 0, sizeof(line));
- }
-
- fclose(fp);
- fp=NULL;
- return ret;
-}
-
-static void publish_session_test_result(struct lpi_test_plugin_env *env, cJSON *ctx, struct session *sess)
-{
- assert(env->l7_exdata_idx >= 0 && ctx != NULL);
- struct l7_protocol_label *label = (struct l7_protocol_label *)session_exdata_get(sess, env->l7_exdata_idx);;
- if(label != NULL)
- {
- int proto_ids[8];
- const char* proto_names[8];
- for(int i = 0; i < label->protocol_id_num; i++)
- {
- proto_ids[i] = (int)(label->protocol_id[i]);
- proto_names[i] = env->g_proto_id2name[proto_ids[i]];
-
- }
- cJSON *label_ids = cJSON_CreateIntArray(proto_ids, label->protocol_id_num);
- cJSON_AddItemToObject(ctx, "l7_label_id", label_ids);
- cJSON *label_names = cJSON_CreateStringArray(proto_names, label->protocol_id_num);
- cJSON_AddItemToObject(ctx, "l7_label_name", label_names);
- }
- else
- {
- cJSON_AddStringToObject(ctx, "l7_label_id", "UNKNOWN");
- }
- unsigned char dir_flag;
- int is_symmetric=session_is_symmetric(sess, &dir_flag);
- if(is_symmetric)
- {
- cJSON_AddStringToObject(ctx, "STREAM_DIR", "DOUBLE");
- }
- else if(dir_flag == SESSION_SEEN_C2S_FLOW)
- {
- cJSON_AddStringToObject(ctx, "STREAM_DIR", "C2S");
- }
- else if(dir_flag == SESSION_SEEN_S2C_FLOW)
- {
- cJSON_AddStringToObject(ctx, "STREAM_DIR", "S2C");
- }
- else
- {
- assert(0);
- }
- session_mq_publish_message(sess, env->expect_json_topic_id, cJSON_Print(ctx));
- cJSON_Delete(ctx);
- return;
-}
-
-static void gtest_lpi_on_session_free(struct session *sess, void *per_session_ctx, void *plugin_env)
-{
- cJSON *ctx =cJSON_CreateObject();
- cJSON_AddStringToObject(ctx, "Tuple4", session_get0_readable_addr(sess));
- enum session_type type= session_get_type(sess);
- if (type == SESSION_TYPE_TCP)
- {
- cJSON_AddStringToObject(ctx, "STREAM_TYPE", "TCP");
- }
- if (type == SESSION_TYPE_UDP)
- {
- cJSON_AddStringToObject(ctx, "STREAM_TYPE", "UDP");
- }
- publish_session_test_result((struct lpi_test_plugin_env*)plugin_env, ctx, sess);
-}
-
-extern "C" void *gtest_lpi_plugin_load(struct stellar *st)
-{
- struct lpi_test_plugin_env *env = (struct lpi_test_plugin_env *)calloc(1, sizeof(struct lpi_test_plugin_env));
- env->st=st;
- const char *l7_proto_name=(const char*)"./tsgconf/tsg_l7_protocol.conf";
-
- env->l7_exdata_idx= stellar_exdata_new_index(st, "L7_PROTOCOL", stellar_exdata_free_default, NULL);
- env->test_exdata_idx= stellar_exdata_new_index(st, "APP_PROTO_TEST", stellar_exdata_free_default, NULL);
- if(env->l7_exdata_idx<0 || env->test_exdata_idx<0)
- {
- perror("gtest_lpi_plugin_load:stellar_session_get_ex_new_index faild!!!\n");
- exit(-1);
- }
- if(load_l7_protocol_mapper(l7_proto_name, env)<0)
- {
- perror("gtest_lpi_plugin_load:l7_protocol_mapper failed !!!\n");
- exit(-1);
- }
- env->test_app_plugin_id=stellar_plugin_register(st, NULL, NULL, NULL, gtest_lpi_on_session_free, env);
- if(env->test_app_plugin_id < 0)
- {
- perror("gtest_lpi_plugin_load:stellar_plugin_register failed !!!\n");
- exit(-1);
- }
-
- int tcp_topic_id=stellar_mq_get_topic_id(st, TOPIC_TCP_INPUT);
- int udp_topic_id=stellar_mq_get_topic_id(st, TOPIC_UDP_INPUT);
- if(tcp_topic_id < 0 || udp_topic_id < 0)
- {
- perror("gtest_lpi_plugin_load get tcp or udp topic id failed\n");
- exit(-1);
- }
-
- env->expect_json_topic_id = stellar_mq_create_topic(st, "EXPECT_JSON", stellar_msg_free_default, NULL);
- printf("gtest_lpi_plugin_load OK!\n");
-
- return env;
-}
-
-extern "C" void gtest_lpi_plugin_unload(void *plugin_env)
-{
- struct lpi_test_plugin_env *env = (struct lpi_test_plugin_env *)plugin_env;
- for(int i = 0; i < MAX_APP_ID_VALUE; i++)
- {
- if(env->g_proto_id2name[i])free(env->g_proto_id2name[i]);
- }
- free(env);
- printf("gtest_lpi_plugin_unload OK!\n");
- return ;
-}
diff --git a/test/lpi_plugin/test_config/spec.toml b/test/lpi_plugin/test_config/spec.toml
deleted file mode 100644
index 386346f..0000000
--- a/test/lpi_plugin/test_config/spec.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-# stellar_plugin.toml
-#
-[[plugin]]
-path = ""
-init = "lpi_plugin_load"
-exit = "lpi_plugin_unload"
-
-[[plugin]]
-path = ""
-init = "gtest_lpi_plugin_load"
-exit = "gtest_lpi_plugin_unload"
diff --git a/test/lpi_plugin/CMakeLists.txt b/test/lpi_plus/CMakeLists.txt
index 813451f..9f63273 100644
--- a/test/lpi_plugin/CMakeLists.txt
+++ b/test/lpi_plus/CMakeLists.txt
@@ -1,10 +1,10 @@
-add_executable(gtest_lpi gtest_lpi_main.cpp gtest_lpi_plugin.cpp)
+add_executable(gtest_lpip gtest_lpip_main.cpp gtest_lpip_module.c)
-target_include_directories(gtest_lpi PRIVATE ${CMAKE_SOURCE_DIR}/deps/)
-target_include_directories(gtest_lpi PRIVATE ${CMAKE_SOURCE_DIR}/decoders/lpi)
+target_include_directories(gtest_lpip PRIVATE ${CMAKE_SOURCE_DIR}/deps/)
+target_include_directories(gtest_lpip PRIVATE ${CMAKE_SOURCE_DIR}/decoders/)
target_link_libraries(
- gtest_lpi PRIVATE stellar_lib cjson-static
+ gtest_lpip PRIVATE stellar_lib cjson-static lpi_plus
dl "-rdynamic"
gtest gmock
)
@@ -12,7 +12,7 @@ target_link_libraries(
#target_link_libraries(gtest_lpi PRIVATE -Wl,--whole-archive lpi -Wl,--no-whole-archive)
set(TEST_NAME "LPI_TEST")
-set(TEST_MAIN ${CMAKE_CURRENT_BINARY_DIR}/gtest_lpi)
+set(TEST_MAIN ${CMAKE_CURRENT_BINARY_DIR}/gtest_lpip)
add_test(NAME ${TEST_NAME}.SETUP COMMAND sh -c "
mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/conf &&
@@ -20,8 +20,7 @@ add_test(NAME ${TEST_NAME}.SETUP COMMAND sh -c "
mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/log &&
mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/tsgconf &&
cp ${CMAKE_SOURCE_DIR}/conf/stellar.toml ${CMAKE_CURRENT_BINARY_DIR}/conf/ &&
- cp ${CMAKE_CURRENT_SOURCE_DIR}/test_config/spec.toml ${CMAKE_CURRENT_BINARY_DIR}/plugin/ &&
- cp ${CMAKE_SOURCE_DIR}/conf/log.toml ${CMAKE_CURRENT_BINARY_DIR}/conf/ &&
+ cat ${CMAKE_CURRENT_SOURCE_DIR}/test_config/spec.toml >> ${CMAKE_CURRENT_BINARY_DIR}/conf/stellar.toml &&
cp ${CMAKE_CURRENT_SOURCE_DIR}/test_config/tsg_l7_protocol.conf ${CMAKE_CURRENT_BINARY_DIR}/tsgconf/ &&
tomlq -t -i '.packet_io.pcap_path=\"-\"' ${CMAKE_CURRENT_BINARY_DIR}/conf/stellar.toml &&
tomlq -t -i '.packet_io.mode=\"pcaplist\"' ${CMAKE_CURRENT_BINARY_DIR}/conf/stellar.toml
@@ -55,4 +54,5 @@ set_tests_properties(${TEST_NAME}.APP
${TEST_NAME}.OPENVPN
${TEST_NAME}.PPP
${TEST_NAME}.SOCKS
- PROPERTIES FIXTURES_REQUIRED ${TEST_NAME}.SETUP) \ No newline at end of file
+ PROPERTIES FIXTURES_REQUIRED ${TEST_NAME}.SETUP
+ )
diff --git a/test/lpi_plus/gtest_lpip.h b/test/lpi_plus/gtest_lpip.h
new file mode 100644
index 0000000..9b13571
--- /dev/null
+++ b/test/lpi_plus/gtest_lpip.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+int stellar_test_result_setup();
+
+char *stellar_test_result_json_export();
+
+void stellar_test_result_cleanup();
+
+#ifdef __cplusplus
+}
+#endif \ No newline at end of file
diff --git a/test/lpi_plugin/gtest_lpi_main.cpp b/test/lpi_plus/gtest_lpip_main.cpp
index d244fac..6745832 100644
--- a/test/lpi_plugin/gtest_lpi_main.cpp
+++ b/test/lpi_plus/gtest_lpip_main.cpp
@@ -14,10 +14,9 @@
#include <gtest/gtest.h>
#include "stellar/stellar.h"
-#include "stellar/session.h"
-#include "stellar/stellar_mq.h"
#include "cJSON.h"
+#include "gtest_lpip.h"
struct gtest_json_result
@@ -30,7 +29,11 @@ struct gtest_json_result
static struct gtest_json_result *gtest_result_new(const char *expect_json_path)
{
struct gtest_json_result *para = (struct gtest_json_result *)calloc(1, sizeof(struct gtest_json_result));
- para->test_json_root = cJSON_CreateArray();
+ if(expect_json_path==NULL)
+ {
+ para->expect_json_root=cJSON_CreateArray();
+ return para;
+ }
FILE *file = fopen(expect_json_path, "rb");
if(file)
@@ -105,22 +108,6 @@ static void gtest_result_free(struct gtest_json_result *para)
return;
}
-void gtest_on_session_msg_expect_json(struct session *sess, int topic_id, const void *msg, void *per_session_ctx,
- void *plugin_env)
-{
- struct gtest_json_result *g_test_para = (struct gtest_json_result *)plugin_env;
-
- cJSON *per_session_json = cJSON_Parse((const char *)msg);
-
- if (g_test_para->test_json_root)
- {
- char result_name[128] = "";
- sprintf(result_name, "APP_PROTO_IDENTIFY_RESULT_%d", g_test_para->result_count);
- cJSON_AddStringToObject(per_session_json, "name", result_name);
- cJSON_AddItemToArray(g_test_para->test_json_root, per_session_json);
- }
- g_test_para->result_count += 1;
-}
/**********************************************
* GTEST MAIN *
@@ -130,35 +117,33 @@ int main(int argc, char ** argv)
{
::testing::InitGoogleTest(&argc, argv);
- EXPECT_EQ(argc, 2);
+ //EXPECT_EQ(argc, 2);
- if(argc != 2)
- {
- printf("Invalid Argument!!!\n Usage: ./[gtest_main] [/path/to/expect_json]\n");
- return -1;
- }
+ printf("Usage: ./[gtest_main] [/path/to/expect_json]\n");
char *expect_json_path=argv[1];
struct gtest_json_result *g_test_para = gtest_result_new(expect_json_path);
- struct stellar *st=stellar_new("./conf/stellar.toml", "./plugin/spec.toml", "./conf/log.toml");
- EXPECT_TRUE(st!=NULL);
-
- int plugin_id=stellar_session_plugin_register(st, NULL, NULL, g_test_para);
- EXPECT_TRUE(plugin_id>=0);
-
- int expect_json_topic_id = stellar_mq_get_topic_id(st, "EXPECT_JSON");
- EXPECT_TRUE(expect_json_topic_id>=0);
+ struct stellar *st=stellar_new("./conf/stellar.toml");
- stellar_session_mq_subscribe(st, expect_json_topic_id, gtest_on_session_msg_expect_json, plugin_id);
+ stellar_test_result_setup();
+ EXPECT_TRUE(st!=NULL);
stellar_run(st);
+
stellar_free(st);
+ char *test_result_json=stellar_test_result_json_export();
+ g_test_para->test_json_root=cJSON_Parse(test_result_json);
+ free(test_result_json);
+
+
EXPECT_TRUE(g_test_para->expect_json_root != NULL && g_test_para->test_json_root != NULL);
EXPECT_EQ(gtest_result_compare(g_test_para), 1);
gtest_result_free(g_test_para);
+ stellar_test_result_cleanup();
+
return ::testing::Test::HasFailure() ? 1 : 0;
} \ No newline at end of file
diff --git a/test/lpi_plus/gtest_lpip_module.c b/test/lpi_plus/gtest_lpip_module.c
new file mode 100644
index 0000000..31aabe3
--- /dev/null
+++ b/test/lpi_plus/gtest_lpip_module.c
@@ -0,0 +1,182 @@
+#include <stdlib.h>
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <assert.h>
+
+#include "stellar/appid.h"
+#include "stellar/module_manager.h"
+#include "stellar/session_manager.h"
+#include "stellar/session.h"
+#include "stellar/utils.h"
+
+#include "cjson/cJSON.h"
+
+#include "lpi_plus/lpi_plus.h"
+#include "appid/appid_internal.h"
+
+struct test_lpip_env
+{
+ struct stellar_module_manager *mod_mgr;
+ struct lpi_plus_mapper *lpi_mapper;
+ int l7_exdata_idx;
+ int session_num;
+};
+
+struct test_lpip_exdata
+{
+ int appid[MAX_APPID_NUM];
+ size_t appid_num;
+ struct session *sess;
+};
+
+cJSON *g_result_json=NULL;
+
+void stellar_test_result_setup()
+{
+ if(g_result_json!=NULL)return;
+ g_result_json=cJSON_CreateArray();
+}
+
+char *stellar_test_result_json_export()
+{
+ if(g_result_json==NULL)return NULL;
+ return cJSON_Print(g_result_json);
+}
+
+void stellar_test_result_cleanup()
+{
+ if(g_result_json)cJSON_Delete(g_result_json);
+}
+
+static void gtest_lpip_exdata_free(int idx __attribute__((unused)), void *ex_ptr, void *arg)
+{
+ struct test_lpip_env *env = (struct test_lpip_env *)arg;
+ struct test_lpip_exdata *test_appid_exdata=(struct test_lpip_exdata *)ex_ptr;
+
+ if(env==NULL || test_appid_exdata ==NULL)return;
+
+ cJSON *ctx = cJSON_CreateObject();
+ cJSON_AddStringToObject(ctx, "Tuple4", session_get0_readable_addr(test_appid_exdata->sess));
+ enum session_type type = session_get_type(test_appid_exdata->sess);
+ if (type == SESSION_TYPE_TCP)
+ {
+ cJSON_AddStringToObject(ctx, "STREAM_TYPE", "TCP");
+ }
+ if (type == SESSION_TYPE_UDP)
+ {
+ cJSON_AddStringToObject(ctx, "STREAM_TYPE", "UDP");
+ }
+ if (test_appid_exdata->appid_num > 0)
+ {
+ const char *proto_names[MAX_APPID_NUM] = {};
+ for (unsigned int i = 0; i < test_appid_exdata->appid_num; i++)
+ {
+ proto_names[i] = lpi_plus_appid2name(env->lpi_mapper ,test_appid_exdata->appid[i]);
+ }
+ cJSON *label_ids = cJSON_CreateIntArray(test_appid_exdata->appid, test_appid_exdata->appid_num);
+ cJSON_AddItemToObject(ctx, "l7_label_id", label_ids);
+ cJSON *label_names = cJSON_CreateStringArray(proto_names, test_appid_exdata->appid_num);
+ cJSON_AddItemToObject(ctx, "l7_label_name", label_names);
+ }
+ else
+ {
+ cJSON_AddStringToObject(ctx, "l7_label_id", "UNKNOWN");
+ }
+ unsigned char dir_flag;
+ int is_symmetric = session_is_symmetric(test_appid_exdata->sess, &dir_flag);
+ if (is_symmetric)
+ {
+ cJSON_AddStringToObject(ctx, "STREAM_DIR", "DOUBLE");
+ }
+ else if (dir_flag == SESSION_SEEN_C2S_FLOW)
+ {
+ cJSON_AddStringToObject(ctx, "STREAM_DIR", "C2S");
+ }
+ else if (dir_flag == SESSION_SEEN_S2C_FLOW)
+ {
+ cJSON_AddStringToObject(ctx, "STREAM_DIR", "S2C");
+ }
+ else
+ {
+ assert(0);
+ }
+ char result_name[128] = "";
+ env->session_num++;
+ sprintf(result_name, "APP_PROTO_IDENTIFY_RESULT_%d", env->session_num);
+ cJSON_AddStringToObject(ctx, "name", result_name);
+
+ if(g_result_json)cJSON_AddItemToArray(g_result_json, ctx);
+ free(test_appid_exdata);
+ return;
+}
+
+
+static void gtest_lpip_on_appid_msg(struct session *sess, enum APPID_ORIGIN origin, int appid[], size_t appid_num, void *args)
+{
+ if(sess==NULL || appid==NULL || args==NULL)return;
+ struct test_lpip_env *env = (struct test_lpip_env *)args;
+ struct test_lpip_exdata *test_appid_exdata=session_get_exdata(sess, env->l7_exdata_idx);
+ if(test_appid_exdata==NULL)
+ {
+ test_appid_exdata = CALLOC(struct test_lpip_exdata, 1);
+ test_appid_exdata->sess=sess;
+
+ }
+ memcpy(test_appid_exdata->appid, appid, appid_num*sizeof(appid[0]));
+ test_appid_exdata->appid_num=appid_num;
+ session_set_exdata(sess, env->l7_exdata_idx, test_appid_exdata);
+ return;
+}
+
+static void on_session(struct session *sess, struct packet *pkt, void *args)
+{
+ if(sess==NULL || pkt==NULL || args==NULL)return;
+ struct test_lpip_env *env = (struct test_lpip_env *)args;
+ if (session_get_current_state(sess) == SESSION_STATE_OPENING)
+ {
+ struct test_lpip_exdata *test_appid_exdata = session_get_exdata(sess, env->l7_exdata_idx);
+ if (test_appid_exdata == NULL)
+ {
+ test_appid_exdata = CALLOC(struct test_lpip_exdata, 1);
+ test_appid_exdata->sess=sess;
+ session_set_exdata(sess, env->l7_exdata_idx, test_appid_exdata);
+ }
+ }
+ return;
+}
+
+struct stellar_module *gtest_lpip_module_init(struct stellar_module_manager *mod_mgr)
+{
+ struct test_lpip_env *env = (struct test_lpip_env *)calloc(1, sizeof(struct test_lpip_env));
+
+ env->lpi_mapper=stellar_module_get_lpip(mod_mgr);
+ struct session_manager *sess_mgr = stellar_module_get_session_manager(mod_mgr);
+ if(sess_mgr == NULL)
+ {
+ perror("gtest_lpi_plugin_load:stellar_module_get_session_manager failed !!!\n");
+ exit(-1);
+ }
+
+ session_manager_subscribe_udp(sess_mgr, on_session, env);
+ session_manager_subscribe_tcp(sess_mgr, on_session, env);
+
+ env->l7_exdata_idx = session_manager_new_session_exdata_index(sess_mgr, "EXDATA_L7", gtest_lpip_exdata_free, env);
+
+ stellar_appid_subscribe(mod_mgr, gtest_lpip_on_appid_msg, env);
+ printf("gtest_lpip_module_init OK!\n");
+
+ return stellar_module_new("TEST_LPIP", env);
+}
+
+void gtest_lpip_module_exit(struct stellar_module_manager *mod_mgr, struct stellar_module *mod)
+{
+ assert(mod_mgr!=NULL);
+ struct test_lpip_env *env = (struct test_lpip_env *)stellar_module_get_ctx(mod);
+ free(env);
+ printf("gtest_lpip_module_exit OK!\n");
+ stellar_module_free(mod);
+ return ;
+}
diff --git a/test/lpi_plus/test_config/spec.toml b/test/lpi_plus/test_config/spec.toml
new file mode 100644
index 0000000..329f401
--- /dev/null
+++ b/test/lpi_plus/test_config/spec.toml
@@ -0,0 +1,11 @@
+# stellar_plugin.toml
+#
+[[module]]
+path = ""
+init = "lpi_plus_init"
+exit = "lpi_plus_exit"
+
+[[module]]
+path = ""
+init = "gtest_lpip_module_init"
+exit = "gtest_lpip_module_exit"
diff --git a/test/lpi_plugin/test_config/tsg_l7_protocol.conf b/test/lpi_plus/test_config/tsg_l7_protocol.conf
index 4e5f3ab..bfad125 100644
--- a/test/lpi_plugin/test_config/tsg_l7_protocol.conf
+++ b/test/lpi_plus/test_config/tsg_l7_protocol.conf
@@ -1,12 +1,15 @@
-#TYPE:1:UCHAR,2:USHORT,3:USTRING,4:ULOG,5:USTRING,6:FILE,7:UBASE64,8:PACKET
-#TYPE FIELD VALUE
+#TYPE LPI_NAME APPID APP_NAME
STRING UNCATEGORIZED 8000
-#STRING UNCATEGORIZED 8001
-#STRING UNKNOWN_OTHER 8002
STRING DNS 32
+STRING DNS_TCP 32 DNS
STRING FTP 45
+STRING FTP_Control 45 FTP
+STRING FTP_Data 45 FTP
STRING FTPS 751
STRING HTTP 67
+STRING HTTP_443 67 HTTP
+STRING HTTP_Tunnel 67 HTTP
+STRING HTTP_NonStandard 67 HTTP
STRING HTTPS 68
STRING ICMP 70
STRING IKE 8003
@@ -14,6 +17,7 @@ STRING MAIL 8004
STRING IMAP 75
STRING IMAPS 76
STRING IPSEC 85
+STRING ESP_UDP 85 IPSEC
STRING XMPP 94
STRING L2TP 98
STRING NTP 137
@@ -22,25 +26,36 @@ STRING POP3S 148
STRING PPTP 153
STRING QUIC 2521
STRING SIP 182
+STRING SIP_UDP 182 SIP
STRING SMB 185
STRING SMTP 186
STRING SMTPS 187
STRING SPDY 1469
STRING SSH 198
STRING SSL 199
+STRING SSL/TLS 199 SSL
STRING SOCKS 8005
+STRING SOCKS4 8005 SOCKS
+STRING SOCKS5 8005 SOCKS
STRING TELNET 209
+STRING Telnet 209 TELNET
STRING DHCP 29
-STRING RADIUS 158
-STRING OPENVPN 336
+STRING Radius 158 RADIUS
+STRING OpenVPN 336 OPENVPN
+STRING OpenVPN_UDP 336 OPENVPN
STRING STUN 201
+STRING STUN_TCP 201 STUN
STRING TEREDO 555
+STRING Teredo 555 TEREDO
STRING DTLS 1291
STRING DoH 8006
STRING ISAKMP 92
STRING MDNS 3835
-STRING NETBIOS 129
+STRING mDNS 3835 MDNS
+STRING NetBIOS 129 NETBIOS
+STRING NetBIOS_UDP 129 NETBIOS
STRING NETFLOW 130
+STRING NetFlow 130 NETFLOW
STRING RDP 159
STRING RTCP 174
STRING RTP 175
@@ -49,13 +64,17 @@ STRING SNMP 190
STRING SSDP 197
STRING TFTP 211
STRING BJNP 2481
+STRING Canon_BJNP 2481 BJNP
STRING LDAP 100
+STRING LDAP_AD 100 LDAP
STRING RTMP 337
STRING RTSP 176
STRING ESNI 8008
STRING Stratum 8169
STRING QQ 156
STRING WeChat 1296
-STRING WIREGUARD 3700
+STRING WeChat_UDP 1296 WeChat
+STRING WireGuard 3700 WIREGUARD
STRING MMS 115
STRING RSYNC 173
+STRING Rsync 173 RSYNC
diff --git a/test/lpi_plugin/test_expect/app_pcap.json b/test/lpi_plus/test_expect/app_pcap.json
index 1e4c62d..1e4c62d 100644
--- a/test/lpi_plugin/test_expect/app_pcap.json
+++ b/test/lpi_plus/test_expect/app_pcap.json
diff --git a/test/lpi_plugin/test_expect/dns_pcap.json b/test/lpi_plus/test_expect/dns_pcap.json
index 79daba3..79daba3 100644
--- a/test/lpi_plugin/test_expect/dns_pcap.json
+++ b/test/lpi_plus/test_expect/dns_pcap.json
diff --git a/test/lpi_plugin/test_expect/empty_array.json b/test/lpi_plus/test_expect/empty_array.json
index 0637a08..0637a08 100644
--- a/test/lpi_plugin/test_expect/empty_array.json
+++ b/test/lpi_plus/test_expect/empty_array.json
diff --git a/test/lpi_plugin/test_expect/mixed_pcap.json b/test/lpi_plus/test_expect/mixed_pcap.json
index cddc7e3..cddc7e3 100644
--- a/test/lpi_plugin/test_expect/mixed_pcap.json
+++ b/test/lpi_plus/test_expect/mixed_pcap.json
diff --git a/test/lpi_plugin/test_expect/openvpn_pcap.json b/test/lpi_plus/test_expect/openvpn_pcap.json
index 66f30eb..66f30eb 100644
--- a/test/lpi_plugin/test_expect/openvpn_pcap.json
+++ b/test/lpi_plus/test_expect/openvpn_pcap.json
diff --git a/test/lpi_plugin/test_expect/ppp_pcap.json b/test/lpi_plus/test_expect/ppp_pcap.json
index cf20bf0..cf20bf0 100644
--- a/test/lpi_plugin/test_expect/ppp_pcap.json
+++ b/test/lpi_plus/test_expect/ppp_pcap.json
diff --git a/test/lpi_plugin/test_expect/socks_pcap.json b/test/lpi_plus/test_expect/socks_pcap.json
index 5282661..9673199 100644
--- a/test/lpi_plugin/test_expect/socks_pcap.json
+++ b/test/lpi_plus/test_expect/socks_pcap.json
@@ -15,8 +15,8 @@
}, {
"Tuple4": "10.0.0.1:1637-10.0.0.2:21477-6-0",
"STREAM_TYPE": "TCP",
- "l7_label_id": [8005, 67],
- "l7_label_name": ["SOCKS", "HTTP"],
+ "l7_label_id": [8005],
+ "l7_label_name": ["SOCKS"],
"STREAM_DIR": "DOUBLE",
"name": "APP_PROTO_IDENTIFY_RESULT_3"
}, {
diff --git a/test/lpi_plugin/test_pcap/app_pcap/1-qq_59361.pcap b/test/lpi_plus/test_pcap/app_pcap/1-qq_59361.pcap
index 4334250..4334250 100644
--- a/test/lpi_plugin/test_pcap/app_pcap/1-qq_59361.pcap
+++ b/test/lpi_plus/test_pcap/app_pcap/1-qq_59361.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/app_pcap/2-qq_8758.pcap b/test/lpi_plus/test_pcap/app_pcap/2-qq_8758.pcap
index 5d3a09c..5d3a09c 100644
--- a/test/lpi_plugin/test_pcap/app_pcap/2-qq_8758.pcap
+++ b/test/lpi_plus/test_pcap/app_pcap/2-qq_8758.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/app_pcap/3-wechat_51876.pcap b/test/lpi_plus/test_pcap/app_pcap/3-wechat_51876.pcap
index 8790b64..8790b64 100644
--- a/test/lpi_plugin/test_pcap/app_pcap/3-wechat_51876.pcap
+++ b/test/lpi_plus/test_pcap/app_pcap/3-wechat_51876.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/app_pcap/4-wechat_8080.pcap b/test/lpi_plus/test_pcap/app_pcap/4-wechat_8080.pcap
index c9bd882..c9bd882 100644
--- a/test/lpi_plugin/test_pcap/app_pcap/4-wechat_8080.pcap
+++ b/test/lpi_plus/test_pcap/app_pcap/4-wechat_8080.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/app_pcap/5-wireguard.pcap b/test/lpi_plus/test_pcap/app_pcap/5-wireguard.pcap
index 5dac585..5dac585 100644
--- a/test/lpi_plugin/test_pcap/app_pcap/5-wireguard.pcap
+++ b/test/lpi_plus/test_pcap/app_pcap/5-wireguard.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/app_pcap/6-wireguard1.pcap b/test/lpi_plus/test_pcap/app_pcap/6-wireguard1.pcap
index 5f9d7ce..5f9d7ce 100644
--- a/test/lpi_plugin/test_pcap/app_pcap/6-wireguard1.pcap
+++ b/test/lpi_plus/test_pcap/app_pcap/6-wireguard1.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/app_pcap/7-wireguard2.pcap b/test/lpi_plus/test_pcap/app_pcap/7-wireguard2.pcap
index 5ea113e..5ea113e 100644
--- a/test/lpi_plugin/test_pcap/app_pcap/7-wireguard2.pcap
+++ b/test/lpi_plus/test_pcap/app_pcap/7-wireguard2.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/dns_pcap/1-dns-tcp-single-53-124.88.175.201-8.8.8.8.pcap b/test/lpi_plus/test_pcap/dns_pcap/1-dns-tcp-single-53-124.88.175.201-8.8.8.8.pcap
index 0397534..0397534 100644
--- a/test/lpi_plugin/test_pcap/dns_pcap/1-dns-tcp-single-53-124.88.175.201-8.8.8.8.pcap
+++ b/test/lpi_plus/test_pcap/dns_pcap/1-dns-tcp-single-53-124.88.175.201-8.8.8.8.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/dns_pcap/2-dns-tcp-single-53-60.13.179.249-8.8.8.8.pcap b/test/lpi_plus/test_pcap/dns_pcap/2-dns-tcp-single-53-60.13.179.249-8.8.8.8.pcap
index d54bad6..d54bad6 100644
--- a/test/lpi_plugin/test_pcap/dns_pcap/2-dns-tcp-single-53-60.13.179.249-8.8.8.8.pcap
+++ b/test/lpi_plus/test_pcap/dns_pcap/2-dns-tcp-single-53-60.13.179.249-8.8.8.8.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/01-http-not-ftp.pcap b/test/lpi_plus/test_pcap/mixed_pcap/01-http-not-ftp.pcap
index d1f49ec..d1f49ec 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/01-http-not-ftp.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/01-http-not-ftp.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/02-stun-rtcp-rtp-22005-8000-39.144.206.199-117.156.19.31.pcap b/test/lpi_plus/test_pcap/mixed_pcap/02-stun-rtcp-rtp-22005-8000-39.144.206.199-117.156.19.31.pcap
index bd33283..bd33283 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/02-stun-rtcp-rtp-22005-8000-39.144.206.199-117.156.19.31.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/02-stun-rtcp-rtp-22005-8000-39.144.206.199-117.156.19.31.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/03-ftp-37923-21121-117.145.115.74-218.31.124.234.pcap b/test/lpi_plus/test_pcap/mixed_pcap/03-ftp-37923-21121-117.145.115.74-218.31.124.234.pcap
index 1214121..1214121 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/03-ftp-37923-21121-117.145.115.74-218.31.124.234.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/03-ftp-37923-21121-117.145.115.74-218.31.124.234.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/04-mail_smtp_port_18867_25.pcap b/test/lpi_plus/test_pcap/mixed_pcap/04-mail_smtp_port_18867_25.pcap
index 3549c0d..3549c0d 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/04-mail_smtp_port_18867_25.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/04-mail_smtp_port_18867_25.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/05-ftp_port_21121-double.pcap b/test/lpi_plus/test_pcap/mixed_pcap/05-ftp_port_21121-double.pcap
index 2fb600f..2fb600f 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/05-ftp_port_21121-double.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/05-ftp_port_21121-double.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/06-ftp_port_21121-s2c.pcap b/test/lpi_plus/test_pcap/mixed_pcap/06-ftp_port_21121-s2c.pcap
index e1ad680..e1ad680 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/06-ftp_port_21121-s2c.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/06-ftp_port_21121-s2c.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/07-ftp_port_21121-c2s.pcap b/test/lpi_plus/test_pcap/mixed_pcap/07-ftp_port_21121-c2s.pcap
index 152e850..152e850 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/07-ftp_port_21121-c2s.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/07-ftp_port_21121-c2s.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/08-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/08-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcap
index db29a3b..db29a3b 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/08-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/08-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/09-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/09-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcap
index 299e573..299e573 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/09-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/09-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/10-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/10-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcap
index b0e4c5b..b0e4c5b 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/10-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/10-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/11-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/11-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcap
index eee3c8e..eee3c8e 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/11-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/11-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/12-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/12-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcap
index 5dc1f81..5dc1f81 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/12-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/12-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/13-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/13-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcap
index ca6388d..ca6388d 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/13-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/13-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/14-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/14-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcap
index bd088b0..bd088b0 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/14-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/14-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/15-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/15-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap
index 0a6e5ff..0a6e5ff 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/15-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/15-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/16-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/16-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap
index 0abc861..0abc861 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/16-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/16-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/17-gquic-044-146.158.67.194.1044-108.177.14.138.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/17-gquic-044-146.158.67.194.1044-108.177.14.138.443.pcap
index 204f860..204f860 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/17-gquic-044-146.158.67.194.1044-108.177.14.138.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/17-gquic-044-146.158.67.194.1044-108.177.14.138.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/18-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/18-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcap
index 0b77c4d..0b77c4d 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/18-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/18-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/19-gquic-048-103.3.138.59.12521-123.125.116.52.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/19-gquic-048-103.3.138.59.12521-123.125.116.52.443.pcap
index 5c9fcd6..5c9fcd6 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/19-gquic-048-103.3.138.59.12521-123.125.116.52.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/19-gquic-048-103.3.138.59.12521-123.125.116.52.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/20-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/20-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcap
index 1d5c46a..1d5c46a 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/20-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/20-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/21-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/21-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcap
index dcd22db..dcd22db 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/21-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/21-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/22-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/22-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcap
index be91a45..be91a45 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/22-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/22-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/23-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/23-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcap
index 9b88cc0..9b88cc0 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/23-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/23-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/23-prox-quic-217.76.77.70.33232-173.194.220.105.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/23-prox-quic-217.76.77.70.33232-173.194.220.105.443.pcap
index a2efae4..a2efae4 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/23-prox-quic-217.76.77.70.33232-173.194.220.105.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/23-prox-quic-217.76.77.70.33232-173.194.220.105.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/24-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/24-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcap
index 84097c8..84097c8 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/24-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/24-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/25-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcap b/test/lpi_plus/test_pcap/mixed_pcap/25-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcap
index 357777c..357777c 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/25-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/25-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/26-smtp-55426-587-10.130.2.104-67.225.241.247.pcap b/test/lpi_plus/test_pcap/mixed_pcap/26-smtp-55426-587-10.130.2.104-67.225.241.247.pcap
index 9296279..9296279 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/26-smtp-55426-587-10.130.2.104-67.225.241.247.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/26-smtp-55426-587-10.130.2.104-67.225.241.247.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/27-pop-54776-110-196.188.12.179-192.185.31.244.pcap b/test/lpi_plus/test_pcap/mixed_pcap/27-pop-54776-110-196.188.12.179-192.185.31.244.pcap
index 1b36161..1b36161 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/27-pop-54776-110-196.188.12.179-192.185.31.244.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/27-pop-54776-110-196.188.12.179-192.185.31.244.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/28-Bole-IGW-SMTP-57719-26-10.130.13.155-50.87.145.154-2.pcap b/test/lpi_plus/test_pcap/mixed_pcap/28-Bole-IGW-SMTP-57719-26-10.130.13.155-50.87.145.154-2.pcap
index a8ca249..a8ca249 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/28-Bole-IGW-SMTP-57719-26-10.130.13.155-50.87.145.154-2.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/28-Bole-IGW-SMTP-57719-26-10.130.13.155-50.87.145.154-2.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/29-Bole-IGW-SMTP-14636-25-196.189.57.105-68.232.159.216-2.pcap b/test/lpi_plus/test_pcap/mixed_pcap/29-Bole-IGW-SMTP-14636-25-196.189.57.105-68.232.159.216-2.pcap
index 067a8e7..067a8e7 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/29-Bole-IGW-SMTP-14636-25-196.189.57.105-68.232.159.216-2.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/29-Bole-IGW-SMTP-14636-25-196.189.57.105-68.232.159.216-2.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/30-Bole-IGW-SMTP-20997-25-196.190.160.6-64.225.54.152.pcap b/test/lpi_plus/test_pcap/mixed_pcap/30-Bole-IGW-SMTP-20997-25-196.190.160.6-64.225.54.152.pcap
index 94942a2..94942a2 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/30-Bole-IGW-SMTP-20997-25-196.190.160.6-64.225.54.152.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/30-Bole-IGW-SMTP-20997-25-196.190.160.6-64.225.54.152.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/31-Bole-IGW-POP3-50020-110-196.188.3.8-82.98.178.159.pcap b/test/lpi_plus/test_pcap/mixed_pcap/31-Bole-IGW-POP3-50020-110-196.188.3.8-82.98.178.159.pcap
index 53c8de0..53c8de0 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/31-Bole-IGW-POP3-50020-110-196.188.3.8-82.98.178.159.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/31-Bole-IGW-POP3-50020-110-196.188.3.8-82.98.178.159.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/32-Bole-IGW-POP3-53357-110-196.189.0.15-39.156.6.106.pcap b/test/lpi_plus/test_pcap/mixed_pcap/32-Bole-IGW-POP3-53357-110-196.189.0.15-39.156.6.106.pcap
index 93a1b66..93a1b66 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/32-Bole-IGW-POP3-53357-110-196.189.0.15-39.156.6.106.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/32-Bole-IGW-POP3-53357-110-196.189.0.15-39.156.6.106.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/33-Bole-IGW-IMAP-36734-143-196.189.5.89-101.32.113.90.pcap b/test/lpi_plus/test_pcap/mixed_pcap/33-Bole-IGW-IMAP-36734-143-196.189.5.89-101.32.113.90.pcap
index b75137f..b75137f 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/33-Bole-IGW-IMAP-36734-143-196.189.5.89-101.32.113.90.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/33-Bole-IGW-IMAP-36734-143-196.189.5.89-101.32.113.90.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/34-Bole-IGW-IMAP-50415-143-196.188.28.149-69.195.110.51.pcap b/test/lpi_plus/test_pcap/mixed_pcap/34-Bole-IGW-IMAP-50415-143-196.188.28.149-69.195.110.51.pcap
index ff45c81..ff45c81 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/34-Bole-IGW-IMAP-50415-143-196.188.28.149-69.195.110.51.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/34-Bole-IGW-IMAP-50415-143-196.188.28.149-69.195.110.51.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/35-Bole-IGW-SMTP-587-1440-587-196.189.45.189-40.101.92.178.pcap b/test/lpi_plus/test_pcap/mixed_pcap/35-Bole-IGW-SMTP-587-1440-587-196.189.45.189-40.101.92.178.pcap
index f507751..f507751 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/35-Bole-IGW-SMTP-587-1440-587-196.189.45.189-40.101.92.178.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/35-Bole-IGW-SMTP-587-1440-587-196.189.45.189-40.101.92.178.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/36-Bole-IGW-SMTP-587-37943-587-196.191.120.240-81.19.77.166.pcap b/test/lpi_plus/test_pcap/mixed_pcap/36-Bole-IGW-SMTP-587-37943-587-196.191.120.240-81.19.77.166.pcap
index 0975e5a..0975e5a 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/36-Bole-IGW-SMTP-587-37943-587-196.191.120.240-81.19.77.166.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/36-Bole-IGW-SMTP-587-37943-587-196.191.120.240-81.19.77.166.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/37-dns-response-4029-53-115.24.235.11-8.210.152.150.pcap b/test/lpi_plus/test_pcap/mixed_pcap/37-dns-response-4029-53-115.24.235.11-8.210.152.150.pcap
index d899c17..d899c17 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/37-dns-response-4029-53-115.24.235.11-8.210.152.150.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/37-dns-response-4029-53-115.24.235.11-8.210.152.150.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/38-stun-dtls.pcap b/test/lpi_plus/test_pcap/mixed_pcap/38-stun-dtls.pcap
index 1b2a8b7..1b2a8b7 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/38-stun-dtls.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/38-stun-dtls.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/mixed_pcap/39-pop3-mistake-redis.pcap b/test/lpi_plus/test_pcap/mixed_pcap/39-pop3-mistake-redis.pcap
index c866867..c866867 100644
--- a/test/lpi_plugin/test_pcap/mixed_pcap/39-pop3-mistake-redis.pcap
+++ b/test/lpi_plus/test_pcap/mixed_pcap/39-pop3-mistake-redis.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/01-openvpn-udp-port-1198-first.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/01-openvpn-udp-port-1198-first.pcap
index 61b4ec5..61b4ec5 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/01-openvpn-udp-port-1198-first.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/01-openvpn-udp-port-1198-first.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/02-openvpn-nDPI.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/02-openvpn-nDPI.pcap
index 9ae8351..9ae8351 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/02-openvpn-nDPI.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/02-openvpn-nDPI.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/03-openvpn_onestream.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/03-openvpn_onestream.pcap
index 3a3519e..3a3519e 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/03-openvpn_onestream.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/03-openvpn_onestream.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/04-openvpn-udp-63111.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/04-openvpn-udp-63111.pcap
index c185c52..c185c52 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/04-openvpn-udp-63111.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/04-openvpn-udp-63111.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/05-openvpn-udp-34400.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/05-openvpn-udp-34400.pcap
index 3a3519e..3a3519e 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/05-openvpn-udp-34400.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/05-openvpn-udp-34400.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/06-openvpn-udp-40914.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/06-openvpn-udp-40914.pcap
index 36853be..36853be 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/06-openvpn-udp-40914.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/06-openvpn-udp-40914.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/07-openvpn.tcp.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/07-openvpn.tcp.pcap
index fa0b75a..fa0b75a 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/07-openvpn.tcp.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/07-openvpn.tcp.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/08-ovpntcp_hmac.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/08-ovpntcp_hmac.pcap
index aed2c38..aed2c38 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/08-ovpntcp_hmac.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/08-ovpntcp_hmac.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/09-ovpntcp_nohmac.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/09-ovpntcp_nohmac.pcap
index 7f48bce..7f48bce 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/09-ovpntcp_nohmac.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/09-ovpntcp_nohmac.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/10-openvpn-udp-49941.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/10-openvpn-udp-49941.pcap
index 9865847..9865847 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/10-openvpn-udp-49941.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/10-openvpn-udp-49941.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/11-ipv6_openvpn.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/11-ipv6_openvpn.pcap
index 015867b..015867b 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/11-ipv6_openvpn.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/11-ipv6_openvpn.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/openvpn_pcap/12-quic-openvpn.pcap b/test/lpi_plus/test_pcap/openvpn_pcap/12-quic-openvpn.pcap
index 00c4d40..00c4d40 100644
--- a/test/lpi_plugin/test_pcap/openvpn_pcap/12-quic-openvpn.pcap
+++ b/test/lpi_plus/test_pcap/openvpn_pcap/12-quic-openvpn.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/ppp_pcap/01-l2tp_netbios.pcap b/test/lpi_plus/test_pcap/ppp_pcap/01-l2tp_netbios.pcap
index de7803c..de7803c 100644
--- a/test/lpi_plugin/test_pcap/ppp_pcap/01-l2tp_netbios.pcap
+++ b/test/lpi_plus/test_pcap/ppp_pcap/01-l2tp_netbios.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/ppp_pcap/02-l2tp-without-l7_protocol-62176-33445-192.168.10.91-220.43.148.189.pcap b/test/lpi_plus/test_pcap/ppp_pcap/02-l2tp-without-l7_protocol-62176-33445-192.168.10.91-220.43.148.189.pcap
index ae908be..ae908be 100755
--- a/test/lpi_plugin/test_pcap/ppp_pcap/02-l2tp-without-l7_protocol-62176-33445-192.168.10.91-220.43.148.189.pcap
+++ b/test/lpi_plus/test_pcap/ppp_pcap/02-l2tp-without-l7_protocol-62176-33445-192.168.10.91-220.43.148.189.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/ppp_pcap/03-l2tp_http.pcap b/test/lpi_plus/test_pcap/ppp_pcap/03-l2tp_http.pcap
index 066f523..066f523 100755
--- a/test/lpi_plugin/test_pcap/ppp_pcap/03-l2tp_http.pcap
+++ b/test/lpi_plus/test_pcap/ppp_pcap/03-l2tp_http.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/ppp_pcap/04-l2tp_ctrl_data_full.pcap b/test/lpi_plus/test_pcap/ppp_pcap/04-l2tp_ctrl_data_full.pcap
index 9d824a1..9d824a1 100755
--- a/test/lpi_plugin/test_pcap/ppp_pcap/04-l2tp_ctrl_data_full.pcap
+++ b/test/lpi_plus/test_pcap/ppp_pcap/04-l2tp_ctrl_data_full.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/ppp_pcap/05-pptp_encrypt.pcap b/test/lpi_plus/test_pcap/ppp_pcap/05-pptp_encrypt.pcap
index cf2cdd8..cf2cdd8 100755
--- a/test/lpi_plugin/test_pcap/ppp_pcap/05-pptp_encrypt.pcap
+++ b/test/lpi_plus/test_pcap/ppp_pcap/05-pptp_encrypt.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/ppp_pcap/06-pptp_http.pcap b/test/lpi_plus/test_pcap/ppp_pcap/06-pptp_http.pcap
index 9203ed0..9203ed0 100755
--- a/test/lpi_plugin/test_pcap/ppp_pcap/06-pptp_http.pcap
+++ b/test/lpi_plus/test_pcap/ppp_pcap/06-pptp_http.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/1-socks45-http-example.pcap b/test/lpi_plus/test_pcap/socks_pcap/1-socks45-http-example.pcap
index 1b82f60..1b82f60 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/1-socks45-http-example.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/1-socks45-http-example.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/10-socks5-http-302-frag.pcap b/test/lpi_plus/test_pcap/socks_pcap/10-socks5-http-302-frag.pcap
index 58690a7..58690a7 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/10-socks5-http-302-frag.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/10-socks5-http-302-frag.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/11-socks5-http-302.pcap b/test/lpi_plus/test_pcap/socks_pcap/11-socks5-http-302.pcap
index cf0ece9..cf0ece9 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/11-socks5-http-302.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/11-socks5-http-302.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/12-socks5-rdp.pcap b/test/lpi_plus/test_pcap/socks_pcap/12-socks5-rdp.pcap
index 8c8e632..8c8e632 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/12-socks5-rdp.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/12-socks5-rdp.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/13-socks5-reverse.pcap b/test/lpi_plus/test_pcap/socks_pcap/13-socks5-reverse.pcap
index 81b0d8a..81b0d8a 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/13-socks5-reverse.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/13-socks5-reverse.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/14-socks5-smtp-503.pcap b/test/lpi_plus/test_pcap/socks_pcap/14-socks5-smtp-503.pcap
index 13bafd9..13bafd9 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/14-socks5-smtp-503.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/14-socks5-smtp-503.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/15-socks-http-pass.pcap b/test/lpi_plus/test_pcap/socks_pcap/15-socks-http-pass.pcap
index a99cb60..a99cb60 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/15-socks-http-pass.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/15-socks-http-pass.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/16-socks-https-example.pcap b/test/lpi_plus/test_pcap/socks_pcap/16-socks-https-example.pcap
index 8cb982c..8cb982c 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/16-socks-https-example.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/16-socks-https-example.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/2-socks5_ftp.pcap b/test/lpi_plus/test_pcap/socks_pcap/2-socks5_ftp.pcap
index 6e270f7..6e270f7 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/2-socks5_ftp.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/2-socks5_ftp.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/3-POP3_Sock5_subject.pcap b/test/lpi_plus/test_pcap/socks_pcap/3-POP3_Sock5_subject.pcap
index 38caab7..38caab7 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/3-POP3_Sock5_subject.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/3-POP3_Sock5_subject.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/4-SMTP_Sock5_subject.pcap b/test/lpi_plus/test_pcap/socks_pcap/4-SMTP_Sock5_subject.pcap
index ce5e53f..ce5e53f 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/4-SMTP_Sock5_subject.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/4-SMTP_Sock5_subject.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/5-T3-HTTP-URL-SOCKS5.pcap b/test/lpi_plus/test_pcap/socks_pcap/5-T3-HTTP-URL-SOCKS5.pcap
index 4f8812a..4f8812a 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/5-T3-HTTP-URL-SOCKS5.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/5-T3-HTTP-URL-SOCKS5.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/6-T7-HTTP-CONT-SOCKS5.pcap b/test/lpi_plus/test_pcap/socks_pcap/6-T7-HTTP-CONT-SOCKS5.pcap
index 737aac0..737aac0 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/6-T7-HTTP-CONT-SOCKS5.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/6-T7-HTTP-CONT-SOCKS5.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/7-T86-FTP-URL-PORT-BIN-SOCKS5.pcap b/test/lpi_plus/test_pcap/socks_pcap/7-T86-FTP-URL-PORT-BIN-SOCKS5.pcap
index 30b7f69..30b7f69 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/7-T86-FTP-URL-PORT-BIN-SOCKS5.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/7-T86-FTP-URL-PORT-BIN-SOCKS5.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/8-socks4_http.pcap b/test/lpi_plus/test_pcap/socks_pcap/8-socks4_http.pcap
index 85ca607..85ca607 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/8-socks4_http.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/8-socks4_http.pcap
Binary files differ
diff --git a/test/lpi_plugin/test_pcap/socks_pcap/9-socks4-https.pcap b/test/lpi_plus/test_pcap/socks_pcap/9-socks4-https.pcap
index 851028b..851028b 100644
--- a/test/lpi_plugin/test_pcap/socks_pcap/9-socks4-https.pcap
+++ b/test/lpi_plus/test_pcap/socks_pcap/9-socks4-https.pcap
Binary files differ
diff --git a/test/session_debugger/session_debugger.c b/test/session_debugger/session_debugger.c
index b54d739..80f5302 100644
--- a/test/session_debugger/session_debugger.c
+++ b/test/session_debugger/session_debugger.c
@@ -287,9 +287,8 @@ struct stellar_module *session_debugger_on_init(struct stellar_module_manager *m
{
assert(mod_mgr);
- struct stellar_module *sess_mgr_mod = stellar_module_manager_get_module(mod_mgr, SESSION_MANAGER_MODULE_NAME);
- assert(sess_mgr_mod);
- struct session_manager *sess_mgr = stellar_module_get_ctx(sess_mgr_mod);
+
+ struct session_manager *sess_mgr = stellar_module_get_session_manager(mod_mgr);
assert(sess_mgr);
struct logger *logger = stellar_module_manager_get_logger(mod_mgr);
assert(logger);