Browse Source

Indent. Sorry. Plus timeout on every connection, for every byte we got.

dynamic-accesslists
erdgeist 18 years ago
parent
commit
1d66041fd5
  1. 47
      opentracker.c

47
opentracker.c

@ -386,25 +386,19 @@ allparsed:
io_wantread(s); io_wantread(s);
for (;;) for (;;) {
{
int64 i; int64 i;
io_wait(); io_wait();
while ((i=io_canread())!=-1) while ((i=io_canread())!=-1) {
{ if (i==s) { // ist es der serversocket?
if (i==s) // ist es der serversocket?
{
int n; int n;
while ((n=socket_accept4(s,(void*)&ip,&port))!=-1) while ((n=socket_accept4(s,(void*)&ip,&port))!=-1) {
{ if (io_fd(n)) {
if (io_fd(n))
{
struct http_data* h=(struct http_data*)malloc(sizeof(struct http_data)); struct http_data* h=(struct http_data*)malloc(sizeof(struct http_data));
io_wantread(n); io_wantread(n);
if (h) if (h) {
{
byte_zero(h,sizeof(struct http_data)); byte_zero(h,sizeof(struct http_data));
h->ip=ip; h->ip=ip;
taia_now(&t); taia_now(&t);
@ -417,50 +411,47 @@ allparsed:
} else } else
io_close(n); io_close(n);
} }
if (errno==EAGAIN) if( errno==EAGAIN )
io_eagain(s); io_eagain(s);
else else
carp("socket_accept4"); carp("socket_accept4");
} } else {
else
{
char buf[8192]; char buf[8192];
struct http_data* h=io_getcookie(i); struct http_data* h=io_getcookie(i);
int l=io_tryread(i,buf,sizeof buf); int l=io_tryread(i,buf,sizeof buf);
if (l<=0) if( l <= 0 ) {
{ if( h ) {
if (h)
{
array_reset(&h->r); array_reset(&h->r);
free(h); free(h);
} }
io_close(i); io_close(i);
} } else {
else
{
array_catb(&h->r,buf,l); array_catb(&h->r,buf,l);
if (array_failed(&h->r)) if( array_failed(&h->r))
httperror(i,h,"500 Server Error","Request too long."); httperror(i,h,"500 Server Error","Request too long.");
else if (array_bytes(&h->r)>8192) else if (array_bytes(&h->r)>8192)
httperror(i,h,"500 request too long","You sent too much headers"); httperror(i,h,"500 request too long","You sent too much headers");
else if ((l=header_complete(h))) else if ((l=header_complete(h)))
httpresponse(i,h); httpresponse(i,h);
else {
taia_now(&t);
taia_addsec(&t,&t,OT_CLIENT_TIMEOUT);
io_timeout(i,t);
}
} }
} }
} }
while ((i=io_canwrite())!=-1) while ((i=io_canwrite())!=-1) {
{
struct http_data* h=io_getcookie(i); struct http_data* h=io_getcookie(i);
int64 r=iob_send(i,&h->iob); int64 r=iob_send(i,&h->iob);
if (r==-1) if (r==-1)
io_eagain(i); io_eagain(i);
else else
if ((r<=0)||(h->iob.bytesleft==0)) if ((r<=0)||(h->iob.bytesleft==0)) {
{
iob_reset(&h->iob); iob_reset(&h->iob);
free(h); free(h);
io_close(i); io_close(i);

Loading…
Cancel
Save