Hi all ! I'm not sure yet if I'm doing something wrong, but I think we may have a bug on http implementation, but is hard to explain, so please be patient.
What am I doing? I'm sending a sms request (MO) to a servlet, the servlet should reply using the sendsms http interface, that is requesting a url like: http://localhost:8080/kannel_test/KannelTest?from=222140576&to=4378&keyWord=ll9f&scndWord=segunda&theRest=todo%20lo%20demas The related confs: group = smsbox bearerbox-host = localhost sendsms-port = 64235 global-sender = 4378 reply-couldnotfetch = "Contacta a soporte code 1" reply-couldnotrepresent = "Contacta a soporte code 2" reply-requestfailed = "Contacta a soporte code 3" reply-emptymessage = "Contacta a soporte code 4" group = sms-service keyword = default post-url = "http://localhost:8080/kannel_test/KannelTest?from=%p&to=%P&keyWord=%k&scndWord=%s&theRest=%r" #accept-x-kannel-headers = true max-messages = 0 What is the problem? The problem is that when my java app tries to get the URL, I get an exception like: java.net.SocketException: Unexpected end of file from server in the JVM, and the debug on smsbox looks like: 2004-08-12 18:30:49 [13488] [2] DEBUG: HTTP: Creating HTTPClient for `127.0.0.1'. 2004-08-12 18:30:49 [13488] [1] DEBUG: HTTP: Destroying HTTPClient area 0x941f2c8. 2004-08-12 18:30:49 [13488] [1] DEBUG: HTTP: Destroying HTTPClient for `127.0.0.1'. 2004-08-12 18:30:49 [13488] [2] DEBUG: HTTP: Creating HTTPClient for `127.0.0.1'. 2004-08-12 18:30:49 [13488] [1] DEBUG: HTTP: Destroying HTTPClient area 0x941f2c8. 2004-08-12 18:30:49 [13488] [1] DEBUG: HTTP: Destroying HTTPClient for `127.0.0.1'. Ok, that looks like a problem at my java app, so I tried connecting to another url with my app with no problem, thats why I partially discarded that possibility. The next thing that may had gone wrong was the URL creation, so I tried with Mozilla using the url generated by my app, and it worked fine. So, I decided to sniff and compare 3 tests: 1.- My App connecting to www.google.com : My app sent this: GET / HTTP/1.1 User-Agent: Java/1.4.2_03 Host: www.google.com Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive and received this from google: HTTP/1.1 302 Found Location: http://www.google.com.mx/cxfer?c=PREF%3D:TM%3D1092355048:S%3DKFxs1Ocs1_d6SPlR Set-Cookie: PREF=ID=7296c503648eed6e:CR=1:TM=1092355048:LM=1092355048:S=_Z4iNjWgx73z9Dz1; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com Content-Type: text/html Server: GWS/2.1 Content-Length: 207 Date: Thu, 12 Aug 2004 23:57:28 GMT <HTML><HEAD><TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.com.mx/cxfer?c=PREF%3D:TM%3D1092355048:S%3DKFxs1Ocs1_d6SPlR">here</A>. </BODY></HTML> No exceptions thrown, and sniffing seems quite ok to me. 2.- Mozilla connecting to the URL created by my app: Mozila said: GET /cgi-bin/sendsms?username=xxx&password=xxx&to=2221401576&from=4378&text=mensaje HTTP/1.1 Host: localhost:64235 User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4.1) Gecko/20031030 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Kannel responded: HTTP/1.1 202 Accepted Server: Kannel/cvs-20040812 Content-Length: 5 Content-type: text/html Pragma: no-cache Cache-Control: no-cache Sent. And everything worked smoothly. 3.- My App sending via Kannel : My app said: GET /cgi-bin/sendsms?username=xxx&password=xxx&to=2221401576&from=4378&text=mensaje via http request HTTP/1.1 User-Agent: Java/1.4.2_03 Host: localhost:64235 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive And Kannel had nothing to say... Exception was thrown and the problem I explained before. Flags at TCP level : myApp [SYN] Kannel [SYN, ACK] myApp [ACK] myApp [PSH, ACK] Here goes the HTTP request { Kannel [ACK] Kannel [FIN, ACK] instead of: Kannel [ACK] Kannel [PSH, ACK] HTTP response from kannel } ... I'm not very http literate, but I see no reason for kannel to reject my connection from my java app, there are some obvious differences from the Mozilla version of the request to java's request, but, should that be an issue for Kannel? BTW: the piece of code I'm connecting with at my java app is : ... some code ... // At this point sb.toString returns the full URL to connect to url = new URL(sb.toString()); // The exception is thrown at this line, at the URL.openStream() method. br = new BufferedReader(new InputStreamReader(url.openStream())); ... some code ... Thanks for the patience on reading this looong e-mail, and please tell me what do you think about it, or if someone know a better way of doing that in java, I will appreciate it!! P.S. also tell me if I'm missing some info to post. == Oscar OM MANI PEME HUM
