mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2025-01-18 10:54:03 -05:00
wpa_gui-qt4: Add context menu for peers dialog
Replace the clicked() event with more appropriate context menu and add a WPS PIN entry as an example command.
This commit is contained in:
parent
7598210b79
commit
6a88ae863f
@ -14,10 +14,15 @@
|
|||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <QImageReader>
|
#include <QImageReader>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
#include "wpagui.h"
|
#include "wpagui.h"
|
||||||
|
#include "stringquery.h"
|
||||||
#include "peers.h"
|
#include "peers.h"
|
||||||
|
|
||||||
|
|
||||||
|
static const int peer_role_address = Qt::UserRole + 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO:
|
* TODO:
|
||||||
* - add pending WPS queries (from M1/PIN, PBC?)
|
* - add pending WPS queries (from M1/PIN, PBC?)
|
||||||
@ -30,9 +35,6 @@ Peers::Peers(QWidget *parent, const char *, bool, Qt::WFlags)
|
|||||||
{
|
{
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
|
|
||||||
connect(peers, SIGNAL(clicked(QModelIndex)), this,
|
|
||||||
SLOT(clicked(QModelIndex)));
|
|
||||||
|
|
||||||
if (QImageReader::supportedImageFormats().contains(QByteArray("svg")))
|
if (QImageReader::supportedImageFormats().contains(QByteArray("svg")))
|
||||||
default_icon = new QIcon(":/icons/wpa_gui.svg");
|
default_icon = new QIcon(":/icons/wpa_gui.svg");
|
||||||
else
|
else
|
||||||
@ -41,6 +43,10 @@ Peers::Peers(QWidget *parent, const char *, bool, Qt::WFlags)
|
|||||||
peers->setModel(&model);
|
peers->setModel(&model);
|
||||||
peers->setResizeMode(QListView::Adjust);
|
peers->setResizeMode(QListView::Adjust);
|
||||||
|
|
||||||
|
peers->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
connect(peers, SIGNAL(customContextMenuRequested(const QPoint &)),
|
||||||
|
this, SLOT(context_menu(const QPoint &)));
|
||||||
|
|
||||||
wpagui = NULL;
|
wpagui = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,11 +70,56 @@ void Peers::languageChange()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Peers::clicked(const QModelIndex & /*index*/)
|
void Peers::context_menu(const QPoint &pos)
|
||||||
{
|
{
|
||||||
/* QStandardItem *item = model.itemFromIndex(index); */
|
QMenu *menu = new QMenu;
|
||||||
/* TODO: give an option to provide PIN for WPS, etc. */
|
if (menu == NULL)
|
||||||
/* printf("Clicked: %s\n", item->text().toAscii().constData()); */
|
return;
|
||||||
|
|
||||||
|
QModelIndex idx = peers->indexAt(pos);
|
||||||
|
if (idx.isValid()) {
|
||||||
|
ctx_item = model.itemFromIndex(idx);
|
||||||
|
/* TODO: only for peers that are requesting WPS PIN method */
|
||||||
|
menu->addAction(QString("Enter WPS PIN"), this,
|
||||||
|
SLOT(enter_pin()));
|
||||||
|
} else {
|
||||||
|
ctx_item = NULL;
|
||||||
|
menu->addAction(QString("Refresh"), this, SLOT(ctx_refresh()));
|
||||||
|
}
|
||||||
|
|
||||||
|
menu->exec(peers->mapToGlobal(pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Peers::enter_pin()
|
||||||
|
{
|
||||||
|
if (ctx_item == NULL)
|
||||||
|
return;
|
||||||
|
QString addr = ctx_item->data(peer_role_address).toString();
|
||||||
|
StringQuery input(tr("PIN:"));
|
||||||
|
input.setWindowTitle(tr("PIN for ") + ctx_item->text());
|
||||||
|
if (input.exec() != QDialog::Accepted)
|
||||||
|
return;
|
||||||
|
|
||||||
|
char cmd[100];
|
||||||
|
char reply[100];
|
||||||
|
size_t reply_len;
|
||||||
|
snprintf(cmd, sizeof(cmd), "WPS_PIN %s %s",
|
||||||
|
addr.toAscii().constData(),
|
||||||
|
input.get_string().toAscii().constData());
|
||||||
|
reply_len = sizeof(reply) - 1;
|
||||||
|
if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) {
|
||||||
|
QMessageBox msg;
|
||||||
|
msg.setIcon(QMessageBox::Warning);
|
||||||
|
msg.setText("Failed to set the WPS PIN.");
|
||||||
|
msg.exec();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Peers::ctx_refresh()
|
||||||
|
{
|
||||||
|
update_peers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -115,6 +166,7 @@ void Peers::update_peers()
|
|||||||
|
|
||||||
QStandardItem *item = new QStandardItem(*default_icon, name);
|
QStandardItem *item = new QStandardItem(*default_icon, name);
|
||||||
if (item) {
|
if (item) {
|
||||||
|
item->setData(QString(reply), peer_role_address);
|
||||||
item->setToolTip(info);
|
item->setToolTip(info);
|
||||||
model.appendRow(item);
|
model.appendRow(item);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,9 @@ public:
|
|||||||
void setWpaGui(WpaGui *_wpagui);
|
void setWpaGui(WpaGui *_wpagui);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void clicked(const QModelIndex &index);
|
virtual void context_menu(const QPoint &pos);
|
||||||
|
virtual void enter_pin();
|
||||||
|
virtual void ctx_refresh();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
virtual void languageChange();
|
virtual void languageChange();
|
||||||
@ -43,6 +45,7 @@ private:
|
|||||||
WpaGui *wpagui;
|
WpaGui *wpagui;
|
||||||
QStandardItemModel model;
|
QStandardItemModel model;
|
||||||
QIcon *default_icon;
|
QIcon *default_icon;
|
||||||
|
QStandardItem *ctx_item;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* PEERS_H */
|
#endif /* PEERS_H */
|
||||||
|
37
wpa_supplicant/wpa_gui-qt4/stringquery.cpp
Normal file
37
wpa_supplicant/wpa_gui-qt4/stringquery.cpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* wpa_gui - StringQuery class
|
||||||
|
* Copyright (c) 2009, Atheros Communications
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Alternatively, this software may be distributed under the terms of BSD
|
||||||
|
* license.
|
||||||
|
*
|
||||||
|
* See README and COPYING for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
|
#include "stringquery.h"
|
||||||
|
|
||||||
|
|
||||||
|
StringQuery::StringQuery(QString label)
|
||||||
|
{
|
||||||
|
edit = new QLineEdit;
|
||||||
|
edit->setFocus();
|
||||||
|
QGridLayout *layout = new QGridLayout;
|
||||||
|
layout->addWidget(new QLabel(label), 0, 0);
|
||||||
|
layout->addWidget(edit, 0, 1);
|
||||||
|
setLayout(layout);
|
||||||
|
|
||||||
|
connect(edit, SIGNAL(returnPressed()), this, SLOT(accept()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString StringQuery::get_string()
|
||||||
|
{
|
||||||
|
return edit->text();
|
||||||
|
}
|
34
wpa_supplicant/wpa_gui-qt4/stringquery.h
Normal file
34
wpa_supplicant/wpa_gui-qt4/stringquery.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* wpa_gui - StringQuery class
|
||||||
|
* Copyright (c) 2009, Atheros Communications
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Alternatively, this software may be distributed under the terms of BSD
|
||||||
|
* license.
|
||||||
|
*
|
||||||
|
* See README and COPYING for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef STRINGQUERY_H
|
||||||
|
#define STRINGQUERY_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QGridLayout>
|
||||||
|
|
||||||
|
class StringQuery : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
StringQuery(QString label);
|
||||||
|
QString get_string();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QLineEdit *edit;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* STRINGQUERY_H */
|
@ -36,7 +36,8 @@ HEADERS += wpamsg.h \
|
|||||||
userdatarequest.h \
|
userdatarequest.h \
|
||||||
networkconfig.h \
|
networkconfig.h \
|
||||||
addinterface.h \
|
addinterface.h \
|
||||||
peers.h
|
peers.h \
|
||||||
|
stringquery.h
|
||||||
|
|
||||||
SOURCES += main.cpp \
|
SOURCES += main.cpp \
|
||||||
wpagui.cpp \
|
wpagui.cpp \
|
||||||
@ -46,6 +47,7 @@ SOURCES += main.cpp \
|
|||||||
networkconfig.cpp \
|
networkconfig.cpp \
|
||||||
addinterface.cpp \
|
addinterface.cpp \
|
||||||
peers.cpp \
|
peers.cpp \
|
||||||
|
stringquery.cpp \
|
||||||
../../src/common/wpa_ctrl.c
|
../../src/common/wpa_ctrl.c
|
||||||
|
|
||||||
RESOURCES += icons.qrc
|
RESOURCES += icons.qrc
|
||||||
|
Loading…
Reference in New Issue
Block a user