SoftapController.cpp revision 5af38c360587ca2eef0badf6137ccf018f8cd4aa
15af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt/* 25af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * Copyright (C) 2008 The Android Open Source Project 35af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * 45af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * Licensed under the Apache License, Version 2.0 (the "License"); 55af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * you may not use this file except in compliance with the License. 65af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * You may obtain a copy of the License at 75af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * 85af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * http://www.apache.org/licenses/LICENSE-2.0 95af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * 105af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * Unless required by applicable law or agreed to in writing, software 115af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * distributed under the License is distributed on an "AS IS" BASIS, 125af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * See the License for the specific language governing permissions and 145af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt * limitations under the License. 155af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt */ 165af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 175af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <stdlib.h> 185af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <errno.h> 195af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <fcntl.h> 205af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 215af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <sys/socket.h> 225af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <sys/stat.h> 235af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <sys/types.h> 245af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <sys/wait.h> 255af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 265af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <netinet/in.h> 275af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <arpa/inet.h> 285af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 295af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#define LOG_TAG "SoftapController" 305af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include <cutils/log.h> 315af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 325af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#include "SoftapController.h" 335af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 345af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry ShmidtSoftapController::SoftapController() { 355af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt mPid = 0; 365af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt} 375af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 385af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry ShmidtSoftapController::~SoftapController() { 395af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt} 405af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 415af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidtint SoftapController::startSoftap() { 425af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt pid_t pid = 1; 435af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 445af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt LOGD("Softap start"); 455af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt if (mPid) { 465af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt LOGE("Softap already started"); 475af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt errno = EBUSY; 485af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt return -1; 495af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt } 505af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#if 0 515af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt if ((pid = fork()) < 0) { 525af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt LOGE("fork failed (%s)", strerror(errno)); 535af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt return -1; 545af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt } 555af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#endif 565af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt if (!pid) { 575af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt LOGE("Softap Started"); 585af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt return 0; 595af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt } else { 605af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt mPid = pid; 615af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt } 625af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt return 0; 635af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 645af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt} 655af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 665af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidtint SoftapController::stopSoftap() { 675af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt LOGD("Softap stop"); 685af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt if (mPid == 0) { 695af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt LOGE("Softap already stopped"); 705af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt return 0; 715af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt } 725af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#if 0 735af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt LOGD("Stopping Softap service"); 745af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt kill(mPid, SIGTERM); 755af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt waitpid(mPid, NULL, 0); 765af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt#endif 775af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt mPid = 0; 785af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt LOGD("Softap service stopped"); 795af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt return 0; 805af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt} 815af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 825af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidtbool SoftapController::isSoftapStarted() { 835af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt return (mPid != 0 ? true : false); 845af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt} 855af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt 865af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidtint SoftapController::setSoftap(int argc, char *argv[]) { 875af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt LOGD("Softap set"); 885af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt return 0; 895af38c360587ca2eef0badf6137ccf018f8cd4aaDmitry Shmidt} 90