Module: Proj::NetworkApiCallbacks

Included in:
NetworkApiImpl
Defined in:
lib/proj/network_api.rb

Instance Method Summary collapse

Instance Method Details

#close_callback(context, handle, user_data) ⇒ Object



29
30
31
# File 'lib/proj/network_api.rb', line 29

def close_callback(context, handle, user_data)
  self.close
end

#header_value_callback(context, handle, header_name_ptr, user_data) ⇒ Object



33
34
35
36
37
# File 'lib/proj/network_api.rb', line 33

def header_value_callback(context, handle, header_name_ptr, user_data)
  header_name = header_name_ptr.read_string_to_null
  value = self.header_value(header_name)
  FFI::MemoryPointer.from_string(value)
end

#install_callbacks(context) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/proj/network_api.rb', line 5

def install_callbacks(context)
  @open_cbk = self.method(:open_callback)
  @close_cbk = self.method(:close_callback)
  @header_value_cbk = self.method(:header_value_callback)
  @read_range_cbk = self.method(:read_range_callback)

  result = Api.proj_context_set_network_callbacks(context, @open_cbk, @close_cbk, @header_value_cbk, @read_range_cbk, nil)

  if result != 1
    Error.check_object(self)
  end
end

#open_callback(context, url, offset, size_to_read, buffer, out_size_read, error_string_max_size, out_error_string, user_data) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/proj/network_api.rb', line 18

def open_callback(context, url, offset, size_to_read, buffer, out_size_read, error_string_max_size, out_error_string, user_data)
  uri = URI.parse(url)
  data = self.open(uri, offset, size_to_read)
  out_size = [size_to_read, data.size].min
  out_size_read.write(:size_t, out_size)
  buffer.write_bytes(data, 0, out_size)

  # Return fake handle
  FFI::MemoryPointer.new(:size_t)
end

#read_range_callback(context, handle, offset, size_to_read, buffer, error_string_max_size, out_error_string, user_data) ⇒ Object



39
40
41
42
43
44
# File 'lib/proj/network_api.rb', line 39

def read_range_callback(context, handle, offset, size_to_read, buffer, error_string_max_size, out_error_string, user_data)
  data = self.read_range(offset, size_to_read)
  out_size = [size_to_read, data.size].min
  buffer.write_bytes(data, 0, out_size)
  out_size
end