Changeset 47dbbb940a7211caebac367f2a0fc05c278f6f8b

Show
Ignore:
Timestamp:
03/07/10 13:42:44 (5 months ago)
Author:
Nedko Arnaudov <nedko@…>
Children:
e154c89ce313738b3356c116c83148b5b3044ce2
Parents:
c2f277228ed93d3377c520fa75ba53e51c484254
git-committer:
Nedko Arnaudov <nedko@arnaudov.name> / 2010-03-07T13:42:44Z+0200
Message:

sane helper for sending signals with complex parameters

  • expose dbus_signal_send()
  • dbus_signal_emit() is lame for complex parameters because path, interface and name function parameters are unused
Location:
dbus
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • dbus/signal.c

    r5f832c86 r47dbbb9  
    33 * LADI Session Handler (ladish) 
    44 * 
    5  * Copyright (C) 2009 Nedko Arnaudov <nedko@arnaudov.name> 
     5 * Copyright (C) 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name> 
    66 * Copyright (C) 2008 Juuso Alasuutari <juuso.alasuutari@gmail.com> 
    77 * 
     
    3232#include "helpers.h" 
    3333 
    34 static void dbus_signal_send(DBusConnection * connection_ptr, DBusMessage * message_ptr) 
     34void dbus_signal_send(DBusConnection * connection_ptr, DBusMessage * message_ptr) 
    3535{ 
    3636  if (!dbus_connection_send(connection_ptr, message_ptr, NULL)) 
     
    6262  va_start(ap, signature); 
    6363 
    64   if (signature != NULL) 
     64  ASSERT(signature != NULL); 
     65 
     66  if (!dbus_signature_validate(signature, NULL)) 
    6567  { 
    66     if (!dbus_signature_validate(signature, NULL)) 
     68    log_error("signature '%s' is invalid", signature); 
     69    goto exit; 
     70  } 
     71 
     72  dbus_signature_iter_init(&sig_iter, signature); 
     73 
     74  message_ptr = dbus_message_new_signal(path, interface, name); 
     75  if (message_ptr == NULL) 
     76  { 
     77    log_error("dbus_message_new_signal() failed."); 
     78    goto exit; 
     79  } 
     80 
     81  dbus_message_iter_init_append(message_ptr, &iter); 
     82 
     83  while (*signature != '\0') 
     84  { 
     85    type = dbus_signature_iter_get_current_type(&sig_iter); 
     86    if (!dbus_type_is_basic(type)) 
    6787    { 
    68       log_error("signature '%s' is invalid", signature); 
    69       goto exit; 
     88      log_error("non-basic input parameter '%c' (%d)", *signature, type); 
     89      goto unref; 
    7090    } 
    7191 
    72     dbus_signature_iter_init(&sig_iter, signature); 
     92    parameter_ptr = va_arg(ap, void *); 
    7393 
    74     message_ptr = dbus_message_new_signal(path, interface, name); 
    75     if (message_ptr == NULL) 
     94    if (!dbus_message_iter_append_basic(&iter, type, parameter_ptr)) 
    7695    { 
    77       log_error("dbus_message_new_signal() failed."); 
    78       goto exit; 
     96      log_error("dbus_message_iter_append_basic() failed."); 
     97      goto unref; 
    7998    } 
    8099 
    81     dbus_message_iter_init_append(message_ptr, &iter); 
     100    dbus_signature_iter_next(&sig_iter); 
     101    signature++; 
     102  } 
    82103 
    83     while (*signature != '\0') 
    84     { 
    85       type = dbus_signature_iter_get_current_type(&sig_iter); 
    86       if (!dbus_type_is_basic(type)) 
    87       { 
    88         log_error("non-basic input parameter '%c' (%d)", *signature, type); 
    89         goto unref; 
    90       } 
     104  dbus_signal_send(connection_ptr, message_ptr); 
    91105 
    92       parameter_ptr = va_arg(ap, void *); 
    93  
    94       if (!dbus_message_iter_append_basic(&iter, type, parameter_ptr)) 
    95       { 
    96         log_error("dbus_message_iter_append_basic() failed."); 
    97         goto unref; 
    98       } 
    99  
    100       dbus_signature_iter_next(&sig_iter); 
    101       signature++; 
    102     } 
    103  
    104     dbus_signal_send(connection_ptr, message_ptr); 
    105  
    106   unref: 
    107     dbus_message_unref(message_ptr); 
    108   } 
    109   else 
    110   { 
    111     message_ptr = va_arg(ap, DBusMessage *); 
    112     dbus_signal_send(connection_ptr, message_ptr); 
    113   } 
     106unref: 
     107  dbus_message_unref(message_ptr); 
    114108 
    115109exit: 
  • dbus/signal.h

    r9290a15 r47dbbb9  
    33 * LADI Session Handler (ladish) 
    44 * 
    5  * Copyright (C) 2008, 2009 Nedko Arnaudov <nedko@arnaudov.name> 
     5 * Copyright (C) 2008, 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name> 
    66 * Copyright (C) 2008 Juuso Alasuutari <juuso.alasuutari@gmail.com> 
    77 * 
     
    4242  const struct dbus_signal_arg_descriptor * args; 
    4343}; 
     44 
     45void dbus_signal_send(DBusConnection * connection_ptr, DBusMessage * message_ptr); 
    4446 
    4547void