cosmetic, factor out starting and stopping to separate methods
[xbmc:paulepanters-xbmc.git] / XBMC / xbmc / utils / Network.cpp
1 /*
2  *      Copyright (C) 2005-2008 Team XBMC
3  *      http://www.xbmc.org
4  *
5  *  This Program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This Program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with XBMC; see the file COPYING.  If not, write to
17  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
18  *  http://www.gnu.org/copyleft/gpl.html
19  *
20  */
21
22 #include "system.h"
23 #include "Network.h"
24 #include "../Application.h"
25 #include "../lib/libscrobbler/lastfmscrobbler.h"
26 #include "../lib/libscrobbler/librefmscrobbler.h"
27 #include "RssReader.h"
28
29 using namespace std;
30
31 CNetwork::CNetwork()
32 {
33    g_application.getApplicationMessenger().NetworkMessage(SERVICES_UP, 0);
34 }
35
36 CNetwork::~CNetwork()
37 {
38    g_application.getApplicationMessenger().NetworkMessage(SERVICES_DOWN, 0);
39 }
40
41 int CNetwork::ParseHex(char *str, unsigned char *addr)
42 {
43    int len = 0;
44
45    while (*str)
46    {
47       int tmp;
48       if (str[1] == 0)
49          return -1;
50       if (sscanf(str, "%02x", (unsigned int *)&tmp) != 1)
51          return -1;
52       addr[len] = tmp;
53       len++;
54       str += 2;
55    }
56
57    return len;
58 }
59
60 CNetworkInterface* CNetwork::GetFirstConnectedInterface()
61 {
62    vector<CNetworkInterface*>& ifaces = GetInterfaceList();
63    vector<CNetworkInterface*>::const_iterator iter = ifaces.begin();
64    while (iter != ifaces.end())
65    {
66       CNetworkInterface* iface = *iter;
67       if (iface && iface->IsConnected())
68          return iface;
69       ++iter;
70    }
71
72    return NULL;
73 }
74
75 bool CNetwork::IsAvailable(bool wait /*= false*/)
76 {
77   if (wait)
78   {
79     // NOTE: Not implemented in linuxport branch as 99.9% of the time
80     //       we have the network setup already.  Trunk code has a busy
81     //       wait for 5 seconds here.
82   }
83
84   vector<CNetworkInterface*>& ifaces = GetInterfaceList();
85   return (ifaces.size() != 0);
86 }
87
88 bool CNetwork::IsConnected()
89 {
90    return GetFirstConnectedInterface() != NULL;
91 }
92
93 CNetworkInterface* CNetwork::GetInterfaceByName(CStdString& name)
94 {
95    vector<CNetworkInterface*>& ifaces = GetInterfaceList();
96    vector<CNetworkInterface*>::const_iterator iter = ifaces.begin();
97    while (iter != ifaces.end())
98    {
99       CNetworkInterface* iface = *iter;
100       if (iface && iface->GetName().Equals(name))
101          return iface;
102       ++iter;
103    }
104
105    return NULL;
106 }
107
108 void CNetwork::NetworkMessage(EMESSAGE message, DWORD dwParam)
109 {
110   switch( message )
111   {
112     case SERVICES_UP:
113     {
114       CLog::Log(LOGDEBUG, "%s - Starting network services",__FUNCTION__);
115       StartServices();
116     }
117     break;
118     case SERVICES_DOWN:
119     {
120       CLog::Log(LOGDEBUG, "%s - Stopping network services",__FUNCTION__);
121       StopServices();
122     }
123     break;
124   }
125 }
126
127 void CNetwork::StartServices()
128 {
129 #ifdef HAS_TIME_SERVER
130   g_application.StartTimeServer();
131 #endif
132 #ifdef HAS_WEB_SERVER
133   g_application.StartWebServer();
134 #endif
135 #ifdef HAS_FTP_SERVER
136   g_application.StartFtpServer();
137 #endif
138 #ifdef HAS_UPNP
139   g_application.StartUPnP();
140 #endif
141 #ifdef HAS_EVENT_SERVER
142   g_application.StartEventServer();
143 #endif
144 #ifdef HAS_DBUS_SERVER
145   g_application.StartDbusServer();
146 #endif
147 #ifdef HAS_ZEROCONF
148   g_application.StartZeroconf();
149 #endif
150   CLastfmScrobbler::GetInstance()->Init();
151   CLibrefmScrobbler::GetInstance()->Init();
152   g_rssManager.Start();
153 }
154
155 void CNetwork::StopServices()
156 {
157 #ifdef HAS_TIME_SERVER
158   g_application.StopTimeServer();
159 #endif
160 #ifdef HAS_WEB_SERVER
161   g_application.StopWebServer();
162 #endif
163 #ifdef HAS_FTP_SERVER
164   g_application.StopFtpServer();
165 #endif
166 #ifdef HAS_UPNP
167   g_application.StopUPnP();
168 #endif
169 #ifdef HAS_EVENT_SERVER
170   g_application.StopEventServer();
171 #endif
172 #ifdef HAS_DBUS_SERVER
173   g_application.StopDbusServer();
174 #endif
175 #ifdef HAS_ZEROCONF
176   g_application.StopZeroconf();
177 #endif      
178   CLastfmScrobbler::GetInstance()->Term();
179   CLibrefmScrobbler::GetInstance()->Term();
180   // smb.Deinit(); if any file is open over samba this will break.
181
182   g_rssManager.Stop();
183 }