skeleton_internal
[data_internal]

Collaboration diagram for skeleton_internal:

Detailed Description

Module for manage EasyDbus skeleton objects Internals.

Skeleton object is used for indicated message object, in particular, EasyDbus_reply_msg, EasyDbus_signal or EasyDbus_method.

Skeleton Meta Information

Contact:
Daniele Rondina aka Ge@@ru <geaaru@gmail.com>
Status:
EasyDbus Core Library
License:
GPL
Contributor(s):


Functions

int easydbus_build_skeleton_data (DBusMessage *msg, enum event_type type, void *container)
 Create skeleton object from DBusMessage.


Function Documentation

int easydbus_build_skeleton_data ( DBusMessage *  msg,
enum event_type  type,
void *  container 
)

Create skeleton object from DBusMessage.

For internal use only.

Returns:
0 ok

-1 error

Todo:
  • manage error correctly
  • see in what group insert this function

Definition at line 557 of file skeleton.c.

References easydbus_add_array_param_to_skeleton(), easydbus_add_boolean_param_to_skeleton(), easydbus_add_byte_param_to_skeleton(), easydbus_add_double_param_to_skeleton(), easydbus_add_i16_param_to_skeleton(), easydbus_add_i32_param_to_skeleton(), easydbus_add_i64_param_to_skeleton(), easydbus_add_obj_path_param_to_skeleton(), easydbus_add_signature_param_to_skeleton(), easydbus_add_string_param_to_skeleton(), easydbus_add_struct_param_to_skeleton(), easydbus_add_ui16_param_to_skeleton(), easydbus_add_ui32_param_to_skeleton(), easydbus_add_ui64_param_to_skeleton(), easydbus_add_variant_param_to_skeleton(), easydbus_get_marshal_data_from_array(), easydbus_struct_build_elem(), easydbus_variant_build_elem(), EasyDbusDebug, and EasyDbus_container::signature.

Referenced by easydbus_error_handler(), easydbus_method_build_skeleton(), easydbus_pending_msg_handler(), easydbus_reply_build_struct(), easydbus_reply_handler(), easydbus_signal_build_skeleton(), and easydbus_watch_signal_blocking().

