librex 0.0.65 → 0.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +1 -1
- data/lib/rex/arch.rb +1 -0
- data/lib/rex/arch/sparc.rb +16 -15
- data/lib/rex/arch/sparc.rb.ut.rb +2 -1
- data/lib/rex/arch/x86.rb +1 -0
- data/lib/rex/arch/x86.rb.ut.rb +2 -1
- data/lib/rex/assembly/nasm.rb +1 -0
- data/lib/rex/assembly/nasm.rb.ut.rb +2 -1
- data/lib/rex/compat.rb +13 -0
- data/lib/rex/constants.rb +5 -4
- data/lib/rex/elfparsey.rb +3 -2
- data/lib/rex/elfparsey/elf.rb +2 -1
- data/lib/rex/elfparsey/elfbase.rb +8 -7
- data/lib/rex/elfparsey/exceptions.rb +3 -2
- data/lib/rex/elfscan.rb +3 -2
- data/lib/rex/elfscan/scanner.rb +2 -1
- data/lib/rex/elfscan/search.rb +2 -1
- data/lib/rex/encoder/alpha2.rb +2 -1
- data/lib/rex/encoder/alpha2/alpha_mixed.rb +3 -2
- data/lib/rex/encoder/alpha2/alpha_upper.rb +5 -4
- data/lib/rex/encoder/alpha2/generic.rb +37 -60
- data/lib/rex/encoder/alpha2/unicode_mixed.rb +4 -9
- data/lib/rex/encoder/alpha2/unicode_upper.rb +4 -9
- data/lib/rex/encoder/ndr.rb +1 -0
- data/lib/rex/encoder/ndr.rb.ut.rb +2 -1
- data/lib/rex/encoder/nonalpha.rb +1 -0
- data/lib/rex/encoder/nonupper.rb +1 -0
- data/lib/rex/encoder/xdr.rb +9 -8
- data/lib/rex/encoder/xdr.rb.ut.rb +2 -1
- data/lib/rex/encoder/xor.rb +1 -0
- data/lib/rex/encoder/xor/dword.rb +2 -1
- data/lib/rex/encoder/xor/dword_additive.rb +2 -1
- data/lib/rex/encoders/xor_dword.rb +1 -0
- data/lib/rex/encoders/xor_dword_additive.rb +2 -1
- data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +2 -1
- data/lib/rex/encoding/xor.rb +2 -1
- data/lib/rex/encoding/xor.rb.ts.rb +2 -1
- data/lib/rex/encoding/xor/byte.rb +2 -1
- data/lib/rex/encoding/xor/byte.rb.ut.rb +2 -1
- data/lib/rex/encoding/xor/dword.rb +2 -1
- data/lib/rex/encoding/xor/dword.rb.ut.rb +2 -1
- data/lib/rex/encoding/xor/dword_additive.rb +1 -0
- data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +2 -1
- data/lib/rex/encoding/xor/exceptions.rb +1 -0
- data/lib/rex/encoding/xor/generic.rb +1 -0
- data/lib/rex/encoding/xor/generic.rb.ut.rb +2 -1
- data/lib/rex/encoding/xor/qword.rb +2 -1
- data/lib/rex/encoding/xor/word.rb +2 -1
- data/lib/rex/encoding/xor/word.rb.ut.rb +2 -1
- data/lib/rex/exceptions.rb +1 -0
- data/lib/rex/exceptions.rb.ut.rb +2 -1
- data/lib/rex/exploitation/cmdstager.rb +2 -1
- data/lib/rex/exploitation/cmdstager/base.rb +1 -0
- data/lib/rex/exploitation/cmdstager/debug_asm.rb +2 -1
- data/lib/rex/exploitation/cmdstager/debug_write.rb +2 -1
- data/lib/rex/exploitation/cmdstager/tftp.rb +2 -1
- data/lib/rex/exploitation/cmdstager/vbs.rb +2 -1
- data/lib/rex/exploitation/egghunter.rb +12 -11
- data/lib/rex/exploitation/egghunter.rb.ut.rb +2 -1
- data/lib/rex/exploitation/encryptjs.rb +1 -0
- data/lib/rex/exploitation/heaplib.rb +1 -0
- data/lib/rex/exploitation/javascriptosdetect.js +1014 -0
- data/lib/rex/exploitation/javascriptosdetect.rb +4 -857
- data/lib/rex/exploitation/jsobfu.rb +2 -1
- data/lib/rex/exploitation/obfuscatejs.rb +1 -0
- data/lib/rex/exploitation/omelet.rb +1 -0
- data/lib/rex/exploitation/omelet.rb.ut.rb +1 -0
- data/lib/rex/exploitation/opcodedb.rb +12 -11
- data/lib/rex/exploitation/opcodedb.rb.ut.rb +2 -1
- data/lib/rex/exploitation/seh.rb +3 -2
- data/lib/rex/exploitation/seh.rb.ut.rb +2 -1
- data/lib/rex/file.rb +4 -3
- data/lib/rex/file.rb.ut.rb +2 -1
- data/lib/rex/image_source.rb +3 -2
- data/lib/rex/image_source/disk.rb +3 -2
- data/lib/rex/image_source/image_source.rb +3 -2
- data/lib/rex/image_source/memory.rb +3 -2
- data/lib/rex/io/bidirectional_pipe.rb +1 -0
- data/lib/rex/io/datagram_abstraction.rb +2 -1
- data/lib/rex/io/ring_buffer.rb +49 -44
- data/lib/rex/io/ring_buffer.rb.ut.rb +4 -3
- data/lib/rex/io/stream.rb +1 -0
- data/lib/rex/io/stream_abstraction.rb +1 -0
- data/lib/rex/io/stream_server.rb +1 -0
- data/lib/rex/job_container.rb +1 -0
- data/lib/rex/logging.rb +2 -1
- data/lib/rex/logging/log_dispatcher.rb +5 -4
- data/lib/rex/logging/log_sink.rb +2 -1
- data/lib/rex/logging/sinks/flatfile.rb +4 -3
- data/lib/rex/logging/sinks/stderr.rb +2 -1
- data/lib/rex/machparsey.rb +2 -1
- data/lib/rex/machparsey/exceptions.rb +2 -1
- data/lib/rex/machparsey/mach.rb +20 -19
- data/lib/rex/machparsey/machbase.rb +27 -26
- data/lib/rex/machscan.rb +2 -1
- data/lib/rex/machscan/scanner.rb +1 -0
- data/lib/rex/mime.rb +2 -1
- data/lib/rex/mime/header.rb +1 -0
- data/lib/rex/mime/message.rb +4 -1
- data/lib/rex/mime/part.rb +2 -1
- data/lib/rex/nop/opty2.rb +2 -1
- data/lib/rex/nop/opty2.rb.ut.rb +2 -1
- data/lib/rex/nop/opty2_tables.rb +1 -0
- data/lib/rex/ole.rb +3 -2
- data/lib/rex/ole/clsid.rb +3 -2
- data/lib/rex/ole/difat.rb +3 -2
- data/lib/rex/ole/directory.rb +3 -2
- data/lib/rex/ole/direntry.rb +3 -2
- data/lib/rex/ole/fat.rb +3 -2
- data/lib/rex/ole/header.rb +3 -2
- data/lib/rex/ole/minifat.rb +3 -2
- data/lib/rex/ole/propset.rb +4 -3
- data/lib/rex/ole/samples/create_ole.rb +1 -0
- data/lib/rex/ole/samples/dir.rb +1 -0
- data/lib/rex/ole/samples/dump_stream.rb +1 -0
- data/lib/rex/ole/samples/ole_info.rb +1 -0
- data/lib/rex/ole/storage.rb +3 -2
- data/lib/rex/ole/stream.rb +3 -2
- data/lib/rex/ole/substorage.rb +3 -2
- data/lib/rex/ole/util.rb +3 -2
- data/lib/rex/parser/acunetix_nokogiri.rb +13 -12
- data/lib/rex/parser/apple_backup_manifestdb.rb +20 -19
- data/lib/rex/parser/appscan_nokogiri.rb +17 -16
- data/lib/rex/parser/arguments.rb +2 -1
- data/lib/rex/parser/arguments.rb.ut.rb +2 -1
- data/lib/rex/parser/burp_session_nokogiri.rb +8 -7
- data/lib/rex/parser/ci_nokogiri.rb +4 -3
- data/lib/rex/parser/foundstone_nokogiri.rb +18 -17
- data/lib/rex/parser/fusionvm_nokogiri.rb +109 -0
- data/lib/rex/parser/ini.rb +1 -0
- data/lib/rex/parser/ini.rb.ut.rb +2 -1
- data/lib/rex/parser/ip360_aspl_xml.rb +1 -0
- data/lib/rex/parser/ip360_xml.rb +4 -3
- data/lib/rex/parser/mbsa_nokogiri.rb +8 -7
- data/lib/rex/parser/nessus_xml.rb +3 -2
- data/lib/rex/parser/netsparker_xml.rb +10 -9
- data/lib/rex/parser/nexpose_raw_nokogiri.rb +372 -52
- data/lib/rex/parser/nexpose_simple_nokogiri.rb +8 -7
- data/lib/rex/parser/nexpose_xml.rb +1 -0
- data/lib/rex/parser/nmap_nokogiri.rb +63 -33
- data/lib/rex/parser/nmap_xml.rb +1 -0
- data/lib/rex/parser/nokogiri_doc_mixin.rb +35 -15
- data/lib/rex/parser/openvas_nokogiri.rb +172 -0
- data/lib/rex/parser/retina_xml.rb +1 -0
- data/lib/rex/parser/wapiti_nokogiri.rb +105 -0
- data/lib/rex/payloads.rb +2 -1
- data/lib/rex/payloads/win32.rb +2 -1
- data/lib/rex/payloads/win32/common.rb +2 -1
- data/lib/rex/payloads/win32/kernel.rb +2 -1
- data/lib/rex/payloads/win32/kernel/common.rb +4 -3
- data/lib/rex/payloads/win32/kernel/migration.rb +2 -1
- data/lib/rex/payloads/win32/kernel/recovery.rb +2 -1
- data/lib/rex/payloads/win32/kernel/stager.rb +21 -20
- data/lib/rex/peparsey.rb +3 -2
- data/lib/rex/peparsey/exceptions.rb +2 -1
- data/lib/rex/peparsey/pe.rb +3 -2
- data/lib/rex/peparsey/pe_memdump.rb +2 -1
- data/lib/rex/peparsey/pebase.rb +2 -1
- data/lib/rex/peparsey/section.rb +2 -1
- data/lib/rex/pescan.rb +3 -2
- data/lib/rex/pescan/analyze.rb +1 -0
- data/lib/rex/pescan/scanner.rb +1 -0
- data/lib/rex/pescan/search.rb +1 -0
- data/lib/rex/platforms.rb +2 -1
- data/lib/rex/platforms/windows.rb +2 -1
- data/lib/rex/poly.rb +2 -1
- data/lib/rex/poly/block.rb +16 -15
- data/lib/rex/poly/register.rb +2 -1
- data/lib/rex/poly/register/x86.rb +2 -1
- data/lib/rex/post.rb +2 -2
- data/lib/rex/post/dir.rb +2 -1
- data/lib/rex/post/file.rb +1 -0
- data/lib/rex/post/file_stat.rb +1 -0
- data/lib/rex/post/io.rb +2 -1
- data/lib/rex/post/meterpreter.rb +2 -1
- data/lib/rex/post/meterpreter/channel.rb +1 -0
- data/lib/rex/post/meterpreter/channel_container.rb +2 -1
- data/lib/rex/post/meterpreter/channels/pool.rb +1 -0
- data/lib/rex/post/meterpreter/channels/pools/file.rb +1 -0
- data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +3 -2
- data/lib/rex/post/meterpreter/channels/stream.rb +1 -0
- data/lib/rex/post/meterpreter/client.rb +23 -1
- data/lib/rex/post/meterpreter/client_core.rb +10 -5
- data/lib/rex/post/meterpreter/dependencies.rb +2 -1
- data/lib/rex/post/meterpreter/extension.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/espia/espia.rb +7 -6
- data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +5 -4
- data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +7 -6
- data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/priv/fs.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/priv/priv.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +28 -11
- data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +6 -5
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +3 -2
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +39 -5
- data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +75 -18
- data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +18 -6
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +4 -1
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +12 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +7 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +23 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +29 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +10 -5
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +9 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +106 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +128 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +27 -6
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +21 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +43 -4
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +1 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +7 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +14 -13
- data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +1 -0
- data/lib/rex/post/meterpreter/inbound_packet_handler.rb +2 -1
- data/lib/rex/post/meterpreter/object_aliases.rb +6 -5
- data/lib/rex/post/meterpreter/packet.rb +26 -6
- data/lib/rex/post/meterpreter/packet_dispatcher.rb +1 -0
- data/lib/rex/post/meterpreter/packet_parser.rb +1 -0
- data/lib/rex/post/meterpreter/packet_response_waiter.rb +1 -0
- data/lib/rex/post/meterpreter/ui/console.rb +1 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +1 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +103 -28
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +1 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +1 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +1 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +3 -2
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +12 -11
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +2 -1
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +2 -1
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +53 -36
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +3 -2
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +87 -44
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +80 -18
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +77 -48
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +72 -41
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +24 -5
- data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +2 -1
- data/lib/rex/post/permission.rb +2 -1
- data/lib/rex/post/process.rb +2 -1
- data/lib/rex/post/thread.rb +2 -1
- data/lib/rex/post/ui.rb +2 -1
- data/lib/rex/proto.rb +1 -0
- data/lib/rex/proto.rb.ts.rb +2 -1
- data/lib/rex/proto/dcerpc.rb +2 -1
- data/lib/rex/proto/dcerpc.rb.ts.rb +2 -1
- data/lib/rex/proto/dcerpc/client.rb +1 -0
- data/lib/rex/proto/dcerpc/client.rb.ut.rb +1 -0
- data/lib/rex/proto/dcerpc/exceptions.rb +2 -1
- data/lib/rex/proto/dcerpc/handle.rb +1 -0
- data/lib/rex/proto/dcerpc/handle.rb.ut.rb +2 -1
- data/lib/rex/proto/dcerpc/ndr.rb +2 -1
- data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +2 -1
- data/lib/rex/proto/dcerpc/packet.rb +52 -45
- data/lib/rex/proto/dcerpc/packet.rb.ut.rb +12 -11
- data/lib/rex/proto/dcerpc/response.rb +1 -0
- data/lib/rex/proto/dcerpc/response.rb.ut.rb +2 -1
- data/lib/rex/proto/dcerpc/uuid.rb +13 -12
- data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +2 -1
- data/lib/rex/proto/dhcp.rb +2 -1
- data/lib/rex/proto/dhcp/constants.rb +2 -1
- data/lib/rex/proto/dhcp/server.rb +4 -3
- data/lib/rex/proto/drda.rb +1 -0
- data/lib/rex/proto/drda.rb.ts.rb +1 -0
- data/lib/rex/proto/drda/constants.rb +1 -0
- data/lib/rex/proto/drda/constants.rb.ut.rb +1 -0
- data/lib/rex/proto/drda/packet.rb +11 -10
- data/lib/rex/proto/drda/packet.rb.ut.rb +5 -4
- data/lib/rex/proto/drda/utils.rb +4 -3
- data/lib/rex/proto/drda/utils.rb.ut.rb +3 -2
- data/lib/rex/proto/http.rb +2 -1
- data/lib/rex/proto/http.rb.ts.rb +2 -1
- data/lib/rex/proto/http/client.rb +29 -5
- data/lib/rex/proto/http/client.rb.ut.rb +1 -0
- data/lib/rex/proto/http/handler.rb +2 -1
- data/lib/rex/proto/http/handler/erb.rb +5 -4
- data/lib/rex/proto/http/handler/erb.rb.ut.rb +2 -1
- data/lib/rex/proto/http/handler/proc.rb +1 -0
- data/lib/rex/proto/http/handler/proc.rb.ut.rb +2 -1
- data/lib/rex/proto/http/header.rb +3 -3
- data/lib/rex/proto/http/header.rb.ut.rb +2 -1
- data/lib/rex/proto/http/packet.rb +1 -0
- data/lib/rex/proto/http/packet.rb.ut.rb +15 -14
- data/lib/rex/proto/http/request.rb +23 -22
- data/lib/rex/proto/http/request.rb.ut.rb +2 -1
- data/lib/rex/proto/http/response.rb +6 -5
- data/lib/rex/proto/http/response.rb.ut.rb +7 -6
- data/lib/rex/proto/http/server.rb +1 -0
- data/lib/rex/proto/http/server.rb.ut.rb +6 -5
- data/lib/rex/proto/iax2.rb +1 -0
- data/lib/rex/proto/iax2/call.rb +48 -47
- data/lib/rex/proto/iax2/client.rb +23 -22
- data/lib/rex/proto/iax2/codecs.rb +1 -0
- data/lib/rex/proto/iax2/codecs/alaw.rb +1 -0
- data/lib/rex/proto/iax2/codecs/g711.rb +4 -3
- data/lib/rex/proto/iax2/codecs/mulaw.rb +1 -0
- data/lib/rex/proto/iax2/constants.rb +1 -0
- data/lib/rex/proto/natpmp.rb +11 -0
- data/lib/rex/proto/natpmp/constants.rb +19 -0
- data/lib/rex/proto/natpmp/packet.rb +45 -0
- data/lib/rex/proto/ntlm.rb +1 -0
- data/lib/rex/proto/ntlm.rb.ut.rb +1 -0
- data/lib/rex/proto/ntlm/base.rb +38 -37
- data/lib/rex/proto/ntlm/constants.rb +1 -0
- data/lib/rex/proto/ntlm/crypt.rb +45 -44
- data/lib/rex/proto/ntlm/exceptions.rb +1 -0
- data/lib/rex/proto/ntlm/message.rb +30 -29
- data/lib/rex/proto/ntlm/utils.rb +116 -115
- data/lib/rex/proto/proxy/socks4a.rb +1 -0
- data/lib/rex/proto/rfb.rb +1 -0
- data/lib/rex/proto/rfb.rb.ut.rb +1 -0
- data/lib/rex/proto/rfb/cipher.rb +1 -0
- data/lib/rex/proto/rfb/client.rb +1 -0
- data/lib/rex/proto/rfb/constants.rb +1 -0
- data/lib/rex/proto/smb.rb +2 -1
- data/lib/rex/proto/smb.rb.ts.rb +2 -1
- data/lib/rex/proto/smb/client.rb +23 -22
- data/lib/rex/proto/smb/client.rb.ut.rb +1 -0
- data/lib/rex/proto/smb/constants.rb +1 -0
- data/lib/rex/proto/smb/constants.rb.ut.rb +2 -1
- data/lib/rex/proto/smb/crypt.rb +3 -2
- data/lib/rex/proto/smb/evasions.rb +1 -0
- data/lib/rex/proto/smb/exceptions.rb +6 -5
- data/lib/rex/proto/smb/simpleclient.rb +1 -0
- data/lib/rex/proto/smb/simpleclient.rb.ut.rb +1 -0
- data/lib/rex/proto/smb/utils.rb +1 -0
- data/lib/rex/proto/smb/utils.rb.ut.rb +2 -1
- data/lib/rex/proto/sunrpc.rb +1 -0
- data/lib/rex/proto/sunrpc/client.rb +1 -0
- data/lib/rex/proto/tftp.rb +3 -1
- data/lib/rex/proto/tftp/client.rb +344 -0
- data/lib/rex/proto/tftp/constants.rb +2 -1
- data/lib/rex/proto/tftp/server.rb +2 -1
- data/lib/rex/proto/tftp/server.rb.ut.rb +3 -2
- data/lib/rex/registry.rb +14 -0
- data/lib/rex/registry/hive.rb +132 -0
- data/lib/rex/registry/lfkey.rb +51 -0
- data/lib/rex/registry/nodekey.rb +54 -0
- data/lib/rex/registry/regf.rb +25 -0
- data/lib/rex/registry/valuekey.rb +67 -0
- data/lib/rex/registry/valuelist.rb +29 -0
- data/lib/rex/ropbuilder.rb +2 -1
- data/lib/rex/ropbuilder/rop.rb +3 -2
- data/lib/rex/script.rb +1 -0
- data/lib/rex/script/base.rb +1 -0
- data/lib/rex/script/meterpreter.rb +1 -0
- data/lib/rex/script/shell.rb +1 -0
- data/lib/rex/service.rb +2 -1
- data/lib/rex/service_manager.rb +6 -5
- data/lib/rex/service_manager.rb.ut.rb +2 -1
- data/lib/rex/services/local_relay.rb +1 -0
- data/lib/rex/socket.rb +72 -36
- data/lib/rex/socket.rb.ut.rb +1 -0
- data/lib/rex/socket/comm.rb +1 -0
- data/lib/rex/socket/comm/local.rb +60 -13
- data/lib/rex/socket/comm/local.rb.ut.rb +2 -1
- data/lib/rex/socket/ip.rb +1 -0
- data/lib/rex/socket/parameters.rb +15 -14
- data/lib/rex/socket/parameters.rb.ut.rb +2 -1
- data/lib/rex/socket/range_walker.rb +71 -26
- data/lib/rex/socket/range_walker.rb.ut.rb +2 -1
- data/lib/rex/socket/ssl_tcp.rb +1 -0
- data/lib/rex/socket/ssl_tcp.rb.ut.rb +2 -1
- data/lib/rex/socket/ssl_tcp_server.rb +1 -0
- data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +1 -0
- data/lib/rex/socket/subnet_walker.rb +1 -0
- data/lib/rex/socket/subnet_walker.rb.ut.rb +2 -1
- data/lib/rex/socket/switch_board.rb +1 -0
- data/lib/rex/socket/switch_board.rb.ut.rb +2 -1
- data/lib/rex/socket/tcp.rb +4 -3
- data/lib/rex/socket/tcp.rb.ut.rb +2 -1
- data/lib/rex/socket/tcp_server.rb +1 -0
- data/lib/rex/socket/tcp_server.rb.ut.rb +2 -1
- data/lib/rex/socket/udp.rb +2 -1
- data/lib/rex/socket/udp.rb.ut.rb +2 -1
- data/lib/rex/struct2.rb +2 -1
- data/lib/rex/struct2/c_struct.rb +2 -1
- data/lib/rex/struct2/c_struct_template.rb +2 -1
- data/lib/rex/struct2/constant.rb +2 -1
- data/lib/rex/struct2/element.rb +2 -1
- data/lib/rex/struct2/generic.rb +1 -0
- data/lib/rex/struct2/restraint.rb +2 -1
- data/lib/rex/struct2/s_string.rb +1 -0
- data/lib/rex/struct2/s_struct.rb +1 -0
- data/lib/rex/sync.rb +2 -1
- data/lib/rex/sync/event.rb +1 -0
- data/lib/rex/sync/read_write_lock.rb +1 -0
- data/lib/rex/sync/ref.rb +2 -1
- data/lib/rex/sync/thread_safe.rb +2 -1
- data/lib/rex/test.rb +2 -1
- data/lib/rex/text.rb +136 -19
- data/lib/rex/text.rb.ut.rb +1 -0
- data/lib/rex/thread_factory.rb +5 -4
- data/lib/rex/time.rb +2 -1
- data/lib/rex/transformer.rb +1 -0
- data/lib/rex/transformer.rb.ut.rb +2 -1
- data/lib/rex/ui.rb +2 -1
- data/lib/rex/ui/interactive.rb +10 -9
- data/lib/rex/ui/output.rb +1 -0
- data/lib/rex/ui/output/none.rb +2 -1
- data/lib/rex/ui/progress_tracker.rb +2 -1
- data/lib/rex/ui/subscriber.rb +9 -8
- data/lib/rex/ui/text/color.rb +1 -0
- data/lib/rex/ui/text/color.rb.ut.rb +1 -0
- data/lib/rex/ui/text/dispatcher_shell.rb +63 -23
- data/lib/rex/ui/text/input.rb +1 -0
- data/lib/rex/ui/text/input/buffer.rb +7 -6
- data/lib/rex/ui/text/input/readline.rb +14 -13
- data/lib/rex/ui/text/input/socket.rb +1 -0
- data/lib/rex/ui/text/input/stdio.rb +2 -1
- data/lib/rex/ui/text/irb_shell.rb +1 -0
- data/lib/rex/ui/text/output.rb +1 -0
- data/lib/rex/ui/text/output/buffer.rb +1 -0
- data/lib/rex/ui/text/output/file.rb +1 -0
- data/lib/rex/ui/text/output/socket.rb +1 -0
- data/lib/rex/ui/text/output/stdio.rb +1 -0
- data/lib/rex/ui/text/output/tee.rb +1 -0
- data/lib/rex/ui/text/progress_tracker.rb +2 -1
- data/lib/rex/ui/text/progress_tracker.rb.ut.rb +2 -1
- data/lib/rex/ui/text/shell.rb +1 -0
- data/lib/rex/ui/text/table.rb +20 -14
- data/lib/rex/ui/text/table.rb.ut.rb +3 -2
- data/lib/rex/zip.rb +1 -0
- data/lib/rex/zip/archive.rb +2 -1
- data/lib/rex/zip/blocks.rb +3 -2
- data/lib/rex/zip/entry.rb +6 -7
- data/lib/rex/zip/jar.rb +4 -3
- data/lib/rex/zip/samples/comment.rb +1 -0
- data/lib/rex/zip/samples/mkwar.rb +1 -0
- data/lib/rex/zip/samples/mkzip.rb +1 -0
- data/lib/rex/zip/samples/recursive.rb +1 -0
- metadata +433 -435
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
1
2
|
require 'rexml/rexml'
|
|
2
3
|
require 'rexml/source'
|
|
3
4
|
require 'rexml/document'
|
|
@@ -43,7 +44,7 @@ module Cachable
|
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
###
|
|
46
|
-
#
|
|
47
|
+
#
|
|
47
48
|
# This class provides a general interface to items that come from that opcode
|
|
48
49
|
# database that have a symbolic entry identifier and name.
|
|
49
50
|
#
|
|
@@ -183,9 +184,9 @@ class ImageModule
|
|
|
183
184
|
class <<self
|
|
184
185
|
include Cachable
|
|
185
186
|
def hash_key(hash) # :nodoc:
|
|
186
|
-
(hash['id'] || '') +
|
|
187
|
-
(hash['segments'] || '').to_s +
|
|
188
|
-
(hash['exports'] || '').to_s +
|
|
187
|
+
(hash['id'] || '') +
|
|
188
|
+
(hash['segments'] || '').to_s +
|
|
189
|
+
(hash['exports'] || '').to_s +
|
|
189
190
|
(hash['imports'] || '').to_s
|
|
190
191
|
end
|
|
191
192
|
end
|
|
@@ -718,16 +719,16 @@ protected
|
|
|
718
719
|
client = Rex::Proto::Http::Client.new(server_host, server_port)
|
|
719
720
|
|
|
720
721
|
begin
|
|
721
|
-
|
|
722
|
+
|
|
722
723
|
# Create the CGI parameter list
|
|
723
724
|
vars = { 'method' => method }
|
|
724
|
-
|
|
725
|
+
|
|
725
726
|
opts.each_pair do |k, v|
|
|
726
727
|
vars[k] = xlate_param(v)
|
|
727
728
|
end
|
|
728
729
|
|
|
729
730
|
client.set_config('uri_encode_mode' => 'none')
|
|
730
|
-
|
|
731
|
+
|
|
731
732
|
# Initialize the request with the POST body.
|
|
732
733
|
request = client.request_cgi(
|
|
733
734
|
'method' => 'POST',
|
|
@@ -761,7 +762,7 @@ protected
|
|
|
761
762
|
xlate_param(ent)
|
|
762
763
|
}.join(',,')
|
|
763
764
|
elsif (v.kind_of?(Hash))
|
|
764
|
-
v.map { |k,v|
|
|
765
|
+
v.map { |k,v|
|
|
765
766
|
"#{URI.escape(k)}:#{xlate_param(v)}" if (v)
|
|
766
767
|
}.join(',,')
|
|
767
768
|
else
|
|
@@ -778,9 +779,9 @@ protected
|
|
|
778
779
|
if (!@disable_parse)
|
|
779
780
|
source = REXML::Source.new(xml)
|
|
780
781
|
doc = REXML::Document.new
|
|
781
|
-
|
|
782
|
+
|
|
782
783
|
REXML::Parsers::TreeParser.new(source, doc).parse
|
|
783
|
-
|
|
784
|
+
|
|
784
785
|
translate_element(doc.root)
|
|
785
786
|
end
|
|
786
787
|
end
|
|
@@ -801,7 +802,7 @@ protected
|
|
|
801
802
|
else
|
|
802
803
|
v = child.text
|
|
803
804
|
end
|
|
804
|
-
|
|
805
|
+
|
|
805
806
|
hsh[child.attributes['name']] = v
|
|
806
807
|
}
|
|
807
808
|
|
data/lib/rex/exploitation/seh.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
1
2
|
require 'rex/text'
|
|
2
3
|
require 'rex/arch/x86'
|
|
3
4
|
|
|
@@ -41,7 +42,7 @@ class Seh
|
|
|
41
42
|
# Generates a fake SEH registration record with the supplied handler
|
|
42
43
|
# address for the handler, and a nop generator to use when generating
|
|
43
44
|
# padding inside the next pointer. The NOP generator must implement the
|
|
44
|
-
# 'generate_sled' method that takes a length and a list of bad
|
|
45
|
+
# 'generate_sled' method that takes a length and a list of bad
|
|
45
46
|
# characters.
|
|
46
47
|
#
|
|
47
48
|
def generate_dynamic_seh_record(handler)
|
|
@@ -89,4 +90,4 @@ protected
|
|
|
89
90
|
end
|
|
90
91
|
|
|
91
92
|
end
|
|
92
|
-
end
|
|
93
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: binary -*-
|
|
2
3
|
|
|
3
4
|
$:.unshift(File.join(File.dirname(__FILE__), '..', '..'))
|
|
4
5
|
|
|
@@ -16,4 +17,4 @@ class Rex::Exploitation::Seh::UnitTest < Test::Unit::TestCase
|
|
|
16
17
|
assert_equal("\x41\x41\x41\x41", record[4, 4])
|
|
17
18
|
end
|
|
18
19
|
|
|
19
|
-
end
|
|
20
|
+
end
|
data/lib/rex/file.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
1
2
|
require 'find'
|
|
2
3
|
require 'rex/compat'
|
|
3
4
|
require 'tempfile'
|
|
@@ -32,12 +33,12 @@ module FileUtils
|
|
|
32
33
|
# a fully qualified path to the supplied file name.
|
|
33
34
|
#
|
|
34
35
|
def self.find_full_path(file_name)
|
|
35
|
-
|
|
36
|
+
|
|
36
37
|
# Check for the absolute fast first
|
|
37
38
|
if (file_name[0,1] == "/" and ::File.exists?(file_name) and ::File::Stat.new(file_name))
|
|
38
39
|
return file_name
|
|
39
40
|
end
|
|
40
|
-
|
|
41
|
+
|
|
41
42
|
path = Rex::Compat.getenv('PATH')
|
|
42
43
|
if (path)
|
|
43
44
|
path.split(::File::PATH_SEPARATOR).each { |base|
|
|
@@ -63,7 +64,7 @@ class Quickfile < ::Tempfile
|
|
|
63
64
|
def initialize(*args)
|
|
64
65
|
super(*args)
|
|
65
66
|
self.binmode
|
|
66
|
-
ObjectSpace.undefine_finalizer(self)
|
|
67
|
+
ObjectSpace.undefine_finalizer(self)
|
|
67
68
|
end
|
|
68
69
|
end
|
|
69
70
|
|
data/lib/rex/file.rb.ut.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: binary -*-
|
|
2
3
|
|
|
3
4
|
$:.unshift(File.join(File.dirname(__FILE__), '..'))
|
|
4
5
|
|
|
@@ -13,4 +14,4 @@ class Rex::FileUtils::UnitTest < ::Test::Unit::TestCase
|
|
|
13
14
|
assert_nil(Klass.find_full_path("cookie monster cake"))
|
|
14
15
|
end
|
|
15
16
|
|
|
16
|
-
end
|
|
17
|
+
end
|
data/lib/rex/image_source.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: binary -*-
|
|
2
3
|
|
|
3
|
-
# $Id: image_source.rb
|
|
4
|
+
# $Id: image_source.rb 15548 2012-06-29 06:08:20Z rapid7 $
|
|
4
5
|
|
|
5
6
|
module Rex
|
|
6
7
|
module ImageSource
|
|
@@ -9,4 +10,4 @@ end
|
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
require 'rex/image_source/disk'
|
|
12
|
-
require 'rex/image_source/memory'
|
|
13
|
+
require 'rex/image_source/memory'
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: binary -*-
|
|
2
3
|
|
|
3
|
-
# $Id: disk.rb
|
|
4
|
+
# $Id: disk.rb 15548 2012-06-29 06:08:20Z rapid7 $
|
|
4
5
|
|
|
5
6
|
require 'rex/image_source/image_source'
|
|
6
7
|
require 'rex/struct2'
|
|
@@ -57,4 +58,4 @@ class Disk < ImageSource
|
|
|
57
58
|
end
|
|
58
59
|
|
|
59
60
|
end
|
|
60
|
-
end
|
|
61
|
+
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: binary -*-
|
|
2
3
|
|
|
3
|
-
# $Id: image_source.rb
|
|
4
|
+
# $Id: image_source.rb 15548 2012-06-29 06:08:20Z rapid7 $
|
|
4
5
|
|
|
5
6
|
module Rex
|
|
6
7
|
module ImageSource
|
|
@@ -43,4 +44,4 @@ class ImageSource
|
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
end
|
|
46
|
-
end
|
|
47
|
+
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: binary -*-
|
|
2
3
|
|
|
3
|
-
# $Id: memory.rb
|
|
4
|
+
# $Id: memory.rb 15548 2012-06-29 06:08:20Z rapid7 $
|
|
4
5
|
|
|
5
6
|
require 'rex/image_source/image_source'
|
|
6
7
|
require 'rex/struct2'
|
|
@@ -34,4 +35,4 @@ class Memory < ImageSource
|
|
|
34
35
|
end
|
|
35
36
|
|
|
36
37
|
end
|
|
37
|
-
end
|
|
38
|
+
end
|
data/lib/rex/io/ring_buffer.rb
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
1
2
|
#
|
|
2
3
|
# This class implements a ring buffer with "cursors" in the form of sequence numbers.
|
|
3
4
|
# To use this class, pass in a file descriptor and a ring size, the class will read
|
|
4
5
|
# data from the file descriptor and store it in the ring. If the ring becomes full,
|
|
5
6
|
# the oldest item will be overwritten. To emulate a stream interface, call read_data
|
|
6
|
-
# to grab the last sequence number and any buffered data, call read_data again,
|
|
7
|
+
# to grab the last sequence number and any buffered data, call read_data again,
|
|
7
8
|
# passing in the sequence number and all data newer than that sequence will be
|
|
8
9
|
# returned, along with a new sequence to read from.
|
|
9
10
|
#
|
|
@@ -12,7 +13,7 @@ require 'rex/socket'
|
|
|
12
13
|
|
|
13
14
|
module Rex
|
|
14
15
|
module IO
|
|
15
|
-
|
|
16
|
+
|
|
16
17
|
class RingBuffer
|
|
17
18
|
|
|
18
19
|
attr_accessor :queue # The data queue, essentially an array of two-element arrays, containing a sequence and data buffer
|
|
@@ -24,7 +25,7 @@ class RingBuffer
|
|
|
24
25
|
attr_accessor :cur # The sequence number of the earliest data fragment in the ring
|
|
25
26
|
attr_accessor :monitor # The thread handle of the built-in monitor when used
|
|
26
27
|
attr_accessor :monitor_thread_error # :nodoc: #
|
|
27
|
-
|
|
28
|
+
|
|
28
29
|
#
|
|
29
30
|
# Create a new ring buffer
|
|
30
31
|
#
|
|
@@ -37,14 +38,18 @@ class RingBuffer
|
|
|
37
38
|
self.queue = Array.new( self.size )
|
|
38
39
|
self.mutex = Mutex.new
|
|
39
40
|
end
|
|
40
|
-
|
|
41
|
+
|
|
42
|
+
def inspect
|
|
43
|
+
"#<Rex::IO::RingBuffer @size=#{size} @fd=#{fd} @seq=#{seq} @beg=#{beg} @cur=#{cur}>"
|
|
44
|
+
end
|
|
45
|
+
|
|
41
46
|
#
|
|
42
47
|
# Start the built-in monitor, not called when used in a larger framework
|
|
43
48
|
#
|
|
44
49
|
def start_monitor
|
|
45
50
|
self.monitor = monitor_thread if not self.monitor
|
|
46
51
|
end
|
|
47
|
-
|
|
52
|
+
|
|
48
53
|
#
|
|
49
54
|
# Stop the built-in monitor
|
|
50
55
|
#
|
|
@@ -52,12 +57,12 @@ class RingBuffer
|
|
|
52
57
|
self.monitor.kill if self.monitor
|
|
53
58
|
self.monitor = nil
|
|
54
59
|
end
|
|
55
|
-
|
|
60
|
+
|
|
56
61
|
#
|
|
57
62
|
# The built-in monitor thread (normally unused with Metasploit)
|
|
58
63
|
#
|
|
59
64
|
def monitor_thread
|
|
60
|
-
Thread.new do
|
|
65
|
+
Thread.new do
|
|
61
66
|
begin
|
|
62
67
|
while self.fd
|
|
63
68
|
buff = self.fd.get_once(-1, 1.0)
|
|
@@ -69,7 +74,7 @@ class RingBuffer
|
|
|
69
74
|
end
|
|
70
75
|
end
|
|
71
76
|
end
|
|
72
|
-
|
|
77
|
+
|
|
73
78
|
#
|
|
74
79
|
# Push data back into the associated stream socket. Logging must occur
|
|
75
80
|
# elsewhere, this function is simply a passthrough.
|
|
@@ -77,7 +82,7 @@ class RingBuffer
|
|
|
77
82
|
def put(data, opts={})
|
|
78
83
|
self.fd.put(data, opts={})
|
|
79
84
|
end
|
|
80
|
-
|
|
85
|
+
|
|
81
86
|
#
|
|
82
87
|
# The clear_data method wipes the ring buffer
|
|
83
88
|
#
|
|
@@ -89,55 +94,55 @@ class RingBuffer
|
|
|
89
94
|
self.queue = Array.new( self.size )
|
|
90
95
|
end
|
|
91
96
|
end
|
|
92
|
-
|
|
97
|
+
|
|
93
98
|
#
|
|
94
|
-
# The store_data method is used to insert data into the ring buffer.
|
|
99
|
+
# The store_data method is used to insert data into the ring buffer.
|
|
95
100
|
#
|
|
96
101
|
def store_data(data)
|
|
97
|
-
self.mutex.synchronize do
|
|
102
|
+
self.mutex.synchronize do
|
|
98
103
|
# self.cur points to the array index of queue containing the last item
|
|
99
104
|
# adding data will result in cur + 1 being used to store said data
|
|
100
105
|
# if cur is larger than size - 1, it will wrap back around. If cur
|
|
101
106
|
# is *smaller* beg, beg is increemnted to cur + 1 (and wrapped if
|
|
102
107
|
# necessary
|
|
103
|
-
|
|
104
|
-
loc = 0
|
|
108
|
+
|
|
109
|
+
loc = 0
|
|
105
110
|
if self.seq > 0
|
|
106
111
|
loc = ( self.cur + 1 ) % self.size
|
|
107
|
-
|
|
112
|
+
|
|
108
113
|
if loc <= self.beg
|
|
109
114
|
self.beg = (self.beg + 1) % self.size
|
|
110
115
|
end
|
|
111
116
|
end
|
|
112
|
-
|
|
117
|
+
|
|
113
118
|
self.queue[loc] = [self.seq += 1, data]
|
|
114
119
|
self.cur = loc
|
|
115
120
|
end
|
|
116
121
|
end
|
|
117
|
-
|
|
122
|
+
|
|
118
123
|
#
|
|
119
124
|
# The read_data method returns a two element array with the new reader cursor (a sequence number)
|
|
120
125
|
# and the returned data buffer (if any). A result of nil/nil indicates that no data is available
|
|
121
126
|
#
|
|
122
127
|
def read_data(ptr=nil)
|
|
123
128
|
self.mutex.synchronize do
|
|
124
|
-
|
|
129
|
+
|
|
125
130
|
# Verify that there is data in the queue
|
|
126
131
|
return [nil,nil] if not self.queue[self.beg]
|
|
127
|
-
|
|
132
|
+
|
|
128
133
|
# Configure the beginning read pointer (sequence number, not index)
|
|
129
134
|
ptr ||= self.queue[self.beg][0]
|
|
130
135
|
return [nil,nil] if not ptr
|
|
131
|
-
|
|
136
|
+
|
|
132
137
|
# If the pointer is below our baseline, we lost some data, so jump forward
|
|
133
138
|
if ptr < self.queue[self.beg][0]
|
|
134
139
|
ptr = self.queue[self.beg][0]
|
|
135
140
|
end
|
|
136
|
-
|
|
141
|
+
|
|
137
142
|
# Calculate how many blocks exist between the current sequence number
|
|
138
143
|
# and the requested pointer, this becomes the number of blocks we will
|
|
139
144
|
# need to read to satisfy the result. Due to the mutex block, we do
|
|
140
|
-
# not need to scan to find the sequence of the starting block or
|
|
145
|
+
# not need to scan to find the sequence of the starting block or
|
|
141
146
|
# check the sequence of the ending block.
|
|
142
147
|
dis = self.seq - ptr
|
|
143
148
|
|
|
@@ -148,8 +153,8 @@ class RingBuffer
|
|
|
148
153
|
# Calculate the beginning block index and number of blocks to read
|
|
149
154
|
off = ptr - self.queue[self.beg][0]
|
|
150
155
|
set = (self.beg + off) % self.size
|
|
151
|
-
|
|
152
|
-
|
|
156
|
+
|
|
157
|
+
|
|
153
158
|
# Build the buffer by reading forward by the number of blocks needed
|
|
154
159
|
# and return the last read sequence number, plus one, as the new read
|
|
155
160
|
# pointer.
|
|
@@ -162,12 +167,12 @@ class RingBuffer
|
|
|
162
167
|
buff += data
|
|
163
168
|
cnt += 1
|
|
164
169
|
end
|
|
165
|
-
|
|
170
|
+
|
|
166
171
|
return [lst + 1, buff]
|
|
167
|
-
|
|
172
|
+
|
|
168
173
|
end
|
|
169
174
|
end
|
|
170
|
-
|
|
175
|
+
|
|
171
176
|
#
|
|
172
177
|
# The base_sequence method returns the earliest sequence number in the queue. This is zero until
|
|
173
178
|
# all slots are filled and the ring rotates.
|
|
@@ -178,22 +183,22 @@ class RingBuffer
|
|
|
178
183
|
return self.queue[self.beg][0]
|
|
179
184
|
end
|
|
180
185
|
end
|
|
181
|
-
|
|
186
|
+
|
|
182
187
|
#
|
|
183
188
|
# The last_sequence method returns the "next" sequence number where new data will be
|
|
184
|
-
# available.
|
|
189
|
+
# available.
|
|
185
190
|
#
|
|
186
191
|
def last_sequence
|
|
187
192
|
self.seq
|
|
188
193
|
end
|
|
189
|
-
|
|
194
|
+
|
|
190
195
|
#
|
|
191
196
|
# The create_steam method assigns a IO::Socket compatible object to the ringer buffer
|
|
192
197
|
#
|
|
193
198
|
def create_stream
|
|
194
199
|
Stream.new(self)
|
|
195
200
|
end
|
|
196
|
-
|
|
201
|
+
|
|
197
202
|
#
|
|
198
203
|
# The select method returns when there is a chance of new data
|
|
199
204
|
# XXX: This is mostly useless and requires a rewrite to use a
|
|
@@ -202,7 +207,7 @@ class RingBuffer
|
|
|
202
207
|
def select
|
|
203
208
|
::IO.select([ self.fd ], nil, [ self.fd ], 0.10)
|
|
204
209
|
end
|
|
205
|
-
|
|
210
|
+
|
|
206
211
|
#
|
|
207
212
|
# The wait method blocks until new data is available
|
|
208
213
|
#
|
|
@@ -213,7 +218,7 @@ class RingBuffer
|
|
|
213
218
|
select
|
|
214
219
|
end
|
|
215
220
|
end
|
|
216
|
-
|
|
221
|
+
|
|
217
222
|
#
|
|
218
223
|
# The wait_for method blocks until new data is available or the timeout is reached
|
|
219
224
|
#
|
|
@@ -225,7 +230,7 @@ class RingBuffer
|
|
|
225
230
|
rescue ::Timeout::Error
|
|
226
231
|
end
|
|
227
232
|
end
|
|
228
|
-
|
|
233
|
+
|
|
229
234
|
#
|
|
230
235
|
# This class provides a backwards compatible "stream" socket that uses
|
|
231
236
|
# the parents ring buffer.
|
|
@@ -234,13 +239,13 @@ class RingBuffer
|
|
|
234
239
|
attr_accessor :ring
|
|
235
240
|
attr_accessor :seq
|
|
236
241
|
attr_accessor :buff
|
|
237
|
-
|
|
242
|
+
|
|
238
243
|
def initialize(ring)
|
|
239
244
|
self.ring = ring
|
|
240
245
|
self.seq = ring.base_sequence
|
|
241
246
|
self.buff = ''
|
|
242
247
|
end
|
|
243
|
-
|
|
248
|
+
|
|
244
249
|
def read(len=nil)
|
|
245
250
|
if len and self.buff.length >= len
|
|
246
251
|
data = self.buff.slice!(0,len)
|
|
@@ -250,7 +255,7 @@ class RingBuffer
|
|
|
250
255
|
while true
|
|
251
256
|
lseq, data = self.ring.read_data( self.seq )
|
|
252
257
|
return if not lseq
|
|
253
|
-
|
|
258
|
+
|
|
254
259
|
self.seq = lseq
|
|
255
260
|
self.buff << data
|
|
256
261
|
if len
|
|
@@ -261,23 +266,23 @@ class RingBuffer
|
|
|
261
266
|
next
|
|
262
267
|
end
|
|
263
268
|
end
|
|
264
|
-
|
|
269
|
+
|
|
265
270
|
data = self.buff
|
|
266
271
|
self.buff = ''
|
|
267
|
-
|
|
272
|
+
|
|
268
273
|
return data
|
|
269
|
-
|
|
274
|
+
|
|
270
275
|
# Not reached
|
|
271
276
|
break
|
|
272
277
|
end
|
|
273
|
-
|
|
278
|
+
|
|
274
279
|
end
|
|
275
|
-
|
|
280
|
+
|
|
276
281
|
def write(data)
|
|
277
282
|
self.ring.write(data)
|
|
278
283
|
end
|
|
279
284
|
end
|
|
280
|
-
|
|
285
|
+
|
|
281
286
|
end
|
|
282
287
|
|
|
283
288
|
end
|
|
@@ -312,7 +317,7 @@ s,d = r.read_data(s)
|
|
|
312
317
|
|
|
313
318
|
test_counter = 11
|
|
314
319
|
1.upto(100) do
|
|
315
|
-
client.put( "X" )
|
|
320
|
+
client.put( "X" )
|
|
316
321
|
test_counter += 1
|
|
317
322
|
end
|
|
318
323
|
|