13aff2d1de59972684bf2ab798351be5544158239San Mehat/* 23aff2d1de59972684bf2ab798351be5544158239San Mehat * Copyright (C) 2008 The Android Open Source Project 33aff2d1de59972684bf2ab798351be5544158239San Mehat * 43aff2d1de59972684bf2ab798351be5544158239San Mehat * Licensed under the Apache License, Version 2.0 (the "License"); 53aff2d1de59972684bf2ab798351be5544158239San Mehat * you may not use this file except in compliance with the License. 63aff2d1de59972684bf2ab798351be5544158239San Mehat * You may obtain a copy of the License at 73aff2d1de59972684bf2ab798351be5544158239San Mehat * 83aff2d1de59972684bf2ab798351be5544158239San Mehat * http://www.apache.org/licenses/LICENSE-2.0 93aff2d1de59972684bf2ab798351be5544158239San Mehat * 103aff2d1de59972684bf2ab798351be5544158239San Mehat * Unless required by applicable law or agreed to in writing, software 113aff2d1de59972684bf2ab798351be5544158239San Mehat * distributed under the License is distributed on an "AS IS" BASIS, 123aff2d1de59972684bf2ab798351be5544158239San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133aff2d1de59972684bf2ab798351be5544158239San Mehat * See the License for the specific language governing permissions and 143aff2d1de59972684bf2ab798351be5544158239San Mehat * limitations under the License. 153aff2d1de59972684bf2ab798351be5544158239San Mehat */ 163aff2d1de59972684bf2ab798351be5544158239San Mehat 173aff2d1de59972684bf2ab798351be5544158239San Mehat#include <stdlib.h> 183aff2d1de59972684bf2ab798351be5544158239San Mehat 193aff2d1de59972684bf2ab798351be5544158239San Mehat#define LOG_TAG "SupplicantEventFactory" 203aff2d1de59972684bf2ab798351be5544158239San Mehat#include <cutils/log.h> 213aff2d1de59972684bf2ab798351be5544158239San Mehat 223aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantEvent.h" 233aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantEventFactory.h" 243aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantAssociatingEvent.h" 253aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantAssociatedEvent.h" 263aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantConnectedEvent.h" 273aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantStateChangeEvent.h" 283aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantScanResultsEvent.h" 293aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantConnectionTimeoutEvent.h" 303aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantDisconnectedEvent.h" 313aff2d1de59972684bf2ab798351be5544158239San Mehat#if 0 323aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantTerminatingEvent.h" 333aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantPasswordChangedEvent.h" 343aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantEapNotificationEvent.h" 353aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantEapStartedEvent.h" 363aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantEapMethodEvent.h" 373aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantEapSuccessEvent.h" 383aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantEapFailureEvent.h" 393aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantLinkSpeedEvent.h" 403aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantDriverStateEvent.h" 413aff2d1de59972684bf2ab798351be5544158239San Mehat#endif 423aff2d1de59972684bf2ab798351be5544158239San Mehat 433aff2d1de59972684bf2ab798351be5544158239San Mehat#include "libwpa_client/wpa_ctrl.h" 443aff2d1de59972684bf2ab798351be5544158239San Mehat 453aff2d1de59972684bf2ab798351be5544158239San MehatSupplicantEventFactory::SupplicantEventFactory() { 463aff2d1de59972684bf2ab798351be5544158239San Mehat} 473aff2d1de59972684bf2ab798351be5544158239San Mehat 483aff2d1de59972684bf2ab798351be5544158239San MehatSupplicantEvent *SupplicantEventFactory::createEvent(char *event, size_t len) { 493aff2d1de59972684bf2ab798351be5544158239San Mehat int level = 0; 503aff2d1de59972684bf2ab798351be5544158239San Mehat 513aff2d1de59972684bf2ab798351be5544158239San Mehat if (event[0] == '<') { 523aff2d1de59972684bf2ab798351be5544158239San Mehat char *match = strchr(event, '>'); 533aff2d1de59972684bf2ab798351be5544158239San Mehat if (match) { 543aff2d1de59972684bf2ab798351be5544158239San Mehat char tmp[16]; 553aff2d1de59972684bf2ab798351be5544158239San Mehat 563aff2d1de59972684bf2ab798351be5544158239San Mehat strncpy(tmp, &event[1], (match - event)); 573aff2d1de59972684bf2ab798351be5544158239San Mehat level = atoi(tmp); 583aff2d1de59972684bf2ab798351be5544158239San Mehat event += (match - event) + 1; 593aff2d1de59972684bf2ab798351be5544158239San Mehat } else 603aff2d1de59972684bf2ab798351be5544158239San Mehat LOGW("Unclosed level brace in event"); 613aff2d1de59972684bf2ab798351be5544158239San Mehat } else 623aff2d1de59972684bf2ab798351be5544158239San Mehat LOGW("No level specified in event"); 633aff2d1de59972684bf2ab798351be5544158239San Mehat 643aff2d1de59972684bf2ab798351be5544158239San Mehat /* 653aff2d1de59972684bf2ab798351be5544158239San Mehat * <N>CTRL-EVENT-XXX 663aff2d1de59972684bf2ab798351be5544158239San Mehat * ^ 673aff2d1de59972684bf2ab798351be5544158239San Mehat * +---- event 683aff2d1de59972684bf2ab798351be5544158239San Mehat */ 693aff2d1de59972684bf2ab798351be5544158239San Mehat 703aff2d1de59972684bf2ab798351be5544158239San Mehat if (!strncmp(event, "Authentication with ", 20)) { 713aff2d1de59972684bf2ab798351be5544158239San Mehat if (!strcmp(event + strlen(event) - strlen(" timed out."), 723aff2d1de59972684bf2ab798351be5544158239San Mehat " timed out.")) { 733aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantConnectionTimeoutEvent(level, 743aff2d1de59972684bf2ab798351be5544158239San Mehat event + 20, 753aff2d1de59972684bf2ab798351be5544158239San Mehat len); 763aff2d1de59972684bf2ab798351be5544158239San Mehat } else 773aff2d1de59972684bf2ab798351be5544158239San Mehat return NULL; 783aff2d1de59972684bf2ab798351be5544158239San Mehat 793aff2d1de59972684bf2ab798351be5544158239San Mehat } else if (!strncmp(event, "Associated with ", 16)) 803aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantAssociatedEvent(level, event + 16, len); 813aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, "Trying to associate with ", 25)) 823aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantAssociatingEvent(level, event + 25, len); 833aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_CONNECTED, strlen(WPA_EVENT_CONNECTED))) { 843aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantConnectedEvent(level, 853aff2d1de59972684bf2ab798351be5544158239San Mehat event + strlen(WPA_EVENT_CONNECTED), 863aff2d1de59972684bf2ab798351be5544158239San Mehat len); 873aff2d1de59972684bf2ab798351be5544158239San Mehat } else if (!strncmp(event, WPA_EVENT_SCAN_RESULTS, strlen(WPA_EVENT_SCAN_RESULTS))) { 883aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantScanResultsEvent(level, 893aff2d1de59972684bf2ab798351be5544158239San Mehat event + strlen(WPA_EVENT_SCAN_RESULTS), 903aff2d1de59972684bf2ab798351be5544158239San Mehat len); 913aff2d1de59972684bf2ab798351be5544158239San Mehat } else if (!strncmp(event, WPA_EVENT_STATE_CHANGE, strlen(WPA_EVENT_STATE_CHANGE))) { 923aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantStateChangeEvent(level, 933aff2d1de59972684bf2ab798351be5544158239San Mehat event + strlen(WPA_EVENT_STATE_CHANGE), 943aff2d1de59972684bf2ab798351be5544158239San Mehat len); 953aff2d1de59972684bf2ab798351be5544158239San Mehat } 963aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_DISCONNECTED, strlen(WPA_EVENT_DISCONNECTED))) 973aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantDisconnectedEvent(level, event, len); 983aff2d1de59972684bf2ab798351be5544158239San Mehat#if 0 993aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_TERMINATING, strlen(WPA_EVENT_TERMINATING))) 1003aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantTerminatingEvent(event, len); 1013aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_PASSWORD_CHANGED, strlen(WPA_EVENT_PASSWORD_CHANGED))) 1023aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantPasswordChangedEvent(event, len); 1033aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_EAP_NOTIFICATION, strlen(WPA_EVENT_EAP_NOTIFICATION))) 1043aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantEapNotificationEvent(event, len); 1053aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_EAP_STARTED, strlen(WPA_EVENT_EAP_STARTED))) 1063aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantEapStartedEvent(event, len); 1073aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_EAP_METHOD, strlen(WPA_EVENT_EAP_METHOD))) 1083aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantEapMethodEvent(event, len); 1093aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_EAP_SUCCESS, strlen(WPA_EVENT_EAP_SUCCESS))) 1103aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantEapSuccessEvent(event, len); 1113aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_EAP_FAILURE, strlen(WPA_EVENT_EAP_FAILURE))) 1123aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantEapFailureEvent(event, len); 1133aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_LINK_SPEED, strlen(WPA_EVENT_LINK_SPEED))) 1143aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantLinkSpeedEvent(event, len); 1153aff2d1de59972684bf2ab798351be5544158239San Mehat else if (!strncmp(event, WPA_EVENT_DRIVER_STATE, strlen(WPA_EVENT_DRIVER_STATE))) 1163aff2d1de59972684bf2ab798351be5544158239San Mehat return new SupplicantDriverStateEvent(event, len); 1173aff2d1de59972684bf2ab798351be5544158239San Mehat#endif 1183aff2d1de59972684bf2ab798351be5544158239San Mehat return NULL; 1193aff2d1de59972684bf2ab798351be5544158239San Mehat} 120