* 0 Request timed out.
* -1 Connection is broken, or other error.
*/
-int client_read_to(int *sock, StrBuf *Target, StrBuf *Buf, int bytes, int timeout)
+int client_read_to(int *sock, StrBuf *Target, StrBuf *Buf, const char **Pos, int bytes, int timeout)
{
const char *Error;
int retval = 0;
#ifdef HAVE_OPENSSL
if (is_https) {
+ long bufremain = StrLength(Buf) - (*Pos - ChrPtr(Buf));
+ StrBufAppendBufPlain(Target, *Pos, bufremain, 0);
+ *Pos = NULL;
+ FlushStrBuf(Buf);
+
while ((StrLength(Buf) + StrLength(Target) < bytes) &&
(retval >= 0))
retval = client_read_sslbuffer(Buf, timeout);
}
#endif
- if (StrLength(Buf) > 0) {/*/// todo: what if Buf > bytes?*/
- StrBufAppendBuf(Target, Buf, 0);
- }
- retval = StrBufReadBLOB(Target,
- sock,
- (StrLength(Target) > 0),
- bytes - StrLength(Target),
- &Error);
+ retval = StrBufReadBLOBBuffered(Target,
+ Buf, Pos,
+ sock,
+ 1,
+ bytes,
+ O_TERM,
+ &Error);
if (retval < 0) {
lprintf(2, "client_read() failed: %s\n",
Error);
fd_set wset;
int fdflags;
- //#ifdef HAVE_ZLIB
- /* Perform gzip compression, if enabled and supported by client */
if (!DisableGzip && (WCC->gzip_ok) && CompressBuffer(WCC->WBuf))
{
hprintf("Content-encoding: gzip\r\n");
}
- //#endif /* HAVE_ZLIB */
hprintf("Content-length: %d\r\n\r\n", StrLength(WCC->WBuf));
}
-
-/*
- * Read data from the client socket with default timeout.
- * (This is implemented in terms of client_read_to() and could be
- * justifiably moved out of sysdep.c)
- *
- * sock the socket fd to read from
- * buf the buffer to write to
- * bytes Number of bytes to read
- */
-int client_read(int *sock, StrBuf *Target, StrBuf *buf, int bytes)
-{
- return (client_read_to(sock, Target, buf, bytes, SLEEPING));
-}
-
-
-
/*
* Shut us down the regular way.
* signum is the signal we want to forward
}
-int ClientGetLine(int *sock, StrBuf *Target, StrBuf *CLineBuf)
+int ClientGetLine(int *sock, StrBuf *Target, StrBuf *CLineBuf, const char **Pos)
{
const char *Error, *pch, *pchs;
int rlen, len, retval = 0;
+#ifdef HAVE_OPENSSL
if (is_https) {
int ntries = 0;
if (StrLength(CLineBuf) > 0) {
return -1;
}
else
- return StrBufTCP_read_buffered_line(Target,
- CLineBuf,
- sock,
- 5,
- 1,
- &Error);
+#endif
+ return StrBufTCP_read_buffered_line_fast(Target,
+ CLineBuf,
+ Pos,
+ sock,
+ 5,
+ 1,
+ &Error);
}
#endif
extern int dbg_analyze_msg;
extern int dbg_bactrace_template_errors;
+extern int DumpTemplateI18NStrings;
+extern StrBuf *I18nDump;
void InitTemplateCache(void);
extern int LoadTemplates;
extern void LoadZoneFiles(void);
char *mo = NULL;
#endif /* ENABLE_NLS */
char uds_listen_path[PATH_MAX]; /* listen on a unix domain socket? */
+ const char *I18nDumpFile = NULL;
WildFireInitBacktrace(argv[0], 2);
/* Parse command line */
#ifdef HAVE_OPENSSL
- while ((a = getopt(argc, argv, "h:i:p:t:T:x:dD:cfsZ")) != EOF)
+ while ((a = getopt(argc, argv, "h:i:p:t:T:x:dD:G:cfsZ")) != EOF)
#else
- while ((a = getopt(argc, argv, "h:i:p:t:T:x:dD:cfZ")) != EOF)
+ while ((a = getopt(argc, argv, "h:i:p:t:T:x:dD:G:cfZ")) != EOF)
#endif
switch (a) {
case 'h':
case 's':
is_https = 1;
break;
+ case 'G':
+ DumpTemplateI18NStrings = 1;
+ I18nDump = NewStrBufPlain(HKEY("int templatestrings(void)\n{\n"));
+ I18nDumpFile = optarg;
+ break;
default:
fprintf(stderr, "usage: webcit "
"[-i ip_addr] [-p http_port] "
"[-t tracefile] [-c] [-f] "
"[-T Templatedebuglevel] "
- "[-d] [-Z] "
+ "[-d] [-Z] [-G i18ndumpfile] "
#ifdef HAVE_OPENSSL
"[-s] "
#endif
}
/* daemonize, if we were asked to */
- if (running_as_daemon) {
+ if (!DumpTemplateI18NStrings && running_as_daemon) {
start_daemon(pidfile);
}
else {
#ifdef ENABLE_NLS
initialize_locales();
+
locale = setlocale(LC_ALL, "");
mo = malloc(strlen(webcitdir) + 20);
free(mo);
lprintf(9, "Text domain: %s\n", textdomain("webcit"));
lprintf(9, "Text domain Charset: %s\n", bind_textdomain_codeset("webcit","UTF8"));
- preset_locale();
#endif
initialize_axdefs();
InitTemplateCache();
+ if (DumpTemplateI18NStrings) {
+ FILE *fd;
+ StrBufAppendBufPlain(I18nDump, HKEY("}\n"), 0);
+ if (StrLength(I18nDump) < 50) {
+ lprintf(1, "********************************************************************************\n");
+ lprintf(1, "* No strings found in templates! are you shure they're there? *\n");
+ lprintf(1, "********************************************************************************\n");
+ return -1;
+ }
+ fd = fopen(I18nDumpFile, "w");
+ if (fd == NULL) {
+ lprintf(1, "********************************************************************************\n");
+ lprintf(1, "* unable to open I18N dumpfile [%s] *\n", I18nDumpFile);
+ lprintf(1, "********************************************************************************\n");
+ return -1;
+ }
+ fwrite(ChrPtr(I18nDump), 1, StrLength(I18nDump), fd);
+ fclose(fd);
+ return 0;
+ }
if (!access("static.local/webcit.css", R_OK)) {
csslocal = NewStrBufPlain(HKEY("<link href=\"static.local/webcit.css\" rel=\"stylesheet\" type=\"text/css\">"));