;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; Copyright (C) KolibriOS team 2014-2017. All rights reserved. ;; ;; Distributed under terms of the GNU General Public License ;; ;; ;; ;; post.asm - HTTP library example: ;; ;; Paste something to paste.kolibrios.org using HTTP POST method.;; ;; ;; ;; GNU GENERAL PUBLIC LICENSE ;; ;; Version 2, June 1991 ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; format binary as "" use32 org 0x0 db 'MENUET01' ; header dd 0x01 ; header version dd START ; entry point dd IM_END ; image size dd I_END+0x1000 ; required memory dd I_END+0x1000 ; esp dd 0 dd 0 ; I_Path include '../../../../macros.inc' include '../../../../proc32.inc' include '../../../../dll.inc' include '../../http/http.inc' virtual at 0 http_msg http_msg end virtual START: mcall 68, 11 ; init heap so we can allocate memory dynamically ; load libraries stdcall dll.Load, @IMPORT test eax, eax jnz exit invoke HTTP_get, sz_url, 0, 0, 0 test eax, eax jz error mov [identifier], eax .again: invoke HTTP_receive, [identifier] test eax, eax jnz .again invoke HTTP_find_header_field, [identifier], sz_set_cookie mov edi, cookie test eax, eax jz .no_cookie mov esi, eax .cookie_loop: lodsb stosb cmp al, 13 je .cookie_end cmp al, 10 je .cookie_end cmp al, 0 je .cookie_end jmp .cookie_loop .cookie_end: dec edi .no_cookie: mov ax, 0x0a0d stosw xor al, al stosb invoke HTTP_free, [identifier] invoke HTTP_post, sz_url, 0, 0, sz_cookie, sz_ctype, sz_paste.length test eax, eax jz error mov [identifier], eax invoke HTTP_send, eax, sz_paste, sz_paste.length .again2: invoke HTTP_receive, [identifier] test eax, eax jnz .again2 mov ebp, [identifier] cmp [ebp + http_msg.status], 302 ; found jne error invoke HTTP_find_header_field, [identifier], sz_location test eax, eax jz error mov esi, eax mov edi, paste_url mov al, '"' stosb .url_loop: lodsb stosb cmp al, 13 je .url_end cmp al, 10 je .url_end cmp al, 0 je .url_end jmp .url_loop .url_end: dec edi mov eax, '" -N' stosd xor al, al stosb mov [notify_struct.msg], paste_url mcall 70, notify_struct invoke HTTP_free, [identifier] jmp exit error: mov [notify_struct.msg], sz_failed mcall 70, notify_struct exit: mcall -1 ;--------------------------------------------------------------------- ; Data area ;----------------------------------------------------------------------------- align 4 @IMPORT: library lib_http, 'http.obj' import lib_http, \ HTTP_get, 'get', \ HTTP_post, 'post', \ HTTP_receive, 'receive', \ HTTP_find_header_field, 'find_header_field', \ HTTP_send, 'send', \ HTTP_free, 'free' identifier dd 0 IM_END: notify_struct: dd 7 ; run application dd 0 .msg dd paste_url dd 0 dd 0 db '/sys/@notify', 0 sz_url db 'http://paste.kolibrios.org/', 0 sz_set_cookie db 'set-cookie', 0 sz_location db 'location', 0 sz_ctype db 'application/x-www-form-urlencoded', 0 sz_failed db '"Paste failed!" -N', 0 sz_paste db 'code=test+from+KolibriOS+2%0D%0A&language=text&webpage=' .length = $ - sz_paste sz_cookie db 'Cookie: ' cookie db 0 rb 1024 paste_url rb 1024 I_END: