Subversion Repositories HomeAutomation

Rev

Rev 1203 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1203 Rev 1348
1
 
1
 
2
function HTTP()
2
function HTTP()
3
{
3
{
4
}
4
}
5
 
5
 
6
HTTP.prototype.mySocket = null;
6
HTTP.prototype.mySocket = null;
7
HTTP.prototype.myUserCallback = null;
7
HTTP.prototype.myUserCallback = null;
8
HTTP.prototype.myBuffer = null;
8
HTTP.prototype.myBuffer = null;
9
HTTP.prototype.myRequest = null;
9
HTTP.prototype.myRequest = null;
10
 
10
 
11
HTTP.prototype.request = function(callback, url)
11
HTTP.prototype.request = function(callback, url)
12
{
12
{
13
    this.myUserCallback = callback;
13
    this.myUserCallback = callback;
14
   
14
   
15
    if (this.mySocket)
15
    if (this.mySocket)
16
    {
16
    {
17
        this.mySocket.stop();
17
        this.mySocket.stop();
18
    }
18
    }
19
   
19
   
20
    var self = this;
20
    var self = this;
21
   
21
   
22
    var urlData = this.parseUrl(url);
22
    var urlData = this.parseUrl(url);
23
   
23
   
24
    /*log("hostname: " + urlData['hostname'] + "\n");
24
    /*log("hostname: " + urlData['hostname'] + "\n");
25
    log("path: " + urlData['path'] + "\n");
25
    log("path: " + urlData['path'] + "\n");
26
    log("port: " + urlData['port'] + "\n");*/
26
    log("port: " + urlData['port'] + "\n");*/
27
   
27
   
28
    this.myBuffer = "";
28
    this.myBuffer = "";
29
   
29
   
30
    this.mySocket = new Socket(function(event, data) { self.socketCallback(event, data); }, urlData['hostname'], urlData['port'], 0);
30
    this.mySocket = new Socket(function(event, data) { self.socketCallback(event, data); }, urlData['hostname'], urlData['port'], 0);
31
    this.mySocket.start();
31
    this.mySocket.start();
32
   
32
   
33
    this.myRequest = "GET " + urlData['path'] + " HTTP/1.1\r\n";
33
    this.myRequest = "GET " + urlData['path'] + " HTTP/1.1\r\n";
34
    this.myRequest += "Host: " + urlData['hostname'] + ":" + urlData['port'] + "\r\n";
34
    this.myRequest += "Host: " + urlData['hostname'] + ":" + urlData['port'] + "\r\n";
-
 
35
    this.myRequest += "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";
35
    this.myRequest += "Connection: close\r\n";
36
    this.myRequest += "Connection: close\r\n";
36
    this.myRequest += "\r\n";
37
    this.myRequest += "\r\n";
37
}
38
}
38
 
39
 
39
HTTP.prototype.parseUrl = function(url)
40
HTTP.prototype.parseUrl = function(url)
40
{
41
{
41
    var result = new Array();
42
    var result = new Array();
42
    result['port'] = 80;
43
    result['port'] = 80;
43
    result['path'] = "/";
44
    result['path'] = "/";
44
 
45
 
45
    var firstSlash = url.indexOf('/');
46
    var firstSlash = url.indexOf('/');
46
   
47
   
47
    if (firstSlash == -1)
48
    if (firstSlash == -1)
48
    {
49
    {
49
        result['hostname'] = url;
50
        result['hostname'] = url;
50
    }
51
    }
51
    else
52
    else
52
    {
53
    {
53
        result['hostname'] = url.substr(0, firstSlash);
54
        result['hostname'] = url.substr(0, firstSlash);
54
        result['path'] = url.substr(firstSlash);
55
        result['path'] = url.substr(firstSlash);
55
    }
56
    }
56
   
57
   
57
    var firstColon = result['hostname'].indexOf(':');
58
    var firstColon = result['hostname'].indexOf(':');
58
   
59
   
59
    if (firstColon != -1)
60
    if (firstColon != -1)
60
    {
61
    {
61
        result['port'] = result['hostname'].substr(firstColon+1);
62
        result['port'] = result['hostname'].substr(firstColon+1);
62
        result['hostname'] = result['hostname'].substr(0, firstColon);
63
        result['hostname'] = result['hostname'].substr(0, firstColon);
63
    }
64
    }
64
 
65
 
65
    return result;
66
    return result;
66
}
67
}
67
 
68
 
68
HTTP.prototype.socketCallback = function(event, data)
69
HTTP.prototype.socketCallback = function(event, data)
69
{
70
{
70
    switch (event)
71
    switch (event)
71
    {
72
    {
72
    case "CONNECTED":
73
    case "CONNECTED":
73
    this.mySocket.send(this.myRequest);
74
    this.mySocket.send(this.myRequest);
74
    break;
75
    break;
75
   
76
   
76
    case "DATA":
77
    case "DATA":
77
    this.myBuffer += unescape(data);
78
    this.myBuffer += unescape(data);
78
    break;
79
    break;
79
   
80
   
80
    case "RESET":
81
    case "RESET":
81
    case "CLOSED":
82
    case "CLOSED":
82
    case "DIED":
83
    case "DIED":
83
    this.mySocket.stop();
84
    this.mySocket.stop();
84
    this.processBuffer();
85
    this.processBuffer();
85
    this.mySocket = null;
86
    this.mySocket = null;
86
    break;
87
    break;
87
    }
88
    }
88
}
89
}
89
 
90
 
90
HTTP.prototype.processBuffer = function()
91
HTTP.prototype.processBuffer = function()
91
{
92
{
92
    ///FIXME: This is a bit ugly code... also not fully HTTP/1.1 compliant look at http://www.jmarshall.com/easy/http/
93
    ///FIXME: This is a bit ugly code... also not fully HTTP/1.1 compliant look at http://www.jmarshall.com/easy/http/
93
 
94
 
94
    var pos = this.myBuffer.indexOf("\n\n");
95
    var pos = this.myBuffer.indexOf("\n\n");
95
   
96
   
96
    var headerData = this.myBuffer.substr(0, pos);
97
    var headerData = this.myBuffer.substr(0, pos);
97
    var contentData = this.myBuffer.substr(pos+2);
98
    var contentData = this.myBuffer.substr(pos+2);
98
   
99
   
99
    var headerLines = headerData.split("\n");
100
    var headerLines = headerData.split("\n");
100
   
101
   
101
    var header = new Array();
102
    var header = new Array();
102
    var result = headerLines[0];
103
    var result = headerLines[0];
103
   
104
   
104
    for (var n = 1; n < headerLines.length; n++)
105
    for (var n = 1; n < headerLines.length; n++)
105
    {
106
    {
106
        var headerParts = headerLines[n].split(":", 2);
107
        var headerParts = headerLines[n].split(":", 2);
107
        header[headerParts[0]] = headerParts[1].trim(' ');
108
        header[headerParts[0]] = headerParts[1].trim(' ');
108
    }
109
    }
109
   
110
   
110
    this.myBuffer = "";
111
    this.myBuffer = "";
111
   
112
   
112
    this.myUserCallback(result, header, contentData);
113
    this.myUserCallback(result, header, contentData);
113
}
114
}
114
 
115