|
|
@ -1,4 +1,7 @@ |
|
|
|
#include <QTimer> |
|
|
|
#include <interface.h> |
|
|
|
#include <wireless.h> |
|
|
|
#include <neighbor.h> |
|
|
|
#include "menu.h" |
|
|
|
|
|
|
|
Menu::Menu(WINDOW *window, QObject *parent) : |
|
|
@ -100,6 +103,8 @@ void Menu::mainmenu(WINDOW *window) { |
|
|
|
interfaceMenu(window); |
|
|
|
}else if(c == '2') { |
|
|
|
arpMenu(window); |
|
|
|
}else if(c == '3') { |
|
|
|
wifiInterfaceMenu(window); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -174,6 +179,69 @@ arpChar: |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void Menu::wifiInterfaceMenu(WINDOW *window) { |
|
|
|
wclear(window); |
|
|
|
|
|
|
|
cyan(window); |
|
|
|
box(window, 0, 0); |
|
|
|
|
|
|
|
red(window); |
|
|
|
mvwaddstr(window, 1, 2, "Wireless Interfaces:"); |
|
|
|
|
|
|
|
green(window); |
|
|
|
|
|
|
|
QStringList interfaceList = Wireless::interfaceList(); |
|
|
|
|
|
|
|
int count = 1; |
|
|
|
int y = 3; |
|
|
|
int lastInterface = 0; |
|
|
|
QHash<int, QString> interfaceHash; |
|
|
|
|
|
|
|
foreach(QString interface, interfaceList) { |
|
|
|
QString orig = interface; |
|
|
|
interface = QString::number(count) + ". " + interface; |
|
|
|
QByteArray interfaceArray = interface.toLatin1(); |
|
|
|
const char *interfaceStr = interfaceArray.constData(); |
|
|
|
|
|
|
|
mvwaddstr(window, y, 2, interfaceStr); |
|
|
|
|
|
|
|
lastInterface = count + '0'; |
|
|
|
|
|
|
|
interfaceHash.insert(lastInterface, orig); |
|
|
|
|
|
|
|
++y; |
|
|
|
++count; |
|
|
|
} |
|
|
|
|
|
|
|
cyan(window); |
|
|
|
mvwaddstr(window, y + 1, 2, "0. Back to main menu"); |
|
|
|
|
|
|
|
magenta(window); |
|
|
|
mvwaddstr(window, y + 3, 2, "q. Quit"); |
|
|
|
mvwaddstr(window, y + 5, 2, "Enter selection: "); |
|
|
|
wrefresh(window); |
|
|
|
|
|
|
|
char c = getch(); |
|
|
|
|
|
|
|
if(c < '0' || c > lastInterface) { |
|
|
|
if(c != 'q') { |
|
|
|
if(c == 27) { |
|
|
|
mainmenu(window); |
|
|
|
}else{ |
|
|
|
wifiInterfaceMenu(window); |
|
|
|
} |
|
|
|
} |
|
|
|
}else{ |
|
|
|
if(c == '0') { |
|
|
|
mainmenu(window); |
|
|
|
}else{ |
|
|
|
if(c > '0' && c <= lastInterface) { |
|
|
|
wifiInterfaceSelect(window, interfaceHash.value(c)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void Menu::interfaceMenu(WINDOW *window) { |
|
|
|
wclear(window); |
|
|
|
|
|
|
@ -237,6 +305,181 @@ void Menu::interfaceMenu(WINDOW *window) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void Menu::wifiInterfaceSelect(WINDOW *window, QString interface) { |
|
|
|
Wireless wir(interface); |
|
|
|
Interface obj(""); |
|
|
|
QStringList ipList; |
|
|
|
|
|
|
|
wclear(window); |
|
|
|
|
|
|
|
cyan(window); |
|
|
|
box(window, 0, 0); |
|
|
|
|
|
|
|
red(window); |
|
|
|
QString title = QString("Wireless info for: ") + interface; |
|
|
|
QByteArray array = title.toLatin1(); |
|
|
|
const char *data = array.constData(); |
|
|
|
|
|
|
|
mvwaddstr(window, 1, 2, data); |
|
|
|
mvwaddstr(window, 3, 2, "Bands:"); |
|
|
|
|
|
|
|
green(window); |
|
|
|
|
|
|
|
QList<Wireless::BandInfo> bands = wir.bandMap(); |
|
|
|
|
|
|
|
int count = 1; |
|
|
|
int y = 5; |
|
|
|
|
|
|
|
foreach(Wireless::BandInfo band, bands) { |
|
|
|
QString bandStr; |
|
|
|
|
|
|
|
switch(band.band) { |
|
|
|
case Wireless::BAND_2GHZ: |
|
|
|
{ |
|
|
|
bandStr = "2.4GHz"; |
|
|
|
break; |
|
|
|
} |
|
|
|
case Wireless::BAND_5GHZ: |
|
|
|
{ |
|
|
|
bandStr = "5GHz"; |
|
|
|
break; |
|
|
|
} |
|
|
|
default: |
|
|
|
{ |
|
|
|
bandStr = "Other"; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
QByteArray arr = bandStr.toLatin1(); |
|
|
|
const char *data = arr.constData(); |
|
|
|
|
|
|
|
mvwaddstr(window, y, 2, data); |
|
|
|
|
|
|
|
++y; |
|
|
|
++count; |
|
|
|
} |
|
|
|
|
|
|
|
if(count == 1) { |
|
|
|
mvwaddstr(window, y, 2, "No supported bands found."); |
|
|
|
++y; |
|
|
|
} |
|
|
|
|
|
|
|
cyan(window); |
|
|
|
mvwaddstr(window, y + 1, 2, "0. Back to wireless interfaces"); |
|
|
|
|
|
|
|
magenta(window); |
|
|
|
mvwaddstr(window, y + 3, 2, "a. Add IP address"); |
|
|
|
mvwaddstr(window, y + 4, 2, "d. Delete IP address"); |
|
|
|
mvwaddstr(window, y + 5, 2, "q. Quit"); |
|
|
|
|
|
|
|
mvwaddstr(window, y + 7, 2, "Enter selection: "); |
|
|
|
wrefresh(window); |
|
|
|
|
|
|
|
char c = getch(); |
|
|
|
|
|
|
|
if(c < '0' || c > (count + '0' - 1)) { |
|
|
|
if(c == 27) { |
|
|
|
wifiInterfaceMenu(window); |
|
|
|
}else if(c == 'q') { |
|
|
|
// no-op, just quit
|
|
|
|
}else if(c == 'a') { |
|
|
|
wdeleteln(window); |
|
|
|
mvwaddstr(window, y + 7, 2, "Enter IP address to add: "); |
|
|
|
wrefresh(window); |
|
|
|
|
|
|
|
char ipToAdd[19] = {0}; |
|
|
|
|
|
|
|
echo(); |
|
|
|
wgetnstr(window, ipToAdd, sizeof(ipToAdd) / sizeof(char) - 1); |
|
|
|
noecho(); |
|
|
|
|
|
|
|
QString ip = ipToAdd; |
|
|
|
|
|
|
|
if(!ip.contains(QRegularExpression("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/([5-9]|[1-2][0-9]|3[0-2])$"))) { |
|
|
|
msgbox("Invalid IP address. Please try again."); |
|
|
|
interfaceSelect(window, interface); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
wdeleteln(window); |
|
|
|
QString confirm = "Are you sure you want to add "; |
|
|
|
|
|
|
|
confirm += ip; |
|
|
|
confirm += " [y/n]? "; |
|
|
|
|
|
|
|
QByteArray arr = confirm.toLatin1(); |
|
|
|
const char *confirmStr = arr.constData(); |
|
|
|
|
|
|
|
mvwaddstr(window, y + 7, 2, confirmStr); |
|
|
|
wrefresh(window); |
|
|
|
|
|
|
|
c = getch(); |
|
|
|
|
|
|
|
if(c == 'y') { |
|
|
|
if(obj.addAddress(ip)) { |
|
|
|
msgbox("Could not add IP address. Not enough permissions?"); |
|
|
|
}else{ |
|
|
|
msgbox("IP address added successfully."); |
|
|
|
} |
|
|
|
|
|
|
|
interfaceSelect(window, interface); |
|
|
|
}else{ |
|
|
|
interfaceSelect(window, interface); |
|
|
|
} |
|
|
|
}else if(c == 'd') { |
|
|
|
wdeleteln(window); |
|
|
|
mvwaddstr(window, y + 7, 2, "Enter number of IP address to delete: "); |
|
|
|
wrefresh(window); |
|
|
|
char ipToDelete = getch(); |
|
|
|
|
|
|
|
if(ipToDelete < '1' || ipToDelete > '9') { |
|
|
|
interfaceSelect(window, interface); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if(!(ipList.count() >= ipToDelete - '0')) { |
|
|
|
interfaceSelect(window, interface); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
wdeleteln(window); |
|
|
|
QString confirm = "Are you sure you want to delete "; |
|
|
|
|
|
|
|
confirm += ipList[ipToDelete - '0' - 1]; |
|
|
|
confirm += " [y/n]? "; |
|
|
|
|
|
|
|
QByteArray arr = confirm.toLatin1(); |
|
|
|
const char *confirmStr = arr.constData(); |
|
|
|
|
|
|
|
mvwaddstr(window, y + 7, 2, confirmStr); |
|
|
|
wrefresh(window); |
|
|
|
|
|
|
|
c = getch(); |
|
|
|
|
|
|
|
if(c == 'y') { |
|
|
|
if(obj.deleteAddress(ipList[ipToDelete - '0' - 1])) { |
|
|
|
msgbox("Could not delete IP address. Not enough permissions?"); |
|
|
|
}else{ |
|
|
|
msgbox("IP address deleted successfully."); |
|
|
|
} |
|
|
|
|
|
|
|
interfaceSelect(window, interface); |
|
|
|
}else{ |
|
|
|
interfaceSelect(window, interface); |
|
|
|
} |
|
|
|
}else{ |
|
|
|
wifiInterfaceSelect(window, interface); |
|
|
|
} |
|
|
|
}else{ |
|
|
|
if(c == '0') { |
|
|
|
wifiInterfaceMenu(window); |
|
|
|
}else{ |
|
|
|
wifiInterfaceSelect(window, interface); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void Menu::interfaceSelect(WINDOW *window, QString interface) { |
|
|
|
wclear(window); |
|
|
|
|
|
|
|