Method: OpenC3::HttpClientInterface#convert_data_to_packet

Defined in:
lib/openc3/interfaces/http_client_interface.rb

#convert_data_to_packet(data, extra = nil) ⇒ Packet

Called to convert the read data into a OpenC3 Packet object

Parameters:

  • data (String)

    Raw packet data

  • extra (Hash) (defaults to: nil)

    Contains the following keys: HTTP_HEADERS - Hash of response headers HTTP_STATUS - Integer response status code HTTP_REQUEST - [data, extra]

    where data is the request data and extra contains:
      HTTP_REQUEST_TARGET_NAME - String request target name
      HTTP_URI - String request URI based on HTTP_PATH
      HTTP_PATH - String request path
      HTTP_METHOD - String request method
      HTTP_PACKET - String response packet name
      HTTP_ERROR_PACKET - Optional string error packet name
      HTTP_QUERIES - Optional hash of request queries
      HTTP_HEADERS - Optional hash of request headers
    

Returns:

  • (Packet)

    OpenC3 Packet with buffer filled with data



205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'lib/openc3/interfaces/http_client_interface.rb', line 205

def convert_data_to_packet(data, extra = nil)
  packet = Packet.new(nil, nil, :BIG_ENDIAN, nil, data.to_s)
  packet.accessor = HttpAccessor.new(packet)
  # Grab the request extra set in the write_interface method
  request_extra = extra['HTTP_REQUEST'][1] if extra and extra['HTTP_REQUEST']
  if request_extra
    # Identify the response target
    request_target_name = request_extra['HTTP_REQUEST_TARGET_NAME']
    if request_target_name
      request_target_name = request_target_name.to_s.upcase
      response_packet_name = request_extra['HTTP_PACKET']
      error_packet_name = request_extra['HTTP_ERROR_PACKET']
      # HTTP_STATUS was set in the base extra
      status = extra['HTTP_STATUS'].to_i
      if status >= 300 and error_packet_name
        # Handle error special case response packet
        packet.target_name = request_target_name
        packet.packet_name = error_packet_name.to_s.upcase
      else
        if response_packet_name
          packet.target_name = request_target_name
          packet.packet_name = response_packet_name.to_s.upcase
        end
      end
    end
    unless @include_request_in_response
      extra.delete("HTTP_REQUEST")
    end
  end
  packet.extra = extra
  return packet
end