예제 #1
0
/* The content of this  function is copied in verbatim
 from dbus 0.20 file tools/dbus-print-message.c
 */
static DBusHandlerResult 
    _filter(DBusConnection *conn, DBusMessage *msg, void *data)
{
    const char *sender;
    int msg_type;
    DBusMessageIter args;
    DBusMessage *reply;
    char* sigvalue;

    msg_type = dbus_message_get_type (msg);
    sender = dbus_message_get_sender (msg); 
    
    if (dbus_message_is_method_call(msg,
				    "org.freedesktop.DBus.Introspectable",
				    "Introspect")) {
	    const char *introspection_xml;
	    introspection_xml = get_introspection_xml ();
	    
	    reply = dbus_message_new_method_return (msg);
	    dbus_message_append_args (reply, DBUS_TYPE_STRING, &introspection_xml,
				      DBUS_TYPE_INVALID);
	    
    } 

    if (dbus_message_is_signal(msg,                                 
			       INTERFACE, // interface name of the signal
			       NAME)) {
	    if (dbus_message_iter_init(msg, &args)) {
		    if (DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) {
			    int redalert = FALSE;
			    dbus_message_iter_get_basic(&args, &sigvalue);
			    if (strcmp(sigvalue, REDALERT) == 0) {
				    redalert = TRUE;
			    }

			    if (dbus_message_iter_next(&args)) {
				    if (DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) {
					    dbus_message_iter_get_basic(&args, &sigvalue);
				    }
			    }
			    alert_func(data, redalert, sigvalue);
			    return DBUS_HANDLER_RESULT_HANDLED;
		    }
	    }
    }
    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
예제 #2
0
void OS_Android::alert(const String &p_alert, const String &p_title) {

	//print("ALERT: %s\n", p_alert.utf8().get_data());
	if (alert_func)
		alert_func(p_alert, p_title);
}