1d012387afef0ba02185ebe27bc6bb15551912e92Havoc Pennington/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington/* dbus-print-message.h Utility function to print out a message 3306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * 4306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * Copyright (C) 2003 Philip Blundell <philb@gnu.org> 5306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * Copyright (C) 2003 Red Hat, Inc. 6306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * 7306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * This program is free software; you can redistribute it and/or modify 8306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * it under the terms of the GNU General Public License as published by 9306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * the Free Software Foundation; either version 2 of the License, or 10306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * (at your option) any later version. 11306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * 12306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * This program is distributed in the hope that it will be useful, 13306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of 14306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * GNU General Public License for more details. 16306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * 17306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * You should have received a copy of the GNU General Public License 18306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * along with this program; if not, write to the Free Software 195baf2f856a9c6625993234855b07680da1c8916fTobias Mueller * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington * 21306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington */ 22dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann 23dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann#include <config.h> 24306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington#include "dbus-print-message.h" 25306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington 2680f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson#include <stdlib.h> 27c93d3ec2ff13f31291c56f6d5d4f7a77ecdb5ea7Colin Walters#include "config.h" 2880f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 29b29ea9115ea3277354b7ccbe442026279220f4acHavoc Penningtonstatic const char* 30b29ea9115ea3277354b7ccbe442026279220f4acHavoc Penningtontype_to_name (int message_type) 31b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington{ 32b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington switch (message_type) 33b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington { 34b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington case DBUS_MESSAGE_TYPE_SIGNAL: 35b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington return "signal"; 36b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington case DBUS_MESSAGE_TYPE_METHOD_CALL: 37b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington return "method call"; 38b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington case DBUS_MESSAGE_TYPE_METHOD_RETURN: 39b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington return "method return"; 40b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington case DBUS_MESSAGE_TYPE_ERROR: 41b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington return "error"; 42b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington default: 43b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington return "(unknown message type)"; 44b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington } 45b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington} 46b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington 474d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson#define INDENT 3 488c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 498c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrangestatic void 508c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrangeindent (int depth) 518c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange{ 528c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange while (depth-- > 0) 534d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson printf (" "); /* INDENT spaces. */ 544d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson} 554d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 564d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompsonstatic void 5780f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompsonprint_hex (unsigned char *bytes, unsigned int len, int depth) 584d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson{ 59cd815c347a279f324e5025fcda71a16ad9b08c7dRalf Habacker unsigned int i, columns; 604d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 614d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson printf ("array of bytes [\n"); 624d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 634d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson indent (depth + 1); 644d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 654d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson /* Each byte takes 3 cells (two hexits, and a space), except the last one. */ 664d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson columns = (80 - ((depth + 1) * INDENT)) / 3; 674d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 684d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson if (columns < 8) 694d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson columns = 8; 704d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 7180f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson i = 0; 724d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 7380f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson while (i < len) 744d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson { 7580f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson printf ("%02x", bytes[i]); 7680f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson i++; 774d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 7880f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson if (i != len) 794d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson { 8080f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson if (i % columns == 0) 814d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson { 824d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson printf ("\n"); 834d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson indent (depth + 1); 844d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson } 854d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson else 864d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson { 874d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson printf (" "); 884d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson } 894d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson } 904d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson } 914d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 924d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson printf ("\n"); 934d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson indent (depth); 944d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson printf ("]\n"); 958c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange} 968c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 9780f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson#define DEFAULT_SIZE 100 9880f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 9980f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompsonstatic void 10080f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompsonprint_ay (DBusMessageIter *iter, int depth) 10180f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson{ 10280f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson /* Not using DBusString because it's not public API. It's 2009, and I'm 10380f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson * manually growing a string chunk by chunk. 10480f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson */ 10580f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson unsigned char *bytes = malloc (DEFAULT_SIZE + 1); 10680f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson unsigned int len = 0; 10780f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson unsigned int max = DEFAULT_SIZE; 10880f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson dbus_bool_t all_ascii = TRUE; 10980f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson int current_type; 11080f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 11180f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson while ((current_type = dbus_message_iter_get_arg_type (iter)) 11280f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson != DBUS_TYPE_INVALID) 11380f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson { 11480f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson unsigned char val; 11580f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 11680f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson dbus_message_iter_get_basic (iter, &val); 11780f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson bytes[len] = val; 11880f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson len++; 11980f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 12080f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson if (val < 32 || val > 126) 12180f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson all_ascii = FALSE; 12280f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 12380f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson if (len == max) 12480f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson { 12580f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson max *= 2; 12680f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson bytes = realloc (bytes, max + 1); 12780f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson } 12880f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 12980f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson dbus_message_iter_next (iter); 13080f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson } 13180f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 13280f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson if (all_ascii) 13380f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson { 13480f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson bytes[len] = '\0'; 13580f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson printf ("array of bytes \"%s\"\n", bytes); 13680f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson } 13780f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson else 13880f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson { 13980f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson print_hex (bytes, len, depth); 14080f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson } 14180f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 14280f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson free (bytes); 14380f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson} 14480f6ebfef5b51290b26b968ae0ceff9b322efd67Will Thompson 1453fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Waltersstatic void 1462ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Waltersprint_iter (DBusMessageIter *iter, dbus_bool_t literal, int depth) 1473fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters{ 1483fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters do 1493fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters { 1503fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters int type = dbus_message_iter_get_arg_type (iter); 1513fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 1523fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters if (type == DBUS_TYPE_INVALID) 1533fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters break; 1548c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 1558c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange indent(depth); 1563fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 1573fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters switch (type) 1583fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters { 1593fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters case DBUS_TYPE_STRING: 1608c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 1618c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange char *val; 1628c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 1638c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange if (!literal) 1648c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("string \""); 1658c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("%s", val); 1668c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange if (!literal) 1678c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("\"\n"); 1688c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 1698c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 1708c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 1718c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange case DBUS_TYPE_SIGNATURE: 1728c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 1738c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange char *val; 1748c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 1758c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange if (!literal) 1768c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("signature \""); 1778c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("%s", val); 1788c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange if (!literal) 1798c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("\"\n"); 1808c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 1818c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 1823fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 183fe21c24475602047bdfdfcc60485f618a48036f6Ross Burton case DBUS_TYPE_OBJECT_PATH: 1848c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 1858c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange char *val; 1868c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 1878c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange if (!literal) 1888c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("object path \""); 1898c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("%s", val); 1908c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange if (!literal) 1918c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("\"\n"); 1928c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 1938c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 194fe21c24475602047bdfdfcc60485f618a48036f6Ross Burton 1958c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange case DBUS_TYPE_INT16: 1968c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 1978c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_int16_t val; 1988c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 1998c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("int16 %d\n", val); 2008c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 2018c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 2028c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 2038c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange case DBUS_TYPE_UINT16: 2048c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 2058c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_uint16_t val; 2068c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 2078c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("uint16 %u\n", val); 2088c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 2098c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 210fe21c24475602047bdfdfcc60485f618a48036f6Ross Burton 2113fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters case DBUS_TYPE_INT32: 2128c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 2138c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_int32_t val; 2148c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 2158c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("int32 %d\n", val); 2168c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 2178c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 2183fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 2193fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters case DBUS_TYPE_UINT32: 2208c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 2218c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_uint32_t val; 2228c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 2238c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("uint32 %u\n", val); 2248c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 2258c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 2268c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 2278c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange case DBUS_TYPE_INT64: 2288c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 2298c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_int64_t val; 2308c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 231c93d3ec2ff13f31291c56f6d5d4f7a77ecdb5ea7Colin Walters#ifdef DBUS_INT64_PRINTF_MODIFIER 2323861cb42f437a9eb2b13c5c2aa4081268c45c32cColin Walters printf ("int64 %" DBUS_INT64_PRINTF_MODIFIER "d\n", val); 2333861cb42f437a9eb2b13c5c2aa4081268c45c32cColin Walters#else 2343861cb42f437a9eb2b13c5c2aa4081268c45c32cColin Walters printf ("int64 (omitted)\n"); 235c93d3ec2ff13f31291c56f6d5d4f7a77ecdb5ea7Colin Walters#endif 2368c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 2378c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 2388c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 2398c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange case DBUS_TYPE_UINT64: 2408c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 2418c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_uint64_t val; 2428c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 243c93d3ec2ff13f31291c56f6d5d4f7a77ecdb5ea7Colin Walters#ifdef DBUS_INT64_PRINTF_MODIFIER 2443861cb42f437a9eb2b13c5c2aa4081268c45c32cColin Walters printf ("uint64 %" DBUS_INT64_PRINTF_MODIFIER "u\n", val); 2453861cb42f437a9eb2b13c5c2aa4081268c45c32cColin Walters#else 2463861cb42f437a9eb2b13c5c2aa4081268c45c32cColin Walters printf ("uint64 (omitted)\n"); 247c93d3ec2ff13f31291c56f6d5d4f7a77ecdb5ea7Colin Walters#endif 2488c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 2498c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 2503fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 2513fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters case DBUS_TYPE_DOUBLE: 2528c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 2538c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange double val; 2548c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 2558c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("double %g\n", val); 2568c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 2578c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 2583fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 2593fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters case DBUS_TYPE_BYTE: 2608c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 2618c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange unsigned char val; 2628c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 2638c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("byte %d\n", val); 2648c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 2658c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 2663fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 2673fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters case DBUS_TYPE_BOOLEAN: 2688c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 2698c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_bool_t val; 2708c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_get_basic (iter, &val); 2718c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("boolean %s\n", val ? "true" : "false"); 2728c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 2738c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 2743fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 2753fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters case DBUS_TYPE_VARIANT: 2763fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters { 2773fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters DBusMessageIter subiter; 2783fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 2793fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters dbus_message_iter_recurse (iter, &subiter); 2803fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 2818c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf ("variant "); 2828c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange print_iter (&subiter, literal, depth+1); 2833fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters break; 2843fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters } 2853fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters case DBUS_TYPE_ARRAY: 2863fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters { 2873fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters int current_type; 2883fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters DBusMessageIter subiter; 2893fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 2903fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters dbus_message_iter_recurse (iter, &subiter); 2913fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 2921e14e409a48a96e0599c8f675604735ca132fc0fWill Thompson current_type = dbus_message_iter_get_arg_type (&subiter); 2931e14e409a48a96e0599c8f675604735ca132fc0fWill Thompson 2944d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson if (current_type == DBUS_TYPE_BYTE) 2954d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson { 2964d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson print_ay (&subiter, depth); 2974d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson break; 2984d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson } 2994d7968c06f30926a793a305288bd0c2a16bf90ddWill Thompson 3008c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf("array [\n"); 3011e14e409a48a96e0599c8f675604735ca132fc0fWill Thompson while (current_type != DBUS_TYPE_INVALID) 3023fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters { 3038c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange print_iter (&subiter, literal, depth+1); 3041e14e409a48a96e0599c8f675604735ca132fc0fWill Thompson 3053fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters dbus_message_iter_next (&subiter); 3061e14e409a48a96e0599c8f675604735ca132fc0fWill Thompson current_type = dbus_message_iter_get_arg_type (&subiter); 3071e14e409a48a96e0599c8f675604735ca132fc0fWill Thompson 3081e14e409a48a96e0599c8f675604735ca132fc0fWill Thompson if (current_type != DBUS_TYPE_INVALID) 3093fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters printf (","); 3103fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters } 3118c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange indent(depth); 3128c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf("]\n"); 3133fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters break; 3143fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters } 31570bd20a50e5d8d5dd5ddabf945812d881090d3f5Colin Walters case DBUS_TYPE_DICT_ENTRY: 31670bd20a50e5d8d5dd5ddabf945812d881090d3f5Colin Walters { 31770bd20a50e5d8d5dd5ddabf945812d881090d3f5Colin Walters DBusMessageIter subiter; 31870bd20a50e5d8d5dd5ddabf945812d881090d3f5Colin Walters 31970bd20a50e5d8d5dd5ddabf945812d881090d3f5Colin Walters dbus_message_iter_recurse (iter, &subiter); 32070bd20a50e5d8d5dd5ddabf945812d881090d3f5Colin Walters 3218c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf("dict entry(\n"); 3228c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange print_iter (&subiter, literal, depth+1); 32370bd20a50e5d8d5dd5ddabf945812d881090d3f5Colin Walters dbus_message_iter_next (&subiter); 3248c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange print_iter (&subiter, literal, depth+1); 3258c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange indent(depth); 3268c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf(")\n"); 3278c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange break; 3288c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 3298c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 3308c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange case DBUS_TYPE_STRUCT: 3318c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 3328c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange int current_type; 3338c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange DBusMessageIter subiter; 3348c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 3358c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_recurse (iter, &subiter); 3368c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange 3378c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf("struct {\n"); 3388c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID) 3398c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange { 3408c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange print_iter (&subiter, literal, depth+1); 3418c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange dbus_message_iter_next (&subiter); 3428c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange if (dbus_message_iter_get_arg_type (&subiter) != DBUS_TYPE_INVALID) 3438c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf (","); 3448c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange } 3458c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange indent(depth); 3468c09e5e06c3e80d8795b3076504c08589cd2407dDaniel P. Berrange printf("}\n"); 34770bd20a50e5d8d5dd5ddabf945812d881090d3f5Colin Walters break; 34870bd20a50e5d8d5dd5ddabf945812d881090d3f5Colin Walters } 3493fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 3503fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters default: 3513fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters printf (" (dbus-monitor too dumb to decipher arg type '%c')\n", type); 3523fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters break; 3533fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters } 3543fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters } while (dbus_message_iter_next (iter)); 3553fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters} 3563fa4c2f4044bc06a9ce166a4f44d7b0a54ed4843Colin Walters 357306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Penningtonvoid 3582ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Waltersprint_message (DBusMessage *message, dbus_bool_t literal) 359306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington{ 360306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington DBusMessageIter iter; 361306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington const char *sender; 36298ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington const char *destination; 363b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington int message_type; 364306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington 365b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington message_type = dbus_message_get_type (message); 36698ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington sender = dbus_message_get_sender (message); 36798ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington destination = dbus_message_get_destination (message); 3682ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters 3692ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters if (!literal) 37068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { 3712ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters printf ("%s sender=%s -> dest=%s", 3722ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters type_to_name (message_type), 3732ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters sender ? sender : "(null sender)", 3742ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters destination ? destination : "(null destination)"); 3752ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters 3762ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters switch (message_type) 3772ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters { 3782ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters case DBUS_MESSAGE_TYPE_METHOD_CALL: 3792ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters case DBUS_MESSAGE_TYPE_SIGNAL: 3801859c66351285de313d1ccd2540e9d71aaf768a3Michael Meeks printf (" serial=%u path=%s; interface=%s; member=%s\n", 3811859c66351285de313d1ccd2540e9d71aaf768a3Michael Meeks dbus_message_get_serial (message), 382c07a6249e21947f3831e1d8a98cedb17364e10c5Ross Burton dbus_message_get_path (message), 3832ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters dbus_message_get_interface (message), 3842ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters dbus_message_get_member (message)); 3852ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters break; 38668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 3872ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters case DBUS_MESSAGE_TYPE_METHOD_RETURN: 388af4e4dc276dacde120a00952344dedc3976009dbRalf Habacker printf (" reply_serial=%u\n", 389af4e4dc276dacde120a00952344dedc3976009dbRalf Habacker dbus_message_get_reply_serial (message)); 3902ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters break; 39168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 3922ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters case DBUS_MESSAGE_TYPE_ERROR: 393af4e4dc276dacde120a00952344dedc3976009dbRalf Habacker printf (" error_name=%s reply_serial=%u\n", 394af4e4dc276dacde120a00952344dedc3976009dbRalf Habacker dbus_message_get_error_name (message), 395af4e4dc276dacde120a00952344dedc3976009dbRalf Habacker dbus_message_get_reply_serial (message)); 3962ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters break; 39768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 3982ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters default: 3992ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters printf ("\n"); 4002ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters break; 4012ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters } 40268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington } 403306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington 40498ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington dbus_message_iter_init (message, &iter); 4052ca6e95764dc3491458dcf077ce77cbbabf00ddfColin Walters print_iter (&iter, literal, 1); 406b2d215da3876838b4b0f882890fd40199e67a4b9Colin Walters fflush (stdout); 40798ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington 408306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington} 409306eab3e3d998472ad111146a12b7697ea96c9b9Havoc Pennington 410