class WinRM::PSRP::MessageFragmenter

PowerShell Remoting Protocol message fragmenter.

Constants

DEFAULT_BLOB_LENGTH

Attributes

max_blob_length[RW]
object_id[R]

Public Class Methods

new(max_blob_length = DEFAULT_BLOB_LENGTH) click to toggle source
# File lib/winrm/psrp/message_fragmenter.rb, line 24
def initialize(max_blob_length = DEFAULT_BLOB_LENGTH)
  @object_id = 0
  @max_blob_length = max_blob_length || DEFAULT_BLOB_LENGTH
end

Public Instance Methods

fragment(message) { |fragment| ... } click to toggle source
# File lib/winrm/psrp/message_fragmenter.rb, line 32
def fragment(message)
  @object_id += 1
  message_bytes = message.bytes
  bytes_fragmented = 0
  fragment_id = 0
  fragment = nil

  while bytes_fragmented < message_bytes.length
    last_byte = bytes_fragmented + max_blob_length
    last_byte = message_bytes.length if last_byte > message_bytes.length
    fragment = Fragment.new(
      object_id,
      message.bytes[bytes_fragmented..last_byte - 1],
      fragment_id,
      bytes_fragmented.zero?,
      last_byte == message_bytes.length
    )
    fragment_id += 1
    bytes_fragmented = last_byte
    yield fragment if block_given?
  end

  fragment
end