- Moved header files from kos to clayer.

- Fixed function names in libhttp. 
- Fixed example dynamic.c 
- Added macro fixing bug http_receive

git-svn-id: svn://kolibrios.org@8549 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
superturbocat2001 2021-01-26 08:40:56 +00:00
parent e42e81743b
commit bf1811e1f5
13 changed files with 44 additions and 31 deletions

View File

@ -0,0 +1,11 @@
FASM = fasm
OBJS = get.o head.o __lib__.o post.o receive.o send.o
%.o : %.asm
$(FASM) $<
all: $(OBJS)
ar -rsc libhttp.a *.o
mv -f libhttp.a ../../bin/lib
rm -f *.o

View File

@ -2,7 +2,7 @@ format ELF
include "__lib__.inc"
fun equ get
fun equ http_get
fun_str equ 'get'
section '.text'

View File

@ -2,7 +2,7 @@ format ELF
include "__lib__.inc"
fun equ head
fun equ http_head
fun_str equ 'head'
section '.text'

View File

@ -1,9 +0,0 @@
fasm __lib__.asm
fasm get.asm
fasm head.asm
fasm post.asm
fasm receive.asm
fasm send.asm
kos32-ar -ru libhttp.a *.o
del *.o
pause

View File

@ -2,7 +2,7 @@ format ELF
include "__lib__.inc"
fun equ post
fun equ http_post
fun_str equ 'post'
section '.text'

View File

@ -2,7 +2,7 @@ format ELF
include "__lib__.inc"
fun equ receive
fun equ http_receive
fun_str equ 'receive'
section '.text'

View File

@ -2,7 +2,7 @@ format ELF
include "__lib__.inc"
fun equ send
fun equ http_send
fun_str equ 'send'
section '.text'

View File

@ -1,18 +1,19 @@
/*
This is adapded thunk for console.obj sys library
.h is equal to svn:\programs\develop\libraries\http\http_en.txt
This is adapded thunk for http.obj sys library
.h is equal to svn:\\programs\develop\libraries\http\http_en.txt
Adapted for TCC's dynamic API by Magomed Kostoev, 2020
*/
#ifndef __kos__http__h________
#define __kos__http__h________
#ifndef _HTTP_H_
#define _HTTP_H_
#define cdecl __attribute__ ((cdecl))
#define stdcall __attribute__ ((stdcall))
// Bitflags for http_msg.flags
// status
#define HTTP_FLAG_HTTP11 1 << 0
#define HTTP_FLAG_GOT_HEADER 1 << 1
#define HTTP_FLAG_GOT_ALL_DATA 1 << 2
@ -65,7 +66,7 @@ typedef struct http_msg_s {
void * content_ptr; // ptr to content
unsigned content_length; // total length of HTTP content
unsigned content_received; // number of currently received content bytes
char http_header[1];
char * http_header;
} http_msg;
/*
@ -77,7 +78,7 @@ typedef struct http_msg_s {
Initiates a HTTP connection, using 'GET' method.
Returns NULL on error, identifier otherwise.
*/
extern http_msg * stdcall (*get)(const char *url, http_msg *identifier, unsigned flags, const char *add_header);
extern http_msg * stdcall (*http_get)(const char *url, http_msg *identifier, unsigned flags, const char *add_header);
/*
url = pointer to ASCIIZ URL
@ -88,7 +89,7 @@ extern http_msg * stdcall (*get)(const char *url, http_msg *identifier, unsigned
Initiate a HTTP connection, using 'HEAD' method.
Returns NULL on error, identifier otherwise.
*/
extern http_msg * stdcall (*head)(const char *url, http_msg *identifier, unsigned flags, const char *add_header);
extern http_msg * stdcall (*http_head)(const char *url, http_msg *identifier, unsigned flags, const char *add_header);
/*
url = pointer to ASCIIZ URL
@ -103,7 +104,7 @@ extern http_msg * stdcall (*head)(const char *url, http_msg *identifier, unsigne
using system function 75, 6.
Returns 0 on error, identifier otherwise
*/
extern http_msg * stdcall (*post)(const char *url, http_msg *identifier, unsigned flags, const char *add_header,
extern http_msg * stdcall (*http_post)(const char *url, http_msg *identifier, unsigned flags, const char *add_header,
const char *content_type, unsigned content_length);
/*
@ -125,7 +126,7 @@ extern http_msg * stdcall (*post)(const char *url, http_msg *identifier, unsigne
In content_length you'll find the length of the content.
In content_received, you'll find the number of content bytes already received.
*/
extern int stdcall (*receive)(http_msg *identifier);
extern int stdcall (*http_receive)(http_msg *identifier);
/*
identifier = identifier which one of the previous functions returned
@ -134,6 +135,11 @@ extern int stdcall (*receive)(http_msg *identifier);
This procedure can be used to send data to the server (POST)
Returns number of bytes sent, -1 on error
*/
extern int stdcall (*send)(http_msg *identifier, void *dataptr, unsigned datalength);
extern int stdcall (*http_send)(http_msg *identifier, void *dataptr, unsigned datalength);
#endif // __kos__http__h________
/*
Sometimes the http_receive function receives incomplete data. If you have the same problem then a macro can help you:
*/
#define http_long_receive(x) while(http_receive(x)){};
#endif // _HTTP_H_

View File

@ -1,14 +1,19 @@
#include <conio.h>
#include <kos/http.h>
#include <kos/inputbox.h>
#include <clayer/http.h>
#include <clayer/inputbox.h>
#define OK 200
int main() {
if (con_init_console_dll()) return 1; // init fail
con_write_asciiz("Wait, I'll ask you... when I'll done to fetch one site...\n");
con_set_title("Dynamicaly linked app");
http_msg *h = get("http://example.com", 0, HTTP_FLAG_BLOCK, "");
if (!receive(h)) {
con_printf("%s\n", h->content_ptr);
http_msg *h = http_get("http://kolibri.org/", 0, HTTP_FLAG_BLOCK, "");
http_long_receive(h);
if (h->status == OK) {
con_write_string(h->content_ptr, h->content_length);
} else {
con_write_asciiz("Oops! Can't access to the page.\n");
}

View File

@ -1,7 +1,7 @@
#include <kos32sys1.h>
#include <stdlib.h>
#include <string.h>
#include <kos/gb.h>
#include <clayer/gb.h>
/// ===========================================================