Flexiport  2.0.0
udpport.h
Go to the documentation of this file.
1 /* Flexiport
2  *
3  * Header file for the UDP port class.
4  *
5  * Copyright 2008-2011 Geoffrey Biggs geoffrey.biggs@aist.go.jp
6  * RT-Synthesis Research Group
7  * Intelligent Systems Research Institute,
8  * National Institute of Advanced Industrial Science and Technology (AIST),
9  * Japan
10  * All rights reserved.
11  *
12  * This file is part of Flexiport.
13  *
14  * Flexiport is free software; you can redistribute it and/or modify it
15  * under the terms of the GNU Lesser General Public License as published
16  * by the Free Software Foundation; either version 2.1 of the License,
17  * or (at your option) any later version.
18  *
19  * Flexiport is distributed in the hope that it will be useful, but
20  * WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with Flexiport. If not, see
26  * <http://www.gnu.org/licenses/>.
27  */
28 
29 #ifndef __UDPPORT_H
30 #define __UDPPORT_H
31 
32 #include <flexiport/port.h>
33 #include <flexiport/config.h>
34 
35 #include <map>
36 #include <string>
37 #if !defined (WIN32)
38  #include <netinet/in.h>
39 #endif
40 
45 namespace flexiport
46 {
47 
84 {
85  public:
86  UDPPort (std::map<std::string, std::string> options);
87  ~UDPPort ();
88 
92  void Open ();
94  void Close ();
96  ssize_t Read (void * const buffer, size_t count);
98  ssize_t ReadFull (void * const buffer, size_t count);
100  ssize_t ReadUntil (void * const buffer, size_t count, uint8_t terminator);
102  ssize_t ReadStringUntil (std::string &buffer, char terminator);
104  ssize_t Skip (size_t count);
107  ssize_t SkipUntil (uint8_t terminator, unsigned int count);
109  ssize_t BytesAvailable ();
111  ssize_t BytesAvailableWait ();
113  ssize_t Write (const void * const buffer, size_t count);
115  void Flush ();
117  void Drain ();
119  std::string GetStatus () const;
121  void SetTimeout (Timeout timeout);
123  void SetCanRead (bool canRead);
125  void SetCanWrite (bool canWrite);
127  bool IsOpen () const { return _open; }
128 
129  private:
130 #if !defined (WIN32)
131  #if defined (FLEXIPORT_HAVE_GETADDRINFO)
132  struct sockaddr _destSockAddr;
133  #else
134  struct sockaddr_in _destSockAddr;
135  #endif
136 #endif // !defined (WIN32)
137  int _sendSock; // Socket to send data from.
138  int _recvSock; // Socket to receive data on.
139 
140  std::string _destIP;
141  unsigned int _destPort;
142  std::string _recvIP;
143  unsigned int _recvPort;
144  bool _open;
145 
146  void CheckPort (bool read);
147 
148  bool ProcessOption (const std::string &option, const std::string &value);
149 
150  void OpenSender ();
151  void CloseSender ();
152  void OpenReceiver ();
153  void CloseReceiver ();
154  typedef enum {TIMED_OUT, DATA_AVAILABLE, CAN_WRITE} WaitStatus;
155  WaitStatus WaitForDataOrTimeout ();
156  bool IsDataAvailable ();
157  WaitStatus WaitForWritableOrTimeout ();
158  void SetSocketBlockingFlag ();
159 };
160 
161 } // namespace flexiport
162 
165 #endif // __UDPPORT_H
166 
#define FLEXIPORT_EXPORT
Definition: flexiport.h:44
bool IsOpen() const
Check if the port is open.
Definition: udpport.h:127
Base Port class.
Definition: port.h:81
UDP implementation of the Port class.
Definition: udpport.h:83
An object used to represent timeouts.
Definition: timeout.h:63