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