/*
3APA3A simpliest proxy server
(c) 2002-2008 by ZARAZA <3APA3A@security.nnov.ru>
please read License Agreement
*/
#include "proxy.h"
#define RETURN(xxx) { param->res = xxx; goto CLEANRET; }
#define LINESIZE 65536
extern FILE *writable;
FILE * confopen();
extern void decodeurl(unsigned char *s, int filter);
struct printparam {
char buf[1024];
int inbuf;
struct clientparam *cp;
};
static void stdpr(struct printparam* pp, char *buf, int inbuf){
if((pp->inbuf + inbuf > 1024) || !buf) {
socksend(pp->cp->clisock, (unsigned char *)pp->buf, pp->inbuf, conf.timeouts[STRING_S]);
pp->inbuf = 0;
if(!buf) return;
}
if(inbuf >= 1000){
socksend(pp->cp->clisock, (unsigned char *)buf, inbuf, conf.timeouts[STRING_S]);
}
else {
memcpy(pp->buf + pp->inbuf, buf, inbuf);
pp->inbuf += inbuf;
}
}
static void stdcbf(void *cb, char *buf, int inbuf){
int delay = 0;
int i;
for(i = 0; i < inbuf; i++){
switch(buf[i]){
case '&':
if(delay){
stdpr((struct printparam*)cb, buf+i-delay, delay);
delay = 0;
}
stdpr((struct printparam*)cb, "&", 5);
break;
case '<':
if(delay){
stdpr((struct printparam*)cb, buf+i-delay, delay);
delay = 0;
}
stdpr((struct printparam*)cb, "<", 4);
break;
case '>':
if(delay){
stdpr((struct printparam*)cb, buf+i-delay, delay);
delay = 0;
}
stdpr((struct printparam*)cb, ">", 4);
break;
default:
delay++;
break;
}
}
if(delay){
stdpr((struct printparam*)cb, buf+i-delay, delay);
}
}
/*
static char * templateprint(struct printparam* pp, int *level, struct dictionary *dict, char * template){
char *s, *s2;
for(; template && *template; ){
if(!( s = strchr(template, '<'))){
stdpr(pp, template, (int)strlen(template));
return template + strlen(template);
}
if(s[1] != '%' || s[2] == '%'){
stdpr(pp, template, (int)(s - template) + 1);
template = s + 1;
continue;
}
if(s[2] == '/' && (s2 = strchr(s + 2, '>')) && *(s2 - 1) == '%'){
if(--*level < 0) return NULL;
return s2 + 1;
}
}
return template;
}
*/
static void printstr(struct printparam* pp, char* str){
stdpr(pp, str, str?(int)strlen(str):0);
}
static void printval(void *value, int type, int level, struct printparam* pp){
struct node pn, cn;
struct property *p;
int i;
pn.iteration = NULL;
pn.parent = NULL;
pn.type = type;
pn.value = value;
printstr(pp, "
\r\n"
"" "\r\n" "Counters\r\n" "Reload \r\n" "Running Services \r\n" "Config\r\n" " | "
"%s %s configuration", "HTTP/1.0 200 OK\r\n" "Connection: close\r\n" "Cache-Control: no-cache\r\n" "Content-type: text/xml\r\n" "\r\n" "\r\n" "\r\n" "\r\n" " " COPYRIGHT "\r\n" " |