Hi,
ok, what about putting simple return statement instead of goto error?
In case of queued for sending, http_send_reply() will register a
callback to receive_request() with a state sending_reply which will
close the connection afterwards. So it means that http_send_reply()
will destroy the connection anyway.
However, above will not work, i.e. client will get a 400 reply but the
connection won't be closed because we have p->persistent_conn = 1 as
default in client_create() which I think has to be changed into 0. Who
said that HTTP 1.1 connection should default to keep-alive anyway?
Btw, in order for others to understand what this is all about, given
that localhost:13013 is your smsbox up and running, try the following:
> telnet localhost 13013
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
asdf
Connection closed by foreign host.
Which means that it violates http, gives no indication to client, etc.
etc., so this should definitely be changed. Proposed way is the
following:
> telnet localhost 13013
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
asdf
HTTP/1.1 400 Bad Request
Server: Kannel/cvs-20060308
Content-Length: 0
Connection closed by foreign host.
On 3/23/06, Alexander Malysh <[EMAIL PROTECTED]> wrote:
> Hi,
>
> no go with your patch. http_send_reply is a queuing function. that means
> when response could not be sent at once (e.g. client too slow) response
> sending will be registered (queued) in fdset. but in your patch you will
> destroy httpclient with goto error statement.
>
> You should split http_send_reply function in a helper function which
> just prepare response and main function that send response queued as
> earlier. Then here instead of sending through http_send_reply you do
> something like:
>
> Octstr *resp = http_prepare_reply(...)
> conn_send(resp);
> goto error;
>
> Thanks,
> Alex
>
> Dziugas Baltrunas schrieb:
> > Hi list,
> >
> > in case of client sends us malformed URL (such as
> > /cgi-bin/sendsms?user=test&pass=test&to=12345 &text=test), attached
> > patch sends a HTTP 400 Bad request error instead of simply closing the
> > socket thus giving no indication to the client.
> >
> > --
> > Dziugas
> >
> >
> > ------------------------------------------------------------------------
> >
> > Index: gwlib/http.c
> > ===================================================================
> > RCS file: /home/cvs/gateway/gwlib/http.c,v
> > retrieving revision 1.240
> > diff -u -r1.240 http.c
> > --- gwlib/http.c 5 Mar 2006 14:37:26 -0000 1.240
> > +++ gwlib/http.c 22 Mar 2006 11:03:25 -0000
> > @@ -2097,8 +2097,10 @@
> > ret = parse_request_line(&client->method, &client->url,
> > &client->use_version_1_0, line);
> > octstr_destroy(line);
> > - if (ret == -1)
> > - goto error;
> > + if (ret == -1) {
> > + http_send_reply(client, HTTP_BAD_REQUEST, NULL, NULL);
> > + goto error;
> > + }
> > /*
> > * RFC2616 (4.3) says we should read a message body if there
> > * is one, even on GET requests.
>
>
>
--
Dziugas