diff --git a/apps/backend/backend_client.c b/apps/backend/backend_client.c index dd3240d5..4cd62d05 100644 --- a/apps/backend/backend_client.c +++ b/apps/backend/backend_client.c @@ -1912,8 +1912,9 @@ from_client_msg(clixon_handle h, return retval;// -1 here terminates backend } -/*! An internal clicon message has arrived from a client. Receive and dispatch. +/*! Internal clixon message has arrived from a client. Receive and dispatch. * + * Internal clixon is NETCONF 1.1 chunked encoding * @param[in] s Socket where message arrived. read from this. * @param[in] arg Client entry (from). * @retval 0 OK @@ -1938,7 +1939,7 @@ from_client(int s, } if (ce_client_descr(ce, &cbce) < 0) goto done; - if (clixon_msg_rcv11(s, NULL, 0, &cb, &eof) < 0) + if (clixon_msg_rcv11(s, cbuf_get(cbce), 0, &cb, &eof) < 0) /* XXX why not descr here? */ goto done; if (eof){ backend_client_rm(h, ce); diff --git a/lib/src/clixon_log.c b/lib/src/clixon_log.c index 14981527..5a5593bd 100644 --- a/lib/src/clixon_log.c +++ b/lib/src/clixon_log.c @@ -1,4 +1,4 @@ - /* +/* * ***** BEGIN LICENSE BLOCK ***** @@ -296,9 +296,12 @@ slogtime(void) * @see clixon_debug */ int -clixon_log_str(int level, - char *msg) +clixon_log_str(int level, + char *msg) { + /* Remove trailing CR if any */ + if (strlen(msg) && msg[strlen(msg)-1] == '\n') + msg[strlen(msg)-1] = '\0'; if (_log_flags & CLIXON_LOG_SYSLOG) syslog(LOG_MAKEPRI(LOG_USER, level), "%s", msg); // XXX this may block /* syslog makes own filtering, we do it here: diff --git a/lib/src/clixon_proto.c b/lib/src/clixon_proto.c index 0dfb7080..997e2d52 100644 --- a/lib/src/clixon_proto.c +++ b/lib/src/clixon_proto.c @@ -395,48 +395,40 @@ clixon_msg_rcv10(int s, *eof = 0; memset(buf, 0, sizeof(buf)); while (1){ -#if 1 if ((len = netconf_input_read2(s, buf, sizeof(buf), eof)) < 0) goto done; -#else - if ((len = read(s, buf, sizeof(buf))) < 0){ - if (errno == ECONNRESET) - len = 0; /* emulate EOF */ - else{ - clixon_log(NULL, LOG_ERR, "%s: read: %s errno:%d", __FUNCTION__, strerror(errno), errno); - goto done; - } - } /* read */ - if (len == 0){ /* EOF */ - *eof = 1; - close(s); - goto ok; - } -#endif - for (i=0; i]]>", - buf[i], - &xml_state)) { - /* OK, we have an xml string from a client */ - /* Remove trailer */ - *(((char*)cbuf_get(cb)) + cbuf_len(cb) - strlen("]]>]]>")) = '\0'; - goto ok; - } - } - /* poll==1 if more, poll==0 if none */ - if ((poll = clixon_event_poll(s)) < 0) - goto done; - if (poll == 0) - break; /* No data to read */ + for (i=0; i]]>", + buf[i], + &xml_state)) { + /* OK, we have an xml string from a client */ + /* Remove trailer */ + *(((char*)cbuf_get(cb)) + cbuf_len(cb) - strlen("]]>]]>")) = '\0'; + goto ok; + } + } + /* poll==1 if more, poll==0 if none */ + if ((poll = clixon_event_poll(s)) < 0) + goto done; + if (poll == 0) + break; /* No data to read */ } /* while */ ok: - if (descr) - clixon_debug(CLIXON_DBG_MSG, "Recv [%s]: %s", descr, cbuf_get(cb)); - else - clixon_debug(CLIXON_DBG_MSG, "Recv: %s", cbuf_get(cb)); + if (*eof){ + if (descr) + clixon_debug(CLIXON_DBG_MSG, "Recv [%s]: EOF", descr); + else + clixon_debug(CLIXON_DBG_MSG, "Recv: EOF"); + } + else { + if (descr) + clixon_debug(CLIXON_DBG_MSG, "Recv [%s]: %s", descr, cbuf_get(cb)); + else + clixon_debug(CLIXON_DBG_MSG, "Recv: %s", cbuf_get(cb)); + } retval = 0; done: clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_DETAIL, "done"); @@ -537,7 +529,7 @@ atomicio_sig_handler(int arg) * @retval 0 OK (check eof) * @retval -1 Error * @see netconf_input_cb() - * @note only NETCONF version 1.0 EOM framing + * @see clixon_msg_rcv10 For EOM framing */ int clixon_msg_rcv11(int s, @@ -546,20 +538,20 @@ clixon_msg_rcv11(int s, cbuf **cb, int *eof) { - int retval = -1; - unsigned char buf[BUFSIZ]; - ssize_t buflen = sizeof(buf); - int frame_state = 0; - size_t frame_size = 0; - unsigned char *p = buf; - size_t plen; - cbuf *cbmsg=NULL; - ssize_t len; - int eom = 0; - cxobj *xtop = NULL; - cxobj *xerr = NULL; - sigset_t oldsigset = {0,}; - struct sigaction oldsigaction[32] = {{{0,},},}; + int retval = -1; + unsigned char buf[BUFSIZ]; + ssize_t buflen = sizeof(buf); + int frame_state = 0; + size_t frame_size = 0; + unsigned char *p = buf; + size_t plen; + cbuf *cbmsg=NULL; + ssize_t len; + int eom = 0; + cxobj *xtop = NULL; + cxobj *xerr = NULL; + sigset_t oldsigset = {0,}; + struct sigaction oldsigaction[32] = {{{0,},},}; if ((cbmsg = cbuf_new()) == NULL){ clixon_err(OE_XML, errno, "cbuf_new"); @@ -596,7 +588,18 @@ clixon_msg_rcv11(int s, continue; } } - clixon_debug(CLIXON_DBG_MSG, "Recv: %s", cbuf_get(cbmsg)); + if (*eof ){ + if (descr) + clixon_debug(CLIXON_DBG_MSG, "Recv [%s]: EOF", descr); + else + clixon_debug(CLIXON_DBG_MSG, "Recv: EOF"); + } + else { + if (descr) + clixon_debug(CLIXON_DBG_MSG, "Recv [%s]: %s", descr, cbuf_get(cbmsg)); + else + clixon_debug(CLIXON_DBG_MSG, "Recv: %s", cbuf_get(cbmsg)); + } if (cb){ *cb = cbmsg; cbmsg = NULL;