#include <sys/socket.h>
#endif
+#include <sys/socket.h>
#include <net/if.h>
#include <sys/time.h>
#include <errno.h>
#endif
-#define MAX_APS 10
-#define SEARCH_HEADER _("# Type IP Description")
+#define SEARCH_HEADER _(" # Type IP Name")
+
+#define MAX_APS LAST_ROW-7
extern int atmel410_filter;
-char q_press = 0;
+char q_pressed = 0;
int i, f_ifctr;
struct faps {
struct in_addr ip;
int type;
-} fapsa[MAX_APS];
+} *fapsa;
void scan_local_segment (struct sockaddr_in *from, struct sockaddr_in *to,
char *ifname)
extern WINDOW *main_sub;
extern char *ap_types[];
unsigned char message[1024], *start;
- /*
- * sysDescr OIDs used to detect AP type [in order of appearance
- * according to the 'for' loop below: ATMEL410, NWN, ATMEL12350
- */
+/*
char Wireless[3][12] = {
{0x2B, 0x06, 0x01, 0x04, 0x01, 0x83, 0x1A, 0x01, 0x01, 0x01, 0x01, 0x00},
{0x2B, 0x06, 0x01, 0x02, 0x01, 0x01, 0x01, 0x00},
{0x2B, 0x06, 0x01, 0x04, 0x01, 0xE0, 0x3E, 0x01, 0x01, 0x01, 0x01, 0x00}
};
+*/
+ /*
+ * operAccessPointName OIDs used to detect AP type [in order of appearance
+ * according to the 'for' loop below: ATMEL410, NWN, ATMEL12350]
+ */
+ char operAccessPointName[3][12] = {
+ {0x2B, 0x06, 0x01, 0x04, 0x01, 0x83, 0x1A, 0x01, 0x02, 0x01, 0x0A, 0x00},
+ {0x2B, 0x06, 0x01, 0x02, 0x01, 0x01, 0x05, 0x00},
+ {0x2B, 0x06, 0x01, 0x04, 0x01, 0xE0, 0x3E, 0x01, 0x02, 0x01, 0x0A, 0x00}
+ };
+
int scd_ap_type, last_searched_type=ATMEL12350;
int c, s2, errno, len, client_len = SIZE;
struct in_addr to_addr_reserv;
goto close_ret;
}
- mvwaddstr(main_sub, 15, 1, _("Scanning via network interface:"));
+ mvwaddstr(main_sub, LAST_ROW - 5, 1,
+ _("Scanning via network interface:"));
sprintf(message, _(" Index: %i"), f_ifctr);
- mvwaddstr(main_sub, 16, 1, message);
+ mvwaddstr(main_sub, LAST_ROW - 4, 1, message);
sprintf(message, _(" Name: %s"), ifname);
- mvwaddstr(main_sub, 17, 1, message);
+ mvwaddstr(main_sub, LAST_ROW - 3, 1, message);
sprintf(message, _(" IP: %s"), inet_ntoa(from->sin_addr));
- mvwaddstr(main_sub, 18, 1, message);
+ mvwaddstr(main_sub, LAST_ROW - 2, 1, message);
if(atmel410_filter) {
last_searched_type=ATMEL410;
}
for (scd_ap_type = ATMEL410; scd_ap_type <= last_searched_type; scd_ap_type++) {
- clear_main_new(19, 20);
+ clear_main_new(LAST_ROW - 1, LAST_ROW);
sprintf(message, _("Scanning for AP type: %s"), ap_types[scd_ap_type]);
- mvwaddstr(main_sub, 19, 1, message);
+ mvwaddstr(main_sub, LAST_ROW - 1, 1, message);
wrefresh(main_sub);
- varbinds[0].oid = Wireless[scd_ap_type];
+ varbinds[0].oid = operAccessPointName[scd_ap_type];
varbinds[0].len_oid =
(scd_ap_type == ATMEL410 || scd_ap_type == ATMEL12350) ?
- sizeof(Wireless[scd_ap_type]) : 8;
+ sizeof(operAccessPointName[scd_ap_type]) : 8;
varbinds[0].len_val = 0;
varbinds[0].type = NULL_VALUE;
len = ber(message, varbinds, 1, GET);
if (FD_ISSET(0, &rds)) {
c = getc(stdin);
if (c == 'q' || c == 'Q') {
- q_press = 1;
+ q_pressed = 1;
goto close_ret;
}
}
/* new AP (unique IP/APtype pair) found */
+ fapsa = realloc(fapsa, (i + 1) * sizeof(struct faps));
+
fapsa[i].ip = from->sin_addr;
fapsa[i].type = scd_ap_type;
- sprintf(message, "%2X %11s %15s", i, ap_types[fapsa[i].type],
+ sprintf(message, "%2i %11s %15s", i, ap_types[fapsa[i].type],
inet_ntoa(fapsa[i].ip));
i++;
mvwaddstr(main_sub, i, 0, message);
- for (len = 0; len < varbinds[0].len_val && start[len]; len++)
- mvwaddch(main_sub, i, len + 31, start[len]);
+
+ for (len = 0; len < 32 && start[len]; len++);
+ start[len + 1] = '\0';
+ mvwaddstr(main_sub, i, 30 + ((32 - len) / 2), start);
wrefresh(main_sub);
/* Bail out if the number of found devices exceeds sane limit. */
}
i = f_ifctr = 0;
+ fapsa = NULL;
/*
* Find all IPs of locally available IPv4 interfaces and corresponding
from.sin_port = INADDR_ANY;
to.sin_port = htons(161);
scan_local_segment(&from, &to, ifr->ifr_name);
- clear_main_new(15, 20);
+ clear_main_new(LAST_ROW - 5, LAST_ROW);
}
ifrec_ptr += ilen;
/* No need to process next interfaces if the table is already full, */
break;
/* or if someone pressed 'Q'. */
- if (q_press) {
- q_press = 0;
+ if (q_pressed) {
+ q_pressed = 0;
break;
}
}
"Press any key."));
} else {
if (i == MAX_APS)
- mvwaddstr(main_sub, 19, 1, _("Program-hardcoded maximum number "
- "of APs found."));
+ mvwaddstr(main_sub, LAST_ROW - 1, 1,
+ _("Single-screen maximum number of APs found."));
wrefresh(main_sub);
print_help(_("# - connect to AP; Q - quit"));
clear_main(0);
connect_options(fapsa[ac-'0'].ip.s_addr,
fapsa[ac-'0'].type + 1);
+ free(fapsa);
return;
}
}
if (ifbuf_ptr)
free(ifbuf_ptr);
+ if (fapsa)
+ free(fapsa);
+
print_help("");
print_title("");
clear_main(0);