Rev 7296 | Rev 7969 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7296 | Rev 7512 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
2 | ;; ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2017. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2018. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;; HTTP library for KolibriOS ;; |
6 | ;; HTTP library for KolibriOS ;; |
7 | ;; ;; |
7 | ;; ;; |
8 | ;; Written by hidnplayr@kolibrios.org ;; |
8 | ;; Written by hidnplayr@kolibrios.org ;; |
Line 17... | Line 17... | ||
17 | ; "HTTP made really easy", http://www.jmarshall.com/easy/http/ |
17 | ; "HTTP made really easy", http://www.jmarshall.com/easy/http/ |
18 | ; "Hypertext Transfer Protocol -- HTTP/1.1", http://tools.ietf.org/html/rfc2616 |
18 | ; "Hypertext Transfer Protocol -- HTTP/1.1", http://tools.ietf.org/html/rfc2616 |
Line 19... | Line 19... | ||
19 | 19 | ||
20 | 20 | ||
21 | URLMAXLEN = 65535 |
21 | URLMAXLEN = 65535 |
Line 22... | Line 22... | ||
22 | BUFFERSIZE = 8192 |
22 | BUFFERSIZE = 512*1024 |
23 | TIMEOUT = 500 ; in 1/100 s |
23 | TIMEOUT = 500 ; in 1/100 s |
Line 62... | Line 62... | ||
62 | lea esi, [eax + http_msg.http_header] |
62 | lea esi, [eax + http_msg.http_header] |
63 | push flags |
63 | push flags |
64 | pop [eax + http_msg.flags] |
64 | pop [eax + http_msg.flags] |
65 | or [eax + http_msg.flags], FLAG_CONNECTED |
65 | or [eax + http_msg.flags], FLAG_CONNECTED |
66 | mov [eax + http_msg.write_ptr], esi |
66 | mov [eax + http_msg.write_ptr], esi |
- | 67 | ||
- | 68 | mov ebx, [buffersize] |
|
- | 69 | sub ebx, http_msg.http_header |
|
67 | mov [eax + http_msg.buffer_length], BUFFERSIZE - http_msg.http_header |
70 | mov [eax + http_msg.buffer_length], ebx |
68 | mov [eax + http_msg.chunk_ptr], 0 |
71 | mov [eax + http_msg.chunk_ptr], 0 |
Line 69... | Line 72... | ||
69 | 72 | ||
70 | mov [eax + http_msg.status], 0 |
73 | mov [eax + http_msg.status], 0 |
71 | mov [eax + http_msg.header_length], 0 |
74 | mov [eax + http_msg.header_length], 0 |
Line 122... | Line 125... | ||
122 | inc eax |
125 | inc eax |
123 | ret |
126 | ret |
Line 124... | Line 127... | ||
124 | 127 | ||
- | 128 | ||
- | 129 | ;;================================================================================================;; |
|
- | 130 | proc HTTP_buffersize_get ;////////////////////////////////////////////////////////////////////////;; |
|
- | 131 | ;;------------------------------------------------------------------------------------------------;; |
|
- | 132 | ;? Get HTTP buffer size ;; |
|
- | 133 | ;;------------------------------------------------------------------------------------------------;; |
|
- | 134 | ;< eax = buffer size in bytes ;; |
|
- | 135 | ;;================================================================================================;; |
|
- | 136 | ||
- | 137 | mov eax, [BUFFERSIZE] |
|
- | 138 | ret |
|
- | 139 | ||
- | 140 | endp |
|
- | 141 | ||
- | 142 | ;;================================================================================================;; |
|
- | 143 | proc HTTP_buffersize_set ;////////////////////////////////////////////////////////////////////////;; |
|
- | 144 | ;;------------------------------------------------------------------------------------------------;; |
|
- | 145 | ;? Set HTTP buffer size ;; |
|
- | 146 | ;;------------------------------------------------------------------------------------------------;; |
|
- | 147 | ;> eax = buffer size in bytes ;; |
|
- | 148 | ;;================================================================================================;; |
|
- | 149 | ||
- | 150 | mov [BUFFERSIZE], eax |
|
- | 151 | ret |
|
- | 152 | ||
- | 153 | endp |
|
- | 154 | ||
125 | 155 | ||
126 | ;;================================================================================================;; |
156 | ;;================================================================================================;; |
127 | proc HTTP_disconnect identifier ;/////////////////////////////////////////////////////////////////;; |
157 | proc HTTP_disconnect identifier ;/////////////////////////////////////////////////////////////////;; |
128 | ;;------------------------------------------------------------------------------------------------;; |
158 | ;;------------------------------------------------------------------------------------------------;; |
129 | ;? Stops the open connection ;; |
159 | ;? Stops the open connection ;; |
Line 228... | Line 258... | ||
228 | jz .error |
258 | jz .error |
229 | mov [socketnum], eax |
259 | mov [socketnum], eax |
Line 230... | Line 260... | ||
230 | 260 | ||
231 | ; Create the HTTP request. |
261 | ; Create the HTTP request. |
232 | .send_request: |
262 | .send_request: |
233 | invoke mem.alloc, BUFFERSIZE |
263 | invoke mem.alloc, [buffersize] |
234 | test eax, eax |
264 | test eax, eax |
235 | jz .error |
265 | jz .error |
236 | mov [buffer], eax |
266 | mov [buffer], eax |
237 | mov edi, eax |
267 | mov edi, eax |
Line 367... | Line 397... | ||
367 | jz .error |
397 | jz .error |
368 | mov [socketnum], eax |
398 | mov [socketnum], eax |
Line 369... | Line 399... | ||
369 | 399 | ||
370 | ; Create the HTTP request. |
400 | ; Create the HTTP request. |
371 | .send_request: |
401 | .send_request: |
372 | invoke mem.alloc, BUFFERSIZE |
402 | invoke mem.alloc, [buffersize] |
373 | test eax, eax |
403 | test eax, eax |
374 | jz .error |
404 | jz .error |
375 | mov [buffer], eax |
405 | mov [buffer], eax |
376 | mov edi, eax |
406 | mov edi, eax |
Line 510... | Line 540... | ||
510 | jz .error |
540 | jz .error |
511 | mov [socketnum], eax |
541 | mov [socketnum], eax |
Line 512... | Line 542... | ||
512 | 542 | ||
513 | ; Create the HTTP request. |
543 | ; Create the HTTP request. |
514 | .send_request: |
544 | .send_request: |
515 | invoke mem.alloc, BUFFERSIZE |
545 | invoke mem.alloc, [buffersize] |
516 | test eax, eax |
546 | test eax, eax |
517 | jz .error |
547 | jz .error |
518 | mov [buffer], eax |
548 | mov [buffer], eax |
519 | mov edi, eax |
549 | mov edi, eax |
Line 644... | Line 674... | ||
644 | test [ebp + http_msg.flags], FLAG_REUSE_BUFFER |
674 | test [ebp + http_msg.flags], FLAG_REUSE_BUFFER |
645 | jz .new_buffer |
675 | jz .new_buffer |
Line 646... | Line 676... | ||
646 | 676 | ||
647 | mov eax, [ebp + http_msg.content_ptr] |
677 | mov eax, [ebp + http_msg.content_ptr] |
- | 678 | mov [ebp + http_msg.write_ptr], eax |
|
648 | mov [ebp + http_msg.write_ptr], eax |
679 | push [buffersize] |
649 | mov [ebp + http_msg.buffer_length], BUFFERSIZE |
680 | pop [ebp + http_msg.buffer_length] |
Line 650... | Line 681... | ||
650 | jmp .receive |
681 | jmp .receive |
651 | 682 | ||
652 | .new_buffer: |
683 | .new_buffer: |
653 | invoke mem.alloc, BUFFERSIZE |
684 | invoke mem.alloc, [buffersize] |
654 | test eax, eax |
685 | test eax, eax |
655 | jz .err_no_ram |
686 | jz .err_no_ram |
- | 687 | mov [ebp + http_msg.content_ptr], eax |
|
656 | mov [ebp + http_msg.content_ptr], eax |
688 | mov [ebp + http_msg.write_ptr], eax |
657 | mov [ebp + http_msg.write_ptr], eax |
689 | push [buffersize] |
Line 658... | Line 690... | ||
658 | mov [ebp + http_msg.buffer_length], BUFFERSIZE |
690 | pop [ebp + http_msg.buffer_length] |
659 | DEBUGF 1, "New buffer: 0x%x\n", eax |
691 | DEBUGF 1, "New buffer: 0x%x\n", eax |
660 | 692 | ||
Line 849... | Line 881... | ||
849 | stdcall HTTP_find_header_field, ebp, str_te |
881 | stdcall HTTP_find_header_field, ebp, str_te |
850 | test eax, eax |
882 | test eax, eax |
851 | jnz .ct_hdr_found |
883 | jnz .ct_hdr_found |
Line 852... | Line 884... | ||
852 | 884 | ||
853 | .not_chunked: |
885 | .not_chunked: |
854 | mov edx, BUFFERSIZE |
886 | mov edx, [buffersize] |
855 | call alloc_contentbuff |
887 | call alloc_contentbuff |
856 | test eax, eax |
888 | test eax, eax |
857 | jz .err_no_ram |
889 | jz .err_no_ram |
858 | xor eax, eax |
890 | xor eax, eax |
Line 870... | Line 902... | ||
870 | jne .not_chunked |
902 | jne .not_chunked |
Line 871... | Line 903... | ||
871 | 903 | ||
872 | or [ebp + http_msg.flags], FLAG_CHUNKED |
904 | or [ebp + http_msg.flags], FLAG_CHUNKED |
Line 873... | Line 905... | ||
873 | DEBUGF 1, "Transfer type is: chunked\n" |
905 | DEBUGF 1, "Transfer type is: chunked\n" |
874 | 906 | ||
875 | mov edx, BUFFERSIZE |
907 | mov edx, [buffersize] |
876 | call alloc_contentbuff |
908 | call alloc_contentbuff |
Line 877... | Line 909... | ||
877 | test eax, eax |
909 | test eax, eax |
Line 954... | Line 986... | ||
954 | ; Calculate new write ptr |
986 | ; Calculate new write ptr |
955 | sub [ebp + http_msg.write_ptr], edx |
987 | sub [ebp + http_msg.write_ptr], edx |
956 | test [ebp + http_msg.flags], FLAG_STREAM |
988 | test [ebp + http_msg.flags], FLAG_STREAM |
957 | jnz .dont_resize |
989 | jnz .dont_resize |
958 | ; Realloc buffer, make it 'chunksize' bigger. |
990 | ; Realloc buffer, make it 'chunksize' bigger. |
- | 991 | mov edx, ebx |
|
959 | lea edx, [ebx + BUFFERSIZE] |
992 | add edx, [buffersize] |
960 | mov [ebp + http_msg.buffer_length], edx ; remaining space in new buffer |
993 | mov [ebp + http_msg.buffer_length], edx ; remaining space in new buffer |
961 | add edx, [ebp + http_msg.write_ptr] |
994 | add edx, [ebp + http_msg.write_ptr] |
962 | sub edx, [ebp + http_msg.content_ptr] |
995 | sub edx, [ebp + http_msg.content_ptr] |
963 | DEBUGF 1, "Resizing buffer 0x%x, it will now be %u bytes\n", [ebp + http_msg.content_ptr], edx |
996 | DEBUGF 1, "Resizing buffer 0x%x, it will now be %u bytes\n", [ebp + http_msg.content_ptr], edx |
964 | invoke mem.realloc, [ebp + http_msg.content_ptr], edx |
997 | invoke mem.realloc, [ebp + http_msg.content_ptr], edx |
Line 1004... | Line 1037... | ||
1004 | 1037 | ||
1005 | .buffer_full: |
1038 | .buffer_full: |
1006 | test [ebp + http_msg.flags], FLAG_STREAM |
1039 | test [ebp + http_msg.flags], FLAG_STREAM |
1007 | jnz .multibuff |
1040 | jnz .multibuff |
1008 | mov eax, [ebp + http_msg.write_ptr] |
1041 | mov eax, [ebp + http_msg.write_ptr] |
1009 | add eax, BUFFERSIZE |
1042 | add eax, [buffersize] |
1010 | sub eax, [ebp + http_msg.content_ptr] |
1043 | sub eax, [ebp + http_msg.content_ptr] |
1011 | invoke mem.realloc, [ebp + http_msg.content_ptr], eax |
1044 | invoke mem.realloc, [ebp + http_msg.content_ptr], eax |
1012 | or eax, eax |
1045 | or eax, eax |
1013 | jz .err_no_ram |
1046 | jz .err_no_ram |
- | 1047 | call recalculate_pointers |
|
1014 | call recalculate_pointers |
1048 | push [buffersize] |
1015 | mov [ebp + http_msg.buffer_length], BUFFERSIZE |
1049 | pop [ebp + http_msg.buffer_length] |
1016 | ; Need more data |
1050 | ; Need more data |
1017 | popa |
1051 | popa |
1018 | xor eax, eax |
1052 | xor eax, eax |
1019 | dec eax |
1053 | dec eax |
Line 1122... | Line 1156... | ||
1122 | 1156 | ||
Line 1123... | Line 1157... | ||
1123 | alloc_contentbuff: |
1157 | alloc_contentbuff: |
1124 | 1158 | ||
1125 | test [ebp + http_msg.flags], FLAG_STREAM |
1159 | test [ebp + http_msg.flags], FLAG_STREAM |
1126 | jz @f |
1160 | jz @f |
Line 1127... | Line 1161... | ||
1127 | mov edx, BUFFERSIZE |
1161 | mov edx, [buffersize] |
1128 | @@: |
1162 | @@: |
1129 | 1163 | ||
Line 1878... | Line 1912... | ||
1878 | align 4 |
1912 | align 4 |
1879 | @EXPORT: |
1913 | @EXPORT: |
1880 | export \ |
1914 | export \ |
1881 | lib_init , 'lib_init' , \ |
1915 | lib_init , 'lib_init' , \ |
1882 | 0x00010001 , 'version' , \ |
1916 | 0x00010001 , 'version' , \ |
- | 1917 | HTTP_buffersize_get , 'buffersize_get' , \ |
|
- | 1918 | HTTP_buffersize_set , 'buffersize_set' , \ |
|
1883 | HTTP_get , 'get' , \ |
1919 | HTTP_get , 'get' , \ |
1884 | HTTP_head , 'head' , \ |
1920 | HTTP_head , 'head' , \ |
1885 | HTTP_post , 'post' , \ |
1921 | HTTP_post , 'post' , \ |
1886 | HTTP_find_header_field , 'find_header_field' , \ |
1922 | HTTP_find_header_field , 'find_header_field' , \ |
1887 | HTTP_process , 'process' , \ ; To be removed |
1923 | HTTP_process , 'process' , \ ; To be removed |
Line 1946... | Line 1982... | ||
1946 | dd 0xffffffff |
1982 | dd 0xffffffff |
Line 1947... | Line 1983... | ||
1947 | 1983 | ||
1948 | str_hex: |
1984 | str_hex: |
Line -... | Line 1985... | ||
- | 1985 | db '0123456789ABCDEF' |
|
- | 1986 | ||
1949 | db '0123456789ABCDEF' |
1987 | buffersize dd BUFFERSIZE |
Line 1950... | Line 1988... | ||
1950 | 1988 | ||
1951 | include_debug_strings |
1989 | include_debug_strings |
1952 | 1990 |