CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
rapid7

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

GitHub Repository: rapid7/metasploit-framework
Path: blob/master/external/serialport/README.msf
Views: 11701
Due to the ruby-serialport project provided by RubyForge.org apparently
being unmaintained, this is a MSF-specific fork of that project.  This
version has been modified by both MSF developers as well as by applying
a patch found submitted to the RubyForge project but never included in
the distribution provided there.  The versioning scheme has been updated
from the format X.y, to X.Y.z-msf.  The text accompanying the applied
patch can be found below.

Please see the README.orig file for the original project's README, which
includes buid and install instructions as well as documentation of the
SerialPort Class API.

                                                -- I)ruid

########################################################################
Applied Patches:

========================================================================
[#878] Six new methods (implemented for the posix flavor only) for the 
SerialPort class

I had to use the SerialPort class to communicate chunks of binary data
through the serial port, and i needed to set some of the low-level
flags onto the serial fd using fcntl() and tcsetattr(), so I implemented
some nifty methods and added them to the class.

The six new methods are:

.nonblock= and .nonblock()       -> Manipulate the O_NONBLOCK descriptor flag
.input_type= and .input_type()   -> Manipulate the ICANON/RAW input flags
.output_type= and .output_type() -> Manipulate the OPOST/RAW output flags

Also two new constants were added:

SerialPort::PROCESSED            -> Identifies the CANONICAL/PROCESSED I/O
SerialPort::RAW                  -> Identifies the RAW/RAW I/O

Example usage:

	def open_port
		ret = SerialPort.new @device

		ret.baud = @port_baud
		ret.data_bits = @port_data_bits
		ret.stop_bits = @port_stop_bits
		ret.parity = SerialPort::NONE
		ret.flow_control = SerialPort::HARD
		ret.input_type = SerialPort::RAW
		ret.output_type = SerialPort::RAW
		ret.read_timeout = -1
		ret.nonblock = false
		ret.dtr = 1

		ret
	end

This was the best setup for modem communications I could achieve, for
binary and string I/O, in a multithreaded application.  Obviously YMMV.

-void
[email protected]