GCC Code Coverage Report


Directory: ./
File: tmp_project/PhoenixSocket/src/PGenericSocket_impl.h
Date: 2025-03-14 12:18:05
Exec Total Coverage
Lines: 61 70 87.1%
Branches: 32 47 68.1%

Line Branch Exec Source
1 /***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5 ****************************************/
6
7 #ifndef __PGENERIC_SOCKET_H_IMPL__
8 #define __PGENERIC_SOCKET_H_IMPL__
9
10 #include "PGenericSocket.h"
11
12 ///Default constructor of PGenericSocket
13 /** @param mode : Mode of the Socket (no mock, mock, mock_record)
14 */
15 template<typename _TBackend, typename _TMockBackend>
16 19 PGenericSocket<_TBackend, _TMockBackend>::PGenericSocket(PSocketMode::PSocketMode mode){
17 19 initialisationPGenericSocket(mode);
18 19 }
19
20 ///Destructor of PGenericSocket
21 template<typename _TBackend, typename _TMockBackend>
22 76 PGenericSocket<_TBackend, _TMockBackend>::~PGenericSocket(){
23 38 close();
24 76 }
25
26 ///Create a client socket
27 /** @param param : extra customisable parameters for the creation of the socket (depends on the backend)
28 * @param mockParam : parameters of mock backend
29 * @return true if the socket has been created, false otherwise
30 */
31 template<typename _TBackend, typename _TMockBackend>
32 11 bool PGenericSocket<_TBackend, _TMockBackend>::createClientSocket(const typename _TBackend::Param & param, const typename _TMockBackend::Param & mockParam){
33 11 bool b(true);
34
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 2 times.
11 if(p_mode != PSocketMode::NO_MOCK){
35 9 b &= _TMockBackend::createClientSocket(p_mockSocket, mockParam);
36 }
37
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 9 times.
11 if(p_mode != PSocketMode::MOCK){
38 2 b &= _TBackend::createClientSocket(p_socket, param);
39 }
40 11 return b;
41 }
42
43 ///Create a server socket
44 /** @param param : extra customisable parameters for the creation of the socket (depends on the backend)
45 * @param mockParam : parameters of mock backend
46 * @return true if the socket has been created, false otherwise
47 */
48 template<typename _TBackend, typename _TMockBackend>
49 8 bool PGenericSocket<_TBackend, _TMockBackend>::createServerSocket(const typename _TBackend::Param & param, const typename _TMockBackend::Param & mockParam){
50 8 bool b(true);
51
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2 times.
8 if(p_mode != PSocketMode::NO_MOCK){
52 6 b &= _TMockBackend::createServerSocket(p_mockSocket, mockParam);
53 }
54
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
8 if(p_mode != PSocketMode::MOCK){
55 2 b &= _TBackend::createServerSocket(p_socket, param);
56 }
57 8 return b;
58 }
59
60 ///Send message on the given socket
61 /** @param msg : message to be sent
62 * @param flag : flags to be used to send the message (BLOCK, NON_BLOCK, etc)
63 * @return true on success, false otherwise
64 */
65 template<typename _TBackend, typename _TMockBackend>
66 20 bool PGenericSocket<_TBackend, _TMockBackend>::sendMsg(typename _TBackend::Message & msg, PSendFlag::PSendFlag flag){
67 20 size_t dataSize(msg.size());
68 20 bool b(true);
69
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
20 if(p_mode != PSocketMode::NO_MOCK){
70 10 typename _TMockBackend::Message vecTmp;
71
1/1
✓ Branch 1 taken 10 times.
10 _TMockBackend::msgResize(vecTmp, dataSize);
72
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 memcpy(_TMockBackend::msgData(vecTmp), _TBackend::msgData(msg), dataSize);
73
1/1
✓ Branch 1 taken 10 times.
10 b &= _TMockBackend::send(p_mockSocket, vecTmp, flag);
74 10 }
75
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
20 if(p_mode != PSocketMode::MOCK){
76 10 b &= _TBackend::send(p_socket, msg, flag);
77 }
78 20 return b;
79 }
80
81 ///Recieve message from the given socket
82 /** @param msg : message to be recieved
83 * @param flag : flags to be used to send the message (BLOCK, NON_BLOCK, etc)
84 * @return true on success, false otherwise
85 */
86 template<typename _TBackend, typename _TMockBackend>
87 20 bool PGenericSocket<_TBackend, _TMockBackend>::recvMsg(typename _TBackend::Message & msg, PRecvFlag::PRecvFlag flag){
88 20 bool b(true);
89
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
20 if(p_mode == PSocketMode::NO_MOCK){ //Normal mode
90 10 b &= _TBackend::recv(p_socket, msg, flag);
91
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 }else if(p_mode == PSocketMode::MOCK){ //Mock mode
92 10 typename _TMockBackend::Message msgMock;
93
1/1
✓ Branch 1 taken 10 times.
10 b &= _TMockBackend::recv(p_mockSocket, msgMock, flag);
94
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 if(b){
95
1/1
✓ Branch 1 taken 10 times.
10 size_t dataSize(_TMockBackend::msgSize(msgMock));
96
1/1
✓ Branch 1 taken 10 times.
10 _TBackend::msgResize(msg, dataSize);
97
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 memcpy(_TBackend::msgData(msg), _TMockBackend::msgData(msgMock), dataSize);
98 }
99 10 }else{ //Mock record mode
100 b &= _TBackend::recv(p_socket, msg, flag);
101 if(b){
102 typename _TMockBackend::Message msgMock;
103 size_t dataSize(_TBackend::msgSize(msg));
104 _TMockBackend::msgResize(msgMock, dataSize);
105 memcpy(_TMockBackend::msgData(msgMock), _TBackend::msgData(msg), dataSize);
106 b &= _TMockBackend::recv(p_mockSocket, msgMock, flag);
107 }
108 }
109 20 return b;
110 }
111
112 ///Close the socket
113 template<typename _TBackend, typename _TMockBackend>
114 19 void PGenericSocket<_TBackend, _TMockBackend>::close(){
115
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 4 times.
19 if(p_mode == PSocketMode::MOCK){
116 15 _TMockBackend::close(p_mockSocket);
117
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 }else if(p_mode == PSocketMode::NO_MOCK){
118 4 _TBackend::close(p_socket);
119 }else{
120 _TMockBackend::close(p_mockSocket);
121 _TBackend::close(p_socket);
122 }
123 19 }
124
125 ///Say if the Socket is connected
126 /** @return true if the current socket is connected (or both in record mode)
127 */
128 template<typename _TBackend, typename _TMockBackend>
129 4 bool PGenericSocket<_TBackend, _TMockBackend>::isConnected() const{
130 4 bool b(true);
131
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
4 if(p_mode != PSocketMode::NO_MOCK){
132 2 b &= _TMockBackend::isConnected(p_mockSocket);
133 }
134
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
4 if(p_mode != PSocketMode::MOCK){
135 2 b &= _TBackend::isConnected(p_socket);
136 }
137 4 return b;
138 }
139
140 ///Initialisation function of the class PGenericSocket
141 /** @param mode : Mode of the Socket (no mock, mock, mock_record)
142 */
143 template<typename _TBackend, typename _TMockBackend>
144 19 void PGenericSocket<_TBackend, _TMockBackend>::initialisationPGenericSocket(PSocketMode::PSocketMode mode){
145 19 p_mode = mode;
146 19 }
147
148
149 #endif
150
151
152
153