blob: 7ecd3bf3d2bbe4be5f8eb7105d001f4d76d19cdf [file] [log] [blame]
Vadim Iosevichd50ea462017-03-30 16:19:08 +03001/*
2 * Copyright (c) 2017, The Linux Foundation. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution.
13 * * Neither the name of The Linux Foundation nor the names of its
14 * contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#ifndef _UDPSERVER_H_
31#define _UDPSERVER_H_
32
33#include <string>
34#include <thread>
35#include "HostDefinitions.h"
36#include "CommandsHandler.h"
Vadim Ioseviche76832c2017-11-05 09:09:14 +020037#include "UdpNetworkInterface.h"
Vadim Iosevichd50ea462017-03-30 16:19:08 +030038
39class Host;
40
41class UdpServer
42{
43public:
44 /*
45 UdpServer
46 Creates a UDP socket which receives messages from the network and can response using a broadcast option
47 */
48 UdpServer(unsigned int udpPortIn, unsigned int udpPortOut, Host& host);
49
50 /*
51 StartServer
52 Starts to receive messages, Handles the message and continue to the receive
53 @param: none
54 @return: none
55 */
56 void StartServer();
57
58 /*
59 StopServer
60 Stops receiving messages
61 @param: none
62 @return: none
63 */
64 void Stop();
65
66private:
67 /*
68 BlockingReceive
69 Waits for a UDP message and handles it
70 Assumption: m_pSocket is valid
71 @param: none
72 @return: none
73 */
74 void BlockingReceive();
75
76 /*
77 SendBroadcastMessage
78 Sends a message to all hosts in the subnet
79 Assumption: m_pSocket is valid
80 @param: responseMessage - the message to send
81 @return: none
82 */
83 void SendBroadcastMessage(ResponseMessage responseMessage);
84
85 unsigned int m_udpPortIn; // the local host port
86 unsigned int m_udpPortOut; // the remote host port
87 string m_broadcastIp;
Vadim Ioseviche76832c2017-11-05 09:09:14 +020088 unique_ptr<UdpNetworkInterface> m_pSocket;
Vadim Iosevichd50ea462017-03-30 16:19:08 +030089 CommandsHandler m_CommandHandler;
90 static const int m_maxMessageLength;
Vadim Ioseviche76832c2017-11-05 09:09:14 +020091 bool m_running;
Vadim Iosevichd50ea462017-03-30 16:19:08 +030092};
93
94
95#endif // !_UDPSERVER_H_