F´ Flight Software - C/C++ Documentation  devel
A framework for building embedded system applications to NASA flight quality standards.
IpSocket.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title IpSocket.hpp
3 // \author mstarch
4 // \brief hpp file for IpSocket core implementation classes
5 //
6 // \copyright
7 // Copyright 2009-2020, by the California Institute of Technology.
8 // ALL RIGHTS RESERVED. United States Government Sponsorship
9 // acknowledged.
10 //
11 // ======================================================================
12 #ifndef DRV_IP_IPHELPER_HPP_
13 #define DRV_IP_IPHELPER_HPP_
14 
15 #include <FpConfig.hpp>
16 #include <IpCfg.hpp>
17 #include <Os/Mutex.hpp>
18 
19 namespace Drv {
39 };
40 
47 class IpSocket {
48  public:
49  IpSocket();
50  virtual ~IpSocket(){};
69  SocketIpStatus configure(const char* hostname, const U16 port, const U32 send_timeout_seconds,
70  const U32 send_timeout_microseconds);
77  bool isStarted();
78 
88  bool isOpened();
89 
98  virtual SocketIpStatus startup();
99 
133  SocketIpStatus send(const U8* const data, const U32 size);
149  SocketIpStatus recv(U8* const data, U32& size);
156  void close();
157 
164  virtual void shutdown();
165 
166  PROTECTED:
177  virtual bool isValidPort(U16 port);
178 
185 
192  static SocketIpStatus addressToIp4(const char* address, void* ip4);
205  virtual I32 sendProtocol(const U8* const data, const U32 size) = 0;
206 
213  virtual I32 recvProtocol( U8* const data, const U32 size) = 0;
214 
219  U16 m_port;
220  bool m_open;
221  bool m_started;
223 };
224 } // namespace Drv
225 
226 #endif /* DRV_SOCKETIPDRIVER_SOCKETHELPER_HPP_ */
PlatformIntType NATIVE_INT_TYPE
Definition: BasicTypes.h:51
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.h:26
C++-compatible configuration header for fprime configuration.
@ SOCKET_MAX_HOSTNAME_SIZE
Definition: IpCfg.hpp:22
Helper base-class for setting up Berkeley sockets.
Definition: IpSocket.hpp:47
virtual I32 sendProtocol(const U8 *const data, const U32 size)=0
Protocol specific implementation of send. Called directly with retry from send.
void close()
closes the socket
Definition: IpSocket.cpp:123
U16 m_port
IP address port used.
Definition: IpSocket.hpp:219
bool isStarted()
Returns true when the socket is started.
Definition: IpSocket.cpp:107
virtual I32 recvProtocol(U8 *const data, const U32 size)=0
Protocol specific implementation of recv. Called directly with error handling from recv.
bool isOpened()
check if IP socket has previously been opened
Definition: IpSocket.cpp:115
virtual ~IpSocket()
Definition: IpSocket.hpp:50
char m_hostname[SOCKET_MAX_HOSTNAME_SIZE]
Hostname to supply.
Definition: IpSocket.hpp:222
bool m_started
Have we successfully started the socket.
Definition: IpSocket.hpp:221
U32 m_timeoutSeconds
Definition: IpSocket.hpp:217
bool m_open
Have we successfully opened.
Definition: IpSocket.hpp:220
SocketIpStatus send(const U8 *const data, const U32 size)
send data out the IP socket from the given buffer
Definition: IpSocket.cpp:168
SocketIpStatus configure(const char *hostname, const U16 port, const U32 send_timeout_seconds, const U32 send_timeout_microseconds)
configure the ip socket with host and transmission timeouts
Definition: IpSocket.cpp:53
U32 m_timeoutMicroseconds
Definition: IpSocket.hpp:218
Os::Mutex m_lock
Definition: IpSocket.hpp:215
static SocketIpStatus addressToIp4(const char *address, void *ip4)
converts a given address in dot form x.x.x.x to an ip address. ONLY works for IPv4.
Definition: IpSocket.cpp:86
virtual bool isValidPort(U16 port)
Check if the given port is valid for the socket.
Definition: IpSocket.cpp:65
NATIVE_INT_TYPE m_fd
Definition: IpSocket.hpp:216
SocketIpStatus recv(U8 *const data, U32 &size)
receive data from the IP socket from the given buffer
Definition: IpSocket.cpp:207
SocketIpStatus setupTimeouts(NATIVE_INT_TYPE socketFd)
setup the socket timeout properties of the opened outgoing socket
Definition: IpSocket.cpp:69
virtual void shutdown()
shutdown the socket
Definition: IpSocket.cpp:134
virtual SocketIpStatus openProtocol(NATIVE_INT_TYPE &fd)=0
Protocol specific open implementation, called from open.
SocketIpStatus open()
open the IP socket for communications
Definition: IpSocket.cpp:148
virtual SocketIpStatus startup()
startup the socket, a no-op on unless this is server
Definition: IpSocket.cpp:141
SocketIpStatus
Status enumeration for socket return values.
Definition: IpSocket.hpp:23
@ SOCK_INVALID_IP_ADDRESS
Bad IP address supplied.
Definition: IpSocket.hpp:27
@ SOCK_FAILED_TO_GET_HOST_IP
Host IP lookup failed.
Definition: IpSocket.hpp:26
@ SOCK_FAILED_TO_ACCEPT
Failed to accept connection.
Definition: IpSocket.hpp:35
@ SOCK_SUCCESS
Socket operation successful.
Definition: IpSocket.hpp:24
@ SOCK_FAILED_TO_BIND
Failed to bind to socket.
Definition: IpSocket.hpp:33
@ SOCK_DISCONNECTED
Failed to read socket with disconnect.
Definition: IpSocket.hpp:32
@ SOCK_READ_ERROR
Failed to read socket.
Definition: IpSocket.hpp:31
@ SOCK_FAILED_TO_SET_SOCKET_OPTIONS
Failed to configure socket.
Definition: IpSocket.hpp:29
@ SOCK_FAILED_TO_GET_SOCKET
Socket open failed.
Definition: IpSocket.hpp:25
@ SOCK_FAILED_TO_LISTEN
Failed to listen on socket.
Definition: IpSocket.hpp:34
@ SOCK_FAILED_TO_READ_BACK_PORT
Failed to read back port from connection.
Definition: IpSocket.hpp:38
@ SOCK_INTERRUPTED_TRY_AGAIN
Interrupted status for retries.
Definition: IpSocket.hpp:30
@ SOCK_FAILED_TO_CONNECT
Failed to connect socket.
Definition: IpSocket.hpp:28
@ SOCK_SEND_ERROR
Failed to send after configured retries.
Definition: IpSocket.hpp:36
@ SOCK_NOT_STARTED
Socket has not been started.
Definition: IpSocket.hpp:37