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 {
38 };
39 
46 class IpSocket {
47  public:
48  IpSocket();
49  virtual ~IpSocket(){};
68  SocketIpStatus configure(const char* hostname, const U16 port, const U32 send_timeout_seconds,
69  const U32 send_timeout_microseconds);
76  bool isStarted();
77 
87  bool isOpened();
88 
97  virtual SocketIpStatus startup();
98 
132  SocketIpStatus send(const U8* const data, const U32 size);
148  SocketIpStatus recv(U8* const data, I32& size);
155  void close();
156 
163  virtual void shutdown();
164 
165  PROTECTED:
166 
173 
180  static SocketIpStatus addressToIp4(const char* address, void* ip4);
193  virtual I32 sendProtocol(const U8* const data, const U32 size) = 0;
194 
201  virtual I32 recvProtocol( U8* const data, const U32 size) = 0;
202 
207  U16 m_port;
208  bool m_open;
209  bool m_started;
211 };
212 } // namespace Drv
213 
214 #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:23
Helper base-class for setting up Berkeley sockets.
Definition: IpSocket.hpp:46
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:117
U16 m_port
IP address port used.
Definition: IpSocket.hpp:207
bool isStarted()
Returns true when the socket is started.
Definition: IpSocket.cpp:101
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:109
virtual ~IpSocket()
Definition: IpSocket.hpp:49
char m_hostname[SOCKET_MAX_HOSTNAME_SIZE]
Hostname to supply.
Definition: IpSocket.hpp:210
SocketIpStatus recv(U8 *const data, I32 &size)
receive data from the IP socket from the given buffer
Definition: IpSocket.cpp:195
bool m_started
Have we successfully started the socket.
Definition: IpSocket.hpp:209
U32 m_timeoutSeconds
Definition: IpSocket.hpp:205
bool m_open
Have we successfully opened.
Definition: IpSocket.hpp:208
SocketIpStatus send(const U8 *const data, const U32 size)
send data out the IP socket from the given buffer
Definition: IpSocket.cpp:160
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:206
Os::Mutex m_lock
Definition: IpSocket.hpp:203
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:80
NATIVE_INT_TYPE m_fd
Definition: IpSocket.hpp:204
SocketIpStatus setupTimeouts(NATIVE_INT_TYPE socketFd)
setup the socket timeout properties of the opened outgoing socket
Definition: IpSocket.cpp:63
virtual void shutdown()
shutdown the socket
Definition: IpSocket.cpp:128
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:142
virtual SocketIpStatus startup()
startup the socket, a no-op on unless this is server
Definition: IpSocket.cpp:135
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_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