driver.c revision 1658c8afe59166c9aa77549a3ac6a2e389327638
1aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson/* -*- mode: C; c-file-style: "gnu" -*- */ 2c414488fe62605ebda5e875fc2db05c6b3dd199fHavoc Pennington/* driver.c Bus client (driver) 3aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson * 451781f541094a4936d47119cd62682e0431c41e9Havoc Pennington * Copyright (C) 2003 CodeFactory AB 551781f541094a4936d47119cd62682e0431c41e9Havoc Pennington * Copyright (C) 2003 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 4229560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonbus_driver_send_service_deleted (const char *service_name, 4329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 4429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 45a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson{ 4639dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson DBusMessage *message; 4729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 4890ed1d84588a84697051e643175452c50d682eceHavoc Pennington 4990ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 5029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 51ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson _dbus_verbose ("sending service deleted: %s\n", service_name); 523f4086f0fdd1cc7fc03585ec9f750897fb3c1d55Anders Carlsson 535fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington message = dbus_message_new_signal (DBUS_PATH_ORG_FREEDESKTOP_DBUS, 545fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS, 5568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington "ServiceDeleted"); 56b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington 5729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 5829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 5929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 6029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 6129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 6239dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 6368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (!dbus_message_set_sender (message, DBUS_SERVICE_ORG_FREEDESKTOP_DBUS) || 6429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington !dbus_message_append_args (message, 6529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, service_name, 66e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 6729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 6829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 6929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 7029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 7129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 7239dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 73a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington retval = bus_dispatch_matches (transaction, NULL, NULL, message, error); 7429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 7529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 7629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 77a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson} 78a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 7929560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 8029560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonbus_driver_send_service_created (const char *service_name, 8129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 8229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 83a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson{ 84a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson DBusMessage *message; 8529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 8690ed1d84588a84697051e643175452c50d682eceHavoc Pennington 8790ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 8829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 895fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington message = dbus_message_new_signal (DBUS_PATH_ORG_FREEDESKTOP_DBUS, 905fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS, 9168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington "ServiceCreated"); 92b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington 9329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 9429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 9529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 9629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 9729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 98a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 9968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (!dbus_message_set_sender (message, DBUS_SERVICE_ORG_FREEDESKTOP_DBUS)) 10029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 10129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 10229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 10329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 10429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 10502dfd4fb3427a6afef6b9b99d39de6248a20e0cbAnders Carlsson 10629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_append_args (message, 10729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, service_name, 108e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 10929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 11029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 11129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 11229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 11329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 11429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 115a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington retval = bus_dispatch_matches (transaction, NULL, NULL, message, error); 116a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson dbus_message_unref (message); 11729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 11829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 119a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson} 120a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 12129560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 122ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_send_service_lost (DBusConnection *connection, 12329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *service_name, 12429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 12529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 126ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 127ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *message; 128ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 12990ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 13090ed1d84588a84697051e643175452c50d682eceHavoc Pennington 1315fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington message = dbus_message_new_signal (DBUS_PATH_ORG_FREEDESKTOP_DBUS, 1325fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS, 13368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington "ServiceLost"); 134b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington 13529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 13629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 13729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 13829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 13929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 140ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 141b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington if (!dbus_message_set_destination (message, bus_connection_get_name (connection)) || 142b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington !dbus_message_append_args (message, 14329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, service_name, 144e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 14529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 14629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 14729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 14829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 14929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 15029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 151777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, message)) 15229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 15329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 15429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 15529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 15629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 15729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 15829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 15929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 16029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 16129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 162ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 163ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 16429560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 165ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_send_service_acquired (DBusConnection *connection, 16629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *service_name, 16729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 16829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 169ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 170ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *message; 171ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 17290ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 17390ed1d84588a84697051e643175452c50d682eceHavoc Pennington 1745fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington message = dbus_message_new_signal (DBUS_PATH_ORG_FREEDESKTOP_DBUS, 1755fd1e389e1c1c12ad4a55c2af6abdc8e7a2f6d41Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS, 17668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington "ServiceAcquired"); 177c9cd648f115759176d35508e9007dc5520a0dd3fHavoc Pennington 17829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (message == NULL) 17929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 18029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 18129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 18229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 183ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 184b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington if (!dbus_message_set_destination (message, bus_connection_get_name (connection)) || 185b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington !dbus_message_append_args (message, 18629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, service_name, 187e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 18829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 18929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 19029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 19129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 19229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 19329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 194777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, message)) 19529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 19629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 19729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 19829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 19929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 20029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 20129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 20229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (message); 20329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 20429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 205ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 206ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 207aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlssonstatic dbus_bool_t 2086ecc14ffabcffb69aa938a67940db48272e05046Havoc Penningtoncreate_unique_client_name (BusRegistry *registry, 2096ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington DBusString *str) 210aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 211d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* We never want to use the same unique client name twice, because 212d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * we want to guarantee that if you send a message to a given unique 213d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * name, you always get the same application. So we use two numbers 214d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * for INT_MAX * INT_MAX combinations, should be pretty safe against 215d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * wraparound. 216d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington */ 217b3bd48edfc1aab0a9dc64bfa4c380d845d218e73Havoc Pennington /* FIXME these should be in BusRegistry rather than static vars */ 218d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington static int next_major_number = 0; 219d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington static int next_minor_number = 0; 220d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington int len; 221b3bd48edfc1aab0a9dc64bfa4c380d845d218e73Havoc Pennington 222aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson len = _dbus_string_get_length (str); 223aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 224d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington while (TRUE) 225aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson { 226d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* start out with 1-0, go to 1-1, 1-2, 1-3, 227d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington * up to 1-MAXINT, then 2-0, 2-1, etc. 228d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington */ 229d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (next_minor_number <= 0) 230d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington { 231d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington next_major_number += 1; 232d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington next_minor_number = 0; 233d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (next_major_number <= 0) 234d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington _dbus_assert_not_reached ("INT_MAX * INT_MAX clients were added"); 235d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington } 236d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 237d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington _dbus_assert (next_major_number > 0); 238d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington _dbus_assert (next_minor_number >= 0); 239d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 240d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* appname:MAJOR-MINOR */ 241d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 242d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (!_dbus_string_append (str, ":")) 243d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 244d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 245d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (!_dbus_string_append_int (str, next_major_number)) 246d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 247d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 24875742242000e782719bc1656f0a7da72b059e88eHavoc Pennington if (!_dbus_string_append (str, ".")) 249d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 250d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 251d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington if (!_dbus_string_append_int (str, next_minor_number)) 252d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington return FALSE; 253d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington 254d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington next_minor_number += 1; 255aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 256aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson /* Check if a client with the name exists */ 2576ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington if (bus_registry_lookup (registry, str) == NULL) 258aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson break; 259aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 260d6d50a29945ded04a17b3f42a3a1074449250ec0Havoc Pennington /* drop the number again, try the next one. */ 261aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_string_set_length (str, len); 262aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson } 263aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 264aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson return TRUE; 265aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 266aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 26729560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 268a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlssonbus_driver_handle_hello (DBusConnection *connection, 26929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 27029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 27129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 272aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 273aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson DBusString unique_name; 274aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson BusService *service; 27529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 2766ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 277983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington BusConnections *connections; 27890ed1d84588a84697051e643175452c50d682eceHavoc Pennington 27990ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 280983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington 2811658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu if (bus_connection_is_active (connection)) 2821658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu { 2831658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu /* We already handled an Hello message for this connection. */ 2841658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu dbus_set_error (error, DBUS_ERROR_FAILED, 2851658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu "Already handled an Hello message"); 2861658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu return FALSE; 2871658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu } 2881658c8afe59166c9aa77549a3ac6a2e389327638Olivier Andrieu 289983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington /* Note that when these limits are exceeded we don't disconnect the 290983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * connection; we just sort of leave it hanging there until it times 291983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * out or disconnects itself or is dropped due to the max number of 292983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * incomplete connections. It's even OK if the connection wants to 293983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington * retry the hello message, we support that. 294983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington */ 295983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington connections = bus_connection_get_connections (connection); 296983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington if (!bus_connections_check_limits (connections, connection, 297983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington error)) 298983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington { 299983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 300983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington return FALSE; 301983200f912f41ba75a873c011bfbcd3b0285bf4cHavoc Pennington } 30229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 303fa05de9230d62e7c427b5313796fc6ccd4d0ff60Havoc Pennington if (!_dbus_string_init (&unique_name)) 30429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 30529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 30629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 30729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 308f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 30929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = FALSE; 3106ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 3116ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 31229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 3136ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington if (!create_unique_client_name (registry, &unique_name)) 31429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 31529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 31629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 31729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 31897ee8d189948c9f2c86464ca33f82e6daeaedc72Anders Carlsson 319e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington if (!bus_connection_complete (connection, &unique_name, error)) 32029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 321e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 32229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 32329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 32429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 32529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_set_sender (message, 32629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington bus_connection_get_name (connection))) 32729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 32829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 32929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 33029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 331d5ad082fecbbd803fd89b3574ac137b3fa964bc7Anders Carlsson 33229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!bus_driver_send_welcome_message (connection, message, transaction, error)) 33329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 33497ee8d189948c9f2c86464ca33f82e6daeaedc72Anders Carlsson 335aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson /* Create the service */ 3366ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington service = bus_registry_ensure (registry, 3376ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington &unique_name, connection, transaction, error); 33829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (service == NULL) 33929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out_0; 340ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 34129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington bus_service_set_prohibit_replacement (service, TRUE); 342aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 343a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_assert (bus_connection_is_active (connection)); 34429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 34529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 34629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out_0: 347aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_string_free (&unique_name); 34829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 349aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 350aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 35129560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 352aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlssonbus_driver_send_welcome_message (DBusConnection *connection, 35329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *hello_message, 35429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 35529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 356aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 357aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson DBusMessage *welcome; 358aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson const char *name; 35990ed1d84588a84697051e643175452c50d682eceHavoc Pennington 36090ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 361aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 362aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson name = bus_connection_get_name (connection); 363aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_assert (name != NULL); 364aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 365b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington welcome = dbus_message_new_method_return (hello_message); 36629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (welcome == NULL) 36729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 36829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 36929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 37029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 37139dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 37229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_append_args (welcome, 37329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, name, 374e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 37529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 37629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (welcome); 37729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 37829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 37929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 38029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 381777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, welcome)) 38229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 38329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (welcome); 38429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 38529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 38629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 38729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 38829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 38929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (welcome); 39029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 39129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 392aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 393aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 39429560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 395a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlssonbus_driver_handle_list_services (DBusConnection *connection, 39629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 39729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 39829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 399a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson{ 400a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson DBusMessage *reply; 40129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington int len; 402a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson char **services; 4036ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 40490ed1d84588a84697051e643175452c50d682eceHavoc Pennington 40590ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 4066ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 4076ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 4086ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 409b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington reply = dbus_message_new_method_return (message); 41029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply == NULL) 41129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 41229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 41329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 41429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 415a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 4166ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington if (!bus_registry_list_services (registry, &services, &len)) 41729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 41829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 41929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 42029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 42129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 42229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 42329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_append_args (reply, 424c5020ac870c5990a36c3576453cc23431213e8bfAlexander Larsson DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, services, len, 425e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 42629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 42729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_free_string_array (services); 42829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 42929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 43029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 43129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 43239dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 43329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_free_string_array (services); 43429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 435777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 436a1a53c32422230fb76e8e3bca67c877dd2857563Havoc Pennington { 43729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 43829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 43929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 44029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 44129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 44229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 44329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_message_unref (reply); 44429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return TRUE; 445a1a53c32422230fb76e8e3bca67c877dd2857563Havoc Pennington } 446a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson} 447a16e83f45d33ae5f3bd5966416c57c8ad4448ae8Anders Carlsson 44829560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 44934e6c6ff31e0bd27bf18c0e3c68b3a1ea9f0448dAnders Carlssonbus_driver_handle_acquire_service (DBusConnection *connection, 45029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 45129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 45229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 453aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson{ 454ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson DBusMessage *reply; 455aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson DBusString service_name; 456ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson char *name; 457ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson int service_reply; 4588a2c91b8a549402040c94b45b063311975583efdOlivier Andrieu dbus_uint32_t flags; 45929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 4606ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusRegistry *registry; 46190ed1d84588a84697051e643175452c50d682eceHavoc Pennington 46290ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 4636ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 4646ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington registry = bus_connection_get_registry (connection); 465ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 466c5020ac870c5990a36c3576453cc23431213e8bfAlexander Larsson if (!dbus_message_get_args (message, error, 46729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, &name, 46829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_UINT32, &flags, 469e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 47029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 471ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 47229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington _dbus_verbose ("Trying to own service %s with flags 0x%x\n", name, flags); 4736c241c1035a74f9ad4a526424a0be5c816bc61cbHavoc Pennington 4746c241c1035a74f9ad4a526424a0be5c816bc61cbHavoc Pennington retval = FALSE; 4756c241c1035a74f9ad4a526424a0be5c816bc61cbHavoc Pennington reply = NULL; 476aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 477aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson _dbus_string_init_const (&service_name, name); 478ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 4796be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington if (!bus_registry_acquire_service (registry, connection, 4806be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington &service_name, flags, 4816be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington &service_reply, transaction, 4826be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington error)) 4836be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington goto out; 484aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson 485b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington reply = dbus_message_new_method_return (message); 48629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (reply == NULL) 48729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 48829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 48929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 490ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson } 49129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 4926be547d32f018c23ba56426a0bccd08baa2cf440Havoc Pennington if (!dbus_message_append_args (reply, DBUS_TYPE_UINT32, service_reply, DBUS_TYPE_INVALID)) 49329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 49429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 49529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 49629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 497ba60374e251cca8fe351b7dd4def595069323885James Willcox 498777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 49929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 50029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BUS_SET_OOM (error); 50129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington goto out; 50229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 50329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 50429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 50529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 50629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out: 507ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson dbus_free (name); 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; 5222091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge dbus_bool_t service_exists; 523ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 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, 5572091cdd4e1c58318ac75533e2ea4a92292e1783cJon Trowbridge 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); 575aa4b4ef5955606659557a40a2220090ee9c108d4Anders Carlsson dbus_free (name); 57629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 57729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 578aff24a72c18a43dbb6f2d85e6d2226a3c2ea8f10Anders Carlsson} 57939dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 58029560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstatic dbus_bool_t 581f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlssonbus_driver_handle_activate_service (DBusConnection *connection, 58229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 58329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 58429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 585f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson{ 586f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson dbus_uint32_t flags; 587f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson char *name; 58829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t retval; 5896ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington BusActivation *activation; 5906ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington 59190ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 59290ed1d84588a84697051e643175452c50d682eceHavoc Pennington 5936ecc14ffabcffb69aa938a67940db48272e05046Havoc Pennington activation = bus_connection_get_activation (connection); 594f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 59529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (!dbus_message_get_args (message, error, 59629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_STRING, &name, 59729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBUS_TYPE_UINT32, &flags, 598e9cb382daf7cef6396d1777c99f27a050f7ad4a8James Willcox DBUS_TYPE_INVALID)) 599eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 600eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 601eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("No memory to get arguments to ActivateService\n"); 602eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return FALSE; 603eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 604f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 60529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = FALSE; 606f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 60793f433a17a0aabff91a0384bf9c4f99c9cf30ae1Richard Hult if (!bus_activation_activate_service (activation, connection, transaction, FALSE, 608e55fd2c6706e41f6933e1656ac3da7527ee2514fHavoc Pennington message, name, error)) 609eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 610eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 611eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("bus_activation_activate_service() failed\n"); 612eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington goto out; 613eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 61429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 61529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington retval = TRUE; 61629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 61729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington out: 61829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_free (name); 61929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return retval; 620f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson} 621f116b1282f8482dff6dc797f64270d95f79b53a3Anders Carlsson 622a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonstatic dbus_bool_t 623a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonsend_ack_reply (DBusConnection *connection, 624a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusTransaction *transaction, 625a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *message, 626a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusError *error) 627a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington{ 628a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *reply; 629a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 630a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington reply = dbus_message_new_method_return (message); 631a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (reply == NULL) 632a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 633a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BUS_SET_OOM (error); 634a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 635a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 636a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 637a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!bus_transaction_send_from_driver (transaction, connection, reply)) 638a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 639a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BUS_SET_OOM (error); 640a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_message_unref (reply); 641a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 642a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 643a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 644a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_message_unref (reply); 645a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 646a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return TRUE; 647a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington} 648a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 649a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonstatic dbus_bool_t 650a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonbus_driver_handle_add_match (DBusConnection *connection, 651a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusTransaction *transaction, 652a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *message, 653a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusError *error) 654a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington{ 655a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchRule *rule; 656a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington char *text; 657a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusString str; 658a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchmaker *matchmaker; 659a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 660a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 661a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 662a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington text = NULL; 663a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = NULL; 664a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 665a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (bus_connection_get_n_match_rules (connection) >= 666a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_context_get_max_match_rules_per_connection (bus_transaction_get_context (transaction))) 667a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 668a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED, 669a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington "Connection \"%s\" is not allowed to add more match rules " 670a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington "(increase limits in configuration file if required)", 671a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_connection_is_active (connection) ? 672a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_connection_get_name (connection) : 673a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington "(inactive)"); 674a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 675a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 676a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 677a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!dbus_message_get_args (message, error, 678a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_STRING, &text, 679a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_INVALID)) 680a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 681a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_verbose ("No memory to get arguments to AddMatch\n"); 682a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 683a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 684a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 685a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_string_init_const (&str, text); 686a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 687a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = bus_match_rule_parse (connection, &str, error); 688a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule == NULL) 689a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 690a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 691a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington matchmaker = bus_connection_get_matchmaker (connection); 692a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 693a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!bus_matchmaker_add_rule (matchmaker, rule)) 694a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 695a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BUS_SET_OOM (error); 696a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 697a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 698a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 699a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!send_ack_reply (connection, transaction, 700a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington message, error)) 701a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 702a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_matchmaker_remove_rule (matchmaker, rule); 703a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 704a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 705a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 706a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 707a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_free (text); 708a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 709a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return TRUE; 710a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 711a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington failed: 712a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 713a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule) 714a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 715a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (text) 716a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_free (text); 717a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 718a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington} 719a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 720a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonstatic dbus_bool_t 721a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Penningtonbus_driver_handle_remove_match (DBusConnection *connection, 722a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusTransaction *transaction, 723a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusMessage *message, 724a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusError *error) 725a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington{ 726a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchRule *rule; 727a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington char *text; 728a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBusString str; 729a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington BusMatchmaker *matchmaker; 730a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 731a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 732a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 733a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington text = NULL; 734a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = NULL; 735a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 736a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!dbus_message_get_args (message, error, 737a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_STRING, &text, 738a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington DBUS_TYPE_INVALID)) 739a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { 740a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_verbose ("No memory to get arguments to RemoveMatch\n"); 741a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 742a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington } 743a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 744a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _dbus_string_init_const (&str, text); 745a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 746a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington rule = bus_match_rule_parse (connection, &str, error); 747a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule == NULL) 748a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 749a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 750a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington /* Send the ack before we remove the rule, since the ack is undone 751a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington * on transaction cancel, but rule removal isn't. 752a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington */ 753a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!send_ack_reply (connection, transaction, 754a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington message, error)) 755a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 756a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 757a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington matchmaker = bus_connection_get_matchmaker (connection); 758a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 759a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (!bus_matchmaker_remove_rule_by_value (matchmaker, rule, error)) 760a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington goto failed; 761a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 762a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 763a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_free (text); 764a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 765a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return TRUE; 766a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 767a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington failed: 768a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 769a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (rule) 770a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington bus_match_rule_unref (rule); 771a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington if (text) 772a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington dbus_free (text); 773a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington return FALSE; 774a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington} 775a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington 776a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieustatic dbus_bool_t 777a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieubus_driver_handle_get_service_owner (DBusConnection *connection, 778a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BusTransaction *transaction, 779a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusMessage *message, 780a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusError *error) 781a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu{ 782a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu char *text; 783a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu const char *base_name; 784a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusString str; 785a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BusRegistry *registry; 786a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BusService *service; 787a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBusMessage *reply; 788a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 789a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _DBUS_ASSERT_ERROR_IS_CLEAR (error); 790a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 791a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu registry = bus_connection_get_registry (connection); 792a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 793a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu text = NULL; 794a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu reply = NULL; 795a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 796a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! dbus_message_get_args (message, error, 797a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_STRING, &text, 798a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_INVALID)) 799a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto failed; 800a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 801a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _dbus_string_init_const (&str, text); 802a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu service = bus_registry_lookup (registry, &str); 803a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (service == NULL) 804a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { 805a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_set_error (error, 806a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_ERROR_SERVICE_HAS_NO_OWNER, 807a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu "Could not get owner of service '%s': no such service", text); 808a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto failed; 809a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu } 810a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 811a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu base_name = bus_connection_get_name (bus_service_get_primary_owner (service)); 812a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (base_name == NULL) 813a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { 814a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_set_error (error, 815a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_ERROR_FAILED, 816a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu "Could not determine base service for '%s'", text); 817a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto failed; 818a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu } 819a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _dbus_assert (*base_name == ':'); 820a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 821a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu reply = dbus_message_new_method_return (message); 822a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (reply == NULL) 823a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 824a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 825a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! dbus_message_append_args (reply, 826a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_STRING, base_name, 827a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu DBUS_TYPE_INVALID)) 828a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 829a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 830a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (! bus_transaction_send_from_driver (transaction, connection, reply)) 831a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu goto oom; 832a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 833a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_message_unref (reply); 834a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_free (text); 835a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 836a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu return TRUE; 837a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 838a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu oom: 839a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu BUS_SET_OOM (error); 840a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 841a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu failed: 842a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu _DBUS_ASSERT_ERROR_IS_SET (error); 843a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu if (reply) 844a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_message_unref (reply); 845a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu dbus_free (text); 846a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu return FALSE; 847a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu} 848a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu 8491919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsbergstatic dbus_bool_t 8502779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieubus_driver_handle_get_connection_unix_user (DBusConnection *connection, 8512779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusTransaction *transaction, 8522779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusMessage *message, 8532779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusError *error) 8542779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu{ 8552779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu char *service; 8562779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusString str; 8572779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusRegistry *registry; 8582779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BusService *serv; 8592779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusConnection *conn; 8602779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBusMessage *reply; 8612779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu unsigned long uid; 8622779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8632779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _DBUS_ASSERT_ERROR_IS_CLEAR (error); 8642779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8652779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu registry = bus_connection_get_registry (connection); 8662779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8672779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu service = NULL; 8682779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu reply = NULL; 8692779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8702779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! dbus_message_get_args (message, error, 8712779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_STRING, &service, 8722779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_INVALID)) 8732779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 8742779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8752779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _dbus_verbose ("asked for UID of connection %s\n", service); 8762779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8772779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _dbus_string_init_const (&str, service); 8782779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu serv = bus_registry_lookup (registry, &str); 8792779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (serv == NULL) 8802779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { 8812779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_set_error (error, 8822779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_ERROR_SERVICE_HAS_NO_OWNER, 8832779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu "Could not get owner of service '%s': no such service", service); 8842779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 8852779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu } 8862779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8872779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu conn = bus_service_get_primary_owner (serv); 8882779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8892779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu reply = dbus_message_new_method_return (message); 8902779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (reply == NULL) 8912779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 8922779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 8932779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (!dbus_connection_get_unix_user (conn, &uid)) 8942779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { 8952779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_set_error (error, 8962779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_ERROR_FAILED, 8972779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu "Could not determine UID for '%s'", service); 8982779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto failed; 8992779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu } 9002779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9012779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! dbus_message_append_args (reply, 9022779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_UINT32, (dbus_uint32_t) uid, 9032779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu DBUS_TYPE_INVALID)) 9042779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 9052779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9062779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (! bus_transaction_send_from_driver (transaction, connection, reply)) 9072779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu goto oom; 9082779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9092779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_message_unref (reply); 9102779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_free (service); 9112779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9122779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu return TRUE; 9132779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9142779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu oom: 9152779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu BUS_SET_OOM (error); 9162779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9172779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu failed: 9182779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu _DBUS_ASSERT_ERROR_IS_SET (error); 9192779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu if (reply) 9202779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_message_unref (reply); 9212779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu dbus_free (service); 9222779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu return FALSE; 9232779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu} 9242779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu 9252779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieustatic dbus_bool_t 926c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthenbus_driver_handle_get_connection_unix_process_id (DBusConnection *connection, 927c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusTransaction *transaction, 928c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusMessage *message, 929c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusError *error) 930c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen{ 931c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen char *service; 932c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusString str; 933c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusRegistry *registry; 934c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BusService *serv; 935c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusConnection *conn; 936c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBusMessage *reply; 937c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen unsigned long pid; 938c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 939c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _DBUS_ASSERT_ERROR_IS_CLEAR (error); 940c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 941c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen registry = bus_connection_get_registry (connection); 942c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 943c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen service = NULL; 944c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen reply = NULL; 945c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 946c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! dbus_message_get_args (message, error, 947c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_STRING, &service, 948c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_INVALID)) 949c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 950c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 951c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _dbus_verbose ("asked for PID of connection %s\n", service); 952c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 953c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _dbus_string_init_const (&str, service); 954c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen serv = bus_registry_lookup (registry, &str); 955c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (serv == NULL) 956c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { 957c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_set_error (error, 958c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_ERROR_SERVICE_HAS_NO_OWNER, 959c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen "Could not get owner of service '%s': no such service", service); 960c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 961c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen } 962c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 963c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen conn = bus_service_get_primary_owner (serv); 964c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 965c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen reply = dbus_message_new_method_return (message); 966c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (reply == NULL) 967c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 968c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 969c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (!dbus_connection_get_unix_process_id (conn, &pid)) 970c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { 971c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_set_error (error, 972c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN, 973c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen "Could not determine PID for '%s'", service); 974c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto failed; 975c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen } 976c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 977c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! dbus_message_append_args (reply, 978c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_UINT32, (dbus_uint32_t) pid, 979c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen DBUS_TYPE_INVALID)) 980c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 981c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 982c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (! bus_transaction_send_from_driver (transaction, connection, reply)) 983c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen goto oom; 984c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 985c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_message_unref (reply); 986c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_free (service); 987c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 988c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen return TRUE; 989c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 990c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen oom: 991c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen BUS_SET_OOM (error); 992c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 993c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen failed: 994c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen _DBUS_ASSERT_ERROR_IS_SET (error); 995c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen if (reply) 996c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_message_unref (reply); 997c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen dbus_free (service); 998c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen return FALSE; 999c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen} 1000c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen 1001c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthenstatic dbus_bool_t 10021919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsbergbus_driver_handle_reload_config (DBusConnection *connection, 10031919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg BusTransaction *transaction, 10041919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg DBusMessage *message, 10051919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg DBusError *error) 10061919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg{ 10071919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg BusContext *context; 10081919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg dbus_bool_t retval; 10091919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10101919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg _DBUS_ASSERT_ERROR_IS_CLEAR (error); 10111919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10121919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg retval = FALSE; 10131919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10141919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg context = bus_connection_get_context (connection); 10151919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg if (!bus_context_reload_config (context, error)) 10161919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg { 10171919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg _DBUS_ASSERT_ERROR_IS_SET (error); 10181919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg goto out; 10191919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg } 10201919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10211919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg retval = TRUE; 10221919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 10231919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg out: 10241919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg return retval; 10251919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg} 10261919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg 102729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington/* For speed it might be useful to sort this in order of 102829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * frequency of use (but doesn't matter with only a few items 102929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * anyhow) 103029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington */ 103129560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtonstruct 103229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington{ 103329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington const char *name; 103429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington dbus_bool_t (* handler) (DBusConnection *connection, 103529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 103629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 103729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error); 103829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington} message_handlers[] = { 103968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { "AcquireService", bus_driver_handle_acquire_service }, 104068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { "ActivateService", bus_driver_handle_activate_service }, 104168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { "Hello", bus_driver_handle_hello }, 104268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { "ServiceExists", bus_driver_handle_service_exists }, 1043a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { "ListServices", bus_driver_handle_list_services }, 1044a683a80c409cc4f2e57ba6a3e60d52f91b8657d0Havoc Pennington { "AddMatch", bus_driver_handle_add_match }, 1045a470eaa0789662d3d3e1f0a23e75c7be2ab574ccOlivier Andrieu { "RemoveMatch", bus_driver_handle_remove_match }, 10461919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg { "GetServiceOwner", bus_driver_handle_get_service_owner }, 10472779cbf9766859d9fa6f693eb75732d226c496cdOlivier Andrieu { "GetConnectionUnixUser", bus_driver_handle_get_connection_unix_user }, 1048c9c0adce43caa00345ad2aeb55822eabde523c2cDavid Zeuthen { "GetConnectionUnixProcessID", bus_driver_handle_get_connection_unix_process_id }, 10491919d92d850f247d70cb6821724c4908bf70eedaKristian Høgsberg { "ReloadConfig", bus_driver_handle_reload_config } 105029560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington}; 105129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 105229560adcc79a259a0be3511c056ee7453aa26c04Havoc Penningtondbus_bool_t 105339dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlssonbus_driver_handle_message (DBusConnection *connection, 105429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington BusTransaction *transaction, 105529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusMessage *message, 105629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington DBusError *error) 105739dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson{ 105839dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson const char *name, *sender; 105929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington int i; 106090ed1d84588a84697051e643175452c50d682eceHavoc Pennington 106190ed1d84588a84697051e643175452c50d682eceHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 106268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 106368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL) 106468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { 106568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got a non-method-call message, ignoring\n"); 106668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington return TRUE; /* we just ignore this */ 106768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington } 106868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 106968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (dbus_message_get_interface (message) != NULL); 107068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (dbus_message_get_member (message) != NULL); 107168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 107268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington name = dbus_message_get_member (message); 107368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington sender = dbus_message_get_sender (message); 107429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 107568a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (strcmp (dbus_message_get_interface (message), 107668a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS) != 0) 107768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington { 107868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got message to unknown interface \"%s\"\n", 107968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington dbus_message_get_interface (message)); 108068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington goto unknown; 108168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington } 108268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington 108368a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("Driver got a method call: %s\n", 108468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington dbus_message_get_member (message)); 108539dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson 1086e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington /* security checks should have kept this from getting here */ 108768a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_assert (sender != NULL || strcmp (name, "Hello") == 0); 108829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 10893251264ac483680b4a5fe808729f7e3b34f41fd4Havoc Pennington if (dbus_message_get_reply_serial (message) != 0) 1090777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington { 1091777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington _dbus_verbose ("Client sent a reply to the bus driver, ignoring it\n"); 1092777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington return TRUE; 1093777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington } 1094777707ed8dff6958972a93894a87ec1945c65c14Havoc Pennington 109529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington i = 0; 109629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington while (i < _DBUS_N_ELEMENTS (message_handlers)) 109729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 109829560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if (strcmp (message_handlers[i].name, name) == 0) 109929560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington { 1100eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Running driver handler for %s\n", name); 110129560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington if ((* message_handlers[i].handler) (connection, transaction, message, error)) 1102eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 1103eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_CLEAR (error); 1104eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Driver handler succeeded\n"); 1105eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return TRUE; 1106eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 110729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington else 1108eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington { 1109eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _DBUS_ASSERT_ERROR_IS_SET (error); 1110eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington _dbus_verbose ("Driver handler returned failure\n"); 1111eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington return FALSE; 1112eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington } 111329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 111429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 111529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington ++i; 111629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington } 111729560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 111868a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington unknown: 111968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington _dbus_verbose ("No driver handler for message \"%s\"\n", 112068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington name); 1121eb63ba5039c8afe61210cf2b217ec75b4a86356eHavoc Pennington 11221d1b0f20a467cf1cbdcaf81fbad3a111bcff6c48Havoc Pennington dbus_set_error (error, DBUS_ERROR_UNKNOWN_METHOD, 112329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington "%s does not understand message %s", 112468a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington DBUS_SERVICE_ORG_FREEDESKTOP_DBUS, name); 112529560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington 112629560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington return FALSE; 1127ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson} 1128ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson 1129ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonvoid 1130ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlssonbus_driver_remove_connection (DBusConnection *connection) 1131ee1133de4dc5e181be5d09f084d8823388d5f693Anders Carlsson{ 113229560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington /* FIXME Does nothing for now, should unregister the connection 113329560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington * with the bus driver. 113429560adcc79a259a0be3511c056ee7453aa26c04Havoc Pennington */ 113539dd1fcee640b4a5a9abb453a9ccd5b7e099ba1cAnders Carlsson} 1136