F´ Flight Software - C/C++ Documentation
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 {
20 
21 struct SocketDescriptor final {
24 };
25 
49 };
50 
57 class IpSocket {
58  public:
59  IpSocket();
60  virtual ~IpSocket(){};
79  virtual SocketIpStatus configure(const char* hostname, const U16 port, const U32 send_timeout_seconds,
80  const U32 send_timeout_microseconds);
81 
100  SocketIpStatus open(SocketDescriptor& socketDescriptor);
117  SocketIpStatus send(const SocketDescriptor& socketDescriptor, const U8* const data, const U32 size);
134  SocketIpStatus recv(const SocketDescriptor& fd, U8* const data, U32& size);
135 
144  void close(const SocketDescriptor& socketDescriptor);
145 
157  void shutdown(const SocketDescriptor& socketDescriptor);
158 
159  PROTECTED:
170  virtual bool isValidPort(U16 port);
171 
178 
185  static SocketIpStatus addressToIp4(const char* address, void* ip4);
199  virtual I32 sendProtocol(const SocketDescriptor& socketDescriptor, const U8* const data, const U32 size) = 0;
200 
208  virtual I32 recvProtocol(const SocketDescriptor& socketDescriptor, U8* const data, const U32 size) = 0;
209 
212  U16 m_port;
214 };
215 } // namespace Drv
216 
217 #endif /* DRV_SOCKETIPDRIVER_SOCKETHELPER_HPP_ */
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:85
Failed to send after configured retries.
Definition: IpSocket.hpp:42
virtual bool isValidPort(U16 port)
Check if the given port is valid for the socket.
Definition: IpSocket.cpp:64
Failed to read socket with disconnect.
Definition: IpSocket.hpp:38
Socket open failed.
Definition: IpSocket.hpp:31
Interrupted status for retries.
Definition: IpSocket.hpp:36
SocketIpStatus send(const SocketDescriptor &socketDescriptor, const U8 *const data, const U32 size)
send data out the IP socket from the given buffer
Definition: IpSocket.cpp:131
Failed to connect socket.
Definition: IpSocket.hpp:34
Failed to configure socket.
Definition: IpSocket.hpp:35
Host IP lookup failed.
Definition: IpSocket.hpp:32
virtual ~IpSocket()
Definition: IpSocket.hpp:60
Automatic connections are disabled.
Definition: IpSocket.hpp:47
SocketIpStatus recv(const SocketDescriptor &fd, U8 *const data, U32 &size)
receive data from the IP socket from the given buffer
Definition: IpSocket.cpp:163
Bad IP address supplied.
Definition: IpSocket.hpp:33
Another thread is opening.
Definition: IpSocket.hpp:46
virtual SocketIpStatus openProtocol(SocketDescriptor &fd)=0
Protocol specific open implementation, called from open.
void shutdown(const SocketDescriptor &socketDescriptor)
shutdown the socket
Definition: IpSocket.cpp:110
Failed to listen on socket.
Definition: IpSocket.hpp:40
int PlatformIntType
DefaultTypes.hpp provides fallback defaults for the platform types.
U16 m_port
IP address port used.
Definition: IpSocket.hpp:212
Failed to accept connection.
Definition: IpSocket.hpp:41
virtual I32 sendProtocol(const SocketDescriptor &socketDescriptor, const U8 *const data, const U32 size)=0
Protocol specific implementation of send. Called directly with retry from send.
Socket operation successful.
Definition: IpSocket.hpp:30
Failed to read socket.
Definition: IpSocket.hpp:37
Failed to read back port from connection.
Definition: IpSocket.hpp:44
SocketIpStatus setupTimeouts(PlatformIntType socketFd)
setup the socket timeout properties of the opened outgoing socket
Definition: IpSocket.cpp:68
C++-compatible configuration header for fprime configuration.
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.h:30
virtual 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
Operation is invalid.
Definition: IpSocket.hpp:48
PlatformIntType fd
Used for all sockets to track the communication file descriptor.
Definition: IpSocket.hpp:22
virtual I32 recvProtocol(const SocketDescriptor &socketDescriptor, U8 *const data, const U32 size)=0
Protocol specific implementation of recv. Called directly with error handling from recv...
void close(const SocketDescriptor &socketDescriptor)
closes the socket
Definition: IpSocket.cpp:106
char m_hostname[SOCKET_MAX_HOSTNAME_SIZE]
Hostname to supply.
Definition: IpSocket.hpp:213
PlatformIntType serverFd
Used for server sockets to track the listening file descriptor.
Definition: IpSocket.hpp:23
SocketIpStatus open(SocketDescriptor &socketDescriptor)
open the IP socket for communications
Definition: IpSocket.cpp:119
SocketIpStatus
Status enumeration for socket return values.
Definition: IpSocket.hpp:29
Socket has not been started.
Definition: IpSocket.hpp:43
U32 m_timeoutMicroseconds
Definition: IpSocket.hpp:211
Helper base-class for setting up Berkeley sockets.
Definition: IpSocket.hpp:57
No data available or read operation would block.
Definition: IpSocket.hpp:45
Failed to bind to socket.
Definition: IpSocket.hpp:39
U32 m_timeoutSeconds
Definition: IpSocket.hpp:210