driver.c revision 9c3d566e95c9080f6040c64531b0ccae22bd5d74
1aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson/* -*- mode: C; c-file-style: "gnu" -*- */ 2c414488fe62605ebda5e875fc2db05c6b3dd199fHavoc Pennington/* driver.c Bus client (driver) 3aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 451781f541094a4936d47119cd62682e0431c41e9Havoc Pennington * Copyright (C) 2003 CodeFactory AB 5dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington * Copyright (C) 2003, 2004 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 = ""; 55dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_verbose ("sending service 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, 6285f8f62da6bb26d7033310af9d3260b073efe4bfOlivier Andrieu "ServiceOwnerChanged"); 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, 10568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington "ServiceLost"); 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, 14868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington "ServiceAcquired"); 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 353dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_assert (dbus_message_has_signature (welcome, "s")); 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 4009c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_message_append_iter_init (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 47329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington _dbus_verbose ("Trying to own service %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; 5229c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington unsigned char 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); 600eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("No memory to get arguments to ActivateService\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); 795a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (service == NULL) 796a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { 797a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_set_error (error, 798a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_ERROR_SERVICE_HAS_NO_OWNER, 799a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu "Could not get owner of service '%s': no such service", text); 800a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto failed; 801a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu } 802a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 803a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu base_name = bus_connection_get_name (bus_service_get_primary_owner (service)); 804a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (base_name == NULL) 805a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { 806a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_set_error (error, 807a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_ERROR_FAILED, 808a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu "Could not determine base service for '%s'", text); 809a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto failed; 810a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu } 811a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _dbus_assert (*base_name == ':'); 812a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 813a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu reply = dbus_message_new_method_return (message); 814a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (reply == NULL) 815a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 816a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 817a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! dbus_message_append_args (reply, 8189c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_STRING, &base_name, 819a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_INVALID)) 820a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 821a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 822a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! bus_transaction_send_from_driver (transaction, connection, reply)) 823a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 824a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 825a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_message_unref (reply); 826a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 827a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu return TRUE; 828a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 829a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu oom: 830a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BUS_SET_OOM (error); 831a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 832a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu failed: 833a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _DBUS_ASSERT_ERROR_IS_SET (error); 834a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (reply) 835a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_message_unref (reply); 836a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu return FALSE; 837a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu} 838a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 8391919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsbergstatic dbus_bool_t 8402779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieubus_driver_handle_get_connection_unix_user (DBusConnection *connection, 8412779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusTransaction *transaction, 8422779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusMessage *message, 8432779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusError *error) 8442779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu{ 8459c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *service; 8462779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusString str; 8472779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusRegistry *registry; 8482779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusService *serv; 8492779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusConnection *conn; 8502779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusMessage *reply; 8512779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu unsigned long uid; 8529c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_uint32_t uid32; 8532779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8542779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _DBUS_ASSERT_ERROR_IS_CLEAR (error); 8552779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8562779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu registry = bus_connection_get_registry (connection); 8572779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8582779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu service = NULL; 8592779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu reply = NULL; 8602779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8612779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! dbus_message_get_args (message, error, 8622779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_STRING, &service, 8632779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_INVALID)) 8642779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 8652779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8662779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _dbus_verbose ("asked for UID of connection %s\n", service); 8672779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8682779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _dbus_string_init_const (&str, service); 8692779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu serv = bus_registry_lookup (registry, &str); 8702779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (serv == NULL) 8712779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { 8722779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_set_error (error, 8732779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_ERROR_SERVICE_HAS_NO_OWNER, 8742779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu "Could not get owner of service '%s': no such service", service); 8752779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 8762779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu } 8772779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8782779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu conn = bus_service_get_primary_owner (serv); 8792779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8802779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu reply = dbus_message_new_method_return (message); 8812779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (reply == NULL) 8822779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 8832779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8842779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (!dbus_connection_get_unix_user (conn, &uid)) 8852779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { 8862779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_set_error (error, 8872779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_ERROR_FAILED, 8882779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu "Could not determine UID for '%s'", service); 8892779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 8902779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu } 8912779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8929c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington uid32 = uid; 8932779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! dbus_message_append_args (reply, 8949c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_UINT32, &uid32, 8952779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_INVALID)) 8962779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 8972779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8982779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! bus_transaction_send_from_driver (transaction, connection, reply)) 8992779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 9002779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9012779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_message_unref (reply); 9022779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9032779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu return TRUE; 9042779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9052779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu oom: 9062779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BUS_SET_OOM (error); 9072779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9082779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu failed: 9092779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _DBUS_ASSERT_ERROR_IS_SET (error); 9102779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (reply) 9112779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_message_unref (reply); 9122779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu return FALSE; 9132779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu} 9142779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9152779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieustatic dbus_bool_t 916c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthenbus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, 917c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusTransaction *transaction, 918c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusMessage *message, 919c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusError *error) 920c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen{ 9219c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington const char *service; 922c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusString str; 923c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusRegistry *registry; 924c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusService *serv; 925c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusConnection *conn; 926c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusMessage *reply; 927c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen unsigned long pid; 9289c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington dbus_uint32_t pid32; 929c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 930c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _DBUS_ASSERT_ERROR_IS_CLEAR (error); 931c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 932c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen registry = bus_connection_get_registry (connection); 933c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 934c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen service = NULL; 935c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen reply = NULL; 936c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 937c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! dbus_message_get_args (message, error, 938c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_STRING, &service, 939c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_INVALID)) 940c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 941c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 942c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _dbus_verbose ("asked for PID of connection %s\n", service); 943c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 944c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _dbus_string_init_const (&str, service); 945c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen serv = bus_registry_lookup (registry, &str); 946c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (serv == NULL) 947c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { 948c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_set_error (error, 949c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_ERROR_SERVICE_HAS_NO_OWNER, 950c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen "Could not get owner of service '%s': no such service", service); 951c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 952c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen } 953c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 954c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen conn = bus_service_get_primary_owner (serv); 955c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 956c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen reply = dbus_message_new_method_return (message); 957c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (reply == NULL) 958c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 959c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 960c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (!dbus_connection_get_unix_process_id (conn, &pid)) 961c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { 962c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_set_error (error, 963c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN, 964c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen "Could not determine PID for '%s'", service); 965c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 966c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen } 967c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 9689c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington pid32 = pid; 969c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! dbus_message_append_args (reply, 9709c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington DBUS_TYPE_UINT32, &pid32, 971c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_INVALID)) 972c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 973c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 974c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! bus_transaction_send_from_driver (transaction, connection, reply)) 975c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 976c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 977c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_message_unref (reply); 978c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 979c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen return TRUE; 980c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 981c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen oom: 982c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BUS_SET_OOM (error); 983c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 984c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen failed: 985c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _DBUS_ASSERT_ERROR_IS_SET (error); 986c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (reply) 987c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_message_unref (reply); 988c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen return FALSE; 989c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen} 990c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 991c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthenstatic dbus_bool_t 9921919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsbergbus_driver_handle_reload_config (DBusConnection *connection, 9931919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg BusTransaction *transaction, 9941919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg DBusMessage *message, 9951919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg DBusError *error) 9961919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg{ 9971919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg BusContext *context; 9981919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg dbus_bool_t retval; 9991919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10001919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg _DBUS_ASSERT_ERROR_IS_CLEAR (error); 10011919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10021919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg retval = FALSE; 10031919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10041919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg context = bus_connection_get_context (connection); 10051919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg if (!bus_context_reload_config (context, error)) 10061919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg { 10071919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg _DBUS_ASSERT_ERROR_IS_SET (error); 10081919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg goto out; 10091919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg } 10101919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10111919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg retval = TRUE; 10121919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10131919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg out: 10141919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg return retval; 10151919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg} 10161919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 101729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington/* For speed it might be useful to sort this in order of 101829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * frequency of use (but doesn't matter with only a few items 101929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * anyhow) 102029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington */ 102129560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstruct 102229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington{ 102329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *name; 102429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t (* handler) (DBusConnection *connection, 102529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 102629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 102729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error); 102829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington} message_handlers[] = { 102968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { "AcquireService", bus_driver_handle_acquire_service }, 103068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { "ActivateService", bus_driver_handle_activate_service }, 103168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { "Hello", bus_driver_handle_hello }, 103268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { "ServiceExists", bus_driver_handle_service_exists }, 1033a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { "ListServices", bus_driver_handle_list_services }, 1034a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { "AddMatch", bus_driver_handle_add_match }, 1035a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { "RemoveMatch", bus_driver_handle_remove_match }, 10361919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg { "GetServiceOwner", bus_driver_handle_get_service_owner }, 10372779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { "GetConnectionUnixUser", bus_driver_handle_get_connection_unix_user }, 1038c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { "GetConnectionUnixProcessID", bus_driver_handle_get_connection_unix_process_id }, 10391919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg { "ReloadConfig", bus_driver_handle_reload_config } 104029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington}; 104129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 104229560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 104339dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlssonbus_driver_handle_message (DBusConnection *connection, 104429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 104529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 104629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 104739dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson{ 104839dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson const char *name, *sender; 104929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington int i; 105090ed1d84588a84697051e643175452c50d682eceHavoc Pennington 105190ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 105268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 105368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL) 105468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { 105568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got a non-method-call message, ignoring\n"); 105668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington return TRUE; /* we just ignore this */ 105768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington } 105868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 105968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (dbus_message_get_interface (message) != NULL); 106068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (dbus_message_get_member (message) != NULL); 106168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 106268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington name = dbus_message_get_member (message); 106368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington sender = dbus_message_get_sender (message); 106429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 106568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (strcmp (dbus_message_get_interface (message), 106668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS) != 0) 106768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { 106868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got message to unknown interface \"%s\"\n", 106968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington dbus_message_get_interface (message)); 107068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington goto unknown; 107168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington } 107268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 107368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got a method call: %s\n", 107468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington dbus_message_get_member (message)); 107539dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 1076e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington /* security checks should have kept this from getting here */ 107768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (sender != NULL || strcmp (name, "Hello") == 0); 107829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 10793251264ac483680b4a5fe808729f7e3b34f41fd4Havoc Pennington if (dbus_message_get_reply_serial (message) != 0) 1080777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington { 1081777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington _dbus_verbose ("Client sent a reply to the bus driver, ignoring it\n"); 1082777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington return TRUE; 1083777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington } 1084777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington 108529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington i = 0; 108629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington while (i < _DBUS_N_ELEMENTS (message_handlers)) 108729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 108829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (strcmp (message_handlers[i].name, name) == 0) 108929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 1090eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Running driver handler for %s\n", name); 109129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if ((* message_handlers[i].handler) (connection, transaction, message, error)) 1092eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 1093eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 1094eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Driver handler succeeded\n"); 1095eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return TRUE; 1096eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 109729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 1098eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 1099eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 1100eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Driver handler returned failure\n"); 1101eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return FALSE; 1102eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 110329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 110429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 110529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington ++i; 110629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 110729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 110868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington unknown: 110968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("No driver handler for message \"%s\"\n", 111068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington name); 1111eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington 11121d1b0f20a467cf1cbdcaf81fbad3a111bcff6c48Havoc Pennington dbus_set_error (error, DBUS_ERROR_UNKNOWN_METHOD, 111329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington "%s does not understand message %s", 111468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington DBUS_SERVICE_ORG_FREEDESKTOP_DBUS, name); 111529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 111629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 1117ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 1118ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 1119ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonvoid 1120ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_remove_connection (DBusConnection *connection) 1121ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 112229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington /* FIXME Does nothing for now, should unregister the connection 112329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * with the bus driver. 112429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington */ 112539dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson} 1126