Example #1
0
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;
}
Example #2
0
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);
}
Example #3
0
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);
  }
Example #5
0
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;
}