예제 #1
0
void WlanCoreImpl::cacheInterfaceInfo()
{
	m_deviceOk = false;
	memset(&m_deviceId, 0, sizeof(m_deviceId));
	PWLAN_INTERFACE_INFO_LIST intfList;
	if (ERROR_SUCCESS == m_wlanapi->WlanEnumInterfaces(m_wlanHandle, NULL, &intfList)) {
		if (intfList->dwNumberOfItems > 0) {
			const WLAN_INTERFACE_INFO *intf = intfList->InterfaceInfo + 0;
			m_deviceOk = true;
			m_deviceId = intf->InterfaceGuid;
			m_deviceState = intf->isState;
			m_deviceDesc = QString::fromWCharArray(intf->strInterfaceDescription);
		}
		m_wlanapi->WlanFreeMemory(intfList);
	}

	if (m_deviceOk) {
		cacheRadioState();
		cacheConnectionInfo();
	} else {
		setSoftwareEnabled(false);
		setHardwareEnabled(false);
		setEnabled(false);
		setSsid(QString());
		setMacAddress(QByteArray());
		setSignalQuality(0);
		setProfileName(QString());
		setConnected(false);
	}
}
예제 #2
0
void WlanCoreImpl::cacheConnectionInfo()
{
	QString profileName;
	QString ssid;
	bool connected = false;
	int signalQuality = 0;
	QByteArray macAddress;

	if (m_deviceOk) {
		PWLAN_CONNECTION_ATTRIBUTES conn;
		DWORD cb = sizeof(conn);
		WLAN_OPCODE_VALUE_TYPE vt;
		if (ERROR_SUCCESS == m_wlanapi->WlanQueryInterface(m_wlanHandle, &m_deviceId, wlan_intf_opcode_current_connection, NULL, &cb, reinterpret_cast<PVOID*>(&conn), &vt)) {
			profileName = QString::fromWCharArray(conn->strProfileName).trimmed();
			connected = (conn->isState == wlan_interface_state_connected);
			ssid = QString::fromLatin1(reinterpret_cast<char*>(conn->wlanAssociationAttributes.dot11Ssid.ucSSID), conn->wlanAssociationAttributes.dot11Ssid.uSSIDLength);
			signalQuality = conn->wlanAssociationAttributes.wlanSignalQuality;
			macAddress = QByteArray(reinterpret_cast<char*>(conn->wlanAssociationAttributes.dot11Bssid), 6);
			m_wlanapi->WlanFreeMemory(conn);
		}
	}

	setSsid(ssid);
	setMacAddress(macAddress);
	setSignalQuality(signalQuality);
	setProfileName(profileName);
	setConnected(connected);
}
예제 #3
0
/*
* Prepare a connection to a open network (not secure net) with this SSID.
* Params: SSID and its length.
* Or SSID as null terminated string.
*/
void MWiFi::ConnSetOpen(char *ssid, uint8_t lssid)
{
          setSsid(ssid,lssid);
          uint8_t lmess=2;
          uint8_t mess[lmess];
          mess[0]=1;
          mess[1]=0;
          sendLongMess(65,mess,lmess);      //cmd 65: to set non protected connection          
          receiveMessWait(3000); //ACK
}
예제 #4
0
int GSwifiInterface::connect(Security sec, const char* ssid, const char* phrase, WiFiMode mode)
{
    setSsid(sec, ssid, phrase);
    switch (mode) {
    case WM_INFRASTRUCTURE:
        return join();
    case WM_ADHOCK:
        return adhock();
    case WM_LIMITEDAP:
        return limitedap();
    }
    return -1;
}
예제 #5
0
/*
* Prepare a connection to a sicure network (WPA or WPA2). 
* Params: SSID and its length; password and its length.
* Or SSID and password as null terminated strings.
*/
void MWiFi::ConnSetWPA(char *ssid, uint8_t lssid, char *psw, uint8_t lpsw)
{
          setSsid(ssid,lssid);
          uint8_t lmess=4+lpsw;
          uint8_t mess[lmess];
          mess[0]=1;
          mess[1]=8;
          mess[2]=0;
          mess[3]=lpsw;
          memcpy(&mess[4],psw,lpsw);
          sendLongMess(68,mess,lmess);      //cmd 68: setting WPA or WPA2 connection
          receiveMessWait(3000);  //ACK
}
예제 #6
0
uint8_t MWiFi::ConnectWPAwithKeyEE(char *ssid,int EEadd)
{
          uint8_t lssid=strlen(ssid);
          setSsid(ssid,lssid);
          uint8_t lmess=4+32;
          uint8_t mess[lmess];
          mess[0]=1;
          mess[1]=7;                    //using key instead of password
          mess[2]=0;
          mess[3]=32;
          uint8_t i;for (i=0;i<32;i++)mess[4+i]=EEPROM.read(EEadd+1+i);
          sendLongMess(68,mess,lmess);  //cmd 68: setting WPA or WPA2 connection
          receiveMessWait(3000);  //ACK
          return Connect();
}
예제 #7
0
/*
* Connects ssid using numeric key (previously calculated on password base)
* Much faster than password connection.
* Returns 1 if connected or 0 otherwise.
*/
uint8_t MWiFi::ConnectWPAwithKey(char *ssid,uint8_t key[32])
{
          uint8_t lssid=strlen(ssid);
          setSsid(ssid,lssid);
          uint8_t lmess=4+32;
          uint8_t mess[lmess];
          mess[0]=1;
          mess[1]=7;                    //using key instead of password
          mess[2]=0;
          mess[3]=32;
          memcpy(&mess[4],key,32);
          sendLongMess(68,mess,lmess);  //cmd 68: setting WPA or WPA2 connection
          receiveMessWait(3000);  //ACK
          return Connect();
}
예제 #8
0
WirelessAccessPoint::WirelessAccessPoint(const QDBusObjectPath &objectPath, QObject *parent) :
    QObject(parent),
    m_objectPath(objectPath),
    m_securityFlags(0)
{
    QDBusInterface accessPointInterface(serviceString, m_objectPath.path(), accessPointInterfaceString, QDBusConnection::systemBus());
    if(!accessPointInterface.isValid()) {
        qCWarning(dcNetworkManager()) << "Invalid access point dbus interface";
        return;
    }

    // Init properties
    setSsid(accessPointInterface.property("Ssid").toString());
    setMacAddress(accessPointInterface.property("HwAddress").toString());
    setFrequency(accessPointInterface.property("Frequency").toDouble() / 1000);
    setSignalStrength(accessPointInterface.property("Strength").toUInt());
    setSecurityFlags(WirelessAccessPoint::ApSecurityModes(accessPointInterface.property("WpaFlags").toUInt()));
    setIsProtected((bool)accessPointInterface.property("Flags").toUInt());

    QDBusConnection::systemBus().connect(serviceString, objectPath.path(), accessPointInterfaceString, "PropertiesChanged", this, SLOT(onPropertiesChanged(QVariantMap)));
}