![]() |
Skeleton object is used for indicated message object, in particular, EasyDbus_reply_msg, EasyDbus_signal or EasyDbus_method.
Functions | |
int | easydbus_build_skeleton_data (DBusMessage *msg, enum event_type type, void *container) |
Create skeleton object from DBusMessage. |
int easydbus_build_skeleton_data | ( | DBusMessage * | msg, | |
enum event_type | type, | |||
void * | container | |||
) |
Create skeleton object from DBusMessage.
For internal use only.
-1 error
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 }