Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

UNIX_FD in practice?

Abierto
#107 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
32/100
Tipo de issue
Error
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
ruby

Línea de trabajo

Start at the DBus::Object NewConnection declaration and the RegisterProfile call shown in the issue, then reproduce the Bluetooth connection while watching the dbus monitor output. Trace why the method call containing a file descriptor is rejected before the callback runs; done means the callback receives the descriptor without the NotSupported error.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Heya!

I'm using ruby-dbus to attempt a Bluetooth serial profile callback, and I'm
running into a "Tried to send message with Unix file descriptors to a client that
doesn't support that." error message from dbus.

It's entirely possible I'm defining the callback incorrectly, but I think that's
correct. Example profile definition and registration (as defined here)

class SerialConnection < DBus::Object
    dbus_interface( 'org.bluez.Profile1' ) do

        dbus_method( :Release ) do
            puts "... release"
            nil
        end

        dbus_method( :NewConnection, "in device:o, in fd:h, in fd_props:a{sv}" ) do |device, fd, fd_props|
            puts "... incoming connection %p %p %p" % [ device, fd, fd_props ]
                    # sock = Socket.for_fd( fd )
                    # ...
            nil
        end

        dbus_method( :RequestDisconnection, "in device:o" ) do |device|
            puts "... disconnect"
            nil
        end
    end
end


serial_conn = SerialConnection.new( '/serial/connection' )

bluez_service = DBus::SystemBus.instance.service( 'org.bluez' ).introspect
bluez_profile_manager = bluez_service[ '/org/bluez' ][ 'org.bluez.ProfileManager1' ]

bluez_profile_manager.RegisterProfile( serial_conn.path, '1101', {
    'Name'    => 'Serial Port',
    'Role'    => 'server',
    'RequireAuthorization' => false,
    'Channel' => DBus.variant( 'q', 22 )
});

# ... enter dbus main loop here

When an RFCOMM compatible client connects, the dbus monitor shows it disconnect
immediately (the callback doesn't fire at all).

signal time=1649451498.238931 sender=:1.2 -> destination=(null destination) serial=870 path=/org/bluez/hci0/dev_0C_8D_CA_99_D7_E7; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
   string "org.bluez.Device1"
   array [
      dict entry(
         string "Connected"
         variant             boolean true
      )
   ]
   array [
   ]
method call time=1649451498.709483 sender=:1.2 -> destination=:1.73 serial=871 path=/serial/connection; interface=org.bluez.Profile1; member=NewConnection
   object path "/org/bluez/hci0/dev_0C_8D_CA_99_D7_E7"
   file descriptor
         inode: 72836         type: socket
         address family: bluetooth
   array [
   ]
error time=1649451498.709751 sender=org.freedesktop.DBus -> destination=:1.2 error_name=org.freedesktop.DBus.Error.NotSupported reply_serial=871
   string "Tried to send message with Unix file descriptorsto a client that doesn't support that."
signal time=1649451503.316416 sender=:1.2 -> destination=(null destination) serial=872 path=/org/bluez/hci0/dev_0C_8D_CA_99_D7_E7; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
   string "org.bluez.Device1"
   array [
      dict entry(
         string "Connected"
         variant             boolean false
      )
   ]
   array [
   ]

It seems like it's complaining specifically about the second argument to the
NewConnection method.

   file descriptor
         inode: 72836         type: socket
         address family: bluetooth

Is there a different path I should be taking to tackle this?

Thanks for any insight provided.

Lenguaje dominante
Ruby
Estrellas
174
Forks
51
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de mvidner/ruby-dbus

Todos los issues de mvidner/ruby-dbus

Issues similares

Más issues de Ruby

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.