forked from KolibriOS/kolibrios
Netsurf installer: Ready to use!
git-svn-id: svn://kolibrios.org@6905 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
3258646683
commit
17b4bf3701
@ -44,46 +44,47 @@ end virtual
|
|||||||
;; Target filename
|
;; Target filename
|
||||||
proc get_file_over_http targeturl, targetfilename
|
proc get_file_over_http targeturl, targetfilename
|
||||||
pusha
|
pusha
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov [write_to_file.current_offset], eax
|
mov [write_to_file.current_offset], eax
|
||||||
mov [write_to_file.bufsize], eax
|
mov [write_to_file.bufsize], eax
|
||||||
mov [write_to_file.bufptr], eax
|
mov [write_to_file.bufptr], eax
|
||||||
|
|
||||||
DEBUGF 1, "---- HTTP : Getting %s\n", [targeturl]
|
DEBUGF 1, "---- HTTP : Getting %s\n", [targeturl]
|
||||||
invoke HTTP_get, [targeturl], 0, FLAG_KEEPALIVE, 0
|
invoke HTTP_get, [targeturl], 0, FLAG_KEEPALIVE or FLAG_BLOCK, 0
|
||||||
cmp eax, 0
|
cmp eax, 0
|
||||||
je .http_error
|
je .http_error
|
||||||
mov [httpstruct], eax
|
mov [httpstruct], eax
|
||||||
|
|
||||||
;; No HTTP errors, create a new file for the download.
|
;; No HTTP errors, create a new file for the download.
|
||||||
DEBUGF 1, "---- Creating new file : %s\n", [targetfilename]
|
DEBUGF 1, "---- Creating new file : %s\n", [targetfilename]
|
||||||
mcall 70, create_new_file
|
mcall 70, create_new_file
|
||||||
cmp eax, 0
|
cmp eax, 0
|
||||||
jne .file_error
|
jne .file_error
|
||||||
|
|
||||||
.http_receive_loop:
|
.http_receive_loop:
|
||||||
DEBUGF 1, "---- Receiving over http.\n"
|
DEBUGF 1, "---- Receiving over http.\n"
|
||||||
DEBUGF 1, "---- Invoking http receive.\n"
|
|
||||||
invoke HTTP_receive, [httpstruct]
|
invoke HTTP_receive, [httpstruct]
|
||||||
|
|
||||||
cmp eax, 0
|
cmp eax, 0
|
||||||
je .http_transfer_done
|
je .http_transfer_done
|
||||||
|
|
||||||
mov ebp, [httpstruct]
|
|
||||||
DEBUGF 1, "---- http flags = 0x%x.\n", [ebp + http_msg.flags]
|
mov ebp, [httpstruct]
|
||||||
test [ebp + http_msg.flags], 0xffff0000
|
DEBUGF 1, "---- http flags = 0x%x.\n", [ebp + http_msg.flags]
|
||||||
|
test [ebp + http_msg.flags], 0xffff0000
|
||||||
jnz .http_error
|
jnz .http_error
|
||||||
|
|
||||||
mov ebp, [ebp + http_msg.content_received]
|
mov ebp, [ebp + http_msg.content_received]
|
||||||
cmp ebp, [write_to_file.current_offset]
|
cmp ebp, [write_to_file.current_offset]
|
||||||
jle .http_receive_loop
|
jle .http_receive_loop
|
||||||
;; Only proceed if we have more data in HTTP buffer than we have written to file.
|
;; Only proceed if we have more data in HTTP buffer than we have written to file.
|
||||||
|
|
||||||
;; Process data we got (write it to the file)
|
;; Process data we got (write it to the file)
|
||||||
mov ebp, [httpstruct]
|
mov ebp, [httpstruct]
|
||||||
mov ecx, [ebp + http_msg.content_length]
|
mov ecx, [ebp + http_msg.content_length]
|
||||||
mov edx, [ebp + http_msg.content_received]
|
mov edx, [ebp + http_msg.content_received]
|
||||||
|
|
||||||
DEBUGF 1, "---- Current file write offset : %u (http got : %u / %u)\n", [write_to_file.current_offset], edx, ecx
|
DEBUGF 1, "---- Current file write offset : %u (http got : %u / %u)\n", [write_to_file.current_offset], edx, ecx
|
||||||
sub edx, [write_to_file.current_offset]
|
sub edx, [write_to_file.current_offset]
|
||||||
mov [write_to_file.bufsize], edx
|
mov [write_to_file.bufsize], edx
|
||||||
|
|
||||||
@ -91,32 +92,32 @@ proc get_file_over_http targeturl, targetfilename
|
|||||||
add ecx, [write_to_file.current_offset]
|
add ecx, [write_to_file.current_offset]
|
||||||
mov [write_to_file.bufptr], ecx
|
mov [write_to_file.bufptr], ecx
|
||||||
|
|
||||||
DEBUGF 1, "---- ecx + offset = 0x%x\n", ecx
|
DEBUGF 1, "---- ecx + offset = 0x%x\n", ecx
|
||||||
DEBUGF 1, "---- Writing to file %u bytes at 0x%x to %s\n", [write_to_file.bufsize], [write_to_file.bufptr], current_filename
|
DEBUGF 1, "---- Writing to file %u bytes at 0x%x to %s\n", [write_to_file.bufsize], [write_to_file.bufptr], current_filename
|
||||||
mcall 70, write_to_file
|
mcall 70, write_to_file
|
||||||
cmp eax, 0
|
cmp eax, 0
|
||||||
jne .file_error
|
jne .file_error
|
||||||
|
|
||||||
DEBUGF 1, "---- Wrote to file %u bytes.\n", ebx
|
DEBUGF 1, "---- Wrote to file %u bytes.\n", ebx
|
||||||
add [write_to_file.current_offset], ebx
|
add [write_to_file.current_offset], ebx
|
||||||
DEBUGF 1, "---- File offset updated to : %u\n", [write_to_file.current_offset]
|
DEBUGF 1, "---- File offset updated to : %u\n", [write_to_file.current_offset]
|
||||||
|
|
||||||
jmp .http_receive_loop
|
jmp .http_receive_loop
|
||||||
|
|
||||||
.file_error:
|
.file_error:
|
||||||
DEBUGF 1, "file_erroR with eax = %u!", eax
|
DEBUGF 1, "file_erroR with eax = %u!", eax
|
||||||
mcall -1
|
mcall -1
|
||||||
|
|
||||||
.http_error:
|
.http_error:
|
||||||
DEBUGF 1, "http_erroR!"
|
DEBUGF 1, "http_erroR!"
|
||||||
mcall -1
|
mcall -1
|
||||||
|
|
||||||
.http_transfer_done:
|
.http_transfer_done:
|
||||||
;; Write any remaining bytes from the http buffer into the file
|
;; Write any remaining bytes from the http buffer into the file
|
||||||
DEBUGF 1, "---- http flags = 0x%x.\n", [httpstruct + http_msg.flags]
|
DEBUGF 1, "---- http flags = 0x%x.\n", [httpstruct + http_msg.flags]
|
||||||
DEBUGF 1, "Got %u bytes in total\n", [httpstruct + http_msg.content_length]
|
DEBUGF 1, "Got %u bytes in total\n", [httpstruct + http_msg.content_length]
|
||||||
|
|
||||||
mov ebp, [httpstruct]
|
mov ebp, [httpstruct]
|
||||||
mov edx, [ebp + http_msg.content_length]
|
mov edx, [ebp + http_msg.content_length]
|
||||||
|
|
||||||
sub edx, [write_to_file.current_offset]
|
sub edx, [write_to_file.current_offset]
|
||||||
@ -126,37 +127,37 @@ proc get_file_over_http targeturl, targetfilename
|
|||||||
add ecx, [write_to_file.current_offset]
|
add ecx, [write_to_file.current_offset]
|
||||||
mov [write_to_file.bufptr], ecx
|
mov [write_to_file.bufptr], ecx
|
||||||
|
|
||||||
DEBUGF 1, "---- Final ecx + offset = 0x%x\n", ecx
|
DEBUGF 1, "---- Final ecx + offset = 0x%x\n", ecx
|
||||||
DEBUGF 1, "-- Writing to file %u bytes at 0x%x to %s\n", [write_to_file.bufsize], [write_to_file.bufptr], current_filename
|
DEBUGF 1, "-- Writing to file %u bytes at 0x%x to %s\n", [write_to_file.bufsize], [write_to_file.bufptr], current_filename
|
||||||
|
|
||||||
mcall 70, write_to_file
|
mcall 70, write_to_file
|
||||||
cmp eax, 0
|
cmp eax, 0
|
||||||
jne .file_error
|
jne .file_error
|
||||||
|
|
||||||
DEBUGF 1, "-- Wrote to file %u bytes.\n", ebx
|
DEBUGF 1, "-- Wrote to file %u bytes.\n", ebx
|
||||||
add [write_to_file.current_offset], ebx
|
add [write_to_file.current_offset], ebx
|
||||||
DEBUGF 1, "-- File offset updated to : %u\n", [write_to_file.current_offset]
|
DEBUGF 1, "-- File offset updated to : %u\n", [write_to_file.current_offset]
|
||||||
mov ebp, [httpstruct]
|
mov ebp, [httpstruct]
|
||||||
mov edx, [ebp + http_msg.content_length]
|
mov edx, [ebp + http_msg.content_length]
|
||||||
cmp [write_to_file.current_offset], edx
|
cmp [write_to_file.current_offset], edx
|
||||||
jne .http_transfer_done
|
jne .http_transfer_done
|
||||||
|
|
||||||
invoke HTTP_free, [httpstruct]
|
invoke HTTP_free, [httpstruct]
|
||||||
|
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
proc make_new_folder newfolder
|
proc make_new_folder newfolder
|
||||||
pusha
|
pusha
|
||||||
|
|
||||||
mov eax, [newfolder]
|
mov eax, [newfolder]
|
||||||
mov [create_new_folder.foldername], eax
|
mov [create_new_folder.foldername], eax
|
||||||
mcall 70, create_new_folder
|
mcall 70, create_new_folder
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz .success
|
jz .success
|
||||||
|
|
||||||
DEBUGF 1, "Failed to create folder: %s\n", [newfolder]
|
DEBUGF 1, "Failed to create folder: %s\n", [newfolder]
|
||||||
mcall -1
|
mcall -1
|
||||||
|
|
||||||
.success:
|
.success:
|
||||||
@ -165,27 +166,31 @@ proc make_new_folder newfolder
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
START:
|
START:
|
||||||
mcall 68, 11 ; init heap so we can allocate memory dynamically
|
mcall 68, 11 ; init heap
|
||||||
|
|
||||||
; load libraries
|
; load libraries
|
||||||
stdcall dll.Load, @IMPORT
|
stdcall dll.Load, @IMPORT
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jnz .all_files_done_error
|
jnz .all_files_done_error
|
||||||
|
|
||||||
stdcall make_new_folder, dirname_res
|
DEBUGF 2, "-------------------------\n"
|
||||||
stdcall make_new_folder, dirname_res_pointers
|
DEBUGF 2, "NETSURF INSTALLER.\n"
|
||||||
stdcall make_new_folder, dirname_res_throbber
|
|
||||||
stdcall make_new_folder, dirname_res_icons
|
stdcall make_new_folder, dirname_res
|
||||||
|
stdcall make_new_folder, dirname_res_pointers
|
||||||
|
stdcall make_new_folder, dirname_res_throbber
|
||||||
|
stdcall make_new_folder, dirname_res_icons
|
||||||
|
|
||||||
|
|
||||||
.get_next_file:
|
.get_next_file:
|
||||||
mov edi, current_url
|
mov edi, current_url
|
||||||
mov esi, url
|
mov esi, url
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
movsb
|
movsb
|
||||||
cmp byte[esi], 0
|
cmp byte[esi], 0
|
||||||
jne @b
|
jne @b
|
||||||
;; Loaded the base URL into current URL
|
;; Loaded the base URL into current URL
|
||||||
|
|
||||||
;; Move onto the subsequent file.
|
;; Move onto the subsequent file.
|
||||||
mov esi, [filelistoffset]
|
mov esi, [filelistoffset]
|
||||||
@ -193,15 +198,15 @@ START:
|
|||||||
je .all_files_done
|
je .all_files_done
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
movsb
|
movsb
|
||||||
cmp byte[esi], 0
|
cmp byte[esi], 0
|
||||||
jne @b
|
jne @b
|
||||||
movsb
|
movsb
|
||||||
|
|
||||||
;; DEBUGF 1, "-- Current URL with filename is : %s\n", current_url
|
;; DEBUGF 1, "-- Current URL with filename is : %s\n", current_url
|
||||||
|
|
||||||
; Create name of file we will download to
|
; Create name of file we will download to
|
||||||
mov esi, download_file_path
|
mov esi, download_file_path
|
||||||
mov edi, current_filename
|
mov edi, current_filename
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
@ -219,18 +224,20 @@ START:
|
|||||||
|
|
||||||
;; current_filename is now set to the name of the file
|
;; current_filename is now set to the name of the file
|
||||||
;; current_url is now set to the name of the file we will get after download
|
;; current_url is now set to the name of the file we will get after download
|
||||||
DEBUGF 2, "-------- [START] Fetching : %s\n", current_url
|
DEBUGF 2, "Fetching : %s", current_filename
|
||||||
stdcall get_file_over_http, current_url, current_filename
|
stdcall get_file_over_http, current_url, current_filename
|
||||||
DEBUGF 2, "-------- [END] Fetching : %s\n", current_url
|
DEBUGF 2, "...DONE!\n"
|
||||||
jmp .get_next_file
|
jmp .get_next_file
|
||||||
|
|
||||||
.all_files_done:
|
.all_files_done:
|
||||||
DEBUGF 1, "-------------------------\n"
|
DEBUGF 2, "-------------------------\n"
|
||||||
DEBUGF 1, "NETSURF INSTALLED. Enjoy!\n"
|
DEBUGF 2, "NETSURF INSTALLED. Enjoy!\n"
|
||||||
|
DEBUGF 2, "-------------------------\n"
|
||||||
|
mcall -1
|
||||||
;; Inform user that all files are done
|
;; Inform user that all files are done
|
||||||
|
|
||||||
.all_files_done_error:
|
.all_files_done_error:
|
||||||
DEBUGF 1, "FATAL ERROR: FAILED.\n", eax
|
DEBUGF 1, "FATAL ERROR: FAILED.\n", eax
|
||||||
mcall -1
|
mcall -1
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
@ -311,12 +318,10 @@ filelist db 'nskolibrios', 0
|
|||||||
db 'res/icons/reload.png', 0
|
db 'res/icons/reload.png', 0
|
||||||
db 0
|
db 0
|
||||||
|
|
||||||
current_url rb URLMAXLEN
|
|
||||||
filelistoffset dd filelist
|
filelistoffset dd filelist
|
||||||
current_filename rb FILENAMEMAXLEN
|
|
||||||
httpstruct dd 0
|
httpstruct dd 0
|
||||||
|
|
||||||
create_new_file dd 2, 0, 0, 0, 0
|
create_new_file dd 2, 0, 0, 0, 0
|
||||||
db 0
|
db 0
|
||||||
dd current_filename
|
dd current_filename
|
||||||
|
|
||||||
@ -331,4 +336,7 @@ write_to_file dd 3
|
|||||||
db 0
|
db 0
|
||||||
dd current_filename
|
dd current_filename
|
||||||
|
|
||||||
|
socketdata rb 4096
|
||||||
|
current_url rb URLMAXLEN
|
||||||
|
current_filename rb FILENAMEMAXLEN
|
||||||
I_END:
|
I_END:
|
||||||
|
Loading…
Reference in New Issue
Block a user