Changeset 2189


Ignore:
Timestamp:
Sep 19, 2012, 3:29:56 PM (7 years ago)
Author:
matthijs
Message:

ap_client: Update to newer version.

This syncs some changes from the SIMPL firmware. In particular, it:

  • Fixes some signed vs unsigned warnings
  • Logs to syslog instead of stdout
  • Uses the IW_SCAN_MAX_DATA for buffer size instead of hardcoding 4096
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/fon/ap_client/src/ap_client.c

    r2004 r2189  
    6464struct survey_table
    6565{
    66         unsigned char channel[32];
     66        char channel[32];
    6767        long int strength;
    6868        int rssi;
    69         unsigned char mode[32];
    70         unsigned char ssid[66];
    71         unsigned char bssid[18];
    72         unsigned char enc[16];
    73         unsigned char crypto[16];
     69        char mode[32];
     70        char ssid[66];
     71        char bssid[18];
     72        char enc[16];
     73        char crypto[16];
    7474};
    7575
     
    111111
    112112#define RTPRIV_IOCTL_GSITESURVEY (SIOCIWFIRSTPRIV + 0x0D)
    113 void wifi_site_survey(const char *ifname)
    114 {
    115         unsigned char *s = malloc(4096);
     113void wifi_site_survey(const char *ifname, int print)
     114{
     115        char *s = malloc(IW_SCAN_MAX_DATA);
    116116        int ret;
    117117        int socket_id;
     
    120120        iwpriv(ifname, "SiteSurvey", "1");
    121121        sleep(5);
    122         memset(s, 0x00, 4096);
     122        memset(s, 0x00, IW_SCAN_MAX_DATA);
    123123        strcpy(wrq.ifr_name, ifname);
    124         wrq.u.data.length = 4096;
     124        wrq.u.data.length = IW_SCAN_MAX_DATA;
    125125        wrq.u.data.pointer = s;
    126126        wrq.u.data.flags = 0;
     
    137137        line = strtok((char *)start, "#");
    138138        survey_count = 0;
     139        if (!print)
     140                syslog(LOG_INFO, "Scan results: (channel  ssid  bssid  enc  crypto  strength  mode  rssi)");
    139141        while(line && (survey_count < 64))
    140142        {
     
    166168                        memcpy(st[survey_count].ssid, ssid2, 33);
    167169                }
    168 
    169                 printf(" %s  %s  %s  %s  %s  %ld  %s  %d\n",
    170                         st[survey_count].channel, st[survey_count].ssid, st[survey_count].bssid,
    171                         st[survey_count].enc, st[survey_count].crypto, st[survey_count].strength, st[survey_count].mode, st[survey_count].rssi);
     170                if (print) {
     171                        printf(" %s  %s  %s  %s  %s  %ld  %s  %d\n",
     172                                st[survey_count].channel, st[survey_count].ssid, st[survey_count].bssid,
     173                                st[survey_count].enc, st[survey_count].crypto, st[survey_count].strength, st[survey_count].mode, st[survey_count].rssi);
     174                } else {
     175                        syslog(LOG_INFO, " %s  %s  %s  %s  %s  %ld  %s  %d\n",
     176                                st[survey_count].channel, st[survey_count].ssid, st[survey_count].bssid,
     177                                st[survey_count].enc, st[survey_count].crypto, st[survey_count].strength, st[survey_count].mode, st[survey_count].rssi);
     178                }
     179
    172180                survey_count++;
    173181        }
     182        if (survey_count == 0 && !print)
     183                syslog(LOG_INFO, "No results");
    174184out:
    175185        free(s);
     
    262272                {
    263273                        struct survey_table *c;
    264                         printf("%s is not associated\n", APCLI_IFNAME);
    265                         printf("Scanning for networks...\n");
    266                         wifi_site_survey(ifname);
     274                        syslog(LOG_INFO, "%s is not associated\n", APCLI_IFNAME);
     275                        syslog(LOG_INFO, "Scanning for networks...\n");
     276                        wifi_site_survey(ifname, 0);
    267277                        c = wifi_find_ap(essid);
     278                        try_count++;
    268279                        assoc_count = 0;
    269                         try_count++;
    270280                        if(c)
    271281                        {
    272                                 printf("Found network, trying to associate (essid: %s, bssid: %s, channel: %s, enc: %s, crypto: %s\n", essid, c->ssid, c->channel, c->enc, c->crypto);
     282                                syslog(LOG_INFO, "Found network, trying to associate (essid: %s, bssid: %s, channel: %s, enc: %s, crypto: %s)\n", essid, c->ssid, c->channel, c->enc, c->crypto);
    273283                                #ifdef WITHOUT_MICROD
    274284                                wifi_repeater_start(APCLI_IFNAME, c->channel, essid, pass, c->enc, c->crypto);
     
    284294                                #endif
    285295                        } else {
    286                                 printf("No signal found to connect to\n");
     296                                syslog(LOG_INFO, "No signal found to connect to\n");
    287297                                #ifndef WITHOUT_MICROD
    288298                                microd_client("apcli|noessid");
     
    292302                } else {
    293303                        if (assoc_count == 0)
    294                                 printf("%s is associated\n", APCLI_IFNAME);
     304                                syslog(LOG_INFO, "%s is associated\n", APCLI_IFNAME);
    295305                        assoc_count++;
    296306                        if(assoc_count > 1)
     
    302312                        }
    303313                        if((assoc_count % 4) == 0)
    304                                 printf("%s is still associated\n", APCLI_IFNAME);
     314                                syslog(LOG_INFO, "%s is still associated\n", APCLI_IFNAME);
    305315                }
    306316                sleep(15);
     
    313323         * stdout to a file doesn't seem to work). */
    314324        setbuf(stdout, NULL);
     325        openlog("ap_client", 0, 0);
    315326        if(argc == 1)
    316                 wifi_site_survey(AP_IFNAME);
     327                wifi_site_survey(AP_IFNAME, 1);
    317328        else if(argc == 3)
    318329                assoc_loop(AP_IFNAME, argv[1], argv[2]);
    319         else
     330        else {
     331                syslog(LOG_CRIT, "invalid parameters\n");
    320332                printf("Usage: %s                          [scan networks]\n"
    321333                       "       %s <ssid> ""                [connect to open network]\n"
    322334                       "       %s <ssid> <key/psk>         [connect to WEP / WPA network]\n"
    323335                       , argv[0], argv[0], argv[0]);
     336        }
    324337        return 0;
    325338}
Note: See TracChangeset for help on using the changeset viewer.