00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00039 #include <stdio.h>
00040 #include <stdlib.h>
00041 #include <string.h>
00043 #include "easydbus-core.h"
00044 #include "debug.h"
00045 #include "utils.h"
00046
00060 inline int
00061 easydbus_conn_add_match_rule (EasyDbus_conn *data,
00062 enum event_type type, char *sender,
00063 char *interface, char *member, char *path,
00064 char *destination)
00065 {
00066 DBusError err;
00067
00068 dbus_error_init (&err);
00069
00070 struct EasyDbus_core *core = (struct EasyDbus_core *) data;
00071 char *buffer = NULL;
00072
00073 buffer = prepare_match_string (type, sender,
00074 interface, member, path,
00075 destination);
00076 if (buffer == NULL)
00077 return -1;
00078
00079 EasyDbusDebug ("MATCH_RULE = %s\n", buffer);
00080
00081 dbus_bus_add_match (core->conn, buffer, &err);
00082 dbus_connection_flush (core->conn);
00083
00084 if (dbus_error_is_set (&err)) {
00085 EasyDbusDebug ("Matched error (%s)\n", err.message);
00086 free (buffer);
00087 dbus_error_free (&err);
00088 return -1;
00089 }
00090
00091 dbus_error_free (&err);
00092 free (buffer);
00093 return 0;
00094 }
00095
00109 inline int
00110 easydbus_conn_remove_match_rule (EasyDbus_conn *data,
00111 enum event_type type, char *sender,
00112 char *interface, char *member, char *path,
00113 char *destination)
00114 {
00115 DBusError err;
00116
00117 struct EasyDbus_core *core = (struct EasyDbus_core *) data;
00118 char *buffer = NULL;
00119
00120 dbus_error_init (&err);
00121
00122 buffer = prepare_match_string (type, sender,
00123 interface, member, path,
00124 destination);
00125 if (buffer == NULL)
00126 return -1;
00127
00128 EasyDbusDebug ("Remove MATCH_RULE = %s\n", buffer);
00129
00130 dbus_bus_remove_match (core->conn, buffer, &err);
00131 dbus_connection_flush (core->conn);
00132
00133 if (dbus_error_is_set (&err)) {
00134 EasyDbusDebug ("Remove match error (%s)\n", err.message);
00135 dbus_error_free (&err);
00136 free (buffer);
00137 return -1;
00138 }
00139
00140 dbus_error_free (&err);
00141 free (buffer);
00142 return 0;
00143 }
00144
00145