00559 {
00560    char *string = NULL;
00561    int i32 = 0;
00562    unsigned int ui32 = 0;
00563    short i16 = 0;
00564    char byte = 0;
00565    unsigned short ui16 = 0;
00566    long long i64 = 0;
00567    double d = 0;
00568    unsigned long long ui64 = 0;
00569    DBusMessageIter iter;
00570    struct EasyDbus_container *cont_marshal_data = NULL;
00571 
00572 #ifdef EASYDBUS_DEBUG
00573    char *signature = NULL;
00574 #endif
00575 
00576    dbus_message_iter_init (msg, &iter);
00577 
00578    while (1) {
00579 #ifdef EASYDBUS_DEBUG
00580       signature = dbus_message_iter_get_signature (&iter);
00581       EasyDbusDebug ("Current Signature = %s", signature);
00582       dbus_free (signature);
00583 #endif
00584       switch (dbus_message_iter_get_arg_type (&iter)) {
00585          case DBUS_TYPE_STRING:
00586             dbus_message_iter_get_basic (&iter, &string);
00587             EasyDbusDebug ("founded string = %s\n", string);
00588             easydbus_add_string_param_to_skeleton (type,
00589                                                    (void *) container,
00590                                                    string);
00591             break;
00592          case DBUS_TYPE_INT32:
00593             dbus_message_iter_get_basic (&iter, &i32);
00594             EasyDbusDebug ("founded int32 = %d", i32);
00595             easydbus_add_i32_param_to_skeleton (type,
00596                                                 (void *) container,
00597                                                 i32);
00598             break;
00599          case DBUS_TYPE_UINT32:
00600             dbus_message_iter_get_basic (&iter, &ui32);
00601             EasyDbusDebug ("founded uint32 = %d", ui32);
00602             easydbus_add_ui32_param_to_skeleton (type,
00603                                                  (void *) container,
00604                                                  ui32);
00605             break;
00606          case DBUS_TYPE_INT16:
00607             dbus_message_iter_get_basic (&iter, &i16);
00608             EasyDbusDebug ("founded int16 = %d", i16);
00609             easydbus_add_i16_param_to_skeleton (type,
00610                                                 (void *) container,
00611                                                 i16);
00612             break;
00613          case DBUS_TYPE_UINT16:
00614             dbus_message_iter_get_basic (&iter, &ui16);
00615             EasyDbusDebug ("founded uint16 = %d", ui16);
00616             easydbus_add_ui16_param_to_skeleton (type,
00617                                                  (void *) container,
00618                                                  ui16);
00619             break;
00620          case DBUS_TYPE_INT64:
00621             dbus_message_iter_get_basic (&iter, &i64);
00622             EasyDbusDebug ("founded int64 = %lld", i64);
00623             easydbus_add_i64_param_to_skeleton (type,
00624                                                 (void *) container,
00625                                                 i64);
00626             break;
00627          case DBUS_TYPE_UINT64:
00628             dbus_message_iter_get_basic (&iter, &ui64);
00629             EasyDbusDebug ("founded uint64 = %lld", ui64);
00630             easydbus_add_ui64_param_to_skeleton (type,
00631                                                  (void *) container,
00632                                                  ui64);
00633             break;
00634          case DBUS_TYPE_BYTE:
00635             dbus_message_iter_get_basic (&iter, &byte);
00636             EasyDbusDebug ("founded byte = %d", byte);
00637             easydbus_add_byte_param_to_skeleton (type,
00638                                                  (void *) container,
00639                                                  byte);
00640             break;
00641          case DBUS_TYPE_BOOLEAN:
00642             dbus_message_iter_get_basic (&iter, &byte);
00643             EasyDbusDebug ("founded boolean = %d", byte);
00644             easydbus_add_boolean_param_to_skeleton (type,
00645                                                     (void *) container,
00646                                                     byte);
00647             break;
00648          case DBUS_TYPE_DOUBLE:
00649             dbus_message_iter_get_basic (&iter, &d);
00650             EasyDbusDebug ("founded double = %f", d);
00651             easydbus_add_double_param_to_skeleton (type,
00652                                                    (void *) container, d);
00653             break;
00654          case DBUS_TYPE_OBJECT_PATH:
00655             dbus_message_iter_get_basic (&iter, &string);
00656             EasyDbusDebug ("founded obj_path = %s\n", string);
00657             easydbus_add_obj_path_param_to_skeleton (type,
00658                                                      (void *) container,
00659                                                      string);
00660             break;
00661          case DBUS_TYPE_SIGNATURE:
00662             dbus_message_iter_get_basic (&iter, &string);
00663             EasyDbusDebug ("founded signature = %s\n", string);
00664             easydbus_add_signature_param_to_skeleton (type,
00665                                                       (void *) container,
00666                                                       string);
00667             break;
00668          case DBUS_TYPE_ARRAY:
00669             cont_marshal_data =
00670                easydbus_get_marshal_data_from_array (type,
00671                                                      container,
00672                                                      dbus_message_iter_get_element_type
00673                                                      (&iter), &iter);
00674             if (cont_marshal_data) {
00675                easydbus_add_array_param_to_skeleton (type,
00676                                                      container,
00677                                                      cont_marshal_data);
00678                EasyDbusDebug ("Added array to container");
00679             }
00680             else
00681                EasyDbusDebug ("Error on manage array");
00682             break;
00683          case DBUS_TYPE_VARIANT:
00684             cont_marshal_data = easydbus_variant_build_elem
00685                (type, (void *) container, &iter);
00686             if (cont_marshal_data) {
00687                easydbus_add_variant_param_to_skeleton (type,
00688                                                        container,
00689                                                        cont_marshal_data);
00690                EasyDbusDebug ("Added variant to container");
00691             }
00692             else
00693                EasyDbusDebug ("Error on add variant to container");
00694             break;
00695          case DBUS_TYPE_DICT_ENTRY:
00696             // dict entry can be inserted only on an array
00697             goto error;
00698             break;
00699          case DBUS_TYPE_STRUCT:
00700             cont_marshal_data = easydbus_struct_build_elem
00701                (type, container, &iter);
00702             if (cont_marshal_data) {
00703                easydbus_add_struct_param_to_skeleton (type,
00704                                                       container,
00705                                                       cont_marshal_data);
00706                EasyDbusDebug ("Added struct to container");
00707             }
00708             else
00709                EasyDbusDebug ("Error on add struct to container");
00710             break;
00711       }
00712       if (dbus_message_iter_has_next (&iter))
00713          dbus_message_iter_next (&iter);
00714       else
00715          goto exit;
00716    }
00717  exit:
00718    return 0;
00719  error:
00720    return -1;
00721 }

Here is the call graph for this function:


Generated on Thu Apr 10 10:01:25 2008 for EasyDbus-0.2 by  doxygen 1.5.4