@@ -333,10 +333,21 @@ int WD_GetPCSList(BSSDescriptor *Bss, u8* destbuff, u8 buffsize, u8 offset) {
333333 if (ret < 0 ) return WD_INVALIDBUFF ;
334334 if (IE .PCS_Count * 4 > buffsize ) return WD_BUFFTOOSMALL ;
335335
336- u8 IE_len = WD_GetIELength (Bss , IEID_SECURITY_RSN );
336+ u8 IE_len ;
337+ if (offset == RSN_OFFSET ) {
338+ IE_len = WD_GetIELength (Bss , IEID_SECURITY_RSN );
339+ } else {
340+ IE_len = WD_GetVendorSpecificIELength (Bss , OUI_WPA );
341+ }
342+
337343
338344 u8 buff [IE_len ];
339- WD_GetIE (Bss , IEID_SECURITY_RSN , buff , IE_len );
345+ if (offset == RSN_OFFSET ) {
346+ WD_GetIE (Bss , IEID_SECURITY_RSN , buff , IE_len );
347+ } else {
348+ WD_GetVendorSpecificIE (Bss , OUI_WPA , buff , IE_len );
349+ }
350+
340351
341352 memset (destbuff , 0 , buffsize );
342353 memcpy (destbuff , & buff [8 + offset ], IE .PCS_Count * 4 );
@@ -348,12 +359,21 @@ int WD_GetRSN_WPAEssentials(BSSDescriptor *Bss, IE_RSN_WPA *IE, u8 offset) {
348359 if (!Bss ) return WD_INVALIDBUFF ;
349360 if (!IE ) return WD_INVALIDBUFF ;
350361
351- u8 IE_size = WD_GetIELength (Bss , IEID_SECURITY_RSN );
352- if (IE_size < 0 ) return WD_NOTFOUND ;
362+ u8 IE_len ;
363+ if (offset == RSN_OFFSET ) {
364+ IE_len = WD_GetIELength (Bss , IEID_SECURITY_RSN );
365+ } else {
366+ IE_len = WD_GetVendorSpecificIELength (Bss , OUI_WPA );
367+ }
368+ if (IE_len < 0 ) return WD_NOTFOUND ;
369+
370+ u8 buff [IE_len ];
353371
354- u8 buff [IE_size ];
355-
356- WD_GetIE (Bss , IEID_SECURITY_RSN , buff , IE_size );
372+ if (offset == RSN_OFFSET ) {
373+ WD_GetIE (Bss , IEID_SECURITY_RSN , buff , IE_len );
374+ } else {
375+ WD_GetVendorSpecificIE (Bss , OUI_WPA , buff , IE_len );
376+ }
357377
358378 IE -> Version = buff [0 + offset ] | buff [1 + offset ] << 8 ;
359379 offset += 2 ;
@@ -388,7 +408,6 @@ u8 WD_GetSecurity(BSSDescriptor *Bss) {
388408 else if (buff [offset + 3 ] == 0x04 ) ret |= WD_WPA_AES ;
389409 offset += 4 ;
390410 }
391- return ret ;
392411 }
393412
394413 ie_len = WD_GetIELength (Bss , IEID_SECURITY_RSN );
@@ -399,7 +418,6 @@ u8 WD_GetSecurity(BSSDescriptor *Bss) {
399418
400419 u8 buff [IE .PCS_Count * 4 ];
401420 WD_GetPCSList (Bss , buff , IE .PCS_Count * 4 , RSN_OFFSET );
402-
403421 u8 offset = 0 ;
404422
405423 for (int i = 0 ; i < IE .PCS_Count ; i ++ ) {
0 commit comments