OpenCores
URL https://opencores.org/ocsvn/tcp_socket/tcp_socket/trunk

Subversion Repositories tcp_socket

[/] [tcp_socket/] [trunk/] [source/] [HTTP.h] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jondawson
////////////////////////////////////////////////////////////////////////////////
2
//
3
//  CHIPS-2.0  HTTP
4
//
5
//  :Author: Jonathan P Dawson
6
//  :Date: 17/10/2013
7
//  :email: chips@jondawson.org.uk
8
//  :license: MIT
9
//  :Copyright: Copyright (C) Jonathan P Dawson 2013
10
//
11
//  Constuct an HTTP response for simple web app.
12
//
13
////////////////////////////////////////////////////////////////////////////////
14
unsigned socket_high = 1;
15
unsigned socket_data;
16
 
17
void socket_put_char(char x){
18
        if(socket_high){
19
                socket_high = 0;
20
                socket_data = x << 8;
21
        } else {
22
                socket_high = 1;
23
                socket_data |= x & 0xff;
24
                put_socket(socket_data);
25
        }
26
}
27
 
28
void socket_flush(){
29
        if(!socket_high) put_socket(socket_data);
30
        socket_high = 1;
31
}
32
 
33
void socket_put_string(unsigned string[]){
34
        unsigned i;
35
        while(string[i]){
36
                socket_put_char(string[i]);
37
                i++;
38
        }
39
}
40
 
41
void socket_put_decimal(unsigned value){
42
        unsigned digit_0 = 0;
43
        unsigned digit_1 = 0;
44
        unsigned digit_2 = 0;
45
        unsigned digit_3 = 0;
46
        unsigned digit_4 = 0;
47
        unsigned significant = 0;
48
 
49
        while(value >= 10000){
50
                digit_4++;
51
                value -= 10000;
52
        }
53
        if(digit_4 | significant){
54
                socket_put_char(0x30 | digit_4);
55
                significant = 1;
56
        }
57
        while(value >= 1000){
58
                digit_3++;
59
                value -= 1000;
60
        }
61
        if(digit_3 | significant) {
62
                socket_put_char(0x30 | digit_3);
63
                significant = 1;
64
        }
65
        while(value >= 100){
66
                digit_2++;
67
                value -= 100;
68
        }
69
        if(digit_2 | significant){
70
                socket_put_char(0x30 | digit_2);
71
                significant = 1;
72
        }
73
        while(value >= 10){
74
                digit_1++;
75
                value -= 10;
76
        }
77
        if(digit_1 | significant){
78
                socket_put_char(0x30 | digit_1);
79
                significant = 1;
80
        }
81
        while(value >= 1){
82
                digit_0++;
83
                value -= 1;
84
        }
85
        socket_put_char(0x30 | digit_0);
86
}
87
 
88
void HTTP_Not_Found(){
89
        unsigned header_length;
90
        unsigned header[] =
91
"HTTP/1.1 404 Not Found\r\n\
92
Date: Thu Oct 31 19:16:00 2013\r\n\
93
Server: chips-web/0.0\r\n\
94
Content-Type: text/html\r\n\
95
Content-Length: 0\r\n\r\n";
96
 
97
        //count header length
98
        header_length = 0;
99
        while(header[header_length]) header_length++;
100
        put_socket(header_length);
101
        socket_put_string(header);
102
        socket_flush();
103
}
104
 
105
void HTTP_OK(int body[]){
106
        unsigned header_length;
107
        unsigned body_length;
108
        unsigned length, index, packet_count;
109
        unsigned header[] =
110
"HTTP/1.1 200 OK\r\n\
111
Date: Thu Oct 31 19:16:00 2013\r\n\
112
Server: chips-web/0.0\r\n\
113
Content-Type: text/html\r\n\
114
Content-Length: ";
115
 
116
        //count body length
117
        body_length = 0;
118
        while(body[body_length]) body_length++;
119
        //count header length
120
        header_length = 0;
121
        while(header[header_length]) header_length++;
122
 
123
        //count total length
124
        length = header_length + 5;
125
        //header length depends on body length
126
        if(body_length > 9) length++;
127
        if(body_length > 99) length++;
128
        if(body_length > 999) length++;
129
        //Send length to server
130
        put_socket(length);
131
        //Send header to server
132
        socket_put_string(header);
133
        socket_put_decimal(body_length);
134
        socket_put_string("\r\n\r\n");
135
        socket_flush();
136
 
137
        length = body_length;
138
        index = 0;
139
        packet_count = 0;
140
        while(length >= 1046){
141
                length -= 1046;
142
                put_socket(1046);
143
                for(packet_count=0; packet_count<1046; packet_count++){
144
                        socket_put_char(body[index]);
145
                        index++;
146
                }
147
                socket_flush();
148
        }
149
        put_socket(length);
150
        for(packet_count=0; packet_count<length; packet_count++){
151
                socket_put_char(body[index]);
152
                index++;
153
        }
154
        socket_flush();
155
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.