Electroneum
abstract_tcp_server_cp.h File Reference
#include <winsock2.h>
#include <rpc.h>
#include <string>
#include <map>
#include <boost/shared_ptr.hpp>
#include "misc_log_ex.h"
#include "syncobj.h"
#include "profile_tools.h"
#include "net_utils_base.h"
#include "pragma_comp_defs.h"
#include "abstract_tcp_server_cp.inl"
Include dependency graph for abstract_tcp_server_cp.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  epee::net_utils::cp_server_impl< TProtocol >
 

Namespaces

 epee
 
 epee::net_utils
 

Macros

#define ENABLE_PROFILING
 
#define ELECTRONEUM_DEFAULT_LOG_CATEGORY   "net"
 
#define LEVIN_DEFAULT_DATA_BUFF_SIZE   2000
 

Typedefs

typedef std::map< SOCKET, boost::shared_ptr< connection< TProtocol > > > epee::net_utils::connections_container
 

Functions

 connection (typename TProtocol::config_type &ref_config)
 
connection< TProtocol > & operator= (const connection< TProtocol > &obj)
 
bool init_buffers ()
 
bool query_shutdown ()
 
 ~connection ()
 
virtual bool handle_send (const void *ptr, size_t cb)
 
else if (0==res)
 
PRAGMA_WARNING_POP bool epee::net_utils::worker_thread_member ()
 
bool epee::net_utils::add_new_connection (SOCKET new_sock, long ip_from, int port_from)
 
bool epee::net_utils::shutdown_connection (connection< TProtocol > *pconn)
 

Variables

return true
 
SOCKET epee::net_utils::m_listen_socket
 
HANDLE epee::net_utils::m_completion_port
 
connections_container epee::net_utils::m_connections
 
critical_section epee::net_utils::m_connections_lock
 
int epee::net_utils::m_port
 
volatile LONG epee::net_utils::m_stop
 
bool epee::net_utils::m_initialized
 
volatile LONG epee::net_utils::m_worker_thread_counter
 
TProtocol::config_type epee::net_utils::m_config
 

Macro Definition Documentation

◆ ELECTRONEUM_DEFAULT_LOG_CATEGORY

#define ELECTRONEUM_DEFAULT_LOG_CATEGORY   "net"

Definition at line 46 of file abstract_tcp_server_cp.h.

◆ ENABLE_PROFILING

#define ENABLE_PROFILING

Definition at line 40 of file abstract_tcp_server_cp.h.

◆ LEVIN_DEFAULT_DATA_BUFF_SIZE

#define LEVIN_DEFAULT_DATA_BUFF_SIZE   2000

Definition at line 48 of file abstract_tcp_server_cp.h.

Function Documentation

◆ connection()

resize_send_buff::connection ( typename TProtocol::config_type &  ref_config)

Definition at line 89 of file abstract_tcp_server_cp.h.

Here is the caller graph for this function:

◆ handle_send()

virtual bool resize_send_buff::handle_send ( const void *  ptr,
size_t  cb 
)
virtual

Definition at line 135 of file abstract_tcp_server_cp.h.

140  {
141  PROFILE_FUNC("[handle_send]");
142  if(m_psend_data->TotalBuffBytes < cb)
143  resize_send_buff((DWORD)cb);
144 
145  ZeroMemory(&m_psend_data->m_overlapped, sizeof(OVERLAPPED));
146  m_psend_data->DataBuf.len = (u_long)cb;//m_psend_data->TotalBuffBytes;
147  m_psend_data->DataBuf.buf = m_psend_data->Buffer;
148  memcpy(m_psend_data->DataBuf.buf, ptr, cb);
149  m_psend_data->m_op_type = op_type_send;
150  InterlockedExchange(&m_psend_data->m_is_in_use, 1);
151  DWORD bytes_sent = 0;
152  DWORD flags = 0;
153  int res = 0;
154  {
155  PROFILE_FUNC("[handle_send] ::WSASend");
156  res = ::WSASend(m_sock, &(m_psend_data->DataBuf), 1, &bytes_sent, flags, &(m_psend_data->m_overlapped), NULL);
157  }
158 
159  if(res == SOCKET_ERROR )
160  {
161  int err = ::WSAGetLastError();
162  if(WSA_IO_PENDING == err )
163  return true;
164  }
165  LOG_ERROR("BIG FAIL: WSASend error code not correct, res=" << res << " last_err=" << err);
166  ::InterlockedExchange(&m_psend_data->m_is_in_use, 0);
const char * res
Definition: hmac_keccak.cpp:41
class epee::net_utils::buffer resize_send_buff
#define LOG_ERROR(x)
Definition: misc_log_ex.h:98
void * memcpy(void *a, const void *b, size_t c)
#define PROFILE_FUNC(immortal_ptr_str)
Definition: profile_tools.h:51

◆ if()

else resize_send_buff::if ( = res)

Definition at line 166 of file abstract_tcp_server_cp.h.

171  {
172  ::InterlockedExchange(&m_psend_data->m_is_in_use, 0);
173  if(!bytes_sent || bytes_sent != cb)
174  {
175  int err = ::WSAGetLastError();
176  LOG_ERROR("BIG FAIL: WSASend immediatly complete? but bad results, res=" << res << " last_err=" << err);
177  query_shutdown();
178  return false;
179  }else
const char * res
Definition: hmac_keccak.cpp:41
bool query_shutdown()
#define LOG_ERROR(x)
Definition: misc_log_ex.h:98
Here is the caller graph for this function:

◆ init_buffers()

bool resize_send_buff::init_buffers ( )

Definition at line 102 of file abstract_tcp_server_cp.h.

102  {
103  return *this;
104  }
105 
106  bool init_buffers()
107  {
108  m_psend_data = (io_data_base*)new char[sizeof(io_data_base) + LEVIN_DEFAULT_DATA_BUFF_SIZE-1];
109  m_psend_data->TotalBuffBytes = LEVIN_DEFAULT_DATA_BUFF_SIZE;
#define LEVIN_DEFAULT_DATA_BUFF_SIZE
bool init_buffers()

◆ operator=()

connection<TProtocol>& resize_send_buff::operator= ( const connection< TProtocol > &  obj)

Definition at line 97 of file abstract_tcp_server_cp.h.

102  {
Here is the caller graph for this function:

◆ query_shutdown()

bool resize_send_buff::query_shutdown ( )

Definition at line 111 of file abstract_tcp_server_cp.h.

116  {
117  if(!::InterlockedCompareExchange(&m_asked_to_shutdown, 1, 0))
118  {
119  m_psend_data->m_op_type = op_type_stop;

◆ ~connection()

resize_send_buff::~connection ( )

Definition at line 127 of file abstract_tcp_server_cp.h.

132  {
133  if(m_psend_data)
134  delete m_psend_data;

Variable Documentation

◆ true

return true

Definition at line 181 of file abstract_tcp_server_cp.h.