#!/usr/bin/python

from bcc import BPF
from time import sleep
from ctypes import c_ushort, c_int, c_ulonglong
from sys import argv

b = BPF(src_file="dbus-message-type.c")

b.attach_uprobe(name="gio-2.0", sym="g_dbus_connection_send_message", fn_name="g_get_message_type")
#b.attach_uretprobe(name="dbus-1", sym="_dbus_header_get_message_type", fn_name="dbus_get_message_type")
b.attach_uprobe(name="dbus-1", sym="_dbus_connection_message_sent_unlocked", fn_name="message_type")

#b.trace_print()
count = 0
while(1):
	count += 1
	sleep(5)
	print("%d:" % count)
	print("%20s %20s" % ("MESSAGE_TYPE", "NUMBER\n"))
	print("%20s %20d" % ("INVALID", b["msg_type"][0].value))
	print("%20s %20d" % ("METHOD_CALL", b["msg_type"][1].value))
	print("%20s %20d" % ("METHOD_RETURN", b["msg_type"][2].value))
	print("%20s %20d" % ("ERROR", b["msg_type"][3].value))
	print("%20s %20d" % ("SIGNAL", b["msg_type"][4].value))
