1dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat/*
2dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * Copyright (C) 2008 The Android Open Source Project
3dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat *
4dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * Licensed under the Apache License, Version 2.0 (the "License");
5dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * you may not use this file except in compliance with the License.
6dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * You may obtain a copy of the License at
7dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat *
8dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat *      http://www.apache.org/licenses/LICENSE-2.0
9dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat *
10dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * Unless required by applicable law or agreed to in writing, software
11dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * distributed under the License is distributed on an "AS IS" BASIS,
12dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * See the License for the specific language governing permissions and
14dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * limitations under the License.
15dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat */
163c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
17dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat#ifndef _NETWORKMANAGER_H
18dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat#define _NETWORKMANAGER_H
19dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat
20c4a895b7094461c98101924cf096680bfb7856f1San Mehat#include <utils/List.h>
211441e769b2767e212a3d905bee2fd3535b484ff2San Mehat#include <sysutils/SocketListener.h>
22dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat
231441e769b2767e212a3d905bee2fd3535b484ff2San Mehat#include "Controller.h"
243c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat#include "PropertyManager.h"
253aff2d1de59972684bf2ab798351be5544158239San Mehat#include "IControllerHandler.h"
26d6c6796670a5e566977b13d542020fb8cc88e6cfSan Mehat#include "IDhcpEventHandlers.h"
27dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat
28192331d9060763b92f7989124bedbd136689d735San Mehatclass InterfaceConfig;
29d6c6796670a5e566977b13d542020fb8cc88e6cfSan Mehatclass DhcpClient;
30192331d9060763b92f7989124bedbd136689d735San Mehat
31d6c6796670a5e566977b13d542020fb8cc88e6cfSan Mehatclass NetworkManager : public IControllerHandler, public IDhcpEventHandlers {
321441e769b2767e212a3d905bee2fd3535b484ff2San Mehat    static NetworkManager *sInstance;
331441e769b2767e212a3d905bee2fd3535b484ff2San Mehat
34c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class ControllerBinding {
35c4a895b7094461c98101924cf096680bfb7856f1San Mehat        Controller      *mController;
36c4a895b7094461c98101924cf096680bfb7856f1San Mehat        InterfaceConfig *mCurrentCfg;
37c4a895b7094461c98101924cf096680bfb7856f1San Mehat        InterfaceConfig *mBoundCfg;
38c4a895b7094461c98101924cf096680bfb7856f1San Mehat
39c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
40c4a895b7094461c98101924cf096680bfb7856f1San Mehat        ControllerBinding(Controller *c);
41c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~ControllerBinding() {}
42c4a895b7094461c98101924cf096680bfb7856f1San Mehat
43c4a895b7094461c98101924cf096680bfb7856f1San Mehat        InterfaceConfig *getCurrentCfg() { return mCurrentCfg; }
44c4a895b7094461c98101924cf096680bfb7856f1San Mehat        InterfaceConfig *getBoundCfg() { return mCurrentCfg; }
45c4a895b7094461c98101924cf096680bfb7856f1San Mehat        Controller *getController() { return mController; }
46c4a895b7094461c98101924cf096680bfb7856f1San Mehat
47c4a895b7094461c98101924cf096680bfb7856f1San Mehat        void setCurrentCfg(InterfaceConfig *cfg);
48c4a895b7094461c98101924cf096680bfb7856f1San Mehat        void setBoundCfg(InterfaceConfig *cfg);
49c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
50c4a895b7094461c98101924cf096680bfb7856f1San Mehat
51c4a895b7094461c98101924cf096680bfb7856f1San Mehat    typedef android::List<ControllerBinding *> ControllerBindingCollection;
52c4a895b7094461c98101924cf096680bfb7856f1San Mehat
531441e769b2767e212a3d905bee2fd3535b484ff2San Mehatprivate:
54c4a895b7094461c98101924cf096680bfb7856f1San Mehat    ControllerBindingCollection *mControllerBindings;
55c4a895b7094461c98101924cf096680bfb7856f1San Mehat    SocketListener              *mBroadcaster;
56c4a895b7094461c98101924cf096680bfb7856f1San Mehat    PropertyManager             *mPropMngr;
57c4a895b7094461c98101924cf096680bfb7856f1San Mehat    DhcpClient                  *mDhcp;
58c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int                         mLastDhcpState;
59dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat
60dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehatpublic:
613c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    virtual ~NetworkManager();
62dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat
63dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat    int run();
64dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat
651441e769b2767e212a3d905bee2fd3535b484ff2San Mehat    int attachController(Controller *controller);
661441e769b2767e212a3d905bee2fd3535b484ff2San Mehat
671441e769b2767e212a3d905bee2fd3535b484ff2San Mehat    Controller *findController(const char *name);
681441e769b2767e212a3d905bee2fd3535b484ff2San Mehat
691441e769b2767e212a3d905bee2fd3535b484ff2San Mehat    void setBroadcaster(SocketListener *sl) { mBroadcaster = sl; }
701441e769b2767e212a3d905bee2fd3535b484ff2San Mehat    SocketListener *getBroadcaster() { return mBroadcaster; }
713c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    PropertyManager *getPropMngr() { return mPropMngr; }
721441e769b2767e212a3d905bee2fd3535b484ff2San Mehat
731441e769b2767e212a3d905bee2fd3535b484ff2San Mehat    static NetworkManager *Instance();
741441e769b2767e212a3d905bee2fd3535b484ff2San Mehat
75dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehatprivate:
76dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat    int startControllers();
77dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat    int stopControllers();
784876567cb9c6a69ce21fd2b1c5bcce5a6f274276San Mehat
793c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    NetworkManager(PropertyManager *propMngr);
80c4a895b7094461c98101924cf096680bfb7856f1San Mehat    ControllerBinding *lookupBinding(Controller *c);
81c4a895b7094461c98101924cf096680bfb7856f1San Mehat
82c4a895b7094461c98101924cf096680bfb7856f1San Mehat    void onInterfaceConnected(Controller *c);
83c4a895b7094461c98101924cf096680bfb7856f1San Mehat    void onInterfaceDisconnected(Controller *c);
84c4a895b7094461c98101924cf096680bfb7856f1San Mehat    void onControllerSuspending(Controller *c);
85c4a895b7094461c98101924cf096680bfb7856f1San Mehat    void onControllerResumed(Controller *c);
86dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat
87c4a895b7094461c98101924cf096680bfb7856f1San Mehat    void onDhcpStateChanged(Controller *c, int state);
88c4a895b7094461c98101924cf096680bfb7856f1San Mehat    void onDhcpEvent(Controller *c, int event);
89c4a895b7094461c98101924cf096680bfb7856f1San Mehat    void onDhcpLeaseUpdated(Controller *c,
90c4a895b7094461c98101924cf096680bfb7856f1San Mehat                            struct in_addr *addr, struct in_addr *net,
91c4a895b7094461c98101924cf096680bfb7856f1San Mehat                            struct in_addr *brd,
92c4a895b7094461c98101924cf096680bfb7856f1San Mehat                            struct in_addr *gw, struct in_addr *dns1,
93c4a895b7094461c98101924cf096680bfb7856f1San Mehat                            struct in_addr *dns2);
94dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat};
95dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat#endif
96