nexus: Add skeleton for DhcpClient

Signed-off-by: San Mehat <san@google.com>
This commit is contained in:
San Mehat 2009-06-22 10:37:54 -07:00
parent bfa2f8e9b5
commit 54962e0fd6
7 changed files with 270 additions and 1 deletions

View file

@ -34,7 +34,8 @@ LOCAL_SRC_FILES:= \
SupplicantConnectionTimeoutEvent.cpp \
SupplicantDisconnectedEvent.cpp \
SupplicantStatus.cpp \
TiwlanEventListener.cpp
TiwlanEventListener.cpp \
DhcpClient.cpp DhcpListener.cpp \
LOCAL_MODULE:= nexus

105
nexus/DhcpClient.cpp Normal file
View file

@ -0,0 +1,105 @@
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <arpa/inet.h>
#define LOG_TAG "DhcpClient"
#include <cutils/log.h>
#include <cutils/properties.h>
#include <sysutils/ServiceManager.h>
#include "DhcpClient.h"
#include "DhcpState.h"
#include "DhcpListener.h"
#include "IDhcpEventHandlers.h"
extern "C" {
int ifc_disable(const char *ifname);
int ifc_add_host_route(const char *ifname, uint32_t addr);
int ifc_remove_host_routes(const char *ifname);
int ifc_set_default_route(const char *ifname, uint32_t gateway);
int ifc_get_default_route(const char *ifname);
int ifc_remove_default_route(const char *ifname);
int ifc_reset_connections(const char *ifname);
int ifc_configure(const char *ifname, in_addr_t ipaddr, in_addr_t netmask, in_addr_t gateway, in_addr_t dns1, in_addr_t dns2);
int dhcp_do_request(const char *ifname,
in_addr_t *ipaddr,
in_addr_t *gateway,
in_addr_t *mask,
in_addr_t *dns1,
in_addr_t *dns2,
in_addr_t *server,
uint32_t *lease);
int dhcp_stop(const char *ifname);
int dhcp_release_lease(const char *ifname);
char *dhcp_get_errmsg();
}
DhcpClient::DhcpClient(IDhcpEventHandlers *handlers) :
mState(DhcpState::STOPPED), mHandlers(handlers) {
mServiceManager = new ServiceManager();
mListener = NULL;
}
DhcpClient::~DhcpClient() {
delete mServiceManager;
if (mListener)
delete mListener;
}
int DhcpClient::start(const char *interface) {
char svc[PROPERTY_VALUE_MAX];
snprintf(svc, sizeof(svc), "dhcpcd_ng:%s", interface);
if (mServiceManager->start(svc)) {
LOGE("Failed to start dhcp service");
return -1;
}
mListener = new DhcpListener(mHandlers);
if (mListener->startListener()) {
LOGE("Failed to start listener");
#if 0
mServiceManager->stop("dhcpcd_ng");
return -1;
#endif
delete mListener;
mListener = NULL;
}
mState = DhcpState::STARTED;
return 0;
}
int DhcpClient::stop() {
if (mListener) {
mListener->stopListener();
delete mListener;
mListener = NULL;
}
if (mServiceManager->stop("dhcpcd_ng"))
LOGW("Failed to stop DHCP service (%s)", strerror(errno));
mState = DhcpState::STOPPED;
return 0;
}

41
nexus/DhcpClient.h Normal file
View file

@ -0,0 +1,41 @@
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _DhcpClient_H
#define _DhcpClient_H
class IDhcpEventHandlers;
class ServiceManager;
class DhcpListener;
class DhcpClient {
int mState;
IDhcpEventHandlers *mHandlers;
ServiceManager *mServiceManager;
DhcpListener *mListener;
public:
DhcpClient(IDhcpEventHandlers *handlers);
virtual ~DhcpClient();
int getState() { return mState; }
int start(const char *interface);
int stop();
};
#endif

34
nexus/DhcpListener.cpp Normal file
View file

@ -0,0 +1,34 @@
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define LOG_TAG "DhcpListener"
#include <cutils/log.h>
#include <DhcpListener.h>
#include "IDhcpEventHandlers.h"
DhcpListener::DhcpListener(IDhcpEventHandlers *handlers) :
SocketListener("dhcp_ng", false) {
mHandlers = handlers;
}
DhcpListener::~DhcpListener() {
}
bool DhcpListener::onDataAvailable(SocketClient *cli) {
LOGD("onDataAvailable()");
return true;
}

36
nexus/DhcpListener.h Normal file
View file

@ -0,0 +1,36 @@
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _DhcpListener_H
#define _DhcpListener_H
#include <sysutils/SocketListener.h>
class IDhcpEventHandlers;
class DhcpListener : public SocketListener {
IDhcpEventHandlers *mHandlers;
public:
DhcpListener(IDhcpEventHandlers *handlers);
virtual ~DhcpListener();
private:
bool onDataAvailable(SocketClient *cli);
};
#endif

27
nexus/DhcpState.h Normal file
View file

@ -0,0 +1,27 @@
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _DhcpState_H
#define _DhcpState_H
class DhcpState {
public:
static const int UNKNOWN = 0;
static const int STOPPED = 1;
static const int STARTED = 2;
};
#endif

View file

@ -0,0 +1,25 @@
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _IDhcpEventHandlers_H
#define _IDhcpEventHandlers_H
class IDhcpEventHandlers {
public:
};
#endif