added: signal dbusserver to stop before joining the thread (other servers might follow)
[xbmc:paulepanters-xbmc.git] / XBMC / xbmc / utils / Network.h
1 #ifndef NETWORK_H_
2 #define NETWORK_H_
3
4 /*
5  *      Copyright (C) 2005-2008 Team XBMC
6  *      http://www.xbmc.org
7  *
8  *  This Program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2, or (at your option)
11  *  any later version.
12  *
13  *  This Program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with XBMC; see the file COPYING.  If not, write to
20  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21  *  http://www.gnu.org/copyleft/gpl.html
22  *
23  */
24
25 #include <vector>
26 #include "StdString.h"
27 #include "system.h"
28
29 enum EncMode { ENC_NONE = 0, ENC_WEP = 1, ENC_WPA = 2, ENC_WPA2 = 3 };
30 enum NetworkAssignment { NETWORK_DASH = 0, NETWORK_DHCP = 1, NETWORK_STATIC = 2, NETWORK_DISABLED = 3 };
31
32 class NetworkAccessPoint
33 {
34 public:
35    NetworkAccessPoint(CStdString& essId, int quality, EncMode encryption)
36    {
37       m_essId = essId;
38       m_quality = quality;
39       m_encryptionMode = encryption;
40    }
41
42    CStdString getEssId() { return m_essId; }
43    int getQuality() { return m_quality; }
44    EncMode getEncryptionMode() { return m_encryptionMode; }
45
46 private:
47    CStdString   m_essId;
48    int          m_quality;
49    EncMode      m_encryptionMode;
50 };
51
52 class CNetworkInterface
53 {
54 public:
55    virtual ~CNetworkInterface() {};
56
57    virtual CStdString& GetName(void) = 0;
58
59    virtual bool IsEnabled(void) = 0;
60    virtual bool IsConnected(void) = 0;
61    virtual bool IsWireless(void) = 0;
62
63    virtual CStdString GetMacAddress(void) = 0;
64
65    virtual CStdString GetCurrentIPAddress() = 0;
66    virtual CStdString GetCurrentNetmask() = 0;
67    virtual CStdString GetCurrentDefaultGateway(void) = 0;
68    virtual CStdString GetCurrentWirelessEssId(void) = 0;
69
70    // Returns the list of access points in the area
71    virtual std::vector<NetworkAccessPoint> GetAccessPoints(void) = 0;
72
73    virtual void GetSettings(NetworkAssignment& assignment, CStdString& ipAddress, CStdString& networkMask, CStdString& defaultGateway, CStdString& essId, CStdString& key, EncMode& encryptionMode) = 0;
74    virtual void SetSettings(NetworkAssignment& assignment, CStdString& ipAddress, CStdString& networkMask, CStdString& defaultGateway, CStdString& essId, CStdString& key, EncMode& encryptionMode) = 0;
75 };
76
77
78
79 class CNetwork
80 {
81 public:
82   enum EMESSAGE
83   {
84     SERVICES_UP,
85     SERVICES_DOWN
86   };
87
88    CNetwork();
89    virtual ~CNetwork();
90
91    // Return the list of interfaces
92    virtual std::vector<CNetworkInterface*>& GetInterfaceList(void) = 0;
93    CNetworkInterface* GetInterfaceByName(CStdString& name);
94
95    // Return the first interface which is active
96    CNetworkInterface* GetFirstConnectedInterface(void);
97
98    // Return true if there's at least one defined network interface
99    bool IsAvailable(bool wait = false);
100
101    // Return true if there's at least one interface which is connected
102    bool IsConnected(void);
103
104    // Get/set the nameserver(s)
105    virtual std::vector<CStdString> GetNameServers(void) = 0;
106    virtual void SetNameServers(std::vector<CStdString> nameServers) = 0;
107
108    // callback from application controlled thread to handle any setup
109    void NetworkMessage(EMESSAGE message, DWORD dwParam);
110    
111    void StartServices();
112    void StopServices(bool bWait);
113
114    static int ParseHex(char *str, unsigned char *addr);
115 };
116 #ifdef HAS_LINUX_NETWORK
117 #include "linux/NetworkLinux.h"
118 #else
119 #include "win32/NetworkWin32.h"
120 #endif
121 #endif