}
}
+static RETSIGTYPE signal_exit(int signum) {
+ exit(1);
+}
+
/*
signal(SIGQUIT, signal_cleanup);
signal(SIGHUP, signal_cleanup);
signal(SIGTERM, signal_cleanup);
+ signal(SIGUSR2, signal_exit);
// signal(SIGSEGV, signal_cleanup); commented out because
// signal(SIGILL, signal_cleanup); we want core dumps
// signal(SIGBUS, signal_cleanup);
#endif
}
+/*
static void flush_client_inbuf(void)
{
CitContext *CCC=CC;
CCC->Pos = NULL;
}
+*/
/*
* client_write() ... Send binary data to the client.
CitContext *Ctx;
int fdflags;
+ if (nbytes < 1) return(0);
+
// flush_client_inbuf();
Ctx = CC;
if (Ctx->redirect_buffer != NULL) {
- if ((Ctx->redirect_len + nbytes + 2) >= Ctx->redirect_alloc) {
- Ctx->redirect_alloc = (Ctx->redirect_alloc * 2) + nbytes;
- Ctx->redirect_buffer = realloc(Ctx->redirect_buffer,
- Ctx->redirect_alloc);
- }
- memcpy(&Ctx->redirect_buffer[Ctx->redirect_len], buf, nbytes);
- Ctx->redirect_len += nbytes;
- Ctx->redirect_buffer[Ctx->redirect_len] = 0;
+ StrBufAppendBufPlain(Ctx->redirect_buffer,
+ buf, nbytes, 0);
return 0;
}
__FUNCTION__,
Error);
}
+ else
+ {
+#ifdef BIGBAD_IODBG
+ int rv = 0;
+ char fn [SIZ];
+ FILE *fd;
+
+ snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
+
+ fd = fopen(fn, "a+");
+ fprintf(fd, "Read: BufSize: %d BufContent: [",
+ StrLength(Target));
+ rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
+ fprintf(fd, "]\n");
+
+
+ fclose(fd);
+#endif
+
+ }
return retval == bytes;
}
int HaveMoreLinesWaiting(CitContext *CCC)
{
- if ((CCC->Pos == NULL) && (StrLength(CCC->ReadBuf) == 0))
+ if ((CCC->kill_me == 1) || (
+ (CCC->Pos == NULL) &&
+ (StrLength(CCC->ReadBuf) == 0) &&
+ (CCC->client_socket != -1)) )
return 0;
else
return 1;
FlushStrBuf(Target);
#ifdef HAVE_OPENSSL
if (CCC->redirect_ssl) {
- return client_readline_sslbuffer(Target,
- CCC->ReadBuf,
- 1);
+#ifdef BIGBAD_IODBG
+ char fn [SIZ];
+ FILE *fd;
+ int len, rlen, nlen, nrlen;
+ const char *pch;
+
+ snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
+
+ fd = fopen(fn, "a+");
+ pch = ChrPtr(CCC->ReadBuf);
+ len = StrLength(CCC->ReadBuf);
+ if (CCC->Pos != NULL)
+ rlen = CC->Pos - pch;
+ else
+ rlen = 0;
+
+/* fprintf(fd, "\n\n\nBufSize: %d BufPos: %d \nBufContent: [%s]\n\n_____________________\n",
+ len, rlen, pch);
+*/
+ fprintf(fd, "\n\n\nBufSize: %d BufPos: %d \n_____________________\n",
+ len, rlen);
+#endif
+ rc = client_readline_sslbuffer(Target,
+ CCC->ReadBuf,
+ 1);
+#ifdef BIGBAD_IODBG
+ pch = ChrPtr(CCC->ReadBuf);
+ nlen = StrLength(CCC->ReadBuf);
+ if (CCC->Pos != NULL)
+ nrlen = CC->Pos - pch;
+ else
+ nrlen = 0;
+/*
+ fprintf(fd, "\n\n\nBufSize: was: %d is: %d BufPos: was: %d is: %d \nBufContent: [%s]\n\n_____________________\n",
+ len, nlen, rlen, nrlen, pch);
+*/
+ fprintf(fd, "\n\n\nBufSize: was: %d is: %d BufPos: was: %d is: %d \n",
+ len, nlen, rlen, nrlen);
+
+ fprintf(fd, "Read: BufSize: %d BufContent: [%s]\n\n*************\n",
+ StrLength(Target), ChrPtr(Target));
+ fclose(fd);
+
+ if ((rc < 0) && (Error != NULL))
+ CtdlLogPrintf(CTDL_CRIT,
+ "%s failed: %s\n",
+ __FUNCTION__,
+ Error);
+#endif
+ return rc;
}
else
#endif
{
+#ifdef BIGBAD_IODBG
char fn [SIZ];
FILE *fd;
int len, rlen, nlen, nrlen;
*/
fprintf(fd, "\n\n\nBufSize: %d BufPos: %d \n_____________________\n",
len, rlen);
+#endif
rc = StrBufTCP_read_buffered_line_fast(Target,
CCC->ReadBuf,
&CCC->Pos,
1,
&Error);
+#ifdef BIGBAD_IODBG
pch = ChrPtr(CCC->ReadBuf);
nlen = StrLength(CCC->ReadBuf);
if (CCC->Pos != NULL)
"%s failed: %s\n",
__FUNCTION__,
Error);
+#endif
return rc;
}
}
const char *pCh;
retval = CtdlClientGetLine(CCC->MigrateBuf);
+ if (retval < 0)
+ return(retval >= 0);
+
i = StrLength(CCC->MigrateBuf);
pCh = ChrPtr(CCC->MigrateBuf);
begin_critical_section(S_SESSION_TABLE);
for (ptr = ContextList; ptr != NULL; ptr = ptr->next) {
int checkfd = ptr->client_socket;
- if ((checkfd != -1) &&
- (FD_ISSET(checkfd, &readfds)) &&
- (ptr->state == CON_IDLE) )
- {
- ptr->input_waiting = 1;
- if (!bind_me) {
- bind_me = ptr; /* I choose you! */
- bind_me->state = CON_EXECUTING;
- }
- else {
- ptr->state = CON_READY;
+ if ((checkfd != -1) && (ptr->state == CON_IDLE) ){
+ if (FD_ISSET(checkfd, &readfds)) {
+ ptr->input_waiting = 1;
+ if (!bind_me) {
+ bind_me = ptr; /* I choose you! */
+ bind_me->state = CON_EXECUTING;
+ }
+ else {
+ ptr->state = CON_READY;
+ }
+ } else if ((ptr->is_async) && (ptr->async_waiting) && (ptr->h_async_function)) {
+ if (!bind_me) {
+ bind_me = ptr; /* I choose you! */
+ bind_me->state = CON_EXECUTING;
+ }
+ else {
+ ptr->state = CON_READY;
+ }
}
}
}