TODO fixes;

v0.5.xx
Alexander Vdolainen 9 years ago
parent 263d3da8bb
commit 738faf0630

@ -834,7 +834,7 @@ static void *__sxmpl_thread(void *b)
} else if(mhead->attr & SXMSG_LINK) { /* link layer messages */ } else if(mhead->attr & SXMSG_LINK) { /* link layer messages */
if(mhead->attr & SXMSG_CLOSED) goto __finish; /* close the link */ if(mhead->attr & SXMSG_CLOSED) goto __finish; /* close the link */
if(mhead->attr & SXMSG_PULSE) { /* it's a link pulse messages */ if(mhead->attr & SXMSG_PULSE) { /* it's a link pulse messages */
/* TODO: syncronization and so on */ /* TODO: other service messages */
if(mhead->opcode == SXE_RAPIDMSG) { /* custom pulse */ if(mhead->opcode == SXE_RAPIDMSG) { /* custom pulse */
sx = parse_sexp(bbuf, mhead->payload_length); sx = parse_sexp(bbuf, mhead->payload_length);
if(sx && co->ssys->on_pulse) co->ssys->on_pulse(co, sx); if(sx && co->ssys->on_pulse) co->ssys->on_pulse(co, sx);
@ -1279,7 +1279,12 @@ sxlink_t *sxlink_connect(sxhub_t *ssys, const char *host,
} }
/* SSL handshake */ /* SSL handshake */
co->ssl = SSL_new(ssys->ctx); /* TODO: checkout for it */ co->ssl = SSL_new(ssys->ctx);
if(!co->ssl) {
close(sck);
r = SXE_ENOMEM;
goto __fail;
}
SSL_set_fd(co->ssl, sck); /* attach connected socket */ SSL_set_fd(co->ssl, sck); /* attach connected socket */
SSL_set_connect_state(co->ssl); SSL_set_connect_state(co->ssl);
if(SSL_connect(co->ssl) == -1) { if(SSL_connect(co->ssl) == -1) {
@ -1410,6 +1415,8 @@ sxlink_t *sxlink_connect(sxhub_t *ssys, const char *host,
int sxlink_close(sxlink_t *co) int sxlink_close(sxlink_t *co)
{ {
sxmplv2_head_t mhead; sxmplv2_head_t mhead;
pthread_t curr = pthread_self();
int i;
memset(&mhead, 0, sizeof(sxmplv2_head_t)); memset(&mhead, 0, sizeof(sxmplv2_head_t));
/* setup header */ /* setup header */
@ -1422,8 +1429,9 @@ int sxlink_close(sxlink_t *co)
/* we will not wait anything */ /* we will not wait anything */
co->flags |= SXMP_CLOSED; co->flags |= SXMP_CLOSED;
/* TODO: wait until all threads will finish */ for(i = 0; i < 8; i++) {
usleep(20000); if(!pthread_equal(curr, co->thrd_poll[i])) pthread_join(co->thrd_poll[i], NULL);
}
return SXE_SUCCESS; return SXE_SUCCESS;
} }

Loading…
Cancel
Save