Subversion Repositories HomeAutomation

Rev

Rev 1959 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1959 Rev 2091
1
 
1
 
2
Http_Buffers = {};
2
Http_Buffers = {};
3
 
3
 
4
function Http_Request(url, callback)
4
function Http_Request(url, callback)
5
{
5
{
6
  var parsed_url = Http_ParseUrl(url);
6
  var parsed_url = Http_ParseUrl(url);
7
 
7
 
8
  var socket_id = Socket_Connect(parsed_url["host"], parsed_url["port"], function(socket_id, data)
8
  var socket_id = Socket_Connect(parsed_url["host"], parsed_url["port"], function(socket_id, data)
9
  {
9
  {
10
    ///FIXME: This is a bit ugly code... also not fully HTTP/1.1 compliant look at http://www.jmarshall.com/easy/http/
10
    ///FIXME: This is a bit ugly code... also not fully HTTP/1.1 compliant look at http://www.jmarshall.com/easy/http/
11
 
11
 
12
    Http_Buffers[socket_id] += data;
12
    Http_Buffers[socket_id] += data;
13
   
13
 
14
  }, function(socket_id, state)
14
  }, function(socket_id, state)
15
  {
15
  {
16
    if (state == SOCKET_STATE_CONNECTED)
16
    if (state == SOCKET_STATE_DISCONNECTED)
17
    {
17
    {
18
      var data = Http_Buffers[socket_id];
18
      var data = Http_Buffers[socket_id];
19
     
19
 
20
      delete Http_Buffers[socket_id];
20
      delete Http_Buffers[socket_id];
21
     
21
 
22
      var pos = data.indexOf("\r\n\r\n");
22
      var pos = data.indexOf("\r\n\r\n");
23
 
23
 
24
      var header_data = data.substr(0, pos);
24
      var header_data = data.substr(0, pos);
25
      var content_data = data.substr(pos+2);
25
      var content_data = data.substr(pos+2);
26
 
26
 
27
      var header_lines = header_data.split("\r\n");
27
      var header_lines = header_data.split("\r\n");
28
 
28
 
29
      var header = [];
29
      var header = [];
30
      var result = header_lines[0];
30
      var result = header_lines[0];
31
 
31
 
32
      for (var n = 1; n < header_lines.length; n++)
32
      for (var n = 1; n < header_lines.length; n++)
33
      {
33
      {
34
    var header_parts = header_lines[n].split(":", 2);
34
        var header_parts = header_lines[n].split(":", 2);
35
    header[header_parts[0]] = header_parts[1].trim(' ');
35
        header[header_parts[0]] = header_parts[1].trim(' ');
36
      }
36
      }
37
 
37
 
38
      callback(socket_id, result, header, content_data);
38
      callback(socket_id, result, header, content_data);
39
    }
39
    }
40
  });
40
  });
41
 
41
 
42
  if (socket_id > 0)
42
  if (socket_id > 0)
43
  {
43
  {
44
      var request = "";
44
      var request = "";
45
     
45
 
46
      Http_Buffers[socket_id] = "";
46
      Http_Buffers[socket_id] = "";
47
 
47
 
48
      request = "GET " + parsed_url['path'] + " HTTP/1.1\r\n";
48
      request = "GET " + parsed_url['path'] + " HTTP/1.1\r\n";
49
      request += "Host: " + parsed_url['host'] + ":" + parsed_url['port'] + "\r\n";
49
      request += "Host: " + parsed_url['host'] + ":" + parsed_url['port'] + "\r\n";
50
      request += "User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090730 SUSE/3.5.2-1.1 Firefox/3.5.2\r\n";
50
      request += "User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090730 SUSE/3.5.2-1.1 Firefox/3.5.2\r\n";
51
      request += "Connection: close\r\n";
51
      request += "Connection: close\r\n";
52
      request += "\r\n";
52
      request += "\r\n";
53
 
53
 
54
      Socket_Send(socket_id, request);
54
      Socket_Send(socket_id, request);
55
  }
55
  }
56
  else
56
  else
57
  {
57
  {
58
    Log("Could not connect to " + url + "\n");
58
    Log("Could not connect to " + url + "\n");
59
  }
59
  }
60
 
60
 
61
  return socket_id;
61
  return socket_id;
62
}
62
}
63
 
63
 
64
function Http_ParseUrl(url)
64
function Http_ParseUrl(url)
65
{
65
{
66
    var result = {};
66
    var result = {};
67
    result['port'] = 80;
67
    result['port'] = 80;
68
    result['path'] = "/";
68
    result['path'] = "/";
69
 
69
 
70
    var firstSlash = url.indexOf('/');
70
    var firstSlash = url.indexOf('/');
71
   
71
 
72
    if (firstSlash == -1)
72
    if (firstSlash == -1)
73
    {
73
    {
74
        result['host'] = url;
74
        result['host'] = url;
75
    }
75
    }
76
    else
76
    else
77
    {
77
    {
78
        result['host'] = url.substr(0, firstSlash);
78
        result['host'] = url.substr(0, firstSlash);
79
        result['path'] = url.substr(firstSlash);
79
        result['path'] = url.substr(firstSlash);
80
    }
80
    }
81
   
81
 
82
    var firstColon = result['host'].indexOf(':');
82
    var firstColon = result['host'].indexOf(':');
83
   
83
 
84
    if (firstColon != -1)
84
    if (firstColon != -1)
85
    {
85
    {
86
        result['port'] = result['host'].substr(firstColon+1);
86
        result['port'] = result['host'].substr(firstColon+1);
87
        result['host'] = result['host'].substr(0, firstColon);
87
        result['host'] = result['host'].substr(0, firstColon);
88
    }
88
    }
89
 
89
 
90
    return result;
90
    return result;
91
}
91
}
92
 
92