forked from KolibriOS/kolibrios
'free' and 'stop' functions for HTTP library.
git-svn-id: svn://kolibrios.org@4205 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
34ecc269a0
commit
0c94d22080
@ -133,7 +133,7 @@ mouse:
|
||||
|
||||
exit:
|
||||
DEBUGF 1, "Exiting\n"
|
||||
mcall 68, 13, [identifier] ; free buffer
|
||||
invoke HTTP_free, [identifier] ; free buffer
|
||||
fail:
|
||||
or eax, -1 ; close this program
|
||||
mcall
|
||||
@ -208,7 +208,8 @@ library lib_http, 'http.obj', \
|
||||
|
||||
import lib_http, \
|
||||
HTTP_get , 'get' , \
|
||||
HTTP_process , 'process'
|
||||
HTTP_process , 'process' ,\
|
||||
HTTP_free , 'free'
|
||||
|
||||
import box_lib, \
|
||||
edit_box_draw, 'edit_box', \
|
||||
|
@ -57,7 +57,7 @@ macro HTTP_init_buffer buffer, socketnum {
|
||||
push socketnum
|
||||
popd [eax + http_msg.socket]
|
||||
lea esi, [eax + http_msg.data]
|
||||
mov [eax + http_msg.flags], 0
|
||||
mov [eax + http_msg.flags], FLAG_CONNECTED
|
||||
mov [eax + http_msg.write_ptr], esi
|
||||
mov [eax + http_msg.buffer_length], BUFFERSIZE - http_msg.data
|
||||
mov [eax + http_msg.chunk_ptr], 0
|
||||
@ -413,6 +413,9 @@ proc HTTP_process identifier ;//////////////////////////////////////////////////
|
||||
pusha
|
||||
mov ebp, [identifier]
|
||||
|
||||
test [ebp + http_msg.flags], FLAG_CONNECTED
|
||||
jz .connection_closed
|
||||
|
||||
; Receive some data
|
||||
mcall recv, [ebp + http_msg.socket], [ebp + http_msg.write_ptr], \
|
||||
[ebp + http_msg.buffer_length], MSG_DONTWAIT
|
||||
@ -700,7 +703,8 @@ proc HTTP_process identifier ;//////////////////////////////////////////////////
|
||||
mov [ebp + http_msg.content_received], eax
|
||||
.got_all_data:
|
||||
DEBUGF 1, "We got all the data! (%u bytes)\n", [ebp + http_msg.content_length]
|
||||
or [ebp + http_msg.flags], FLAG_GOT_DATA
|
||||
or [ebp + http_msg.flags], FLAG_GOT_ALL_DATA
|
||||
and [ebp + http_msg.flags], not FLAG_CONNECTED
|
||||
mcall close, [ebp + http_msg.socket]
|
||||
popa
|
||||
xor eax, eax
|
||||
@ -712,6 +716,9 @@ proc HTTP_process identifier ;//////////////////////////////////////////////////
|
||||
DEBUGF 1, "ERROR: socket error %u\n", ebx
|
||||
|
||||
or [ebp + http_msg.flags], FLAG_SOCKET_ERROR
|
||||
and [ebp + http_msg.flags], not FLAG_CONNECTED
|
||||
mcall close, [ebp + http_msg.socket]
|
||||
.connection_closed:
|
||||
popa
|
||||
xor eax, eax
|
||||
ret
|
||||
@ -720,6 +727,8 @@ proc HTTP_process identifier ;//////////////////////////////////////////////////
|
||||
pop eax
|
||||
DEBUGF 1, "ERROR: invalid header\n"
|
||||
or [ebp + http_msg.flags], FLAG_INVALID_HEADER
|
||||
and [ebp + http_msg.flags], not FLAG_CONNECTED
|
||||
mcall close, [ebp + http_msg.socket]
|
||||
popa
|
||||
xor eax, eax
|
||||
ret
|
||||
@ -729,6 +738,8 @@ proc HTTP_process identifier ;//////////////////////////////////////////////////
|
||||
.no_ram:
|
||||
DEBUGF 1, "ERROR: out of RAM\n"
|
||||
or [ebp + http_msg.flags], FLAG_NO_RAM
|
||||
and [ebp + http_msg.flags], not FLAG_CONNECTED
|
||||
mcall close, [ebp + http_msg.socket]
|
||||
popa
|
||||
xor eax, eax
|
||||
ret
|
||||
@ -737,6 +748,59 @@ endp
|
||||
|
||||
|
||||
|
||||
|
||||
;;================================================================================================;;
|
||||
proc HTTP_free identifier ;///////////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? Free the http_msg structure ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> identifier = pointer to buffer containing http_msg struct. ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< none ;;
|
||||
;;================================================================================================;;
|
||||
|
||||
pusha
|
||||
mov ebp, [identifier]
|
||||
|
||||
test [ebp + http_msg.flags], FLAG_CONNECTED
|
||||
jz .not_connected
|
||||
|
||||
and [ebp + http_msg.flags], not FLAG_CONNECTED
|
||||
mcall close, [ebp + http_msg.socket]
|
||||
|
||||
.not_connected:
|
||||
invoke mem.free, ebp
|
||||
|
||||
popa
|
||||
ret
|
||||
|
||||
endp
|
||||
|
||||
|
||||
|
||||
;;================================================================================================;;
|
||||
proc HTTP_stop identifier ;///////////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? Stops the open connection ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> identifier = pointer to buffer containing http_msg struct. ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< none ;;
|
||||
;;================================================================================================;;
|
||||
|
||||
pusha
|
||||
mov ebp, [identifier]
|
||||
|
||||
and [ebp + http_msg.flags], not FLAG_CONNECTED
|
||||
mcall close, [ebp + http_msg.socket]
|
||||
|
||||
popa
|
||||
ret
|
||||
|
||||
endp
|
||||
|
||||
|
||||
|
||||
;;================================================================================================;;
|
||||
proc find_header_field identifier, headername ;///////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
@ -810,6 +874,7 @@ endp
|
||||
|
||||
|
||||
|
||||
|
||||
;;================================================================================================;;
|
||||
;;////////////////////////////////////////////////////////////////////////////////////////////////;;
|
||||
;;================================================================================================;;
|
||||
@ -1079,7 +1144,9 @@ export \
|
||||
HTTP_head , 'head' , \
|
||||
HTTP_post , 'post' , \
|
||||
find_header_field , 'find_header_field' , \
|
||||
HTTP_process , 'process'
|
||||
HTTP_process , 'process' , \
|
||||
HTTP_free , 'free' , \
|
||||
HTTP_stop , 'stop'
|
||||
|
||||
; HTTP_put , 'put' , \
|
||||
; HTTP_delete , 'delete' , \
|
||||
|
@ -15,9 +15,10 @@
|
||||
|
||||
FLAG_HTTP11 = 1 shl 0
|
||||
FLAG_GOT_HEADER = 1 shl 1
|
||||
FLAG_GOT_DATA = 1 shl 2
|
||||
FLAG_GOT_ALL_DATA = 1 shl 2
|
||||
FLAG_CONTENT_LENGTH = 1 shl 3
|
||||
FLAG_CHUNKED = 1 shl 4
|
||||
FLAG_CONNECTED = 1 shl 5
|
||||
|
||||
; error flags go into the upper word
|
||||
FLAG_INVALID_HEADER = 1 shl 16
|
||||
|
Loading…
Reference in New Issue
Block a user