fixed comments, renaming;
This commit is contained in:
parent
ba5c37630e
commit
e749301178
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Secure Network Transport Layer Library v2 implementation.
|
* Secure X Message Passing Library v2 implementation.
|
||||||
* (sntllv2) it superseed all versions before due to the:
|
* (sxmplv2) it superseed all versions before due to the:
|
||||||
* - memory consumption
|
* - memory consumption
|
||||||
* - new features such as pulse emitting
|
* - new features such as pulse emitting
|
||||||
* - performance optimization
|
* - performance optimization
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Secure Network Transport Layer Library v2 implementation.
|
* Secure X Message Passing Library v2 implementation.
|
||||||
* (sntllv2) it superseed all versions before due to the:
|
* (sxmplv2) it superseed all versions before due to the:
|
||||||
* - memory consumption
|
* - memory consumption
|
||||||
* - new features such as pulse emitting
|
* - new features such as pulse emitting
|
||||||
* - performance optimization
|
* - performance optimization
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Secure Network Transport Layer Library v2 implementation.
|
* Secure X Message Passing Library v2 implementation.
|
||||||
* (sntllv2) it superseed all versions before due to the:
|
* (sxmplv2) it superseed all versions before due to the:
|
||||||
* - memory consumption
|
* - memory consumption
|
||||||
* - new features such as pulse emitting
|
* - new features such as pulse emitting
|
||||||
* - performance optimization
|
* - performance optimization
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Secure Network Transport Layer Library implementation.
|
* Secure X Message Passing Library v2 implementation.
|
||||||
* This is a proprietary software. See COPYING for further details.
|
* This is a proprietary software. See COPYING for further details.
|
||||||
*
|
*
|
||||||
* (c) Askele Group 2013-2015 <http://askele.com>
|
* (c) Askele Group 2013-2015 <http://askele.com>
|
||||||
|
154
lib/sxmplv2.c
154
lib/sxmplv2.c
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Secure Network Transport Layer Library v2 implementation.
|
* Secure X Message Passing Library v2 implementation.
|
||||||
* (sntllv2) it superseed all versions before due to the:
|
* (sxmplv2) it superseed all versions before due to the:
|
||||||
* - memory consumption
|
* - memory consumption
|
||||||
* - new features such as pulse emitting
|
* - new features such as pulse emitting
|
||||||
* - performance optimization
|
* - performance optimization
|
||||||
@ -41,22 +41,22 @@
|
|||||||
#include <tdata/list.h>
|
#include <tdata/list.h>
|
||||||
#include <sexpr/sexp.h>
|
#include <sexpr/sexp.h>
|
||||||
|
|
||||||
#include <sntl/limits.h>
|
#include <sxmp/limits.h>
|
||||||
#include <sntl/sntllv2.h>
|
#include <sxmp/sxmplv2.h>
|
||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
typedef struct __sntll_bundle_type {
|
typedef struct __sxmpl_bundle_type {
|
||||||
void *buf;
|
void *buf;
|
||||||
conn_t *conn;
|
conn_t *conn;
|
||||||
} sntllv2_bundle_t;
|
} sxmplv2_bundle_t;
|
||||||
|
|
||||||
/* networking helpers */
|
/* networking helpers */
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
int __resolvehost(const char *hostname, char *buf, int buf_len,
|
int __resolvehost(const char *hostname, char *buf, int buf_len,
|
||||||
struct hostent **rhp)
|
struct hostent **rhp)
|
||||||
{
|
{
|
||||||
struct hostent *hostbuf ;//= malloc(sizeof(struct hostent));
|
struct hostent *hostbuf ;
|
||||||
struct hostent *hp = *rhp = NULL;
|
struct hostent *hp = *rhp = NULL;
|
||||||
int herr = 0, hres = 0;
|
int herr = 0, hres = 0;
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ static int __conn_read(conn_t *co, void *buf, size_t buf_len)
|
|||||||
ofcmode = fcntl(rfd, F_GETFL,0);
|
ofcmode = fcntl(rfd, F_GETFL,0);
|
||||||
ofcmode |= O_NDELAY;
|
ofcmode |= O_NDELAY;
|
||||||
if(fcntl(rfd, F_SETFL, ofcmode))
|
if(fcntl(rfd, F_SETFL, ofcmode))
|
||||||
fprintf(stderr, "[sntllv2] (RD)Couldn't make socket nonblocking");
|
fprintf(stderr, "[sxmplv2] (RD)Couldn't make socket nonblocking");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__retry:
|
__retry:
|
||||||
@ -109,26 +109,26 @@ static int __conn_read(conn_t *co, void *buf, size_t buf_len)
|
|||||||
case SSL_ERROR_SYSCALL:
|
case SSL_ERROR_SYSCALL:
|
||||||
if(errno == EAGAIN || errno == EINTR) goto __try_again;
|
if(errno == EAGAIN || errno == EINTR) goto __try_again;
|
||||||
else {
|
else {
|
||||||
fprintf(stderr, "[sntllv2] (RD)SSL syscall error.\n");
|
fprintf(stderr, "[sxmplv2] (RD)SSL syscall error.\n");
|
||||||
goto __close_conn;
|
goto __close_conn;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SSL_ERROR_WANT_CONNECT:
|
case SSL_ERROR_WANT_CONNECT:
|
||||||
case SSL_ERROR_WANT_ACCEPT:
|
case SSL_ERROR_WANT_ACCEPT:
|
||||||
fprintf(stderr, "[sntllv2] (RD)SSL negotiation required. Trying again.\n");
|
fprintf(stderr, "[sxmplv2] (RD)SSL negotiation required. Trying again.\n");
|
||||||
goto __try_again;
|
goto __try_again;
|
||||||
break;
|
break;
|
||||||
case SSL_ERROR_SSL:
|
case SSL_ERROR_SSL:
|
||||||
fprintf(stderr, "[sntllv2] (RD)SSL error occured. Connection will be closed.\n");
|
fprintf(stderr, "[sxmplv2] (RD)SSL error occured. Connection will be closed.\n");
|
||||||
goto __close_conn;
|
goto __close_conn;
|
||||||
break;
|
break;
|
||||||
case SSL_ERROR_ZERO_RETURN:
|
case SSL_ERROR_ZERO_RETURN:
|
||||||
fprintf(stderr, "[sntllv2] (RD)SSL connection is cleary closed.\n");
|
fprintf(stderr, "[sxmplv2] (RD)SSL connection is cleary closed.\n");
|
||||||
default:
|
default:
|
||||||
__close_conn:
|
__close_conn:
|
||||||
ERR_free_strings();
|
ERR_free_strings();
|
||||||
co->flags |= SNSX_CLOSED;
|
co->flags |= SNSX_CLOSED;
|
||||||
fprintf(stderr, "[sntllv2] (RD)Unknown error on %s (errno = %d)\n", co->uuid, errno);
|
fprintf(stderr, "[sxmplv2] (RD)Unknown error on %s (errno = %d)\n", co->uuid, errno);
|
||||||
ERR_remove_state(0);
|
ERR_remove_state(0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -143,12 +143,12 @@ static int __conn_read(conn_t *co, void *buf, size_t buf_len)
|
|||||||
r = select(rfd + 1, &readset, NULL, NULL, NULL);
|
r = select(rfd + 1, &readset, NULL, NULL, NULL);
|
||||||
if(r < 0) {
|
if(r < 0) {
|
||||||
if(errno == EINTR || errno == EAGAIN) goto __select_retry;
|
if(errno == EINTR || errno == EAGAIN) goto __select_retry;
|
||||||
fprintf(stderr, "[sntllv2] (RD)Select (%d) on %s\n", errno, co->uuid);
|
fprintf(stderr, "[sxmplv2] (RD)Select (%d) on %s\n", errno, co->uuid);
|
||||||
ERR_remove_state(0);
|
ERR_remove_state(0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(!r) {
|
if(!r) {
|
||||||
fprintf(stderr, "[sntllv2] (RD)Nothing to wait for\n");
|
fprintf(stderr, "[sxmplv2] (RD)Nothing to wait for\n");
|
||||||
ERR_remove_state(0);
|
ERR_remove_state(0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -198,7 +198,7 @@ static int __conn_write(conn_t *co, void *buf, size_t buf_len)
|
|||||||
/* set closed flag */
|
/* set closed flag */
|
||||||
ERR_free_strings();
|
ERR_free_strings();
|
||||||
co->flags |= SNSX_CLOSED;
|
co->flags |= SNSX_CLOSED;
|
||||||
fprintf(stderr, "[sntllv2] (WR)Unknown error on %s (%d)\n", co->uuid, r);
|
fprintf(stderr, "[sxmplv2] (WR)Unknown error on %s (%d)\n", co->uuid, r);
|
||||||
ERR_remove_state(0);
|
ERR_remove_state(0);
|
||||||
return -1;
|
return -1;
|
||||||
} else return r;
|
} else return r;
|
||||||
@ -207,9 +207,9 @@ static int __conn_write(conn_t *co, void *buf, size_t buf_len)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int _sntll_writemsg(conn_t *co, sxmsg_t *msg)
|
int _sxmpl_writemsg(conn_t *co, sxmsg_t *msg)
|
||||||
{
|
{
|
||||||
sntllv2_head_t *head;
|
sxmplv2_head_t *head;
|
||||||
size_t rd;
|
size_t rd;
|
||||||
int r;
|
int r;
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
@ -221,16 +221,16 @@ int _sntll_writemsg(conn_t *co, sxmsg_t *msg)
|
|||||||
if(head->payload_length && !msg->payload) return SNE_FAILED;
|
if(head->payload_length && !msg->payload) return SNE_FAILED;
|
||||||
|
|
||||||
if(head->payload_length) {
|
if(head->payload_length) {
|
||||||
buf = malloc(sizeof(sntllv2_head_t) + head->payload_length);
|
buf = malloc(sizeof(sxmplv2_head_t) + head->payload_length);
|
||||||
memcpy(buf, head, sizeof(sntllv2_head_t));
|
memcpy(buf, head, sizeof(sxmplv2_head_t));
|
||||||
memcpy(buf + sizeof(sntllv2_head_t), msg->payload, head->payload_length);
|
memcpy(buf + sizeof(sxmplv2_head_t), msg->payload, head->payload_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* write the head and payload if applicable */
|
/* write the head and payload if applicable */
|
||||||
pthread_mutex_lock(&co->sslinout[1]);
|
pthread_mutex_lock(&co->sslinout[1]);
|
||||||
if(!buf)
|
if(!buf)
|
||||||
rd = __conn_write(co, head, sizeof(sntllv2_head_t));
|
rd = __conn_write(co, head, sizeof(sxmplv2_head_t));
|
||||||
else rd = __conn_write(co, buf, sizeof(sntllv2_head_t) + head->payload_length);
|
else rd = __conn_write(co, buf, sizeof(sxmplv2_head_t) + head->payload_length);
|
||||||
if(rd < 0) {
|
if(rd < 0) {
|
||||||
co->flags |= SNSX_CLOSED;
|
co->flags |= SNSX_CLOSED;
|
||||||
r = SNE_ESSL;
|
r = SNE_ESSL;
|
||||||
@ -242,12 +242,12 @@ int _sntll_writemsg(conn_t *co, sxmsg_t *msg)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static sntllv2_bundle_t *__sntll_bundle_create(conn_t *co)
|
static sxmplv2_bundle_t *__sxmpl_bundle_create(conn_t *co)
|
||||||
{
|
{
|
||||||
sntllv2_bundle_t *n = malloc(sizeof(sntllv2_bundle_t));
|
sxmplv2_bundle_t *n = malloc(sizeof(sxmplv2_bundle_t));
|
||||||
|
|
||||||
if(!n) return NULL;
|
if(!n) return NULL;
|
||||||
else memset(n, 0, sizeof(sntllv2_bundle_t));
|
else memset(n, 0, sizeof(sxmplv2_bundle_t));
|
||||||
|
|
||||||
n->buf = mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
n->buf = mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||||
if(n->buf == MAP_FAILED) {
|
if(n->buf == MAP_FAILED) {
|
||||||
@ -260,7 +260,7 @@ static sntllv2_bundle_t *__sntll_bundle_create(conn_t *co)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __sntll_bundle_destroy(sntllv2_bundle_t *n)
|
static void __sxmpl_bundle_destroy(sxmplv2_bundle_t *n)
|
||||||
{
|
{
|
||||||
munmap(n->buf, 65536);
|
munmap(n->buf, 65536);
|
||||||
free(n);
|
free(n);
|
||||||
@ -352,7 +352,7 @@ static void pthreads_thread_id(CRYPTO_THREADID *tid)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int sntl_init(void)
|
int sxmp_init(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -378,7 +378,7 @@ int sntl_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sntl_finalize(void)
|
void sxmp_finalize(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -548,7 +548,7 @@ static void __connection_destroy(conn_t *co)
|
|||||||
ppmsg_t *ppm;
|
ppmsg_t *ppm;
|
||||||
list_node_t *iter, *siter;
|
list_node_t *iter, *siter;
|
||||||
chnl_t *chan;
|
chnl_t *chan;
|
||||||
sntllv2_head_t *head;
|
sxmplv2_head_t *head;
|
||||||
conn_sys_t *ssys = co->ssys;
|
conn_sys_t *ssys = co->ssys;
|
||||||
|
|
||||||
/* first we will unpin all messages and mark it as errors on */
|
/* first we will unpin all messages and mark it as errors on */
|
||||||
@ -634,13 +634,13 @@ static void __connection_destroy(conn_t *co)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *__sntll_thread(void *b)
|
static void *__sxmpl_thread(void *b)
|
||||||
{
|
{
|
||||||
sntllv2_bundle_t *bun = (sntllv2_bundle_t *)b;
|
sxmplv2_bundle_t *bun = (sxmplv2_bundle_t *)b;
|
||||||
conn_t *co = bun->conn;
|
conn_t *co = bun->conn;
|
||||||
void *buf = bun->buf;
|
void *buf = bun->buf;
|
||||||
char *bbuf = (char*)buf;
|
char *bbuf = (char*)buf;
|
||||||
sntllv2_head_t *mhead = (sntllv2_head_t *)buf;
|
sxmplv2_head_t *mhead = (sxmplv2_head_t *)buf;
|
||||||
sxmsg_t *msg, *omsg;
|
sxmsg_t *msg, *omsg;
|
||||||
sexp_t *sx;
|
sexp_t *sx;
|
||||||
chnl_t *channel;
|
chnl_t *channel;
|
||||||
@ -655,7 +655,7 @@ static void *__sntll_thread(void *b)
|
|||||||
struct timeval beg, end;
|
struct timeval beg, end;
|
||||||
#endif
|
#endif
|
||||||
/* byte buffer is following head */
|
/* byte buffer is following head */
|
||||||
bbuf += sizeof(sntllv2_head_t);
|
bbuf += sizeof(sxmplv2_head_t);
|
||||||
|
|
||||||
__wait_alive:
|
__wait_alive:
|
||||||
/* flag test - FIXME: make it atomic (it will works atomically on x86, btw on others not) */
|
/* flag test - FIXME: make it atomic (it will works atomically on x86, btw on others not) */
|
||||||
@ -687,7 +687,7 @@ static void *__sntll_thread(void *b)
|
|||||||
list_for_each_safe(&co->write_pending, iter, siter) {
|
list_for_each_safe(&co->write_pending, iter, siter) {
|
||||||
ppm = container_of(iter, ppmsg_t, node);
|
ppm = container_of(iter, ppmsg_t, node);
|
||||||
omsg = ppm->msg;
|
omsg = ppm->msg;
|
||||||
if(_sntll_writemsg(co, omsg) != SNE_SUCCESS) {
|
if(_sxmpl_writemsg(co, omsg) != SNE_SUCCESS) {
|
||||||
pthread_mutex_unlock(&co->write_pending_lock);
|
pthread_mutex_unlock(&co->write_pending_lock);
|
||||||
goto __finish; /* write failed - finishing ... */
|
goto __finish; /* write failed - finishing ... */
|
||||||
}
|
}
|
||||||
@ -718,7 +718,7 @@ static void *__sntll_thread(void *b)
|
|||||||
#ifdef _PERFPROFILE
|
#ifdef _PERFPROFILE
|
||||||
gettimeofday(&beg, NULL);
|
gettimeofday(&beg, NULL);
|
||||||
#endif
|
#endif
|
||||||
rd = __conn_read(co, mhead, sizeof(sntllv2_head_t));
|
rd = __conn_read(co, mhead, sizeof(sxmplv2_head_t));
|
||||||
#ifdef _PERFPROFILE
|
#ifdef _PERFPROFILE
|
||||||
gettimeofday(&end, NULL);
|
gettimeofday(&end, NULL);
|
||||||
|
|
||||||
@ -782,7 +782,7 @@ static void *__sntll_thread(void *b)
|
|||||||
mhead->attr |= SXMSG_CLOSED;
|
mhead->attr |= SXMSG_CLOSED;
|
||||||
mhead->payload_length = 0;
|
mhead->payload_length = 0;
|
||||||
pthread_mutex_lock(&(co->sslinout[1]));
|
pthread_mutex_lock(&(co->sslinout[1]));
|
||||||
wr = __conn_write(co, mhead, sizeof(sntllv2_head_t));
|
wr = __conn_write(co, mhead, sizeof(sxmplv2_head_t));
|
||||||
pthread_mutex_unlock(&(co->sslinout[1]));
|
pthread_mutex_unlock(&(co->sslinout[1]));
|
||||||
if(wr == -1) goto __finish;
|
if(wr == -1) goto __finish;
|
||||||
else goto __again;
|
else goto __again;
|
||||||
@ -800,14 +800,14 @@ static void *__sntll_thread(void *b)
|
|||||||
mhead->payload_length = 0;
|
mhead->payload_length = 0;
|
||||||
mhead->attr &= ~SXMSG_REPLYREQ;
|
mhead->attr &= ~SXMSG_REPLYREQ;
|
||||||
pthread_mutex_lock(&(co->sslinout[1]));
|
pthread_mutex_lock(&(co->sslinout[1]));
|
||||||
wr = __conn_write(co, mhead, sizeof(sntllv2_head_t));
|
wr = __conn_write(co, mhead, sizeof(sxmplv2_head_t));
|
||||||
pthread_mutex_unlock(&(co->sslinout[1]));
|
pthread_mutex_unlock(&(co->sslinout[1]));
|
||||||
if(wr < 0) goto __finish;
|
if(wr < 0) goto __finish;
|
||||||
} else { /* it's came back */
|
} else { /* it's came back */
|
||||||
/* reply came ... */
|
/* reply came ... */
|
||||||
if(mhead->msgid >= 1024) {
|
if(mhead->msgid >= 1024) {
|
||||||
__inval_idx_nor:
|
__inval_idx_nor:
|
||||||
fprintf(stderr, "[sntllv2] Invalid index of the message.\n");
|
fprintf(stderr, "[sxmplv2] Invalid index of the message.\n");
|
||||||
goto __again;
|
goto __again;
|
||||||
}
|
}
|
||||||
mid = mhead->msgid;
|
mid = mhead->msgid;
|
||||||
@ -817,7 +817,7 @@ static void *__sntll_thread(void *b)
|
|||||||
if(!msg) goto __inval_idx_nor;
|
if(!msg) goto __inval_idx_nor;
|
||||||
|
|
||||||
/* ok now we'are copy data and unlock wait mutex */
|
/* ok now we'are copy data and unlock wait mutex */
|
||||||
memcpy(&msg->mhead, mhead, sizeof(sntllv2_head_t));
|
memcpy(&msg->mhead, mhead, sizeof(sxmplv2_head_t));
|
||||||
pthread_mutex_unlock(&msg->wait);
|
pthread_mutex_unlock(&msg->wait);
|
||||||
}
|
}
|
||||||
} else if(mhead->attr & SXMSG_LINK) { /* link layer messages */
|
} else if(mhead->attr & SXMSG_LINK) { /* link layer messages */
|
||||||
@ -841,7 +841,7 @@ static void *__sntll_thread(void *b)
|
|||||||
mhead->attr &= ~SXMSG_OPEN;
|
mhead->attr &= ~SXMSG_OPEN;
|
||||||
mhead->attr |= SXMSG_CLOSED;
|
mhead->attr |= SXMSG_CLOSED;
|
||||||
pthread_mutex_lock(&(co->sslinout[1]));
|
pthread_mutex_lock(&(co->sslinout[1]));
|
||||||
wr = __conn_write(co, mhead, sizeof(sntllv2_head_t));
|
wr = __conn_write(co, mhead, sizeof(sxmplv2_head_t));
|
||||||
pthread_mutex_unlock(&(co->sslinout[1]));
|
pthread_mutex_unlock(&(co->sslinout[1]));
|
||||||
if(wr < 0) goto __finish;
|
if(wr < 0) goto __finish;
|
||||||
else goto __again;
|
else goto __again;
|
||||||
@ -860,7 +860,7 @@ static void *__sntll_thread(void *b)
|
|||||||
pthread_mutex_lock(&msg->wait);
|
pthread_mutex_lock(&msg->wait);
|
||||||
msg->pch = channel;
|
msg->pch = channel;
|
||||||
/* copy header only */
|
/* copy header only */
|
||||||
memcpy(&msg->mhead, mhead, sizeof(sntllv2_head_t));
|
memcpy(&msg->mhead, mhead, sizeof(sxmplv2_head_t));
|
||||||
if(mhead->payload_length) msg->payload = bbuf;
|
if(mhead->payload_length) msg->payload = bbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -892,7 +892,7 @@ static void *__sntll_thread(void *b)
|
|||||||
pthread_mutex_destroy(&msg->wait);
|
pthread_mutex_destroy(&msg->wait);
|
||||||
free(msg);
|
free(msg);
|
||||||
} else {
|
} else {
|
||||||
memcpy(&msg->mhead, mhead, sizeof(sntllv2_head_t));
|
memcpy(&msg->mhead, mhead, sizeof(sxmplv2_head_t));
|
||||||
if(mhead->payload_length) {
|
if(mhead->payload_length) {
|
||||||
msg->payload = malloc(mhead->payload_length);
|
msg->payload = malloc(mhead->payload_length);
|
||||||
if(msg->payload) memcpy(msg->payload, bbuf, mhead->payload_length);
|
if(msg->payload) memcpy(msg->payload, bbuf, mhead->payload_length);
|
||||||
@ -923,7 +923,7 @@ static void *__sntll_thread(void *b)
|
|||||||
mhead->opcode = SNE_ETIMEDOUT;
|
mhead->opcode = SNE_ETIMEDOUT;
|
||||||
goto __ret_regerr;
|
goto __ret_regerr;
|
||||||
} else {
|
} else {
|
||||||
memcpy(&msg->mhead, mhead, sizeof(sntllv2_head_t));
|
memcpy(&msg->mhead, mhead, sizeof(sxmplv2_head_t));
|
||||||
if(mhead->payload_length) {
|
if(mhead->payload_length) {
|
||||||
msg->payload = malloc(mhead->payload_length);
|
msg->payload = malloc(mhead->payload_length);
|
||||||
if(msg->payload) memcpy(msg->payload, bbuf, mhead->payload_length);
|
if(msg->payload) memcpy(msg->payload, bbuf, mhead->payload_length);
|
||||||
@ -936,7 +936,7 @@ static void *__sntll_thread(void *b)
|
|||||||
mhead->attr &= ~SXMSG_OPEN;
|
mhead->attr &= ~SXMSG_OPEN;
|
||||||
mhead->attr |= SXMSG_CLOSED;
|
mhead->attr |= SXMSG_CLOSED;
|
||||||
pthread_mutex_lock(&(co->sslinout[1]));
|
pthread_mutex_lock(&(co->sslinout[1]));
|
||||||
wr = __conn_write(co, mhead, sizeof(sntllv2_head_t));
|
wr = __conn_write(co, mhead, sizeof(sxmplv2_head_t));
|
||||||
pthread_mutex_unlock(&(co->sslinout[1]));
|
pthread_mutex_unlock(&(co->sslinout[1]));
|
||||||
if(wr < 0) goto __finish;
|
if(wr < 0) goto __finish;
|
||||||
}
|
}
|
||||||
@ -952,7 +952,7 @@ static void *__sntll_thread(void *b)
|
|||||||
|
|
||||||
co->flags |= SNSX_CLOSED;
|
co->flags |= SNSX_CLOSED;
|
||||||
__connection_destroy(co);
|
__connection_destroy(co);
|
||||||
__sntll_bundle_destroy(b); /* destroy bundle */
|
__sxmpl_bundle_destroy(b); /* destroy bundle */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -962,8 +962,8 @@ conn_t *connection_master_link(conn_sys_t *ssys, int sck, struct in_addr *addr)
|
|||||||
char *bbuf;
|
char *bbuf;
|
||||||
conn_t *co = __connection_minimal_alloc(addr);
|
conn_t *co = __connection_minimal_alloc(addr);
|
||||||
sxmsg_t *msg = NULL;
|
sxmsg_t *msg = NULL;
|
||||||
sntllv2_head_t *head;
|
sxmplv2_head_t *head;
|
||||||
sntllv2_bundle_t *bundle;
|
sxmplv2_bundle_t *bundle;
|
||||||
size_t rd;
|
size_t rd;
|
||||||
int r = SNE_FAILED;
|
int r = SNE_FAILED;
|
||||||
|
|
||||||
@ -1038,13 +1038,13 @@ conn_t *connection_master_link(conn_sys_t *ssys, int sck, struct in_addr *addr)
|
|||||||
co->messages[0] = msg;
|
co->messages[0] = msg;
|
||||||
}
|
}
|
||||||
bbuf = (char *)buf;
|
bbuf = (char *)buf;
|
||||||
bbuf += sizeof(sntllv2_head_t);
|
bbuf += sizeof(sxmplv2_head_t);
|
||||||
|
|
||||||
sexp_t *sx;
|
sexp_t *sx;
|
||||||
while(co->flags & SNSX_BATCHMODE) {
|
while(co->flags & SNSX_BATCHMODE) {
|
||||||
rd = __conn_read(co, buf, sizeof(sntllv2_head_t));
|
rd = __conn_read(co, buf, sizeof(sxmplv2_head_t));
|
||||||
if(rd == sizeof(sntllv2_head_t)) {
|
if(rd == sizeof(sxmplv2_head_t)) {
|
||||||
head = (sntllv2_head_t *)buf;
|
head = (sxmplv2_head_t *)buf;
|
||||||
|
|
||||||
/* check for returns */
|
/* check for returns */
|
||||||
if(head->opcode != SNE_SUCCESS) { r = head->opcode; goto __fail3; }
|
if(head->opcode != SNE_SUCCESS) { r = head->opcode; goto __fail3; }
|
||||||
@ -1070,17 +1070,17 @@ conn_t *connection_master_link(conn_sys_t *ssys, int sck, struct in_addr *addr)
|
|||||||
msg->mhead.payload_length = 0;
|
msg->mhead.payload_length = 0;
|
||||||
/* deal with it */
|
/* deal with it */
|
||||||
r = __eval_syssexp(co, sx);
|
r = __eval_syssexp(co, sx);
|
||||||
memcpy(head, &msg->mhead, sizeof(sntllv2_head_t));
|
memcpy(head, &msg->mhead, sizeof(sxmplv2_head_t));
|
||||||
head->opcode = r;
|
head->opcode = r;
|
||||||
if(r != SNE_SUCCESS) { /* we finish */
|
if(r != SNE_SUCCESS) { /* we finish */
|
||||||
head->payload_length = 0;
|
head->payload_length = 0;
|
||||||
__conn_write(co, head, sizeof(sntllv2_head_t));
|
__conn_write(co, head, sizeof(sxmplv2_head_t));
|
||||||
destroy_sexp(sx);
|
destroy_sexp(sx);
|
||||||
goto __fail3;
|
goto __fail3;
|
||||||
}
|
}
|
||||||
rd = __conn_write(co, buf, sizeof(sntllv2_head_t) + msg->mhead.payload_length);
|
rd = __conn_write(co, buf, sizeof(sxmplv2_head_t) + msg->mhead.payload_length);
|
||||||
if(rd == -1) { r = SNE_LINKERROR; goto __fail3; }
|
if(rd == -1) { r = SNE_LINKERROR; goto __fail3; }
|
||||||
if(rd != sizeof(sntllv2_head_t) + msg->mhead.payload_length) {
|
if(rd != sizeof(sxmplv2_head_t) + msg->mhead.payload_length) {
|
||||||
destroy_sexp(sx);
|
destroy_sexp(sx);
|
||||||
goto __fail3;
|
goto __fail3;
|
||||||
}
|
}
|
||||||
@ -1098,16 +1098,16 @@ conn_t *connection_master_link(conn_sys_t *ssys, int sck, struct in_addr *addr)
|
|||||||
free(msg);
|
free(msg);
|
||||||
|
|
||||||
/* and now we're need to create a thread poll */
|
/* and now we're need to create a thread poll */
|
||||||
if(!(bundle = malloc(sizeof(sntllv2_bundle_t)))) { r = SNE_ENOMEM; goto __fail4; }
|
if(!(bundle = malloc(sizeof(sxmplv2_bundle_t)))) { r = SNE_ENOMEM; goto __fail4; }
|
||||||
else {
|
else {
|
||||||
bundle->buf = buf;
|
bundle->buf = buf;
|
||||||
bundle->conn = co;
|
bundle->conn = co;
|
||||||
}
|
}
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < MAX_SNTLLTHREADS; i++) {
|
for(i = 0; i < MAX_SNTLLTHREADS; i++) {
|
||||||
if(bundle == (void *)0xdead) bundle = __sntll_bundle_create(co);
|
if(bundle == (void *)0xdead) bundle = __sxmpl_bundle_create(co);
|
||||||
if(!bundle) goto __fail5;
|
if(!bundle) goto __fail5;
|
||||||
r = pthread_create(&co->thrd_poll[i], NULL, __sntll_thread, bundle); /* and here, alloc tls */
|
r = pthread_create(&co->thrd_poll[i], NULL, __sxmpl_thread, bundle); /* and here, alloc tls */
|
||||||
if(r) goto __fail5;
|
if(r) goto __fail5;
|
||||||
else {
|
else {
|
||||||
bundle = (void *)0xdead;
|
bundle = (void *)0xdead;
|
||||||
@ -1168,8 +1168,8 @@ conn_t *connection_link(conn_sys_t *ssys, const char *host,
|
|||||||
char hostbuf[2048];
|
char hostbuf[2048];
|
||||||
void *buf = NULL;
|
void *buf = NULL;
|
||||||
char *bbuf;
|
char *bbuf;
|
||||||
sntllv2_head_t *head;
|
sxmplv2_head_t *head;
|
||||||
sntllv2_bundle_t *bundle;
|
sxmplv2_bundle_t *bundle;
|
||||||
sxmsg_t *msg;
|
sxmsg_t *msg;
|
||||||
size_t rd, wr;
|
size_t rd, wr;
|
||||||
int i;
|
int i;
|
||||||
@ -1290,22 +1290,22 @@ conn_t *connection_link(conn_sys_t *ssys, const char *host,
|
|||||||
co->messages[0] = msg;
|
co->messages[0] = msg;
|
||||||
}
|
}
|
||||||
bbuf = (char *)buf;
|
bbuf = (char *)buf;
|
||||||
bbuf += sizeof(sntllv2_head_t);
|
bbuf += sizeof(sxmplv2_head_t);
|
||||||
head = (sntllv2_head_t *)buf;
|
head = (sxmplv2_head_t *)buf;
|
||||||
|
|
||||||
sexp_t *sx;
|
sexp_t *sx;
|
||||||
size_t ln;
|
size_t ln;
|
||||||
while(co->flags & SNSX_BATCHMODE) {
|
while(co->flags & SNSX_BATCHMODE) {
|
||||||
/* form a message -- credentials */
|
/* form a message -- credentials */
|
||||||
ln = snprintf(bbuf, 65535 - sizeof(sntllv2_head_t), "(auth-set-credentials \"%s\" \"%s\")",
|
ln = snprintf(bbuf, 65535 - sizeof(sxmplv2_head_t), "(auth-set-credentials \"%s\" \"%s\")",
|
||||||
login ? login : "nil", passwd ? passwd : "nil");
|
login ? login : "nil", passwd ? passwd : "nil");
|
||||||
|
|
||||||
head->opcode = SNE_SUCCESS;
|
head->opcode = SNE_SUCCESS;
|
||||||
head->payload_length = ln;
|
head->payload_length = ln;
|
||||||
wr = __conn_write(co, buf, ln + sizeof(sntllv2_head_t));
|
wr = __conn_write(co, buf, ln + sizeof(sxmplv2_head_t));
|
||||||
if(wr < 0) goto __fail2;
|
if(wr < 0) goto __fail2;
|
||||||
|
|
||||||
rd = __conn_read(co, head, sizeof(sntllv2_head_t));
|
rd = __conn_read(co, head, sizeof(sxmplv2_head_t));
|
||||||
if(rd < 0) goto __fail2;
|
if(rd < 0) goto __fail2;
|
||||||
if(head->opcode != SNE_SUCCESS) {
|
if(head->opcode != SNE_SUCCESS) {
|
||||||
r = head->opcode;
|
r = head->opcode;
|
||||||
@ -1314,12 +1314,12 @@ conn_t *connection_link(conn_sys_t *ssys, const char *host,
|
|||||||
|
|
||||||
/* ok, get available channels */
|
/* ok, get available channels */
|
||||||
head->opcode = SNE_SUCCESS;
|
head->opcode = SNE_SUCCESS;
|
||||||
ln = snprintf(bbuf, 65535 - sizeof(sntllv2_head_t), "(get-channels-list)");
|
ln = snprintf(bbuf, 65535 - sizeof(sxmplv2_head_t), "(get-channels-list)");
|
||||||
head->payload_length = ln;
|
head->payload_length = ln;
|
||||||
wr = __conn_write(co, buf, ln + sizeof(sntllv2_head_t));
|
wr = __conn_write(co, buf, ln + sizeof(sxmplv2_head_t));
|
||||||
if(wr < 0) goto __fail2;
|
if(wr < 0) goto __fail2;
|
||||||
|
|
||||||
rd = __conn_read(co, head, sizeof(sntllv2_head_t));
|
rd = __conn_read(co, head, sizeof(sxmplv2_head_t));
|
||||||
if(rd < 0) goto __fail2;
|
if(rd < 0) goto __fail2;
|
||||||
if(head->opcode != SNE_SUCCESS) goto __fail2;
|
if(head->opcode != SNE_SUCCESS) goto __fail2;
|
||||||
if(!head->payload_length) goto __fail2;
|
if(!head->payload_length) goto __fail2;
|
||||||
@ -1337,7 +1337,7 @@ conn_t *connection_link(conn_sys_t *ssys, const char *host,
|
|||||||
/* write back */
|
/* write back */
|
||||||
head->opcode = r;
|
head->opcode = r;
|
||||||
head->payload_length = 0;
|
head->payload_length = 0;
|
||||||
wr = __conn_write(co, head, sizeof(sntllv2_head_t));
|
wr = __conn_write(co, head, sizeof(sxmplv2_head_t));
|
||||||
if(wr < 0) {
|
if(wr < 0) {
|
||||||
r = SNE_LINKERROR; goto __fail2;}
|
r = SNE_LINKERROR; goto __fail2;}
|
||||||
if(r != SNE_SUCCESS) { r = SNE_LINKERROR; goto __fail2;}
|
if(r != SNE_SUCCESS) { r = SNE_LINKERROR; goto __fail2;}
|
||||||
@ -1352,15 +1352,15 @@ conn_t *connection_link(conn_sys_t *ssys, const char *host,
|
|||||||
free(msg);
|
free(msg);
|
||||||
|
|
||||||
/* and now we're need to create a thread poll */
|
/* and now we're need to create a thread poll */
|
||||||
if(!(bundle = malloc(sizeof(sntllv2_bundle_t)))) { r = SNE_ENOMEM; goto __fail4; }
|
if(!(bundle = malloc(sizeof(sxmplv2_bundle_t)))) { r = SNE_ENOMEM; goto __fail4; }
|
||||||
else {
|
else {
|
||||||
bundle->buf = buf;
|
bundle->buf = buf;
|
||||||
bundle->conn = co;
|
bundle->conn = co;
|
||||||
}
|
}
|
||||||
for(i = 0; i < MAX_SNTLLTHREADS; i++) {
|
for(i = 0; i < MAX_SNTLLTHREADS; i++) {
|
||||||
if(bundle == (void *)0xdead) bundle = __sntll_bundle_create(co);
|
if(bundle == (void *)0xdead) bundle = __sxmpl_bundle_create(co);
|
||||||
if(!bundle) goto __fail5;
|
if(!bundle) goto __fail5;
|
||||||
r = pthread_create(&co->thrd_poll[i], NULL, __sntll_thread, bundle);
|
r = pthread_create(&co->thrd_poll[i], NULL, __sxmpl_thread, bundle);
|
||||||
if(r) goto __fail5;
|
if(r) goto __fail5;
|
||||||
else {
|
else {
|
||||||
pthread_detach(co->thrd_poll[i]);
|
pthread_detach(co->thrd_poll[i]);
|
||||||
@ -1398,14 +1398,14 @@ conn_t *connection_link(conn_sys_t *ssys, const char *host,
|
|||||||
|
|
||||||
int connection_close(conn_t *co)
|
int connection_close(conn_t *co)
|
||||||
{
|
{
|
||||||
sntllv2_head_t mhead;
|
sxmplv2_head_t mhead;
|
||||||
|
|
||||||
memset(&mhead, 0, sizeof(sntllv2_head_t));
|
memset(&mhead, 0, sizeof(sxmplv2_head_t));
|
||||||
/* setup header */
|
/* setup header */
|
||||||
mhead.attr = SXMSG_LINK | SXMSG_CLOSED;
|
mhead.attr = SXMSG_LINK | SXMSG_CLOSED;
|
||||||
|
|
||||||
pthread_mutex_lock(&(co->sslinout[1]));
|
pthread_mutex_lock(&(co->sslinout[1]));
|
||||||
__conn_write(co, &mhead, sizeof(sntllv2_head_t));
|
__conn_write(co, &mhead, sizeof(sxmplv2_head_t));
|
||||||
pthread_mutex_unlock(&(co->sslinout[1]));
|
pthread_mutex_unlock(&(co->sslinout[1]));
|
||||||
|
|
||||||
/* we will not wait anything */
|
/* we will not wait anything */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Secure Network Transport Layer Library implementation.
|
* Secure X Message Passing Library v2 implementation.
|
||||||
* This is a proprietary software. See COPYING for further details.
|
* This is a proprietary software. See COPYING for further details.
|
||||||
*
|
*
|
||||||
* (c) Askele Group 2013-2015 <http://askele.com>
|
* (c) Askele Group 2013-2015 <http://askele.com>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user