static DBusHandlerResult message_handler(DBusConnection *conn, DBusMessage *msg, void *user_data) { const char *method = dbus_message_get_member(msg); const char *iface = dbus_message_get_interface(msg); if ((strcmp("Introspect", method) == 0) && (strcmp("org.freedesktop.DBus.Introspectable", iface) == 0)) return introspect(conn, msg); if (strcmp("org.bluez.Agent", iface) != 0) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; if (strcmp("Release", method) == 0) { g_main_loop_quit(main_loop); return generic_message(conn, msg); } else if (strcmp("RequestPasskey", method) == 0) return request_passkey_message(conn, msg); else if (strcmp("Authorize", method) == 0) return authorize_message(conn, msg); else if (strcmp("ConfirmModeChange", method) == 0) return confirm_mode_message(conn, msg); else if (strcmp("Cancel", method) == 0) return generic_message(conn, msg); return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; }
static DBusHandlerResult authorize_message(DBusConnection *conn, DBusMessage *msg) { DBusError derr; const char *device, *uuid; char response[16]; dbus_error_init(&derr); if (!dbus_message_get_args(msg, &derr, DBUS_TYPE_OBJECT_PATH, &device, DBUS_TYPE_STRING, &uuid, DBUS_TYPE_INVALID)) { fprintf(stderr, "Wrong reply signature: %s", derr.message); dbus_error_free(&derr); return error_message(conn, msg, "org.bluez.Error.Rejected", "Wrong reply signature"); } printf("Device: %s\nUUID: %s\n Authorize device? (y/n) ", device, uuid); scanf("%15s", response); if (response[0] != 'y') return error_message(conn, msg, "org.bluez.Error.Rejected", "Not Authorized"); return generic_message(conn, msg); }
static DBusHandlerResult confirm_mode_message(DBusConnection *conn, DBusMessage *msg) { DBusError derr; const char *mode; char response[17]; dbus_error_init(&derr); if (!dbus_message_get_args(msg, &derr, DBUS_TYPE_STRING, &mode, DBUS_TYPE_INVALID)) { fprintf(stderr, "%s", derr.message); dbus_error_free(&derr); return error_message(conn, msg, "org.bluez.Error.Rejected", "Wrong signature"); } printf("Confirm mode change: %s (y/n)\n", mode); scanf("%16s", response); if (response[0] != 'y') return error_message(conn, msg, "org.bluez.Error.Rejected", "Not Authorized"); return generic_message(conn, msg); }
std::string format_message_from_system(boost::uint32_t result) { LPTSTR buffer = NULL; BOOST_SCOPE_EXIT(&buffer) { buffer = reinterpret_cast<LPTSTR>(LocalFree(buffer)); assert(NULL == buffer); } BOOST_SCOPE_EXIT_END try { (void)check ( FormatMessage ( FORMAT_MESSAGE_FROM_SYSTEM // use system message tables to retrieve error text | FORMAT_MESSAGE_ALLOCATE_BUFFER // allocate buffer on local heap for error text | FORMAT_MESSAGE_IGNORE_INSERTS // We cannot know what insertion parameters system strings expect, so we send none. , NULL // unused with FORMAT_MESSAGE_FROM_SYSTEM , result , MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) , (LPTSTR)&buffer // output , 0 // minimum size for output buffer , NULL // No insertion parameters, as previously mentioned. ) ); if(buffer) { std::stringstream stream; return boost::algorithm::trim_right_copy(std::string(buffer)) + " (" + generic_message(result) + ")"; } } catch(...) { } return generic_message(result); }
int hs_error(hs_error_code err, const char *fmt, ...) { va_list ap; for (unsigned int i = 0; i < mask_count; i++) { if (mask[i] == err) return err; } if (fmt) { va_start(ap, fmt); logv(HS_LOG_ERROR, fmt, ap); va_end(ap); } else { hs_log(HS_LOG_ERROR, "%s", generic_message(err)); } return err; }