Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • cellframe/cellframe-sdk
  • MIKA83/cellframe-sdk
2 results
Show changes
Commits on Source (6)
......@@ -968,12 +968,12 @@ int cdb_set2(CDB *db, const char *key, int ksize, const char *val, int vsize, in
rec.expire = expire? now + expire : 0;
cdb_lock_lock(db->mlock[lockid]);
cdb_lock_lock(db->rclock);
if (db->rcache) {
/* if record already exists, get its old meta info */
int item_vsize;
char *cval;
uint32_t old_expire = 0;
cdb_lock_lock(db->rclock);
cval = cdb_ht_get(db->rcache, key, ksize, &item_vsize, false);
if (cval) {
/* record already exists */
......@@ -981,12 +981,12 @@ int cdb_set2(CDB *db, const char *key, int ksize, const char *val, int vsize, in
rec.osize = item_vsize - SFOFF - SI4;
old_expire = *(uint32_t*)(cval + SFOFF);
}
cdb_lock_unlock(db->rclock);
if (old_expire && old_expire <= now)
/* once exist but expired? */
expired = true;
}
cdb_lock_unlock(db->rclock);
if (OFFNULL(ooff)) {
FOFF soffs[SFOFFNUM];
FOFF *soff = soffs;
......@@ -1155,9 +1155,9 @@ int cdb_get(CDB *db, const char *key, int ksize, void **val, int *vsize)
*vsize = 0;
*val = NULL;
cdb_lock_lock(db->rclock);
if (db->rcache) {
char *cval;
cdb_lock_lock(db->rclock);
cval = cdb_ht_get(db->rcache, key, ksize, vsize, true);
if (cval) {
db->rchit++;
......@@ -1183,8 +1183,8 @@ int cdb_get(CDB *db, const char *key, int ksize, void **val, int *vsize)
return -3;
}
}
cdb_lock_unlock(db->rclock);
}
cdb_lock_unlock(db->rclock);
offs = soffs;
hash = CDBHASH64(key, ksize);
......
......@@ -2,7 +2,7 @@ project(cellframe-sdk C)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_C_STANDARD 11)
set(CELLFRAME_SDK_NATIVE_VERSION "2.6-102")
set(CELLFRAME_SDK_NATIVE_VERSION "2.6-104")
add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
set(DAPSDK_MODULES "")
......
......@@ -119,10 +119,14 @@ static bool s_timer_timeout_check(void * a_arg)
dap_events_t * l_events = dap_events_get_default();
assert(l_events);
dap_worker_t * l_worker =(dap_worker_t*) pthread_getspecific(l_events->pth_key_worker);; // We're in own esocket context
dap_worker_t * l_worker =(dap_worker_t*) pthread_getspecific(l_events->pth_key_worker); // We're in own esocket context
assert(l_worker);
if(dap_events_socket_check_unsafe(l_worker, l_es) ){
if ((l_es->type != DESCRIPTOR_TYPE_SOCKET) && (l_es->type != DESCRIPTOR_TYPE_SOCKET_UDP)) {
log_it(L_CRITICAL, "Timer esocket wrong argument: socket %d type %d, ignore this timeout...", l_es->socket, l_es->type);
return false;
}
dap_client_http_pvt_t * l_http_pvt = PVT(l_es);
log_it(L_WARNING,"Connection timeout for request http://%s:%u/%s, possible network problems or host is down",
l_http_pvt->uplink_addr, l_http_pvt->uplink_port, l_http_pvt->path);
......@@ -131,7 +135,11 @@ static bool s_timer_timeout_check(void * a_arg)
l_http_pvt->were_callbacks_called = true;
}
l_http_pvt->is_closed_by_timeout = true;
l_es->flags |= DAP_SOCK_SIGNAL_CLOSE;
log_it(L_INFO, "Close %s sock %u type %d by timeout",
l_es->remote_addr_str ? l_es->remote_addr_str : "", l_es->socket, l_es->type);
dap_events_socket_remove_and_delete_unsafe(l_es, true);
} else {
log_it(L_INFO, "Socket %d type %d already disposed", l_es->socket, l_es->type);
}
return false;
}
......
......@@ -1420,7 +1420,7 @@ bool dap_events_socket_check_unsafe(dap_worker_t * a_worker,dap_events_socket_t
if ( a_worker->esockets){
dap_events_socket_t * l_es = NULL;
pthread_rwlock_rdlock(&a_worker->esocket_rwlock);
HASH_FIND(hh_worker,a_worker->esockets,&a_es, sizeof(a_es), l_es );
HASH_FIND(hh_worker,a_worker->esockets,&a_es, sizeof(void*), l_es );
pthread_rwlock_unlock(&a_worker->esocket_rwlock);
return l_es == a_es;
}else
......
......@@ -179,6 +179,10 @@ void *dap_worker_thread(void *arg)
l_flag_nval = false;
#elif defined ( DAP_EVENTS_CAPS_POLL)
short l_cur_events =l_worker->poll[n].revents;
if (l_worker->poll[n].fd == -1) // If it was deleted on previous iterations
continue;
if (!l_cur_events) // No events for this socket
continue;
l_flag_hup = l_cur_events& POLLHUP;
......@@ -645,6 +649,7 @@ void *dap_worker_thread(void *arg)
log_it(L_NOTICE,"Worker :%u finished", l_worker->id);
return NULL;
}
}
#ifdef DAP_EVENTS_CAPS_POLL
/***********************************************************/
......
......@@ -43,6 +43,7 @@ typedef struct dap_worker
// Signal to exit
bool signal_exit;
// worker control queues
dap_events_socket_t * queue_es_new; // Queue socket for new socket
dap_events_socket_t ** queue_es_new_input; // Queue socket for new socket
......
......@@ -74,6 +74,7 @@
static SOCKET server_sockfd = -1; // network or local unix
uint32_t l_listen_port = 0;
bool s_debug_cli = false;
#ifdef _WIN32
#define poll WSAPoll
......@@ -249,7 +250,8 @@ char* s_get_next_str( SOCKET nSocket, int *dwLen, const char *stop_str, bool del
static void* thread_one_client_func(void *args)
{
SOCKET newsockfd = (SOCKET) (intptr_t) args;
log_it(L_DEBUG, "new connection sockfd=%d", newsockfd);
if(s_debug_cli)
log_it(L_DEBUG, "new connection sockfd=%d", newsockfd);
int str_len, marker = 0;
int timeout = 5000; // 5 sec
......@@ -364,7 +366,8 @@ static void* thread_one_client_func(void *args)
}
// close connection
int cs = closesocket(newsockfd);
log_it(L_DEBUG, "close connection=%d sockfd=%d", cs, newsockfd);
if (s_debug_cli)
log_it(L_DEBUG, "close connection=%d sockfd=%d", cs, newsockfd);
return NULL;
}
......@@ -453,7 +456,8 @@ static void *thread_pipe_client_func( void *args )
HANDLE hPipe = (HANDLE)args;
// SOCKET newsockfd = (SOCKET) (intptr_t) args;
log_it(L_INFO, "new connection pipe = %X", hPipe );
if(s_debug_cli)
log_it(L_INFO, "new connection pipe = %X", hPipe );
int str_len, marker = 0;
int timeout = 5000; // 5 sec
......@@ -810,6 +814,7 @@ dap_chain_node_cmd_item_t* dap_chain_node_cli_cmd_find(const char *a_name)
*/
int dap_chain_node_cli_init(dap_config_t * g_config)
{
s_debug_cli = dap_config_get_item_bool_default(g_config,"conserver","debug_cli",false);
#ifndef _WIN32
struct sockaddr_un l_server_addr={0};
l_server_addr.sun_family = AF_UNIX;
......
......@@ -95,8 +95,10 @@ typedef struct dap_chain_net_srv_price
#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_CHECK_RESPONSE 0x41
#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_UNDEFINED 0x00000000
#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_NOT_FOUND 0x00000100
#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_CH_NOT_FOUND 0x00000101
#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_IN_CLIENT_MODE 0x00000102
#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NETWORK_NOT_FOUND 0x00000200
#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NETWORK_NO_LEDGER 0x00000201
#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_USAGE_CANT_ADD 0x00000300
......
......@@ -143,13 +143,13 @@ pthread_cond_t * s_tun_sockets_cond_started = NULL;
uint32_t s_tun_sockets_count = 0;
bool s_debug_more = false;
static usage_client_t * s_clients;
static dap_chain_net_srv_ch_vpn_t * s_ch_vpn_addrs ;
static usage_client_t * s_clients = NULL;
static dap_chain_net_srv_ch_vpn_t * s_ch_vpn_addrs = NULL;
static pthread_rwlock_t s_clients_rwlock = PTHREAD_RWLOCK_INITIALIZER;
static pthread_mutex_t s_sf_socks_mutex;
static pthread_cond_t s_sf_socks_cond;
static vpn_local_network_t *s_raw_server;
static vpn_local_network_t *s_raw_server = NULL;
static pthread_rwlock_t s_raw_server_rwlock = PTHREAD_RWLOCK_INITIALIZER;
// Service callbacks
......@@ -1041,11 +1041,13 @@ static void s_ch_vpn_delete(dap_stream_ch_t* a_ch, void* arg)
s_tun_send_msg_ip_unassigned_all(l_ch_vpn, l_ch_vpn->addr_ipv4); // Signal all the workers that we're switching off
pthread_rwlock_wrlock(& s_raw_server_rwlock);
if ( s_raw_server->ipv4_lease_last.s_addr == l_ch_vpn->addr_ipv4.s_addr ){
s_raw_server->ipv4_lease_last.s_addr = ntohl( ntohl(s_raw_server->ipv4_lease_last.s_addr)-1 );
if( s_raw_server){
if ( s_raw_server->ipv4_lease_last.s_addr == l_ch_vpn->addr_ipv4.s_addr ){
s_raw_server->ipv4_lease_last.s_addr = ntohl( ntohl(s_raw_server->ipv4_lease_last.s_addr)-1 );
}
else
l_is_unleased = true;
}
else
l_is_unleased = true;
pthread_rwlock_unlock(& s_raw_server_rwlock);
}
pthread_rwlock_wrlock(&s_clients_rwlock);
......@@ -1201,6 +1203,9 @@ static void s_ch_packet_in_vpn_address_request(dap_stream_ch_t* a_ch, dap_chain_
dap_chain_net_srv_vpn_t * l_srv_vpn =(dap_chain_net_srv_vpn_t *) a_usage->service->_inhertor;
dap_chain_net_srv_stream_session_t * l_srv_session= DAP_CHAIN_NET_SRV_STREAM_SESSION(l_ch_vpn->ch->stream->session);
if (! s_raw_server)
return;
if ( l_ch_vpn->addr_ipv4.s_addr ){
log_it(L_WARNING,"We already have ip address leased to us");
ch_vpn_pkt_t *pkt_out = (ch_vpn_pkt_t*) calloc(1, sizeof(pkt_out->header));
......@@ -1376,6 +1381,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
return;
}
// TODO move address leasing to this structure
//dap_chain_net_srv_vpn_t * l_srv_vpn =(dap_chain_net_srv_vpn_t *) l_usage->service->_inhertor;
......@@ -1410,7 +1416,11 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
// for server
case VPN_PACKET_OP_CODE_VPN_ADDR_REQUEST: { // Client request after L3 connection the new IP address
log_it(L_INFO, "Received address request ");
s_ch_packet_in_vpn_address_request(a_ch, l_usage);
if(s_raw_server){
s_ch_packet_in_vpn_address_request(a_ch, l_usage);
}else{
dap_stream_ch_pkt_write_unsafe( l_usage->client->ch , DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_IN_CLIENT_MODE , NULL, 0 );
}
l_srv_session->stats.bytes_recv += l_vpn_pkt_size;
l_srv_session->stats.packets_recv++;
} break;
......