40 #include <dbus/dbus.h>
66 message = dbus_connection_pop_message(handlep->
conn);
70 if (!dbus_connection_read_write(handlep->
conn, 100)) {
80 message = dbus_connection_pop_message(handlep->
conn);
83 if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL,
"Disconnected")) {
88 if (dbus_message_marshal(message, &raw_msg, &raw_msg_len)) {
96 callback(user, &pkth, (u_char *)raw_msg);
111 DBusError
error = DBUS_ERROR_INIT;
114 if (!(msg = dbus_message_demarshal(buf, size, &
error))) {
116 dbus_error_free(&
error);
120 dbus_connection_send(handlep->
conn, msg, NULL);
121 dbus_connection_flush(handlep->
conn);
123 dbus_message_unref(msg);
143 dbus_connection_unref(handlep->
conn);
158 "Non-blocking mode isn't supported for capturing on D-Bus");
166 "Non-blocking mode isn't supported for capturing on D-Bus");
173 #define EAVESDROPPING_RULE "eavesdrop=true,"
175 static const char *rules[] = {
182 #define N_RULES sizeof(rules)/sizeof(rules[0])
187 DBusError
error = DBUS_ERROR_INIT;
190 if (strcmp(dev,
"dbus-system") == 0) {
191 if (!(handlep->
conn = dbus_bus_get(DBUS_BUS_SYSTEM, &
error))) {
193 dbus_error_free(&
error);
197 }
else if (strcmp(dev,
"dbus-session") == 0) {
198 if (!(handlep->
conn = dbus_bus_get(DBUS_BUS_SESSION, &
error))) {
200 dbus_error_free(&
error);
204 }
else if (strncmp(dev,
"dbus://", 7) == 0) {
205 const char *addr = dev + 7;
207 if (!(handlep->
conn = dbus_connection_open(addr, &
error))) {
209 dbus_error_free(&
error);
213 if (!dbus_bus_register(handlep->
conn, &
error)) {
215 dbus_error_free(&
error);
284 for (i = 0; i <
N_RULES; i++) {
285 dbus_bus_add_match(handlep->
conn, rules[i], &
error);
286 if (dbus_error_is_set(&
error)) {
287 dbus_error_free(&
error);
291 if (dbus_error_is_set(&
error)) {
293 dbus_error_free(&
error);
308 if (strcmp(
device,
"dbus-system") &&
309 strcmp(
device,
"dbus-session") &&
310 strncmp(
device,
"dbus://", 7))
341 if (
add_dev(devlistp,
"dbus-system",
345 if (
add_dev(devlistp,
"dbus-session",
u_int pcap_filter(const struct bpf_insn *pc, const u_char *p, u_int wirelen, u_int buflen)
static void error(const char *,...)
int install_bpf_program(pcap_t *p, struct bpf_program *fp)
int snprintf(char *, size_t, const char *,...)
int gettimeofday(struct timeval *, struct timezone *)
#define EAVESDROPPING_RULE
int dbus_findalldevs(pcap_if_list_t *devlistp, char *err_str)
static void dbus_cleanup(pcap_t *handle)
static int dbus_read(pcap_t *handle, int max_packets, pcap_handler callback, u_char *user)
pcap_t * dbus_create(const char *device, char *ebuf, int *is_ours)
static int dbus_write(pcap_t *handle, const void *buf, int size)
static int dbus_stats(pcap_t *handle, struct pcap_stat *stats)
static int dbus_setnonblock(pcap_t *p, int nonblock)
static int dbus_getnonblock(pcap_t *p)
static int dbus_activate(pcap_t *handle)
pcap_if_t * add_dev(pcap_if_list_t *, const char *, bpf_u_int32, const char *, char *)
void pcap_cleanup_live_common(pcap_t *)
#define PCAP_CREATE_COMMON(ebuf, type)
#define PCAP_ERROR_RFMON_NOTSUP
#define PCAP_IF_CONNECTION_STATUS_NOT_APPLICABLE
void(* pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *)
struct bpf_insn * bf_insns
activate_op_t activate_op
setnonblock_op_t setnonblock_op
setfilter_op_t setfilter_op
getnonblock_op_t getnonblock_op
setdirection_op_t setdirection_op
set_datalink_op_t set_datalink_op