driver.c revision 85fb9ff93c91bc500b91759d044e3dfd951c7868
1aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson/* -*- mode: C; c-file-style: "gnu" -*- */ 2c414488fe62605ebda5e875fc2db05c6b3dd199fHavoc Pennington/* driver.c Bus client (driver) 3aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 451781f541094a4936d47119cd62682e0431c41e9Havoc Pennington * Copyright (C) 2003 CodeFactory AB 55b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington * Copyright (C) 2003, 2004, 2005 Red Hat, Inc. 6aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 743605a6f4e78a8c28afb4b1e924dff0301e0e95cHavoc Pennington * Licensed under the Academic Free License version 2.1 8aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 9aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * This program is free software; you can redistribute it and/or modify 10aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * it under the terms of the GNU General Public License as published by 11aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * the Free Software Foundation; either version 2 of the License, or 12aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * (at your option) any later version. 13aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 14aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * This program is distributed in the hope that it will be useful, 15aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * but WITHOUT ANY WARRANTY; without even the implied warranty of 16aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * GNU General Public License for more details. 18aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 19aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * You should have received a copy of the GNU General Public License 20aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * along with this program; if not, write to the Free Software 21aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 23aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson */ 24aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 25f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson#include "activation.h" 26aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include "connection.h" 27aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include "driver.h" 2839dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson#include "dispatch.h" 29aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include "services.h" 30a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington#include "signals.h" 3102dfd4fb3427a6afef6b9b99d39de6248a20e0cbAnders Carlsson#include "utils.h" 32aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include <dbus/dbus-string.h> 3339dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson#include <dbus/dbus-internals.h> 34aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson#include <string.h> 35aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 3629560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t bus_driver_send_welcome_message (DBusConnection *connection, 3729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *hello_message, 3829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 3929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error); 4029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 4129560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 4285f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieubus_driver_send_service_owner_changed (const char *service_name, 4385f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu const char *old_owner, 4485f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu const char *new_owner, 4585f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu BusTransaction *transaction, 4685f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu DBusError *error) 47a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson{ 4839dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson DBusMessage *message; 4929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 509c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *null_service; 5190ed1d84588a84697051e643175452c50d682eceHavoc Pennington 5290ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 539c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington 549c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington null_service = ""; 558873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington _dbus_verbose ("sending name owner changed: %s [%s -> %s]\n", 56dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington service_name, 5785f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu old_owner ? old_owner : null_service, 5885f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu new_owner ? new_owner : null_service); 593f4086f0fdd1cc7fc03585ec9f750897fb3c1d55Anders Carlsson 605fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington message = dbus_message_new_signal (DBUS_PATH_ORG_FREEDESKTOP_DBUS, 615fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS, 628873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "NameOwnerChanged"); 63b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington 6429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 6529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 6629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 6729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 6829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 6939dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 7085f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu if (!dbus_message_set_sender (message, DBUS_SERVICE_ORG_FREEDESKTOP_DBUS)) 7185f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu goto oom; 7285f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu 7385f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu if (!dbus_message_append_args (message, 749c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &service_name, 759c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, old_owner ? &old_owner : &null_service, 769c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, new_owner ? &new_owner : &null_service, 77e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 7885f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu goto oom; 7939dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 80dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_assert (dbus_message_has_signature (message, "sss")); 81dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington 82a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington retval = bus_dispatch_matches (transaction, NULL, NULL, message, error); 8329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 8429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 8529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 86a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 8785f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu oom: 88a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson dbus_message_unref (message); 8985f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu BUS_SET_OOM (error); 9085f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu return FALSE; 91a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson} 92a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 9329560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 94ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_send_service_lost (DBusConnection *connection, 9529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *service_name, 9629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 9729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 98ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 99ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *message; 100ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 10190ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 10290ed1d84588a84697051e643175452c50d682eceHavoc Pennington 1035fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington message = dbus_message_new_signal (DBUS_PATH_ORG_FREEDESKTOP_DBUS, 1045fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS, 1058873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "NameLost"); 106b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington 10729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 10829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 10929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 11029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 11129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 112ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 113b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington if (!dbus_message_set_destination (message, bus_connection_get_name (connection)) || 114b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington !dbus_message_append_args (message, 1159c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &service_name, 116e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 11729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 11829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 11929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 12029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 12129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 12229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 123777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, message)) 12429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 12529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 12629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 12729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 12829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 12929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 13029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 13129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 13229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 13329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 134ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 135ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 13629560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 137ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_send_service_acquired (DBusConnection *connection, 13829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *service_name, 13929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 14029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 141ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 142ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *message; 143ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 14490ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 14590ed1d84588a84697051e643175452c50d682eceHavoc Pennington 1465fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington message = dbus_message_new_signal (DBUS_PATH_ORG_FREEDESKTOP_DBUS, 1475fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS, 1488873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "NameAcquired"); 149c9cd648f115759176d35508e9007dc5520a0dd3fHavoc Pennington 15029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 15129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 15229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 15329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 15429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 155ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 156b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington if (!dbus_message_set_destination (message, bus_connection_get_name (connection)) || 157b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington !dbus_message_append_args (message, 1589c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &service_name, 159e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 16029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 16129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 16229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 16329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 16429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 16529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 166777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, message)) 16729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 16829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 16929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 17029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 17129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 17229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 17329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 17429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 17529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 17629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 177ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 178ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 179aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlssonstatic dbus_bool_t 1806ecc14ffabcffb69aa938a67940db48272e05046Havoc Penningtoncreate_unique_client_name (BusRegistry *registry, 1816ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington DBusString *str) 182aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 183d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* We never want to use the same unique client name twice, because 184d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * we want to guarantee that if you send a message to a given unique 185d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * name, you always get the same application. So we use two numbers 186d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * for INT_MAX * INT_MAX combinations, should be pretty safe against 187d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * wraparound. 188d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington */ 189b3bd48edfc1aab0a9dc64bfa4c380d845d218e73Havoc Pennington /* FIXME these should be in BusRegistry rather than static vars */ 190d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington static int next_major_number = 0; 191d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington static int next_minor_number = 0; 192d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington int len; 193b3bd48edfc1aab0a9dc64bfa4c380d845d218e73Havoc Pennington 194aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson len = _dbus_string_get_length (str); 195aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 196d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington while (TRUE) 197aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson { 198d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* start out with 1-0, go to 1-1, 1-2, 1-3, 199d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * up to 1-MAXINT, then 2-0, 2-1, etc. 200d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington */ 201d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (next_minor_number <= 0) 202d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington { 203d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington next_major_number += 1; 204d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington next_minor_number = 0; 205d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (next_major_number <= 0) 206d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington _dbus_assert_not_reached ("INT_MAX * INT_MAX clients were added"); 207d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington } 208d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 209d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington _dbus_assert (next_major_number > 0); 210d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington _dbus_assert (next_minor_number >= 0); 211d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 212d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* appname:MAJOR-MINOR */ 213d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 214d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (!_dbus_string_append (str, ":")) 215d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 216d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 217d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (!_dbus_string_append_int (str, next_major_number)) 218d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 219d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 22075742242000e782719bc1656f0a7da72b059e88eHavoc Pennington if (!_dbus_string_append (str, ".")) 221d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 222d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 223d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (!_dbus_string_append_int (str, next_minor_number)) 224d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 225d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 226d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington next_minor_number += 1; 227aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 228aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson /* Check if a client with the name exists */ 2296ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington if (bus_registry_lookup (registry, str) == NULL) 230aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson break; 231aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 232d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* drop the number again, try the next one. */ 233aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_string_set_length (str, len); 234aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson } 235aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 236aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson return TRUE; 237aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 238aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 23929560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 240a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlssonbus_driver_handle_hello (DBusConnection *connection, 24129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 24229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 24329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 244aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 245aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson DBusString unique_name; 246aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson BusService *service; 24729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 2486ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 249983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington BusConnections *connections; 25090ed1d84588a84697051e643175452c50d682eceHavoc Pennington 25190ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 252983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington 2531658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu if (bus_connection_is_active (connection)) 2541658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu { 2551658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu /* We already handled an Hello message for this connection. */ 2561658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu dbus_set_error (error, DBUS_ERROR_FAILED, 2571658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu "Already handled an Hello message"); 2581658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu return FALSE; 2591658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu } 2601658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu 261983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington /* Note that when these limits are exceeded we don't disconnect the 262983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * connection; we just sort of leave it hanging there until it times 263983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * out or disconnects itself or is dropped due to the max number of 264983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * incomplete connections. It's even OK if the connection wants to 265983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * retry the hello message, we support that. 266983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington */ 267983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington connections = bus_connection_get_connections (connection); 268983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington if (!bus_connections_check_limits (connections, connection, 269983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington error)) 270983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington { 271983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 272983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington return FALSE; 273983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington } 27429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 275fa05de9230d62e7c427b5313796fc6ccd4d0ff60Havoc Pennington if (!_dbus_string_init (&unique_name)) 27629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 27729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 27829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 27929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 280f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 28129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = FALSE; 2826ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 2836ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 28429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 2856ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington if (!create_unique_client_name (registry, &unique_name)) 28629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 28729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 28829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 28929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 29097ee8d189948c9f2c86464ca33f82e6daeaedc72Anders Carlsson 291e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington if (!bus_connection_complete (connection, &unique_name, error)) 29229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 293e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 29429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 29529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 29629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 29729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_set_sender (message, 29829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington bus_connection_get_name (connection))) 29929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 30029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 30129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 30229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 303d5ad082fecbbd803fd89b3574ac137b3fa964bc7Anders Carlsson 30429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!bus_driver_send_welcome_message (connection, message, transaction, error)) 30529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 30697ee8d189948c9f2c86464ca33f82e6daeaedc72Anders Carlsson 307aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson /* Create the service */ 3086ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington service = bus_registry_ensure (registry, 3096ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington &unique_name, connection, transaction, error); 31029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (service == NULL) 31129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 312ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 31329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington bus_service_set_prohibit_replacement (service, TRUE); 314aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 315a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_assert (bus_connection_is_active (connection)); 31629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 31729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 31829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out_0: 319aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_string_free (&unique_name); 32029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 321aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 322aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 32329560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 324aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlssonbus_driver_send_welcome_message (DBusConnection *connection, 32529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *hello_message, 32629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 32729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 328aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 329aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson DBusMessage *welcome; 330aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson const char *name; 33190ed1d84588a84697051e643175452c50d682eceHavoc Pennington 33290ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 333aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 334aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson name = bus_connection_get_name (connection); 335aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_assert (name != NULL); 336aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 337b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington welcome = dbus_message_new_method_return (hello_message); 33829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (welcome == NULL) 33929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 34029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 34129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 34229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 34339dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 34429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_append_args (welcome, 3459c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &name, 346e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 34729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 34829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (welcome); 34929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 35029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 35129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 35229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 3535b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _dbus_assert (dbus_message_has_signature (welcome, DBUS_TYPE_STRING_AS_STRING)); 354dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington 355777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, welcome)) 35629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 35729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (welcome); 35829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 35929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 36029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 36129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 36229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 36329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (welcome); 36429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 36529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 366aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 367aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 36829560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 369a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlssonbus_driver_handle_list_services (DBusConnection *connection, 37029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 37129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 37229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 373a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson{ 374a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson DBusMessage *reply; 37529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington int len; 376a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson char **services; 3776ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 3789c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington int i; 3799c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBusMessageIter iter; 3809c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBusMessageIter sub; 38190ed1d84588a84697051e643175452c50d682eceHavoc Pennington 38290ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 3836ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 3846ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 3856ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 386b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington reply = dbus_message_new_method_return (message); 38729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply == NULL) 38829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 38929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 39029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 39129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 392a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 3936ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington if (!bus_registry_list_services (registry, &services, &len)) 39429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 39529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 39629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 39729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 39829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 3999c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington 40031988af4089f3793940417535f8eabaae1ac26c8Havoc Pennington dbus_message_iter_init_append (reply, &iter); 40129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 4029c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, 4039c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING_AS_STRING, 4049c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington &sub)) 40529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 40629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_free_string_array (services); 40729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 40829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 40929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 41029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 41139dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 4129c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington i = 0; 4139c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington while (i < len) 4149c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington { 4159c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington if (!dbus_message_iter_append_basic (&sub, DBUS_TYPE_STRING, 4169c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington &services[i])) 4179c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington { 4189c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_free_string_array (services); 4199c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_message_unref (reply); 4209c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington BUS_SET_OOM (error); 4219c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington return FALSE; 4229c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington } 4239c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington ++i; 4249c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington } 4259c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington 4269c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington if (!dbus_message_iter_close_container (&iter, &sub)) 4279c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington { 4289c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_free_string_array (services); 4299c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_message_unref (reply); 4309c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington BUS_SET_OOM (error); 4319c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington return FALSE; 4329c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington } 4339c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington 43429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_free_string_array (services); 43529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 436777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 437a1a53c32422230fb76e8e3bca67c877dd2857563Havoc Pennington { 43829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 43929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 44029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 44129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 44229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 44329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 44429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 44529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 446a1a53c32422230fb76e8e3bca67c877dd2857563Havoc Pennington } 447a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson} 448a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 44929560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 45034e6c6ff31e0bd27bf18c0e3c68b3a1ea9f0448dAnders Carlssonbus_driver_handle_acquire_service (DBusConnection *connection, 45129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 45229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 45329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 454aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 455ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *reply; 456aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson DBusString service_name; 4579c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *name; 458ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson int service_reply; 4598a2c91b8a549402040c94b45b063311975583efdOlivier Andrieu dbus_uint32_t flags; 46029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 4616ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 46290ed1d84588a84697051e643175452c50d682eceHavoc Pennington 46390ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 4646ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 4656ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 466ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 467c5020ac870c5990a36c3576453cc23431213e8bfAlexander Larsson if (!dbus_message_get_args (message, error, 46829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, &name, 46929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_UINT32, &flags, 470e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 47129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 472ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 47398ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington _dbus_verbose ("Trying to own name %s with flags 0x%x\n", name, flags); 4746c241c1035a74f9ad4a526424a0be5c816bc61cbHavoc Pennington 4756c241c1035a74f9ad4a526424a0be5c816bc61cbHavoc Pennington retval = FALSE; 4766c241c1035a74f9ad4a526424a0be5c816bc61cbHavoc Pennington reply = NULL; 477aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 478aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_string_init_const (&service_name, name); 479ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 4806be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington if (!bus_registry_acquire_service (registry, connection, 4816be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington &service_name, flags, 4826be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington &service_reply, transaction, 4836be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington error)) 4846be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington goto out; 485aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 486b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington reply = dbus_message_new_method_return (message); 48729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply == NULL) 48829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 48929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 49029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 491ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson } 49229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 4939c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington if (!dbus_message_append_args (reply, DBUS_TYPE_UINT32, &service_reply, DBUS_TYPE_INVALID)) 49429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 49529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 49629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 49729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 498ba60374e251cca8fe351b7dd4def595069323885James Willcox 499777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 50029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 50129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 50229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 50329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 50429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 50529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 50629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 50729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out: 50829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply) 50929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 51029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 51129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington} 512aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 51329560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 514ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_handle_service_exists (DBusConnection *connection, 51529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 51629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 51729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 518ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 519ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *reply; 520ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusString service_name; 521ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson BusService *service; 52262e465339a306fa564b69935da494dad6e1b474aHavoc Pennington dbus_bool_t service_exists; 5239c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *name; 52429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 5256ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 52690ed1d84588a84697051e643175452c50d682eceHavoc Pennington 52790ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 5286ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 5296ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 53039dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 53129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_get_args (message, error, 53229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, &name, 533e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 53429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 535ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 53629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = FALSE; 5372091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge 5382091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge if (strcmp (name, DBUS_SERVICE_ORG_FREEDESKTOP_DBUS) == 0) 5392091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge { 5402091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge service_exists = TRUE; 5412091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge } 5422091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge else 5432091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge { 5442091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge _dbus_string_init_const (&service_name, name); 5452091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge service = bus_registry_lookup (registry, &service_name); 5462091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge service_exists = service != NULL; 5472091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge } 54829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 549b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington reply = dbus_message_new_method_return (message); 55029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply == NULL) 55129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 55229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 55329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 55429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 55529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 55629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_append_args (reply, 5579c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_BOOLEAN, &service_exists, 55829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 0)) 55929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 56029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 56129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 56229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 56329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 564777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 56529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 56629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 56729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 56829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 56929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 57029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 57129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 57229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out: 57329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply) 57429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 57529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 57629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 577aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 57839dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 57929560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 580f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlssonbus_driver_handle_activate_service (DBusConnection *connection, 58129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 58229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 58329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 584f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson{ 585f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson dbus_uint32_t flags; 5869c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *name; 58729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 5886ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusActivation *activation; 5896ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 59090ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 59190ed1d84588a84697051e643175452c50d682eceHavoc Pennington 5926ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington activation = bus_connection_get_activation (connection); 593f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 59429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_get_args (message, error, 59529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, &name, 59629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_UINT32, &flags, 597e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 598eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 599eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 6008873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington _dbus_verbose ("No memory to get arguments to StartServiceByName\n"); 601eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return FALSE; 602eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 603f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 60429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = FALSE; 605f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 60693f433a17a0aabff91a0384bf9c4f99c9cf30ae1Richard Hult if (!bus_activation_activate_service (activation, connection, transaction, FALSE, 607e55fd2c6706e41f6933e1656ac3da7527ee2514fHavoc Pennington message, name, error)) 608eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 609eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 610eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("bus_activation_activate_service() failed\n"); 611eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington goto out; 612eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 61329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 61429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 61529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 61629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out: 61729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 618f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson} 619f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 620a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonstatic dbus_bool_t 621a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonsend_ack_reply (DBusConnection *connection, 622a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusTransaction *transaction, 623a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *message, 624a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusError *error) 625a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington{ 626a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *reply; 627a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 628a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington reply = dbus_message_new_method_return (message); 629a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (reply == NULL) 630a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 631a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BUS_SET_OOM (error); 632a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 633a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 634a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 635a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 636a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 637a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BUS_SET_OOM (error); 638a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_message_unref (reply); 639a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 640a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 641a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 642a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_message_unref (reply); 643a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 644a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return TRUE; 645a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington} 646a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 647a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonstatic dbus_bool_t 648a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonbus_driver_handle_add_match (DBusConnection *connection, 649a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusTransaction *transaction, 650a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *message, 651a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusError *error) 652a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington{ 653a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchRule *rule; 6549c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *text; 655a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusString str; 656a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchmaker *matchmaker; 657a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 658a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 659a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 660a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington text = NULL; 661a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = NULL; 662a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 663a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (bus_connection_get_n_match_rules (connection) >= 664a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_context_get_max_match_rules_per_connection (bus_transaction_get_context (transaction))) 665a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 666a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED, 667a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington "Connection \"%s\" is not allowed to add more match rules " 668a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington "(increase limits in configuration file if required)", 669a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_connection_is_active (connection) ? 670a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_connection_get_name (connection) : 671a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington "(inactive)"); 672a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 673a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 674a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 675a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!dbus_message_get_args (message, error, 676a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_STRING, &text, 677a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_INVALID)) 678a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 679a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_verbose ("No memory to get arguments to AddMatch\n"); 680a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 681a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 682a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 683a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_string_init_const (&str, text); 684a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 685a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = bus_match_rule_parse (connection, &str, error); 686a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule == NULL) 687a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 688a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 689a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington matchmaker = bus_connection_get_matchmaker (connection); 690a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 691a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!bus_matchmaker_add_rule (matchmaker, rule)) 692a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 693a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BUS_SET_OOM (error); 694a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 695a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 696a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 697a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!send_ack_reply (connection, transaction, 698a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington message, error)) 699a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 700a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_matchmaker_remove_rule (matchmaker, rule); 701a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 702a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 703a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 704a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 705a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 706a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return TRUE; 707a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 708a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington failed: 709a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 710a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule) 711a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 712a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 713a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington} 714a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 715a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonstatic dbus_bool_t 716a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonbus_driver_handle_remove_match (DBusConnection *connection, 717a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusTransaction *transaction, 718a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *message, 719a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusError *error) 720a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington{ 721a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchRule *rule; 7229c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *text; 723a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusString str; 724a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchmaker *matchmaker; 725a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 726a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 727a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 728a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington text = NULL; 729a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = NULL; 730a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 731a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!dbus_message_get_args (message, error, 732a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_STRING, &text, 733a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_INVALID)) 734a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 735a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_verbose ("No memory to get arguments to RemoveMatch\n"); 736a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 737a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 738a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 739a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_string_init_const (&str, text); 740a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 741a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = bus_match_rule_parse (connection, &str, error); 742a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule == NULL) 743a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 744a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 745a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington /* Send the ack before we remove the rule, since the ack is undone 746a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington * on transaction cancel, but rule removal isn't. 747a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington */ 748a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!send_ack_reply (connection, transaction, 749a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington message, error)) 750a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 751a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 752a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington matchmaker = bus_connection_get_matchmaker (connection); 753a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 754a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!bus_matchmaker_remove_rule_by_value (matchmaker, rule, error)) 755a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 756a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 757a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 758a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 759a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return TRUE; 760a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 761a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington failed: 762a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 763a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule) 764a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 765a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 766a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington} 767a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 768a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieustatic dbus_bool_t 769a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieubus_driver_handle_get_service_owner (DBusConnection *connection, 770a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BusTransaction *transaction, 771a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusMessage *message, 772a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusError *error) 773a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu{ 7749c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *text; 775a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu const char *base_name; 776a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusString str; 777a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BusRegistry *registry; 778a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BusService *service; 779a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusMessage *reply; 780a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 781a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _DBUS_ASSERT_ERROR_IS_CLEAR (error); 782a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 783a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu registry = bus_connection_get_registry (connection); 784a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 785a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu text = NULL; 786a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu reply = NULL; 787a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 788a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! dbus_message_get_args (message, error, 789a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_STRING, &text, 790a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_INVALID)) 791a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto failed; 792a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 793a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _dbus_string_init_const (&str, text); 794a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu service = bus_registry_lookup (registry, &str); 79541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (service == NULL && 79641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _dbus_string_equal_c_str (&str, DBUS_SERVICE_ORG_FREEDESKTOP_DBUS)) 79741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington { 79841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington /* ORG_FREEDESKTOP_DBUS owns itself */ 79941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington base_name = DBUS_SERVICE_ORG_FREEDESKTOP_DBUS; 80041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington } 80141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington else if (service == NULL) 802a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { 803a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_set_error (error, 80441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_ERROR_NAME_HAS_NO_OWNER, 80541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington "Could not get owner of name '%s': no such name", text); 806a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto failed; 807a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu } 80841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington else 809a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { 81041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington base_name = bus_connection_get_name (bus_service_get_primary_owner (service)); 81141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (base_name == NULL) 81241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington { 81341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington /* FIXME - how is this error possible? */ 81441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington dbus_set_error (error, 81541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_ERROR_FAILED, 81641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington "Could not determine unique name for '%s'", text); 81741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto failed; 81841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington } 81941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _dbus_assert (*base_name == ':'); 820a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu } 82141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 82241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _dbus_assert (base_name != NULL); 823a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 824a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu reply = dbus_message_new_method_return (message); 825a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (reply == NULL) 826a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 827a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 828a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! dbus_message_append_args (reply, 8299c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &base_name, 830a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_INVALID)) 831a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 832a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 833a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! bus_transaction_send_from_driver (transaction, connection, reply)) 834a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 835a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 836a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_message_unref (reply); 837a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 838a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu return TRUE; 839a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 840a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu oom: 841a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BUS_SET_OOM (error); 842a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 843a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu failed: 844a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _DBUS_ASSERT_ERROR_IS_SET (error); 845a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (reply) 846a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_message_unref (reply); 847a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu return FALSE; 848a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu} 849a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 8501919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsbergstatic dbus_bool_t 8512779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieubus_driver_handle_get_connection_unix_user (DBusConnection *connection, 8522779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusTransaction *transaction, 8532779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusMessage *message, 8542779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusError *error) 8552779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu{ 8569c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *service; 8572779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusString str; 8582779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusRegistry *registry; 8592779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusService *serv; 8602779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusConnection *conn; 8612779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusMessage *reply; 8622779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu unsigned long uid; 8639c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_uint32_t uid32; 8642779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8652779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _DBUS_ASSERT_ERROR_IS_CLEAR (error); 8662779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8672779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu registry = bus_connection_get_registry (connection); 8682779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8692779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu service = NULL; 8702779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu reply = NULL; 8712779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8722779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! dbus_message_get_args (message, error, 8732779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_STRING, &service, 8742779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_INVALID)) 8752779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 8762779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8772779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _dbus_verbose ("asked for UID of connection %s\n", service); 8782779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8792779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _dbus_string_init_const (&str, service); 8802779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu serv = bus_registry_lookup (registry, &str); 8812779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (serv == NULL) 8822779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { 8832779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_set_error (error, 8848873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington DBUS_ERROR_NAME_HAS_NO_OWNER, 8858873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "Could not get UID of name '%s': no such name", service); 8862779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 8872779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu } 8882779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8892779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu conn = bus_service_get_primary_owner (serv); 8902779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8912779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu reply = dbus_message_new_method_return (message); 8922779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (reply == NULL) 8932779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 8942779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8952779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (!dbus_connection_get_unix_user (conn, &uid)) 8962779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { 8972779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_set_error (error, 8982779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_ERROR_FAILED, 8992779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu "Could not determine UID for '%s'", service); 9002779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 9012779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu } 9022779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9039c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington uid32 = uid; 9042779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! dbus_message_append_args (reply, 9059c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_UINT32, &uid32, 9062779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_INVALID)) 9072779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 9082779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9092779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! bus_transaction_send_from_driver (transaction, connection, reply)) 9102779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 9112779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9122779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_message_unref (reply); 9132779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9142779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu return TRUE; 9152779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9162779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu oom: 9172779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BUS_SET_OOM (error); 9182779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9192779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu failed: 9202779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _DBUS_ASSERT_ERROR_IS_SET (error); 9212779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (reply) 9222779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_message_unref (reply); 9232779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu return FALSE; 9242779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu} 9252779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9262779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieustatic dbus_bool_t 927c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthenbus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, 928c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusTransaction *transaction, 929c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusMessage *message, 930c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusError *error) 931c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen{ 9329c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *service; 933c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusString str; 934c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusRegistry *registry; 935c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusService *serv; 936c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusConnection *conn; 937c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusMessage *reply; 938c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen unsigned long pid; 9399c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_uint32_t pid32; 940c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 941c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _DBUS_ASSERT_ERROR_IS_CLEAR (error); 942c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 943c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen registry = bus_connection_get_registry (connection); 944c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 945c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen service = NULL; 946c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen reply = NULL; 947c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 948c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! dbus_message_get_args (message, error, 949c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_STRING, &service, 950c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_INVALID)) 951c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 952c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 953c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _dbus_verbose ("asked for PID of connection %s\n", service); 954c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 955c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _dbus_string_init_const (&str, service); 956c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen serv = bus_registry_lookup (registry, &str); 957c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (serv == NULL) 958c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { 959c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_set_error (error, 9608873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington DBUS_ERROR_NAME_HAS_NO_OWNER, 9618873c90f99303f9cc308f15f8d03e637911f5b9eHavoc Pennington "Could not get PID of name '%s': no such name", service); 962c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 963c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen } 964c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 965c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen conn = bus_service_get_primary_owner (serv); 966c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 967c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen reply = dbus_message_new_method_return (message); 968c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (reply == NULL) 969c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 970c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 971c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (!dbus_connection_get_unix_process_id (conn, &pid)) 972c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { 973c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_set_error (error, 974c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN, 975c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen "Could not determine PID for '%s'", service); 976c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 977c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen } 978c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 9799c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington pid32 = pid; 980c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! dbus_message_append_args (reply, 9819c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_UINT32, &pid32, 982c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_INVALID)) 983c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 984c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 985c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! bus_transaction_send_from_driver (transaction, connection, reply)) 986c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 987c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 988c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_message_unref (reply); 989c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 990c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen return TRUE; 991c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 992c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen oom: 993c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BUS_SET_OOM (error); 994c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 995c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen failed: 996c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _DBUS_ASSERT_ERROR_IS_SET (error); 997c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (reply) 998c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_message_unref (reply); 999c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen return FALSE; 1000c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen} 1001c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1002c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthenstatic dbus_bool_t 10031919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsbergbus_driver_handle_reload_config (DBusConnection *connection, 10041919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg BusTransaction *transaction, 10051919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg DBusMessage *message, 10061919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg DBusError *error) 10071919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg{ 10081919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg BusContext *context; 10091919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg dbus_bool_t retval; 10101919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10111919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg _DBUS_ASSERT_ERROR_IS_CLEAR (error); 10121919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10131919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg retval = FALSE; 10141919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10151919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg context = bus_connection_get_context (connection); 10161919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg if (!bus_context_reload_config (context, error)) 10171919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg { 10181919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg _DBUS_ASSERT_ERROR_IS_SET (error); 10191919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg goto out; 10201919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg } 10211919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10221919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg retval = TRUE; 10231919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10241919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg out: 10251919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg return retval; 10261919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg} 10271919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 102829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington/* For speed it might be useful to sort this in order of 102929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * frequency of use (but doesn't matter with only a few items 103029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * anyhow) 103129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington */ 103229560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstruct 103329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington{ 103429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *name; 10355b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington const char *in_args; 10365b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington const char *out_args; 103729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t (* handler) (DBusConnection *connection, 103829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 103929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 104029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error); 104129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington} message_handlers[] = { 10425b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "RequestName", 10435b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_UINT32_AS_STRING, 10445b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_UINT32_AS_STRING, 10455b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_acquire_service }, 10465b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "StartServiceByName", 10475b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_UINT32_AS_STRING, 10485b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_UINT32_AS_STRING, 10495b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_activate_service }, 10505b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "Hello", 10515b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 10525b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 10535b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_hello }, 10545b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "NameHasOwner", 10555b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 10565b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_BOOLEAN_AS_STRING, 10575b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_service_exists }, 10585b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "ListNames", 10595b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 10605b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING, 10615b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_list_services }, 10625b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "AddMatch", 10635b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 10645b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 10655b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_add_match }, 10665b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "RemoveMatch", 10675b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 10685b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 10695b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_remove_match }, 10705b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "GetNameOwner", 10715b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 10725b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 10735b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_get_service_owner }, 10745b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "GetConnectionUnixUser", 10755b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 10765b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_UINT32_AS_STRING, 10775b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_get_connection_unix_user }, 10785b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "GetConnectionUnixProcessID", 10795b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_STRING_AS_STRING, 10805b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington DBUS_TYPE_UINT32_AS_STRING, 10815b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_get_connection_unix_process_id }, 10825b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { "ReloadConfig", 10835b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 10845b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "", 10855b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington bus_driver_handle_reload_config } 108629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington}; 108729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 108841f52c96d651003b3d0a266a582d401228a8368eHavoc Penningtonstatic dbus_bool_t 108941f52c96d651003b3d0a266a582d401228a8368eHavoc Penningtonbus_driver_handle_introspect (DBusConnection *connection, 109041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington BusTransaction *transaction, 109141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBusMessage *message, 109241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBusError *error) 109341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington{ 109441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBusString xml; 109541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBusMessage *reply; 109641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington const char *v_STRING; 109785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington int i; 109841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 109941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _dbus_verbose ("Introspect() on bus driver\n"); 110041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 110141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 110241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 110341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington reply = NULL; 110441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 110541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (! dbus_message_get_args (message, error, 110641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_TYPE_INVALID)) 110741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington { 110841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 110941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington return FALSE; 111041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington } 111141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 111241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (!_dbus_string_init (&xml)) 111341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington { 111441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington BUS_SET_OOM (error); 111541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington return FALSE; 111641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington } 111741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 111841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (!_dbus_string_append (&xml, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE)) 111941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 112041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (!_dbus_string_append (&xml, "<node>\n")) 112141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 112241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (!_dbus_string_append (&xml, " <interface name=\"org.freedesktop.Introspectable\">\n")) 112341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 112441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (!_dbus_string_append (&xml, " <method name=\"Introspect\">\n")) 112541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 112641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (!_dbus_string_append (&xml, " <arg name=\"data\" direction=\"out\" type=\"string\"/>\n")) 112741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 112841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (!_dbus_string_append (&xml, " </method>\n")) 112941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 113041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (!_dbus_string_append (&xml, " </interface>\n")) 113185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 113285fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 113385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append_printf (&xml, " <interface name=\"%s\">\n", 113485fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS)) 113585fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 113685fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 113785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington i = 0; 113885fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington while (i < _DBUS_N_ELEMENTS (message_handlers)) 113985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 114085fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append_printf (&xml, " <method name=\"%s\">\n", 114185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington message_handlers[i].name)) 114285fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 114385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 114485fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington /* This hacky mess can probably get mopped up eventually when the 114585fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington * introspection format is related to the signature format 114685fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington */ 114785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 114885fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (strcmp (message_handlers[i].in_args, "") == 0) 114985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington ; 115085fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington else if (strcmp (message_handlers[i].in_args, 115185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_UINT32_AS_STRING) == 0) 115285fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 115385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append (&xml, " <arg direction=\"in\" type=\"string\"/>\n")) 115485fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 115585fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append (&xml, " <arg direction=\"in\" type=\"uint32\"/>\n")) 115685fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 115785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 115885fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington else if (strcmp (message_handlers[i].in_args, 115985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington DBUS_TYPE_STRING_AS_STRING) == 0) 116085fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 116185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append (&xml, " <arg direction=\"in\" type=\"string\"/>\n")) 116285fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 116385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 116485fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington else 116585fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 116685fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington _dbus_warn ("Lack introspection code for in sig '%s'\n", 116785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington message_handlers[i].in_args); 116885fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington _dbus_assert_not_reached ("FIXME introspection missing"); 116985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 117085fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 117185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (strcmp (message_handlers[i].out_args, "") == 0) 117285fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington ; 117385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington else if (strcmp (message_handlers[i].out_args, 117485fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington DBUS_TYPE_STRING_AS_STRING) == 0) 117585fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 117685fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"string\"/>\n")) 117785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 117885fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 117985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington else if (strcmp (message_handlers[i].out_args, 118085fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington DBUS_TYPE_BOOLEAN_AS_STRING) == 0) 118185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 118285fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"boolean\"/>\n")) 118385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 118485fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 118585fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington else if (strcmp (message_handlers[i].out_args, 118685fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington DBUS_TYPE_UINT32_AS_STRING) == 0) 118785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 118885fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"uint32\"/>\n")) 118985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 119085fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 119185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington else if (strcmp (message_handlers[i].out_args, 119285fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING) == 0) 119385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 119485fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington /* FIXME introspection format doesn't handle arrays yet */ 119585fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"string\"/>\n")) 119685fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 119785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 119885fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington else 119985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington { 120085fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington _dbus_warn ("Lack introspection code for out sig '%s'\n", 120185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington message_handlers[i].out_args); 120285fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington _dbus_assert_not_reached ("FIXME introspection missing"); 120385fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 120485fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 120585fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append (&xml, " </method>\n")) 120685fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington goto oom; 120785fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 120885fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington ++i; 120985fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington } 121085fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington 121185fb9ff93c91bc500b91759d044e3dfd951c7868Havoc Pennington if (!_dbus_string_append (&xml, " </interface>\n")) 121241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 121341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 121441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (!_dbus_string_append (&xml, "</node>\n")) 121541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 121641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 121741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington reply = dbus_message_new_method_return (message); 121841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (reply == NULL) 121941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 122041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 122141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington v_STRING = _dbus_string_get_const_data (&xml); 122241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (! dbus_message_append_args (reply, 122341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_TYPE_STRING, &v_STRING, 122441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_TYPE_INVALID)) 122541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 122641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 122741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (! bus_transaction_send_from_driver (transaction, connection, reply)) 122841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington goto oom; 122941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 123041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington dbus_message_unref (reply); 123141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _dbus_string_free (&xml); 123241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 123341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington return TRUE; 123441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 123541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington oom: 123641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington BUS_SET_OOM (error); 123741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 123841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (reply) 123941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington dbus_message_unref (reply); 124041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 124141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington _dbus_string_free (&xml); 124241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 124341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington return FALSE; 124441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington} 124541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 124629560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 124739dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlssonbus_driver_handle_message (DBusConnection *connection, 124829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 124929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 125029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 125139dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson{ 125241f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington const char *name, *sender, *interface; 125329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington int i; 125490ed1d84588a84697051e643175452c50d682eceHavoc Pennington 125590ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 125668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 125768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL) 125868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { 125968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got a non-method-call message, ignoring\n"); 126068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington return TRUE; /* we just ignore this */ 126168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington } 126268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 126341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (dbus_message_is_method_call (message, 126441f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_INTROSPECTABLE, 126541f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington "Introspect")) 126641f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington return bus_driver_handle_introspect (connection, transaction, message, error); 126741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 126841f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington interface = dbus_message_get_interface (message); 126941f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (interface == NULL) 127041f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington interface = DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS; 127141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 127268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (dbus_message_get_member (message) != NULL); 127341f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington 127468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington name = dbus_message_get_member (message); 127568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington sender = dbus_message_get_sender (message); 127629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 127741f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington if (strcmp (interface, 127868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS) != 0) 127968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { 128068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got message to unknown interface \"%s\"\n", 128141f52c96d651003b3d0a266a582d401228a8368eHavoc Pennington interface); 128268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington goto unknown; 128368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington } 128468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 128568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got a method call: %s\n", 128668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington dbus_message_get_member (message)); 128739dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 1288e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington /* security checks should have kept this from getting here */ 128968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (sender != NULL || strcmp (name, "Hello") == 0); 1290777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington 129129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington i = 0; 129229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington while (i < _DBUS_N_ELEMENTS (message_handlers)) 129329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 129429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (strcmp (message_handlers[i].name, name) == 0) 129529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 12965b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _dbus_verbose ("Found driver handler for %s\n", name); 12975b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington 12985b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington if (!dbus_message_has_signature (message, message_handlers[i].in_args)) 12995b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington { 13005b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 13015b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _dbus_verbose ("Call to %s has wrong args (%s, expected %s)\n", 13025b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington name, dbus_message_get_signature (message), 13035b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington message_handlers[i].in_args); 13045b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington 13055b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington dbus_set_error (error, DBUS_ERROR_INVALID_ARGS, 13065b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington "Call to %s has wrong args (%s, expected %s)\n", 13075b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington name, dbus_message_get_signature (message), 13085b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington message_handlers[i].in_args); 13095b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 13105b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington return FALSE; 13115b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington } 13125b26893cdddddc82dd8d278b9f4bb449f9aac59eHavoc Pennington 131329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if ((* message_handlers[i].handler) (connection, transaction, message, error)) 1314eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 1315eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 1316eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Driver handler succeeded\n"); 1317eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return TRUE; 1318eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 131929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 1320eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 1321eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 1322eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Driver handler returned failure\n"); 1323eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return FALSE; 1324eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 132529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 132629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 132729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington ++i; 132829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 132929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 133068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington unknown: 133168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("No driver handler for message \"%s\"\n", 133268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington name); 1333eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington 13341d1b0f20a467cf1cbdcaf81fbad3a111bcff6c48Havoc Pennington dbus_set_error (error, DBUS_ERROR_UNKNOWN_METHOD, 133529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington "%s does not understand message %s", 133668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington DBUS_SERVICE_ORG_FREEDESKTOP_DBUS, name); 133729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 133829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 1339ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 1340ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 1341ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonvoid 1342ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_remove_connection (DBusConnection *connection) 1343ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 134429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington /* FIXME Does nothing for now, should unregister the connection 134529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * with the bus driver. 134629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington */ 134739dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson} 1348