forked from KolibriOS/kolibrios
mbedtls:
- is now a native dynamic library (ms coff) - removed unnecessary files. - updated ssl_client1 example git-svn-id: svn://kolibrios.org@9076 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
351b8e3ae8
commit
7828dfa68a
@ -1 +0,0 @@
|
|||||||
#### port of mbedtls-2.16.6 library for KolibriOS
|
|
@ -1,5 +0,0 @@
|
|||||||
on windows:
|
|
||||||
- how to build mdebtls static library:
|
|
||||||
- cd to library/
|
|
||||||
- to build: mingw32-make
|
|
||||||
- to clean: mingw32-make clean WINDOWS=1
|
|
@ -1,16 +0,0 @@
|
|||||||
option(INSTALL_MBEDTLS_HEADERS "Install mbed TLS headers." ON)
|
|
||||||
|
|
||||||
if(INSTALL_MBEDTLS_HEADERS)
|
|
||||||
|
|
||||||
file(GLOB headers "mbedtls/*.h")
|
|
||||||
|
|
||||||
install(FILES ${headers}
|
|
||||||
DESTINATION include/mbedtls
|
|
||||||
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
|
|
||||||
|
|
||||||
endif(INSTALL_MBEDTLS_HEADERS)
|
|
||||||
|
|
||||||
# Make config.h available in an out-of-source build. ssl-opt.sh requires it.
|
|
||||||
if (ENABLE_TESTING AND NOT ${CMAKE_CURRENT_BINARY_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
link_to_source(mbedtls)
|
|
||||||
endif()
|
|
@ -1,37 +0,0 @@
|
|||||||
NEWLIB_INCLUDES=D:\KOSSDK\newlib\libc\include
|
|
||||||
|
|
||||||
CC = kos32-gcc
|
|
||||||
AR = kos32-ar
|
|
||||||
|
|
||||||
CFLAGS ?= -O2
|
|
||||||
WARNING_CFLAGS ?= -Wall -W -Wdeclaration-after-statement
|
|
||||||
LDFLAGS ?=
|
|
||||||
|
|
||||||
LOCAL_CFLAGS = $(WARNING_CFLAGS) -I $(NEWLIB_INCLUDES) -I include -D_FILE_OFFSET_BITS=64
|
|
||||||
LOCAL_LDFLAGS =
|
|
||||||
|
|
||||||
AR_DASH ?= -
|
|
||||||
ARFLAGS = $(AR_DASH)src
|
|
||||||
|
|
||||||
OBJS= socket.o network.o dlfcn.o
|
|
||||||
|
|
||||||
.PHONY: all static clean
|
|
||||||
|
|
||||||
all: static
|
|
||||||
|
|
||||||
static: libkosnet.a
|
|
||||||
|
|
||||||
libkosnet.a: $(OBJS)
|
|
||||||
echo " AR $@"
|
|
||||||
$(AR) $(ARFLAGS) $@ $(OBJS)
|
|
||||||
|
|
||||||
.c.o:
|
|
||||||
echo " CC $<"
|
|
||||||
$(CC) $(LOCAL_CFLAGS) $(CFLAGS) -c $<
|
|
||||||
|
|
||||||
clean:
|
|
||||||
ifndef WINDOWS
|
|
||||||
rm -f *.o libkosnet.a
|
|
||||||
else
|
|
||||||
del /Q /F *.o libkosnet.a
|
|
||||||
endif
|
|
@ -1,92 +0,0 @@
|
|||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "kosnet/dlfcn.h"
|
|
||||||
#include "kosnet/kos32sys1.h"
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
char *name;
|
|
||||||
void *ptr;
|
|
||||||
} KosExp;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
void **importNames;
|
|
||||||
char * libraryName;
|
|
||||||
} KosImp;
|
|
||||||
|
|
||||||
static int __attribute__ ((stdcall)) dll_Load(KosImp *importTableEntry);
|
|
||||||
|
|
||||||
static const char *__error;
|
|
||||||
|
|
||||||
static int __attribute__ ((stdcall)) dll_Load(KosImp *importTableEntry) {
|
|
||||||
for (; importTableEntry->importNames; importTableEntry++) {
|
|
||||||
char libPath[256] = "/sys/lib/";
|
|
||||||
KosExp *exports = NULL;
|
|
||||||
void **libImports = importTableEntry->importNames;
|
|
||||||
|
|
||||||
strcat(libPath, importTableEntry->libraryName);
|
|
||||||
if (!(exports = dlopen(libPath, 0))) { return 1; }
|
|
||||||
for (; *libImports; libImports++) {
|
|
||||||
if (!(*libImports = dlsym(exports, *libImports))) { return 1; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://pubs.opengroup.org/onlinepubs/007908799/xsh/dlopen.html
|
|
||||||
// Current implementation fully ignores "mode" parameter
|
|
||||||
void *dlopen(const char *name, int mode) {
|
|
||||||
KosExp *exports = NULL;
|
|
||||||
|
|
||||||
// load library using syscall
|
|
||||||
asm volatile ("int $0x40":"=a"(exports):"a"(68), "b"(19), "c"(name));
|
|
||||||
if (!exports) {
|
|
||||||
char libPath[256] = "/sys/lib/";
|
|
||||||
|
|
||||||
strcat(libPath, name);
|
|
||||||
asm volatile ("int $0x40":"=a"(exports):"a"(68), "b"(19), "c"(libPath));
|
|
||||||
if (!exports) {
|
|
||||||
__error = "Library not found in \"/sys/lib/\" nor current folder";
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// call anything starting with "lib_"
|
|
||||||
for (KosExp *export = exports; export->name; export++) {
|
|
||||||
if (!memcmp(export->name, "lib_", 4)) {
|
|
||||||
asm volatile (
|
|
||||||
"call *%4" ::
|
|
||||||
"a"(0),
|
|
||||||
"b"(0),
|
|
||||||
"c"(0),
|
|
||||||
"d"(dll_Load),
|
|
||||||
"r"(export->ptr));
|
|
||||||
// was asm volatile ("call *%4" ::"a"(sysmalloc),"b"(sysfree),"c"(sysrealloc),"d"(dll_Load),"r"(export->ptr));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return exports;
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://pubs.opengroup.org/onlinepubs/007908799/xsh/dlsym.html
|
|
||||||
void *dlsym(void *handle, const char *name) {
|
|
||||||
KosExp *exp = handle;
|
|
||||||
|
|
||||||
for (; exp->name; exp++) {
|
|
||||||
if (!strcmp(exp->name, name)) {
|
|
||||||
return exp->ptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__error = "Symbol not found";
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://pubs.opengroup.org/onlinepubs/007908799/xsh/dlclose.html
|
|
||||||
int dlclose(void *handle) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://pubs.opengroup.org/onlinepubs/007908799/xsh/dlerror.html
|
|
||||||
char *dlerror(void) {
|
|
||||||
char *ret = __error ? strdup(__error) : NULL;
|
|
||||||
__error = NULL;
|
|
||||||
return ret;
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
#ifndef _DLFCN_H
|
|
||||||
#define _DLFCN_H
|
|
||||||
|
|
||||||
#define RTLD_LAZY 0x00001
|
|
||||||
#define RTLD_NOW 0x00002
|
|
||||||
#define RTLD_GLOBAL 0x00100
|
|
||||||
#define RTLD_LOCAL 0
|
|
||||||
|
|
||||||
int dlclose(void *handle);
|
|
||||||
char *dlerror(void);
|
|
||||||
void *dlopen(const char *name, int mode);
|
|
||||||
void *dlsym(void *restrict handle, const char *restrict name);
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,836 +0,0 @@
|
|||||||
#ifndef __KOS_32_SYS_H__
|
|
||||||
#define __KOS_32_SYS_H__
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
typedef unsigned int uint32_t;
|
|
||||||
typedef int int32_t;
|
|
||||||
typedef unsigned char uint8_t;
|
|
||||||
typedef unsigned short int uint16_t;
|
|
||||||
typedef unsigned long long uint64_t;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TYPE_3_BORDER_WIDTH 5
|
|
||||||
#define WIN_STATE_MINIMIZED 0x02
|
|
||||||
#define WIN_STATE_ROLLED 0x04
|
|
||||||
#define POS_SCREEN 0
|
|
||||||
#define POS_WINDOW 1
|
|
||||||
|
|
||||||
#define IPC_NOBUFFER 1
|
|
||||||
#define IPC_LOCKED 2
|
|
||||||
#define IPC_OVERFLOW 3
|
|
||||||
#define IPC_NOPID 4
|
|
||||||
|
|
||||||
#define SHM_OPEN 0x00
|
|
||||||
#define SHM_OPEN_ALWAYS 0x04
|
|
||||||
#define SHM_CREATE 0x08
|
|
||||||
#define SHM_READ 0x00
|
|
||||||
#define SHM_WRITE 0x01
|
|
||||||
|
|
||||||
// for clipboard funtions
|
|
||||||
#define UTF 0
|
|
||||||
#define CP866 1
|
|
||||||
#define CP1251 2
|
|
||||||
#define TEXT 0
|
|
||||||
#define IMAGE 1
|
|
||||||
#define RAW 2
|
|
||||||
|
|
||||||
//Read/Write data as type (int char, etc.) at address "addr" with offset "offset". eg DATA(int, buff, 8);
|
|
||||||
#define DATA(type, addr, offset) *((type*)((uint8_t*)addr+offset))
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t blue;
|
|
||||||
uint8_t green;
|
|
||||||
uint8_t red;
|
|
||||||
}RGB;
|
|
||||||
|
|
||||||
typedef unsigned int color_t;
|
|
||||||
|
|
||||||
typedef union __attribute__((packed)) pos_t
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
short x;
|
|
||||||
short y;
|
|
||||||
};
|
|
||||||
} pos_t;
|
|
||||||
|
|
||||||
|
|
||||||
typedef union __attribute__((packed)) oskey_t
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
uint8_t state;
|
|
||||||
uint8_t code;
|
|
||||||
uint16_t ctrl_key;
|
|
||||||
};
|
|
||||||
} oskey_t;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
unsigned handle;
|
|
||||||
unsigned io_code;
|
|
||||||
void *input;
|
|
||||||
int inp_size;
|
|
||||||
void *output;
|
|
||||||
int out_size;
|
|
||||||
}ioctl_t;
|
|
||||||
|
|
||||||
typedef union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
void *data;
|
|
||||||
size_t size;
|
|
||||||
} x;
|
|
||||||
unsigned long long raw;
|
|
||||||
}ufile_t;
|
|
||||||
|
|
||||||
struct kolibri_system_colors {
|
|
||||||
color_t frame_area;
|
|
||||||
color_t grab_bar;
|
|
||||||
color_t grab_bar_button;
|
|
||||||
color_t grab_button_text;
|
|
||||||
color_t grab_text;
|
|
||||||
color_t work_area;
|
|
||||||
color_t work_button;
|
|
||||||
color_t work_button_text;
|
|
||||||
color_t work_text;
|
|
||||||
color_t work_graph;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct blit_call
|
|
||||||
{
|
|
||||||
int dstx;
|
|
||||||
int dsty;
|
|
||||||
int w;
|
|
||||||
int h;
|
|
||||||
|
|
||||||
int srcx;
|
|
||||||
int srcy;
|
|
||||||
int srcw;
|
|
||||||
int srch;
|
|
||||||
|
|
||||||
void *bitmap;
|
|
||||||
int stride;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ipc_message
|
|
||||||
{
|
|
||||||
uint32_t pid; // PID of sending thread
|
|
||||||
uint32_t datalen; // data bytes
|
|
||||||
char data[0]; // data begin
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ipc_buffer
|
|
||||||
{
|
|
||||||
uint32_t lock; // nonzero is locked
|
|
||||||
uint32_t used; // used bytes in buffer
|
|
||||||
struct ipc_message data[0]; // data begin
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline void begin_draw(void)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40" ::"a"(12),"b"(1));
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void end_draw(void)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40" ::"a"(12),"b"(2));
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void sys_create_window(int x, int y, int w, int h, const char *name,
|
|
||||||
color_t workcolor, uint32_t style)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(0),
|
|
||||||
"b"((x << 16) | ((w-1) & 0xFFFF)),
|
|
||||||
"c"((y << 16) | ((h-1) & 0xFFFF)),
|
|
||||||
"d"((style << 24) | (workcolor & 0xFFFFFF)),
|
|
||||||
"D"(name),
|
|
||||||
"S"(0) : "memory");
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void sys_change_window(int new_x, int new_y, int new_w, int new_h)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(67), "b"(new_x), "c"(new_y), "d"(new_w),"S"(new_h)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void define_button(uint32_t x_w, uint32_t y_h, uint32_t id, uint32_t color)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(8),
|
|
||||||
"b"(x_w),
|
|
||||||
"c"(y_h),
|
|
||||||
"d"(id),
|
|
||||||
"S"(color));
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void draw_line(int xs, int ys, int xe, int ye, color_t color)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(38), "d"(color),
|
|
||||||
"b"((xs << 16) | xe),
|
|
||||||
"c"((ys << 16) | ye));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void draw_bar(int x, int y, int w, int h, color_t color)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(13), "d"(color),
|
|
||||||
"b"((x << 16) | w),
|
|
||||||
"c"((y << 16) | h));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void draw_bitmap(void *bitmap, int x, int y, int w, int h)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(7), "b"(bitmap),
|
|
||||||
"c"((w << 16) | h),
|
|
||||||
"d"((x << 16) | y));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void draw_text_sys(const char *text, int x, int y, int len, color_t color)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(4),"d"(text),
|
|
||||||
"b"((x << 16) | y),
|
|
||||||
"S"(len),"c"(color)
|
|
||||||
:"memory");
|
|
||||||
}
|
|
||||||
static inline
|
|
||||||
void draw_text_sys_bg(const char *text, int x, int y, int len, color_t color, color_t bg)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(4),"d"(text),
|
|
||||||
"b"((x << 16) | y),
|
|
||||||
"S"(len),"c"(color), "D"(bg)
|
|
||||||
:"memory");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint32_t get_skin_height(void)
|
|
||||||
{
|
|
||||||
uint32_t height;
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40 \n\t"
|
|
||||||
:"=a"(height)
|
|
||||||
:"a"(48),"b"(4));
|
|
||||||
return height;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
pos_t get_mouse_pos(int origin)
|
|
||||||
{
|
|
||||||
pos_t val;
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40 \n\t"
|
|
||||||
"rol $16, %%eax"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(37),"b"(origin));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint32_t get_mouse_buttons(void)
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(37),"b"(2));
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint32_t get_mouse_wheels(void)
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40 \n\t"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(37),"b"(7));
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline uint32_t load_cursor(void *path, uint32_t flags)
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(37), "b"(4), "c"(path), "d"(flags));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline uint32_t set_cursor(uint32_t cursor)
|
|
||||||
{
|
|
||||||
uint32_t old;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(old)
|
|
||||||
:"a"(37), "b"(5), "c"(cursor));
|
|
||||||
return old;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline int destroy_cursor(uint32_t cursor)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(ret)
|
|
||||||
:"a"(37), "b"(6), "c"(cursor)
|
|
||||||
:"memory");
|
|
||||||
return ret;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint32_t wait_for_event(uint32_t time)
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(23), "b"(time));
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline uint32_t check_os_event()
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(11));
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline uint32_t get_os_event()
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(10));
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint32_t get_tick_count(void)
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(26),"b"(9));
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint64_t get_ns_count(void)
|
|
||||||
{
|
|
||||||
uint64_t val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=A"(val)
|
|
||||||
:"a"(26), "b"(10));
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline oskey_t get_key(void)
|
|
||||||
{
|
|
||||||
oskey_t val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(2));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint32_t get_os_button()
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(17));
|
|
||||||
return val>>8;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline uint32_t get_service(char *name)
|
|
||||||
{
|
|
||||||
uint32_t retval = 0;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(retval)
|
|
||||||
:"a"(68),"b"(16),"c"(name)
|
|
||||||
:"memory");
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline int call_service(ioctl_t *io)
|
|
||||||
{
|
|
||||||
int retval;
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(retval)
|
|
||||||
:"a"(68),"b"(17),"c"(io)
|
|
||||||
:"memory","cc");
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static inline void yield(void)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(68), "b"(1));
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline void delay(uint32_t time)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(5), "b"(time)
|
|
||||||
:"memory");
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void *user_alloc(size_t size)
|
|
||||||
{
|
|
||||||
void *val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(68),"b"(12),"c"(size));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
int user_free(void *mem)
|
|
||||||
{
|
|
||||||
int val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(68),"b"(13),"c"(mem));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void* user_realloc(void *mem, size_t size)
|
|
||||||
{
|
|
||||||
void *val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(68),"b"(20),"c"(size),"d"(mem)
|
|
||||||
:"memory");
|
|
||||||
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
int *user_unmap(void *base, size_t offset, size_t size)
|
|
||||||
{
|
|
||||||
int *val;
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(68),"b"(26),"c"(base),"d"(offset),"S"(size));
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline ufile_t load_file(const char *path)
|
|
||||||
{
|
|
||||||
ufile_t uf;
|
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
"int $0x40"
|
|
||||||
:"=A"(uf.raw)
|
|
||||||
:"a" (68), "b"(27),"c"(path));
|
|
||||||
|
|
||||||
return uf;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline int GetScreenSize()
|
|
||||||
{
|
|
||||||
int retval;
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(retval)
|
|
||||||
:"a"(61), "b"(1));
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline void get_proc_info(char *info)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:
|
|
||||||
:"a"(9), "b"(info), "c"(-1)
|
|
||||||
:"memory");
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline void Blit(void *bitmap, int dst_x, int dst_y,
|
|
||||||
int src_x, int src_y, int w, int h,
|
|
||||||
int src_w, int src_h, int stride)
|
|
||||||
{
|
|
||||||
volatile struct blit_call bc;
|
|
||||||
|
|
||||||
bc.dstx = dst_x;
|
|
||||||
bc.dsty = dst_y;
|
|
||||||
bc.w = w;
|
|
||||||
bc.h = h;
|
|
||||||
bc.srcx = src_x;
|
|
||||||
bc.srcy = src_y;
|
|
||||||
bc.srcw = src_w;
|
|
||||||
bc.srch = src_h;
|
|
||||||
bc.stride = stride;
|
|
||||||
bc.bitmap = bitmap;
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
::"a"(73),"b"(0),"c"(&bc.dstx));
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// newlib exclusive
|
|
||||||
#ifndef __TINYC__
|
|
||||||
int create_thread(int (*proc)(void *param), void *param, int stack_size);
|
|
||||||
|
|
||||||
void* load_library(const char *name);
|
|
||||||
|
|
||||||
void* get_proc_address(void *handle, const char *proc_name);
|
|
||||||
|
|
||||||
void enumerate_libraries(int (*callback)(void *handle, const char* name,
|
|
||||||
uint32_t base, uint32_t size, void *user_data),
|
|
||||||
void *user_data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// May be next section need to be added in newlibc
|
|
||||||
|
|
||||||
enum KOLIBRI_GUI_EVENTS {
|
|
||||||
KOLIBRI_EVENT_NONE = 0, /* Event queue is empty */
|
|
||||||
KOLIBRI_EVENT_REDRAW = 1, /* Window and window elements should be redrawn */
|
|
||||||
KOLIBRI_EVENT_KEY = 2, /* A key on the keyboard was pressed */
|
|
||||||
KOLIBRI_EVENT_BUTTON = 3, /* A button was clicked with the mouse */
|
|
||||||
KOLIBRI_EVENT_DESKTOP = 5, /* Desktop redraw finished */
|
|
||||||
KOLIBRI_EVENT_MOUSE = 6, /* Mouse activity (movement, button press) was detected */
|
|
||||||
KOLIBRI_EVENT_IPC = 7, /* Interprocess communication notify */
|
|
||||||
KOLIBRI_EVENT_NETWORK = 8, /* Network event */
|
|
||||||
KOLIBRI_EVENT_DEBUG = 9, /* Debug subsystem event */
|
|
||||||
KOLIBRI_EVENT_IRQBEGIN = 16 /* 16..31 IRQ0..IRQ15 interrupt =IRQBEGIN+IRQn */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// copied from /programs/system/shell/system/kolibri.c
|
|
||||||
// fn's returned -1 as syserror, 1 as error, 0 as OK
|
|
||||||
static inline
|
|
||||||
int kol_clip_num()
|
|
||||||
{
|
|
||||||
register uint32_t val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(0));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
char* kol_clip_get(int n)
|
|
||||||
// returned buffer must be freed by user_free()
|
|
||||||
{
|
|
||||||
register char* val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(1), "c"(n));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
int kol_clip_set(int n, char buffer[])
|
|
||||||
{
|
|
||||||
register uint32_t val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(2), "c"(n), "d"(buffer));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
int kol_clip_pop()
|
|
||||||
{
|
|
||||||
register uint32_t val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(3));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
int kol_clip_unlock()
|
|
||||||
{
|
|
||||||
register uint32_t val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(4));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void get_system_colors(struct kolibri_system_colors *color_table)
|
|
||||||
{
|
|
||||||
__asm__ volatile ("int $0x40"
|
|
||||||
:
|
|
||||||
:"a"(48),"b"(3),"c"(color_table),"d"(40)
|
|
||||||
);
|
|
||||||
|
|
||||||
/* color_table should point to the system color table */
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void debug_board_write_byte(const char ch){
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:
|
|
||||||
:"a"(63), "b"(1), "c"(ch));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline void draw_number_sys(int32_t number, int x, int y, int len, color_t color){
|
|
||||||
register uint32_t fmt;
|
|
||||||
fmt = len << 16 | 0x80000000; // no leading zeros + width
|
|
||||||
// fmt = len << 16 | 0x00000000; // leading zeros + width
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:
|
|
||||||
:"a"(47), "b"(fmt), "c"(number), "d"((x << 16) | y), "S"(color));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void draw_number_sys_bg(int32_t number, int x, int y, int len, color_t color, color_t bg){
|
|
||||||
register uint32_t fmt;
|
|
||||||
fmt = len << 16 | 0x80000000; // no leading zeros + width
|
|
||||||
// fmt = len << 16 | 0x00000000; // leading zeros + width
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:
|
|
||||||
:"a"(47), "b"(fmt), "c"(number), "d"((x << 16) | y), "S"(color), "D"(bg));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint32_t get_mouse_eventstate(void)
|
|
||||||
{
|
|
||||||
uint32_t val;
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"int $0x40"
|
|
||||||
:"=a"(val)
|
|
||||||
:"a"(37),"b"(3));
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline
|
|
||||||
uint32_t set_event_mask(uint32_t mask)
|
|
||||||
{
|
|
||||||
register uint32_t val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(40), "b"(mask));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef void (*thread_proc)(void*);
|
|
||||||
|
|
||||||
static inline
|
|
||||||
int start_thread(thread_proc proc, char* stack_top)
|
|
||||||
{
|
|
||||||
register int val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(51), "b"(1), "c"(proc), "d"(stack_top));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void kos_exit()
|
|
||||||
{
|
|
||||||
asm volatile ("int $0x40"::"a"(-1));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void focus_window(int slot){
|
|
||||||
asm volatile ("int $0x40"::"a"(18), "b"(3), "c"(slot));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int get_thread_slot(int tid){
|
|
||||||
register int val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(18), "b"(21), "c"(tid));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void set_current_folder(char* dir){
|
|
||||||
asm volatile ("int $0x40"::"a"(30), "b"(1), "c"(dir));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int get_current_folder(char* buf, int bufsize){
|
|
||||||
register int val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(30), "b"(2), "c"(buf), "d"(bufsize));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void ipc_set_area(void* buf, int bufsize){
|
|
||||||
asm volatile ("int $0x40"::"a"(60), "b"(1), "c"(buf), "d"(bufsize));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
int ipc_send_message(int pid_reciever, void *data, int datalen) {
|
|
||||||
register int val;
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(60), "b"(2), "c"(pid_reciever), "d"(data), "S"(datalen));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void* shm_open(char *shm_name, int msize, int flags, int *retsz){
|
|
||||||
register int val, cod;
|
|
||||||
asm volatile ("int $0x40":"=a"(val),"=d"(cod):"a"(68), "b"(22), "c"(shm_name), "d"(msize), "S"(flags));
|
|
||||||
|
|
||||||
if(retsz) *retsz = cod; // errcode if NULL or memsize when open
|
|
||||||
return (void*)val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void shm_close(char *shm_name){
|
|
||||||
asm volatile ("int $0x40"::"a"(68), "b"(23), "c"(shm_name));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
int start_app(char *app_name, char *args){
|
|
||||||
register int val;
|
|
||||||
struct file_op_t
|
|
||||||
{
|
|
||||||
uint32_t fn;
|
|
||||||
uint32_t flags;
|
|
||||||
char* args;
|
|
||||||
uint32_t res1, res2;
|
|
||||||
char zero;
|
|
||||||
char* app_name __attribute__((packed));
|
|
||||||
} file_op;
|
|
||||||
memset(&file_op, 0, sizeof(file_op));
|
|
||||||
file_op.fn = 7;
|
|
||||||
file_op.args = args;
|
|
||||||
file_op.app_name = app_name;
|
|
||||||
|
|
||||||
|
|
||||||
asm volatile ("int $0x40":"=a"(val):"a"(70), "b"(&file_op));
|
|
||||||
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
//added nonstatic inline because incomfortabre stepping in in debugger
|
|
||||||
void __attribute__ ((noinline)) debug_board_write_str(const char* str);
|
|
||||||
void __attribute__ ((noinline)) debug_board_printf(const char *format,...);
|
|
||||||
|
|
||||||
/* copy body to only one project file
|
|
||||||
void __attribute__ ((noinline)) debug_board_write_str(const char* str){
|
|
||||||
while(*str)
|
|
||||||
debug_board_write_byte(*str++);
|
|
||||||
}
|
|
||||||
|
|
||||||
void __attribute__ ((noinline)) debug_board_printf(const char *format,...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
char log_board[300];
|
|
||||||
|
|
||||||
va_start (ap, format);
|
|
||||||
vsnprintf(log_board, sizeof log_board, format, ap);
|
|
||||||
va_end(ap);
|
|
||||||
debug_board_write_str(log_board);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// TinyC don't support aliasing of static inline funcs, but support #define :)
|
|
||||||
#ifndef __TINYC__
|
|
||||||
static inline void BeginDraw(void) __attribute__ ((alias ("begin_draw")));
|
|
||||||
static inline void EndDraw(void) __attribute__ ((alias ("end_draw")));
|
|
||||||
static inline void DrawWindow(int x, int y, int w, int h, const char *name,
|
|
||||||
color_t workcolor, uint32_t style)
|
|
||||||
__attribute__ ((alias ("sys_create_window")));
|
|
||||||
static inline void DefineButton(void) __attribute__ ((alias ("define_button")));
|
|
||||||
static inline void DrawLine(int xs, int ys, int xe, int ye, color_t color)
|
|
||||||
__attribute__ ((alias ("draw_line")));
|
|
||||||
static inline void DrawBar(int x, int y, int w, int h, color_t color)
|
|
||||||
__attribute__ ((alias ("draw_bar")));
|
|
||||||
static inline void DrawBitmap(void *bitmap, int x, int y, int w, int h)
|
|
||||||
__attribute__ ((alias ("draw_bitmap")));
|
|
||||||
static inline uint32_t GetSkinHeight(void) __attribute__ ((alias ("get_skin_height")));
|
|
||||||
static inline pos_t GetMousePos(int origin) __attribute__ ((alias ("get_mouse_pos")));
|
|
||||||
static inline uint32_t GetMouseButtons(void) __attribute__ ((alias ("get_mouse_buttons")));
|
|
||||||
static inline uint32_t GetMouseWheels(void) __attribute__ ((alias ("get_mouse_wheels")));
|
|
||||||
static inline uint32_t LoadCursor(void *path, uint32_t flags) __attribute__ ((alias ("load_cursor")));
|
|
||||||
static inline uint32_t SetCursor(uint32_t cursor) __attribute__ ((alias ("set_cursor")));
|
|
||||||
static inline int DestroyCursor(uint32_t cursor) __attribute__ ((alias ("destroy_cursor")));
|
|
||||||
static inline uint32_t GetOsEvent(void) __attribute__ ((alias ("get_os_event")));
|
|
||||||
static inline void *UserAlloc(size_t size) __attribute__ ((alias ("user_alloc")));
|
|
||||||
static inline int UserFree(void *mem) __attribute__ ((alias ("user_free")));
|
|
||||||
static inline void* UserRealloc(void *mem, size_t size) __attribute__ ((alias ("user_realloc")));
|
|
||||||
static inline int *UserUnmap(void *base, size_t offset, size_t size) __attribute__ ((alias ("user_unmap")));
|
|
||||||
static inline ufile_t LoadFile(const char *path) __attribute__ ((alias ("load_file")));
|
|
||||||
static inline void GetProcInfo(char *info) __attribute__ ((alias ("get_proc_info")));
|
|
||||||
#else
|
|
||||||
#define BeginDraw begin_draw
|
|
||||||
#define EndDraw end_draw
|
|
||||||
#define DrawWindow sys_create_window
|
|
||||||
#define DefineButton define_button
|
|
||||||
#define DrawLine draw_line
|
|
||||||
#define DrawBar draw_bar
|
|
||||||
#define DrawBitmap draw_bitmap
|
|
||||||
#define GetSkinHeight get_skin_height
|
|
||||||
#define GetMousePos get_mouse_pos
|
|
||||||
#define GetMouseButtons get_mouse_buttons
|
|
||||||
#define GetMouseWheels get_mouse_wheels
|
|
||||||
#define LoadCursor load_cursor
|
|
||||||
#define SetCursor set_cursor
|
|
||||||
#define DestroyCursor destroy_cursor
|
|
||||||
#define GetOsEvent get_os_event
|
|
||||||
#define UserAlloc user_alloc
|
|
||||||
#define UserFree user_free
|
|
||||||
#define UserRealloc user_realloc
|
|
||||||
#define UserUnmap user_unmap
|
|
||||||
#define LoadFile load_file
|
|
||||||
#define GetProcInfo get_proc_info
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
|||||||
#ifndef __NETWORK_H
|
|
||||||
#define __NETWORK_H
|
|
||||||
|
|
||||||
#include "kosnet/socket.h"
|
|
||||||
|
|
||||||
#define EAI_ADDRFAMILY 1
|
|
||||||
#define EAI_AGAIN 2
|
|
||||||
#define EAI_BADFLAGS 3
|
|
||||||
#define EAI_FAIL 4
|
|
||||||
#define EAI_FAMILY 5
|
|
||||||
#define EAI_MEMORY 6
|
|
||||||
#define EAI_NONAME 8
|
|
||||||
#define EAI_SERVICE 9
|
|
||||||
#define EAI_SOCKTYPE 10
|
|
||||||
#define EAI_BADHINTS 12
|
|
||||||
#define EAI_PROTOCOL 13
|
|
||||||
#define EAI_OVERFLOW 14
|
|
||||||
|
|
||||||
// Flags for addrinfo
|
|
||||||
#define AI_PASSIVE 1
|
|
||||||
#define AI_CANONNAME 2
|
|
||||||
#define AI_NUMERICHOST 4
|
|
||||||
#define AI_NUMERICSERV 8
|
|
||||||
#define AI_ADDRCONFIG 0x400
|
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
|
||||||
struct ARP_entry{
|
|
||||||
unsigned int IP;
|
|
||||||
unsigned char MAC[6];
|
|
||||||
unsigned short status;
|
|
||||||
unsigned short TTL;
|
|
||||||
};
|
|
||||||
#pragma pack(pop)
|
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
|
||||||
struct addrinfo {
|
|
||||||
int ai_flags;
|
|
||||||
int ai_family;
|
|
||||||
int ai_socktype;
|
|
||||||
int ai_protocol;
|
|
||||||
int ai_addrlen;
|
|
||||||
char *ai_canonname;
|
|
||||||
sockaddr *ai_addr;
|
|
||||||
struct addrinfo *ai_next;
|
|
||||||
};
|
|
||||||
#pragma pack(pop)
|
|
||||||
|
|
||||||
extern int load_network_obj();
|
|
||||||
extern int (*inet_addr)(const char* hostname) __attribute__ ((stdcall));
|
|
||||||
extern char* (*inet_ntoa)(int ip_addr) __attribute__ ((stdcall));
|
|
||||||
extern int (*getaddrinfo)(const char* hostname, const char* servname, const struct addrinfo* hints, struct addrinfo** res) __attribute__ ((stdcall));
|
|
||||||
extern void (*freeaddrinfo)(struct addrinfo* ai) __attribute__ ((stdcall));
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,107 +0,0 @@
|
|||||||
#ifndef __SOCKET_H
|
|
||||||
#define __SOCKET_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
// Socket Types
|
|
||||||
#define SOCK_STREAM 1
|
|
||||||
#define SOCK_DGRAM 2
|
|
||||||
#define SOCK_RAW 3
|
|
||||||
|
|
||||||
// IP protocols
|
|
||||||
#define IPPROTO_IP 0
|
|
||||||
#define IPPROTO_ICMP 1
|
|
||||||
#define IPPROTO_TCP 6
|
|
||||||
#define IPPROTO_UDP 17
|
|
||||||
#define IPPROTO_RAW 255
|
|
||||||
|
|
||||||
// IP options
|
|
||||||
#define IP_TTL 2
|
|
||||||
|
|
||||||
// Address families
|
|
||||||
#define AF_UNSPEC 0
|
|
||||||
#define AF_LOCAL 1
|
|
||||||
#define AF_INET4 2 // IPv4
|
|
||||||
#define AF_INET6 10 // IPv6
|
|
||||||
|
|
||||||
#define PF_UNSPEC AF_UNSPEC
|
|
||||||
#define PF_LOCAL AF_LOCAL
|
|
||||||
#define PF_INET4 AF_INET4
|
|
||||||
#define PF_INET6 AF_INET6
|
|
||||||
|
|
||||||
// internal definition
|
|
||||||
#define AI_SUPPORTED 0x40F
|
|
||||||
|
|
||||||
// for system function 76
|
|
||||||
#define API_ETH (0<<16)
|
|
||||||
#define API_IPv4 (1<<16)
|
|
||||||
#define API_ICMP (2<<16)
|
|
||||||
#define API_UDP (3<<16)
|
|
||||||
#define API_TCP (4<<16)
|
|
||||||
#define API_ARP (5<<16)
|
|
||||||
#define API_PPPOE (6<<16)
|
|
||||||
|
|
||||||
// Socket flags for user calls
|
|
||||||
#define MSG_NOFLAG 0
|
|
||||||
#define MSG_PEEK 0x02
|
|
||||||
#define MSG_DONTWAIT 0x40
|
|
||||||
|
|
||||||
// Socket levels
|
|
||||||
#define SOL_SOCKET 0xffff
|
|
||||||
|
|
||||||
//Socket options
|
|
||||||
#define SO_BINDTODEVICE (1<<9)
|
|
||||||
#define SO_NONBLOCK (1<<31)
|
|
||||||
|
|
||||||
// Error Codes
|
|
||||||
#define ENOBUFS 1
|
|
||||||
#define EINPROGRESS 2
|
|
||||||
#define EOPNOTSUPP 4
|
|
||||||
#define EWOULDBLOCK 6
|
|
||||||
#define ENOTCONN 9
|
|
||||||
#define EALREADY 10
|
|
||||||
#define EINVALUE 11
|
|
||||||
#define EMSGSIZE 12
|
|
||||||
#define ENOMEM 18
|
|
||||||
#define EADDRINUSE 20
|
|
||||||
#define ECONNREFUSED 61
|
|
||||||
#define ECONNRESET 52
|
|
||||||
#define EISCONN 56
|
|
||||||
#define ETIMEDOUT 60
|
|
||||||
#define ECONNABORTED 53
|
|
||||||
|
|
||||||
|
|
||||||
#define PORT(X) (X<<8)
|
|
||||||
extern int err_code;
|
|
||||||
|
|
||||||
#pragma pack(push,1)
|
|
||||||
typedef struct{
|
|
||||||
unsigned short sin_family;
|
|
||||||
unsigned short sin_port;
|
|
||||||
unsigned int sin_addr;
|
|
||||||
unsigned long long sin_zero;
|
|
||||||
}sockaddr;
|
|
||||||
#pragma pack(pop)
|
|
||||||
|
|
||||||
#pragma pack(push,1)
|
|
||||||
typedef struct{
|
|
||||||
unsigned int level;
|
|
||||||
unsigned int optionname;
|
|
||||||
unsigned int optlenght;
|
|
||||||
unsigned char options;
|
|
||||||
}optstruct;
|
|
||||||
#pragma pack(pop)
|
|
||||||
|
|
||||||
int socket(int domain, int type, int protocol);
|
|
||||||
int closesocket(int socket);
|
|
||||||
int bind(int socket, const sockaddr *addres, int addres_len);
|
|
||||||
int listen(int socket, int backlog);
|
|
||||||
int connect(int socket, const sockaddr* address, int socket_len);
|
|
||||||
int accept(int socket, const sockaddr* address, int address_len);
|
|
||||||
int send(int socket, const void *message, size_t msg_len, int flag);
|
|
||||||
int recv(int socket, void *buffer, size_t buff_len, int flag);
|
|
||||||
int setsockopt(int socket,const optstruct* opt);
|
|
||||||
int getsockopt(int socket, optstruct* opt);
|
|
||||||
int socketpair(int *sock1, int *sock2);
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,21 +0,0 @@
|
|||||||
#include "kosnet/network.h"
|
|
||||||
#include "kosnet/dlfcn.h"
|
|
||||||
|
|
||||||
int (*inet_addr)(const char* hostname) __attribute__ ((stdcall));
|
|
||||||
char* (*inet_ntoa)(int ip_addr) __attribute__ ((stdcall));
|
|
||||||
int (*getaddrinfo)(const char* hostname, const char* servname, const struct addrinfo* hints, struct addrinfo** res) __attribute__ ((stdcall));
|
|
||||||
void (*freeaddrinfo)(struct addrinfo* ai) __attribute__ ((stdcall));
|
|
||||||
|
|
||||||
int load_network_obj() {
|
|
||||||
void *network_lib = dlopen("/sys/lib/network.obj", RTLD_GLOBAL);
|
|
||||||
if (network_lib == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
inet_addr = dlsym(network_lib, "inet_addr");
|
|
||||||
inet_ntoa = dlsym(network_lib, "inet_ntoa");
|
|
||||||
getaddrinfo = dlsym(network_lib, "getaddrinfo");
|
|
||||||
freeaddrinfo = dlsym(network_lib, "freeaddrinfo");
|
|
||||||
dlclose(network_lib);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
NEWLIB_INCLUDES=D:\KOSSDK\newlib\libc\include
|
|
||||||
APP_DYNAMIC_LDS=D:\KOSSDK\newlib/app-dynamic.lds
|
|
||||||
LIBDIR=D:\KOSSDK\kos32-msys-5.4.0\win32\lib
|
|
||||||
MAIN_TARGET=libkosnet_demo
|
|
||||||
|
|
||||||
CC=kos32-gcc
|
|
||||||
LD=kos32-ld
|
|
||||||
OBJCOPY=kos32-objcopy
|
|
||||||
|
|
||||||
CCFLAGS=-c -fomit-frame-pointer -I $(NEWLIB_INCLUDES) -I../include -Wall -Wextra
|
|
||||||
LDFLAGS=-call_shared -nostdlib --subsystem console -T $(APP_DYNAMIC_LDS) --image-base 0 -L $(LIBDIR) -L ../ -lkosnet -lgcc -lapp -lc.dll
|
|
||||||
|
|
||||||
all: libkosnet_demo
|
|
||||||
|
|
||||||
libkosnet_demo: libkosnet_demo.o
|
|
||||||
$(LD) libkosnet_demo.o -o $(MAIN_TARGET) $(LDFLAGS)
|
|
||||||
$(OBJCOPY) $(MAIN_TARGET) -O binary
|
|
||||||
|
|
||||||
libkosnet_demo.o: libkosnet_demo.c
|
|
||||||
$(CC) $(CCFLAGS) libkosnet_demo.c -o libkosnet_demo.o
|
|
||||||
|
|
||||||
clean:
|
|
||||||
del *.o
|
|
||||||
del $(MAIN_TARGET)
|
|
Binary file not shown.
@ -1,60 +0,0 @@
|
|||||||
#include "kosnet/network.h"
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
load_network_obj();
|
|
||||||
|
|
||||||
char *host = "kolibrios.org";
|
|
||||||
int port = 80;
|
|
||||||
printf("Connecting to %s on port %d\n", host, port);
|
|
||||||
|
|
||||||
struct addrinfo *addr_info;
|
|
||||||
char port_str[16]; sprintf(port_str, "%d", port);
|
|
||||||
struct addrinfo hints;
|
|
||||||
memset(&hints, 0, sizeof(hints));
|
|
||||||
hints.ai_family = AF_UNSPEC; // IPv4 or IPv6 doesnt matter
|
|
||||||
hints.ai_socktype = SOCK_STREAM; // TCP stream sockets
|
|
||||||
if (getaddrinfo(host, port_str, 0, &addr_info) != 0) {
|
|
||||||
printf("Host %s not found!\n", host);
|
|
||||||
freeaddrinfo(addr_info);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
printf("IP address of %s is %s\n", host, inet_ntoa(addr_info->ai_addr->sin_addr));
|
|
||||||
//printf("Host port = %d\n", addr_info->ai_addr->sin_port >> 8);
|
|
||||||
|
|
||||||
char request[256];
|
|
||||||
sprintf(request, "GET /en/ HTTP/1.1\r\nHost: %s\r\n\r\n", host);
|
|
||||||
printf("request = %s\n", request);
|
|
||||||
|
|
||||||
int sock = socket(AF_INET4, SOCK_STREAM, IPPROTO_TCP);
|
|
||||||
|
|
||||||
puts("Connecting...\n");
|
|
||||||
if (connect(sock, addr_info->ai_addr, addr_info->ai_addrlen) != 0) {
|
|
||||||
printf("Connection failed, err_code = %d\n", err_code);
|
|
||||||
exit(err_code);
|
|
||||||
}
|
|
||||||
puts("Connected successfully\n");
|
|
||||||
|
|
||||||
puts("Sending request...\n");
|
|
||||||
if (send(sock, request, strlen(request), MSG_NOFLAG) == -1) {
|
|
||||||
printf("Sending failed, err_code = %d\n", err_code);
|
|
||||||
exit(err_code);
|
|
||||||
}
|
|
||||||
puts("Request sended successfully, waiting for response...\n");
|
|
||||||
|
|
||||||
char buf[512 + 1];
|
|
||||||
if (recv(sock, buf, 512, MSG_NOFLAG) == -1) {
|
|
||||||
printf("Receive failed, err_code = %d\n", err_code);
|
|
||||||
exit(err_code);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Response = %s\n", buf);
|
|
||||||
|
|
||||||
freeaddrinfo(addr_info);
|
|
||||||
|
|
||||||
closesocket(sock);
|
|
||||||
puts("\n goodbye)\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
qemu-system-i386 -m 256 -fda ../../test_kos_images/kolibri.img -boot a -vga vmware -net nic,model=rtl8139 -net user -soundhw ac97 -usb -usbdevice tablet -drive file=fat:rw:.
|
|
@ -1,124 +0,0 @@
|
|||||||
#include "kosnet/socket.h"
|
|
||||||
|
|
||||||
int err_code = 0;
|
|
||||||
|
|
||||||
int socket(int domain, int type, int protocol)
|
|
||||||
{
|
|
||||||
int socket;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(socket)
|
|
||||||
:"a"(75), "b"(0), "c"(domain), "d"(type), "S"(protocol)
|
|
||||||
);
|
|
||||||
return socket;
|
|
||||||
}
|
|
||||||
|
|
||||||
int closesocket(int socket)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(status)
|
|
||||||
:"a"(75), "b"(1), "c"(socket)
|
|
||||||
);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
int bind(int socket, const sockaddr *addres, int addres_len)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(status)
|
|
||||||
:"a"(75), "b"(2), "c"(socket), "d"(addres), "S"(addres_len)
|
|
||||||
);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
int listen(int socket, int backlog)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(status)
|
|
||||||
:"a"(75), "b"(3), "c"(socket), "d"(backlog)
|
|
||||||
);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
int connect(int socket,const sockaddr* address, int socket_len)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(status)
|
|
||||||
:"a"(75), "b"(4), "c"(socket), "d"(address), "S"(socket_len)
|
|
||||||
);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
int accept(int socket, const sockaddr *address, int address_len)
|
|
||||||
{
|
|
||||||
int new_socket;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(new_socket)
|
|
||||||
:"a"(75), "b"(5), "c"(socket), "d"(address), "S"(address_len)
|
|
||||||
);
|
|
||||||
return new_socket;
|
|
||||||
}
|
|
||||||
|
|
||||||
int send(int socket, const void *message, size_t msg_len, int flag)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(status)
|
|
||||||
:"a"(75), "b"(6), "c"(socket), "d"(message), "S"(msg_len), "D"(flag)
|
|
||||||
);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
int recv(int socket, void *buffer, size_t buff_len, int flag)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(status)
|
|
||||||
:"a"(75), "b"(7), "c"(socket), "d"(buffer), "S"(buff_len), "D"(flag)
|
|
||||||
);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
int setsockopt(int socket,const optstruct* opt)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(status)
|
|
||||||
:"a"(75), "b"(8), "c"(socket),"d"(opt)
|
|
||||||
);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
int getsockopt(int socket, optstruct* opt)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(err_code), "=a"(status)
|
|
||||||
:"a"(75), "b"(9), "c"(socket),"d"(opt)
|
|
||||||
);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
int socketpair(int *socket1, int *socket2)
|
|
||||||
{
|
|
||||||
asm volatile(
|
|
||||||
"int $0x40"
|
|
||||||
:"=b"(*socket2), "=a"(*socket1)
|
|
||||||
:"a"(75), "b"(10)
|
|
||||||
);
|
|
||||||
err_code=*socket2;
|
|
||||||
return *socket1;
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
*.o
|
|
@ -1,187 +0,0 @@
|
|||||||
option(USE_STATIC_MBEDTLS_LIBRARY "Build mbed TLS static library." ON)
|
|
||||||
option(USE_SHARED_MBEDTLS_LIBRARY "Build mbed TLS shared library." OFF)
|
|
||||||
option(LINK_WITH_PTHREAD "Explicitly link mbed TLS library to pthread." OFF)
|
|
||||||
|
|
||||||
set(src_crypto
|
|
||||||
aes.c
|
|
||||||
aesni.c
|
|
||||||
arc4.c
|
|
||||||
aria.c
|
|
||||||
asn1parse.c
|
|
||||||
asn1write.c
|
|
||||||
base64.c
|
|
||||||
bignum.c
|
|
||||||
blowfish.c
|
|
||||||
camellia.c
|
|
||||||
ccm.c
|
|
||||||
chacha20.c
|
|
||||||
chachapoly.c
|
|
||||||
cipher.c
|
|
||||||
cipher_wrap.c
|
|
||||||
cmac.c
|
|
||||||
ctr_drbg.c
|
|
||||||
des.c
|
|
||||||
dhm.c
|
|
||||||
ecdh.c
|
|
||||||
ecdsa.c
|
|
||||||
ecjpake.c
|
|
||||||
ecp.c
|
|
||||||
ecp_curves.c
|
|
||||||
entropy.c
|
|
||||||
entropy_poll.c
|
|
||||||
error.c
|
|
||||||
gcm.c
|
|
||||||
havege.c
|
|
||||||
hkdf.c
|
|
||||||
hmac_drbg.c
|
|
||||||
md.c
|
|
||||||
md2.c
|
|
||||||
md4.c
|
|
||||||
md5.c
|
|
||||||
md_wrap.c
|
|
||||||
memory_buffer_alloc.c
|
|
||||||
nist_kw.c
|
|
||||||
oid.c
|
|
||||||
padlock.c
|
|
||||||
pem.c
|
|
||||||
pk.c
|
|
||||||
pk_wrap.c
|
|
||||||
pkcs12.c
|
|
||||||
pkcs5.c
|
|
||||||
pkparse.c
|
|
||||||
pkwrite.c
|
|
||||||
platform.c
|
|
||||||
platform_util.c
|
|
||||||
poly1305.c
|
|
||||||
ripemd160.c
|
|
||||||
rsa.c
|
|
||||||
rsa_internal.c
|
|
||||||
sha1.c
|
|
||||||
sha256.c
|
|
||||||
sha512.c
|
|
||||||
threading.c
|
|
||||||
timing.c
|
|
||||||
version.c
|
|
||||||
version_features.c
|
|
||||||
xtea.c
|
|
||||||
)
|
|
||||||
|
|
||||||
set(src_x509
|
|
||||||
certs.c
|
|
||||||
pkcs11.c
|
|
||||||
x509.c
|
|
||||||
x509_create.c
|
|
||||||
x509_crl.c
|
|
||||||
x509_crt.c
|
|
||||||
x509_csr.c
|
|
||||||
x509write_crt.c
|
|
||||||
x509write_csr.c
|
|
||||||
)
|
|
||||||
|
|
||||||
set(src_tls
|
|
||||||
debug.c
|
|
||||||
net_sockets.c
|
|
||||||
ssl_cache.c
|
|
||||||
ssl_ciphersuites.c
|
|
||||||
ssl_cli.c
|
|
||||||
ssl_cookie.c
|
|
||||||
ssl_srv.c
|
|
||||||
ssl_ticket.c
|
|
||||||
ssl_tls.c
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC)
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes")
|
|
||||||
endif(CMAKE_COMPILER_IS_GNUCC)
|
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_CLANG)
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code")
|
|
||||||
endif(CMAKE_COMPILER_IS_CLANG)
|
|
||||||
|
|
||||||
if(UNSAFE_BUILD)
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error")
|
|
||||||
set(CMAKE_C_FLAGS_ASAN "${CMAKE_C_FLAGS_ASAN} -Wno-error")
|
|
||||||
set(CMAKE_C_FLAGS_ASANDBG "${CMAKE_C_FLAGS_ASANDBG} -Wno-error")
|
|
||||||
endif(UNSAFE_BUILD)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
set(libs ${libs} ws2_32)
|
|
||||||
endif(WIN32)
|
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
||||||
SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
|
||||||
SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
|
||||||
SET(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
|
||||||
SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(HAIKU)
|
|
||||||
set(libs ${libs} network)
|
|
||||||
endif(HAIKU)
|
|
||||||
|
|
||||||
if(USE_PKCS11_HELPER_LIBRARY)
|
|
||||||
set(libs ${libs} pkcs11-helper)
|
|
||||||
endif(USE_PKCS11_HELPER_LIBRARY)
|
|
||||||
|
|
||||||
if(ENABLE_ZLIB_SUPPORT)
|
|
||||||
set(libs ${libs} ${ZLIB_LIBRARIES})
|
|
||||||
endif(ENABLE_ZLIB_SUPPORT)
|
|
||||||
|
|
||||||
if(LINK_WITH_PTHREAD)
|
|
||||||
set(libs ${libs} pthread)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY)
|
|
||||||
message(FATAL_ERROR "Need to choose static or shared mbedtls build!")
|
|
||||||
endif(NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY)
|
|
||||||
|
|
||||||
if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY)
|
|
||||||
set(mbedtls_static_target "mbedtls_static")
|
|
||||||
set(mbedx509_static_target "mbedx509_static")
|
|
||||||
set(mbedcrypto_static_target "mbedcrypto_static")
|
|
||||||
elseif(USE_STATIC_MBEDTLS_LIBRARY)
|
|
||||||
set(mbedtls_static_target "mbedtls")
|
|
||||||
set(mbedx509_static_target "mbedx509")
|
|
||||||
set(mbedcrypto_static_target "mbedcrypto")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(USE_STATIC_MBEDTLS_LIBRARY)
|
|
||||||
add_library(${mbedcrypto_static_target} STATIC ${src_crypto})
|
|
||||||
set_target_properties(${mbedcrypto_static_target} PROPERTIES OUTPUT_NAME mbedcrypto)
|
|
||||||
target_link_libraries(${mbedcrypto_static_target} ${libs})
|
|
||||||
|
|
||||||
add_library(${mbedx509_static_target} STATIC ${src_x509})
|
|
||||||
set_target_properties(${mbedx509_static_target} PROPERTIES OUTPUT_NAME mbedx509)
|
|
||||||
target_link_libraries(${mbedx509_static_target} ${libs} ${mbedcrypto_static_target})
|
|
||||||
|
|
||||||
add_library(${mbedtls_static_target} STATIC ${src_tls})
|
|
||||||
set_target_properties(${mbedtls_static_target} PROPERTIES OUTPUT_NAME mbedtls)
|
|
||||||
target_link_libraries(${mbedtls_static_target} ${libs} ${mbedx509_static_target})
|
|
||||||
|
|
||||||
install(TARGETS ${mbedtls_static_target} ${mbedx509_static_target} ${mbedcrypto_static_target}
|
|
||||||
DESTINATION ${LIB_INSTALL_DIR}
|
|
||||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
|
||||||
endif(USE_STATIC_MBEDTLS_LIBRARY)
|
|
||||||
|
|
||||||
if(USE_SHARED_MBEDTLS_LIBRARY)
|
|
||||||
add_library(mbedcrypto SHARED ${src_crypto})
|
|
||||||
set_target_properties(mbedcrypto PROPERTIES VERSION 2.16.6 SOVERSION 3)
|
|
||||||
target_link_libraries(mbedcrypto ${libs})
|
|
||||||
|
|
||||||
add_library(mbedx509 SHARED ${src_x509})
|
|
||||||
set_target_properties(mbedx509 PROPERTIES VERSION 2.16.6 SOVERSION 0)
|
|
||||||
target_link_libraries(mbedx509 ${libs} mbedcrypto)
|
|
||||||
|
|
||||||
add_library(mbedtls SHARED ${src_tls})
|
|
||||||
set_target_properties(mbedtls PROPERTIES VERSION 2.16.6 SOVERSION 12)
|
|
||||||
target_link_libraries(mbedtls ${libs} mbedx509)
|
|
||||||
|
|
||||||
install(TARGETS mbedtls mbedx509 mbedcrypto
|
|
||||||
DESTINATION ${LIB_INSTALL_DIR}
|
|
||||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
|
||||||
endif(USE_SHARED_MBEDTLS_LIBRARY)
|
|
||||||
|
|
||||||
add_custom_target(lib DEPENDS mbedcrypto mbedx509 mbedtls)
|
|
||||||
if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY)
|
|
||||||
add_dependencies(lib mbedcrypto_static mbedx509_static mbedtls_static)
|
|
||||||
endif()
|
|
@ -1,28 +1,12 @@
|
|||||||
# Also see "include/mbedtls/config.h"
|
|
||||||
|
|
||||||
NEWLIB_INCLUDES=D:\KOSSDK\newlib\libc\include
|
|
||||||
KOSNET_INCLUDES=../kosnet/include
|
|
||||||
|
|
||||||
CC = kos32-gcc
|
CC = kos32-gcc
|
||||||
AR = kos32-ar
|
FASM = fasm
|
||||||
|
CLINK= ../../../clink/clink
|
||||||
|
|
||||||
CFLAGS ?= -O2
|
KLIBC_DIR = ../../../ktcc/trunk/libc.obj
|
||||||
WARNING_CFLAGS ?= -Wall -W -Wdeclaration-after-statement
|
|
||||||
LDFLAGS ?=
|
|
||||||
|
|
||||||
LOCAL_CFLAGS = $(WARNING_CFLAGS) -I $(NEWLIB_INCLUDES) -I../include -I $(KOSNET_INCLUDES) -D_FILE_OFFSET_BITS=64
|
CFLAGS = -c -nostdinc -I../include -DGNUC -fno-common -Os -fno-delete-null-pointer-checks -fno-ident -fno-builtin -fno-leading-underscore -D__TINYC__ -D_FILE_OFFSET_BITS=64
|
||||||
LOCAL_LDFLAGS =
|
|
||||||
|
|
||||||
ifdef DEBUG
|
|
||||||
LOCAL_CFLAGS += -g3
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Set AR_DASH= (empty string) to use an ar implementation that does not accept
|
|
||||||
# the - prefix for command line options (e.g. llvm-ar)
|
|
||||||
AR_DASH ?= -
|
|
||||||
|
|
||||||
ARFLAGS = $(AR_DASH)src
|
|
||||||
|
|
||||||
|
INCLUDES = -I../include -I.. -I$(KLIBC_DIR)/include
|
||||||
|
|
||||||
OBJS_CRYPTO= aes.o aesni.o arc4.o \
|
OBJS_CRYPTO= aes.o aesni.o arc4.o \
|
||||||
aria.o asn1parse.o asn1write.o \
|
aria.o asn1parse.o asn1write.o \
|
||||||
@ -55,38 +39,27 @@ OBJS_TLS= debug.o net_sockets.o \
|
|||||||
ssl_cache.o ssl_ciphersuites.o \
|
ssl_cache.o ssl_ciphersuites.o \
|
||||||
ssl_cli.o ssl_cookie.o \
|
ssl_cli.o ssl_cookie.o \
|
||||||
ssl_srv.o ssl_ticket.o \
|
ssl_srv.o ssl_ticket.o \
|
||||||
ssl_tls.o
|
ssl_tls.o
|
||||||
|
|
||||||
|
OBJS_OTHER = libtcc/libtcc1.o libtcc/memmove.o \
|
||||||
|
libtcc/memset.o libtcc/memcpy.o \
|
||||||
|
libtcc/___chkstk_ms.o \
|
||||||
|
mbedtls_init.o \
|
||||||
|
export.o
|
||||||
|
|
||||||
|
all: $(OBJS_CRYPTO) $(OBJS_TLS) $(OBJS_X509) $(OBJS_OTHER)
|
||||||
|
ar -crs libmbedtls.a $(OBJS_CRYPTO) $(OBJS_TLS) $(OBJS_X509) $(OBJS_OTHER)
|
||||||
|
$(CLINK) $(OBJS_CRYPTO) $(OBJS_TLS) $(OBJS_X509) $(OBJS_OTHER) > clink.log
|
||||||
|
mv -f a.out.obj mbedtls.obj
|
||||||
|
strip --strip-unneeded -x mbedtls.obj
|
||||||
|
kpack mbedtls.obj
|
||||||
|
cp -f mbedtls.obj /home/max/.kex/root/RD/1/LIB
|
||||||
|
|
||||||
.SILENT:
|
%.o : %.c Makefile
|
||||||
|
$(CC) -c $(CFLAGS) $(INCLUDES) -o $@ $<
|
||||||
|
|
||||||
|
%.o : %.asm Makefile
|
||||||
|
$(FASM) $< $@
|
||||||
|
|
||||||
.PHONY: all static clean
|
clean:
|
||||||
|
rm -f $(OBJS_CRYPTO) $(OBJS_TLS) $(OBJS_X509) $(OBJS_LIBC) $(OBJS_OTHER)
|
||||||
all: static
|
|
||||||
|
|
||||||
static: libmbedcrypto.a libmbedx509.a libmbedtls.a
|
|
||||||
|
|
||||||
# tls
|
|
||||||
libmbedtls.a: $(OBJS_TLS)
|
|
||||||
echo " AR $@"
|
|
||||||
$(AR) $(ARFLAGS) $@ $(OBJS_TLS)
|
|
||||||
|
|
||||||
# x509
|
|
||||||
libmbedx509.a: $(OBJS_X509)
|
|
||||||
echo " AR $@"
|
|
||||||
$(AR) $(ARFLAGS) $@ $(OBJS_X509)
|
|
||||||
|
|
||||||
# crypto
|
|
||||||
libmbedcrypto.a: $(OBJS_CRYPTO)
|
|
||||||
echo " AR $@"
|
|
||||||
$(AR) $(ARFLAGS) $@ $(OBJS_CRYPTO)
|
|
||||||
|
|
||||||
.c.o:
|
|
||||||
echo " CC $<"
|
|
||||||
$(CC) $(LOCAL_CFLAGS) $(CFLAGS) -c $<
|
|
||||||
|
|
||||||
clean:
|
|
||||||
ifndef WINDOWS
|
|
||||||
rm -f *.o libmbed*
|
|
||||||
else
|
|
||||||
del /Q /F *.o libmbed*
|
|
||||||
endif
|
|
||||||
|
1514
programs/develop/libraries/kos_mbedtls/library/export.asm
Normal file
1514
programs/develop/libraries/kos_mbedtls/library/export.asm
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1 @@
|
|||||||
|
void ___chkstk_ms() {}
|
763
programs/develop/libraries/kos_mbedtls/library/libtcc/libtcc1.c
Normal file
763
programs/develop/libraries/kos_mbedtls/library/libtcc/libtcc1.c
Normal file
@ -0,0 +1,763 @@
|
|||||||
|
/* TCC runtime library.
|
||||||
|
Parts of this code are (c) 2002 Fabrice Bellard
|
||||||
|
|
||||||
|
Copyright (C) 1987, 1988, 1992, 1994, 1995 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 2, or (at your option) any
|
||||||
|
later version.
|
||||||
|
|
||||||
|
In addition to the permissions in the GNU General Public License, the
|
||||||
|
Free Software Foundation gives you unlimited permission to link the
|
||||||
|
compiled version of this file into combinations with other programs,
|
||||||
|
and to distribute those combinations without any restriction coming
|
||||||
|
from the use of this file. (The General Public License restrictions
|
||||||
|
do apply in other respects; for example, they cover modification of
|
||||||
|
the file, and distribution when not linked into a combine
|
||||||
|
executable.)
|
||||||
|
|
||||||
|
This file is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; see the file COPYING. If not, write to
|
||||||
|
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
//#include <stdint.h>
|
||||||
|
#define TCC_TARGET_I386
|
||||||
|
|
||||||
|
#define W_TYPE_SIZE 32
|
||||||
|
#define BITS_PER_UNIT 8
|
||||||
|
|
||||||
|
typedef int Wtype;
|
||||||
|
typedef unsigned int UWtype;
|
||||||
|
typedef unsigned int USItype;
|
||||||
|
typedef long long DWtype;
|
||||||
|
typedef unsigned long long UDWtype;
|
||||||
|
|
||||||
|
struct DWstruct {
|
||||||
|
Wtype low, high;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
struct DWstruct s;
|
||||||
|
DWtype ll;
|
||||||
|
} DWunion;
|
||||||
|
|
||||||
|
typedef long double XFtype;
|
||||||
|
#define WORD_SIZE (sizeof (Wtype) * BITS_PER_UNIT)
|
||||||
|
#define HIGH_WORD_COEFF (((UDWtype) 1) << WORD_SIZE)
|
||||||
|
|
||||||
|
/* the following deal with IEEE single-precision numbers */
|
||||||
|
#define EXCESS 126
|
||||||
|
#define SIGNBIT 0x80000000
|
||||||
|
#define HIDDEN (1 << 23)
|
||||||
|
#define SIGN(fp) ((fp) & SIGNBIT)
|
||||||
|
#define EXP(fp) (((fp) >> 23) & 0xFF)
|
||||||
|
#define MANT(fp) (((fp) & 0x7FFFFF) | HIDDEN)
|
||||||
|
#define PACK(s,e,m) ((s) | ((e) << 23) | (m))
|
||||||
|
|
||||||
|
/* the following deal with IEEE double-precision numbers */
|
||||||
|
#define EXCESSD 1022
|
||||||
|
#define HIDDEND (1 << 20)
|
||||||
|
#define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF)
|
||||||
|
#define SIGND(fp) ((fp.l.upper) & SIGNBIT)
|
||||||
|
#define MANTD(fp) (((((fp.l.upper) & 0xFFFFF) | HIDDEND) << 10) | \
|
||||||
|
(fp.l.lower >> 22))
|
||||||
|
#define HIDDEND_LL ((long long)1 << 52)
|
||||||
|
#define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
|
||||||
|
#define PACKD_LL(s,e,m) (((long long)((s)+((e)<<20))<<32)|(m))
|
||||||
|
|
||||||
|
/* the following deal with x86 long double-precision numbers */
|
||||||
|
#define EXCESSLD 16382
|
||||||
|
#define EXPLD(fp) (fp.l.upper & 0x7fff)
|
||||||
|
#define SIGNLD(fp) ((fp.l.upper) & 0x8000)
|
||||||
|
|
||||||
|
/* only for x86 */
|
||||||
|
union ldouble_long {
|
||||||
|
long double ld;
|
||||||
|
struct {
|
||||||
|
unsigned long long lower;
|
||||||
|
unsigned short upper;
|
||||||
|
} l;
|
||||||
|
};
|
||||||
|
|
||||||
|
union double_long {
|
||||||
|
double d;
|
||||||
|
#if 1
|
||||||
|
struct {
|
||||||
|
unsigned int lower;
|
||||||
|
int upper;
|
||||||
|
} l;
|
||||||
|
#else
|
||||||
|
struct {
|
||||||
|
int upper;
|
||||||
|
unsigned int lower;
|
||||||
|
} l;
|
||||||
|
#endif
|
||||||
|
long long ll;
|
||||||
|
};
|
||||||
|
|
||||||
|
union float_long {
|
||||||
|
float f;
|
||||||
|
unsigned int l;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* XXX: we don't support several builtin supports for now */
|
||||||
|
#if !defined(TCC_TARGET_X86_64) && !defined(TCC_TARGET_ARM)
|
||||||
|
|
||||||
|
/* XXX: use gcc/tcc intrinsic ? */
|
||||||
|
#if defined(TCC_TARGET_I386)
|
||||||
|
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
|
||||||
|
__asm__ ("subl %5,%1\n\tsbbl %3,%0" \
|
||||||
|
: "=r" ((USItype) (sh)), \
|
||||||
|
"=&r" ((USItype) (sl)) \
|
||||||
|
: "0" ((USItype) (ah)), \
|
||||||
|
"g" ((USItype) (bh)), \
|
||||||
|
"1" ((USItype) (al)), \
|
||||||
|
"g" ((USItype) (bl)))
|
||||||
|
#define umul_ppmm(w1, w0, u, v) \
|
||||||
|
__asm__ ("mull %3" \
|
||||||
|
: "=a" ((USItype) (w0)), \
|
||||||
|
"=d" ((USItype) (w1)) \
|
||||||
|
: "%0" ((USItype) (u)), \
|
||||||
|
"rm" ((USItype) (v)))
|
||||||
|
#define udiv_qrnnd(q, r, n1, n0, dv) \
|
||||||
|
__asm__ ("divl %4" \
|
||||||
|
: "=a" ((USItype) (q)), \
|
||||||
|
"=d" ((USItype) (r)) \
|
||||||
|
: "0" ((USItype) (n0)), \
|
||||||
|
"1" ((USItype) (n1)), \
|
||||||
|
"rm" ((USItype) (dv)))
|
||||||
|
#define count_leading_zeros(count, x) \
|
||||||
|
do { \
|
||||||
|
USItype __cbtmp; \
|
||||||
|
__asm__ ("bsrl %1,%0" \
|
||||||
|
: "=r" (__cbtmp) : "rm" ((USItype) (x))); \
|
||||||
|
(count) = __cbtmp ^ 31; \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#error unsupported CPU type
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* most of this code is taken from libgcc2.c from gcc */
|
||||||
|
UDWtype __udivmoddi4 (UDWtype n, UDWtype d, UDWtype *rp)
|
||||||
|
{
|
||||||
|
DWunion ww;
|
||||||
|
DWunion nn, dd;
|
||||||
|
DWunion rr;
|
||||||
|
UWtype d0, d1, n0, n1, n2;
|
||||||
|
UWtype q0, q1;
|
||||||
|
UWtype b, bm;
|
||||||
|
|
||||||
|
nn.ll = n;
|
||||||
|
dd.ll = d;
|
||||||
|
|
||||||
|
d0 = dd.s.low;
|
||||||
|
d1 = dd.s.high;
|
||||||
|
n0 = nn.s.low;
|
||||||
|
n1 = nn.s.high;
|
||||||
|
|
||||||
|
#if !defined(UDIV_NEEDS_NORMALIZATION)
|
||||||
|
if (d1 == 0)
|
||||||
|
{
|
||||||
|
if (d0 > n1)
|
||||||
|
{
|
||||||
|
/* 0q = nn / 0D */
|
||||||
|
|
||||||
|
udiv_qrnnd (q0, n0, n1, n0, d0);
|
||||||
|
q1 = 0;
|
||||||
|
|
||||||
|
/* Remainder in n0. */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* qq = NN / 0d */
|
||||||
|
|
||||||
|
if (d0 == 0)
|
||||||
|
d0 = 1 / d0; /* Divide intentionally by zero. */
|
||||||
|
|
||||||
|
udiv_qrnnd (q1, n1, 0, n1, d0);
|
||||||
|
udiv_qrnnd (q0, n0, n1, n0, d0);
|
||||||
|
|
||||||
|
/* Remainder in n0. */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rp != 0)
|
||||||
|
{
|
||||||
|
rr.s.low = n0;
|
||||||
|
rr.s.high = 0;
|
||||||
|
*rp = rr.ll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* UDIV_NEEDS_NORMALIZATION */
|
||||||
|
|
||||||
|
if (d1 == 0)
|
||||||
|
{
|
||||||
|
if (d0 > n1)
|
||||||
|
{
|
||||||
|
/* 0q = nn / 0D */
|
||||||
|
|
||||||
|
count_leading_zeros (bm, d0);
|
||||||
|
|
||||||
|
if (bm != 0)
|
||||||
|
{
|
||||||
|
/* Normalize, i.e. make the most significant bit of the
|
||||||
|
denominator set. */
|
||||||
|
|
||||||
|
d0 = d0 << bm;
|
||||||
|
n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm));
|
||||||
|
n0 = n0 << bm;
|
||||||
|
}
|
||||||
|
|
||||||
|
udiv_qrnnd (q0, n0, n1, n0, d0);
|
||||||
|
q1 = 0;
|
||||||
|
|
||||||
|
/* Remainder in n0 >> bm. */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* qq = NN / 0d */
|
||||||
|
|
||||||
|
if (d0 == 0)
|
||||||
|
d0 = 1 / d0; /* Divide intentionally by zero. */
|
||||||
|
|
||||||
|
count_leading_zeros (bm, d0);
|
||||||
|
|
||||||
|
if (bm == 0)
|
||||||
|
{
|
||||||
|
/* From (n1 >= d0) /\ (the most significant bit of d0 is set),
|
||||||
|
conclude (the most significant bit of n1 is set) /\ (the
|
||||||
|
leading quotient digit q1 = 1).
|
||||||
|
|
||||||
|
This special case is necessary, not an optimization.
|
||||||
|
(Shifts counts of W_TYPE_SIZE are undefined.) */
|
||||||
|
|
||||||
|
n1 -= d0;
|
||||||
|
q1 = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Normalize. */
|
||||||
|
|
||||||
|
b = W_TYPE_SIZE - bm;
|
||||||
|
|
||||||
|
d0 = d0 << bm;
|
||||||
|
n2 = n1 >> b;
|
||||||
|
n1 = (n1 << bm) | (n0 >> b);
|
||||||
|
n0 = n0 << bm;
|
||||||
|
|
||||||
|
udiv_qrnnd (q1, n1, n2, n1, d0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* n1 != d0... */
|
||||||
|
|
||||||
|
udiv_qrnnd (q0, n0, n1, n0, d0);
|
||||||
|
|
||||||
|
/* Remainder in n0 >> bm. */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rp != 0)
|
||||||
|
{
|
||||||
|
rr.s.low = n0 >> bm;
|
||||||
|
rr.s.high = 0;
|
||||||
|
*rp = rr.ll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* UDIV_NEEDS_NORMALIZATION */
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (d1 > n1)
|
||||||
|
{
|
||||||
|
/* 00 = nn / DD */
|
||||||
|
|
||||||
|
q0 = 0;
|
||||||
|
q1 = 0;
|
||||||
|
|
||||||
|
/* Remainder in n1n0. */
|
||||||
|
if (rp != 0)
|
||||||
|
{
|
||||||
|
rr.s.low = n0;
|
||||||
|
rr.s.high = n1;
|
||||||
|
*rp = rr.ll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* 0q = NN / dd */
|
||||||
|
|
||||||
|
count_leading_zeros (bm, d1);
|
||||||
|
if (bm == 0)
|
||||||
|
{
|
||||||
|
/* From (n1 >= d1) /\ (the most significant bit of d1 is set),
|
||||||
|
conclude (the most significant bit of n1 is set) /\ (the
|
||||||
|
quotient digit q0 = 0 or 1).
|
||||||
|
|
||||||
|
This special case is necessary, not an optimization. */
|
||||||
|
|
||||||
|
/* The condition on the next line takes advantage of that
|
||||||
|
n1 >= d1 (true due to program flow). */
|
||||||
|
if (n1 > d1 || n0 >= d0)
|
||||||
|
{
|
||||||
|
q0 = 1;
|
||||||
|
sub_ddmmss (n1, n0, n1, n0, d1, d0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
q0 = 0;
|
||||||
|
|
||||||
|
q1 = 0;
|
||||||
|
|
||||||
|
if (rp != 0)
|
||||||
|
{
|
||||||
|
rr.s.low = n0;
|
||||||
|
rr.s.high = n1;
|
||||||
|
*rp = rr.ll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UWtype m1, m0;
|
||||||
|
/* Normalize. */
|
||||||
|
|
||||||
|
b = W_TYPE_SIZE - bm;
|
||||||
|
|
||||||
|
d1 = (d1 << bm) | (d0 >> b);
|
||||||
|
d0 = d0 << bm;
|
||||||
|
n2 = n1 >> b;
|
||||||
|
n1 = (n1 << bm) | (n0 >> b);
|
||||||
|
n0 = n0 << bm;
|
||||||
|
|
||||||
|
udiv_qrnnd (q0, n1, n2, n1, d1);
|
||||||
|
umul_ppmm (m1, m0, q0, d0);
|
||||||
|
|
||||||
|
if (m1 > n1 || (m1 == n1 && m0 > n0))
|
||||||
|
{
|
||||||
|
q0--;
|
||||||
|
sub_ddmmss (m1, m0, m1, m0, d1, d0);
|
||||||
|
}
|
||||||
|
|
||||||
|
q1 = 0;
|
||||||
|
|
||||||
|
/* Remainder in (n1n0 - m1m0) >> bm. */
|
||||||
|
if (rp != 0)
|
||||||
|
{
|
||||||
|
sub_ddmmss (n1, n0, n1, n0, m1, m0);
|
||||||
|
rr.s.low = (n1 << b) | (n0 >> bm);
|
||||||
|
rr.s.high = n1 >> bm;
|
||||||
|
*rp = rr.ll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ww.s.low = q0;
|
||||||
|
ww.s.high = q1;
|
||||||
|
return ww.ll;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define __negdi2(a) (-(a))
|
||||||
|
|
||||||
|
long long __divdi3(long long u, long long v)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
DWunion uu, vv;
|
||||||
|
DWtype w;
|
||||||
|
|
||||||
|
uu.ll = u;
|
||||||
|
vv.ll = v;
|
||||||
|
|
||||||
|
if (uu.s.high < 0) {
|
||||||
|
c = ~c;
|
||||||
|
uu.ll = __negdi2 (uu.ll);
|
||||||
|
}
|
||||||
|
if (vv.s.high < 0) {
|
||||||
|
c = ~c;
|
||||||
|
vv.ll = __negdi2 (vv.ll);
|
||||||
|
}
|
||||||
|
w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0);
|
||||||
|
if (c)
|
||||||
|
w = __negdi2 (w);
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/KaMeHb-UA/UE4m/blob/1d9ad5bfead06520570c7f24dad062f9f8717c1a/\
|
||||||
|
Engine/Extras/ThirdPartyNotUE/emsdk/emscripten/incoming/system/lib/compiler-rt/lib/\
|
||||||
|
builtins/divmoddi4.c
|
||||||
|
long long __divmoddi4(long long a, long long b, long long* rem)
|
||||||
|
{
|
||||||
|
long long d = __divdi3(a, b);
|
||||||
|
*rem = a - (d * b);
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long __moddi3(long long u, long long v)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
DWunion uu, vv;
|
||||||
|
DWtype w;
|
||||||
|
|
||||||
|
uu.ll = u;
|
||||||
|
vv.ll = v;
|
||||||
|
|
||||||
|
if (uu.s.high < 0) {
|
||||||
|
c = ~c;
|
||||||
|
uu.ll = __negdi2 (uu.ll);
|
||||||
|
}
|
||||||
|
if (vv.s.high < 0)
|
||||||
|
vv.ll = __negdi2 (vv.ll);
|
||||||
|
|
||||||
|
__udivmoddi4 (uu.ll, vv.ll, (UDWtype *) &w);
|
||||||
|
if (c)
|
||||||
|
w = __negdi2 (w);
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long __udivdi3(unsigned long long u, unsigned long long v)
|
||||||
|
{
|
||||||
|
return __udivmoddi4 (u, v, (UDWtype *) 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long __umoddi3(unsigned long long u, unsigned long long v)
|
||||||
|
{
|
||||||
|
UDWtype w;
|
||||||
|
|
||||||
|
__udivmoddi4 (u, v, &w);
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* XXX: fix tcc's code generator to do this instead */
|
||||||
|
long long __ashrdi3(long long a, int b)
|
||||||
|
{
|
||||||
|
#ifdef __TINYC__
|
||||||
|
DWunion u;
|
||||||
|
u.ll = a;
|
||||||
|
if (b >= 32) {
|
||||||
|
u.s.low = u.s.high >> (b - 32);
|
||||||
|
u.s.high = u.s.high >> 31;
|
||||||
|
} else if (b != 0) {
|
||||||
|
u.s.low = ((unsigned)u.s.low >> b) | (u.s.high << (32 - b));
|
||||||
|
u.s.high = u.s.high >> b;
|
||||||
|
}
|
||||||
|
return u.ll;
|
||||||
|
#else
|
||||||
|
return a >> b;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* XXX: fix tcc's code generator to do this instead */
|
||||||
|
unsigned long long __lshrdi3(unsigned long long a, int b)
|
||||||
|
{
|
||||||
|
#ifdef __TINYC__
|
||||||
|
DWunion u;
|
||||||
|
u.ll = a;
|
||||||
|
if (b >= 32) {
|
||||||
|
u.s.low = (unsigned)u.s.high >> (b - 32);
|
||||||
|
u.s.high = 0;
|
||||||
|
} else if (b != 0) {
|
||||||
|
u.s.low = ((unsigned)u.s.low >> b) | (u.s.high << (32 - b));
|
||||||
|
u.s.high = (unsigned)u.s.high >> b;
|
||||||
|
}
|
||||||
|
return u.ll;
|
||||||
|
#else
|
||||||
|
return a >> b;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* XXX: fix tcc's code generator to do this instead */
|
||||||
|
long long __ashldi3(long long a, int b)
|
||||||
|
{
|
||||||
|
#ifdef __TINYC__
|
||||||
|
DWunion u;
|
||||||
|
u.ll = a;
|
||||||
|
if (b >= 32) {
|
||||||
|
u.s.high = (unsigned)u.s.low << (b - 32);
|
||||||
|
u.s.low = 0;
|
||||||
|
} else if (b != 0) {
|
||||||
|
u.s.high = ((unsigned)u.s.high << b) | ((unsigned)u.s.low >> (32 - b));
|
||||||
|
u.s.low = (unsigned)u.s.low << b;
|
||||||
|
}
|
||||||
|
return u.ll;
|
||||||
|
#else
|
||||||
|
return a << b;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef COMMIT_4ad186c5ef61_IS_FIXED
|
||||||
|
long long __tcc_cvt_ftol(long double x)
|
||||||
|
{
|
||||||
|
unsigned c0, c1;
|
||||||
|
long long ret;
|
||||||
|
__asm__ __volatile__ ("fnstcw %0" : "=m" (c0));
|
||||||
|
c1 = c0 | 0x0C00;
|
||||||
|
__asm__ __volatile__ ("fldcw %0" : : "m" (c1));
|
||||||
|
__asm__ __volatile__ ("fistpll %0" : "=m" (ret));
|
||||||
|
__asm__ __volatile__ ("fldcw %0" : : "m" (c0));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !__x86_64__ */
|
||||||
|
|
||||||
|
/* XXX: fix tcc's code generator to do this instead */
|
||||||
|
float __floatundisf(unsigned long long a)
|
||||||
|
{
|
||||||
|
DWunion uu;
|
||||||
|
XFtype r;
|
||||||
|
|
||||||
|
uu.ll = a;
|
||||||
|
if (uu.s.high >= 0) {
|
||||||
|
return (float)uu.ll;
|
||||||
|
} else {
|
||||||
|
r = (XFtype)uu.ll;
|
||||||
|
r += 18446744073709551616.0;
|
||||||
|
return (float)r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double __floatundidf(unsigned long long a)
|
||||||
|
{
|
||||||
|
DWunion uu;
|
||||||
|
XFtype r;
|
||||||
|
|
||||||
|
uu.ll = a;
|
||||||
|
if (uu.s.high >= 0) {
|
||||||
|
return (double)uu.ll;
|
||||||
|
} else {
|
||||||
|
r = (XFtype)uu.ll;
|
||||||
|
r += 18446744073709551616.0;
|
||||||
|
return (double)r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
long double __floatundixf(unsigned long long a)
|
||||||
|
{
|
||||||
|
DWunion uu;
|
||||||
|
XFtype r;
|
||||||
|
|
||||||
|
uu.ll = a;
|
||||||
|
if (uu.s.high >= 0) {
|
||||||
|
return (long double)uu.ll;
|
||||||
|
} else {
|
||||||
|
r = (XFtype)uu.ll;
|
||||||
|
r += 18446744073709551616.0;
|
||||||
|
return (long double)r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long __fixunssfdi (float a1)
|
||||||
|
{
|
||||||
|
register union float_long fl1;
|
||||||
|
register int exp;
|
||||||
|
register unsigned long l;
|
||||||
|
|
||||||
|
fl1.f = a1;
|
||||||
|
|
||||||
|
if (fl1.l == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
exp = EXP (fl1.l) - EXCESS - 24;
|
||||||
|
|
||||||
|
l = MANT(fl1.l);
|
||||||
|
if (exp >= 41)
|
||||||
|
return (unsigned long long)-1;
|
||||||
|
else if (exp >= 0)
|
||||||
|
return (unsigned long long)l << exp;
|
||||||
|
else if (exp >= -23)
|
||||||
|
return l >> -exp;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long __fixunsdfdi (double a1)
|
||||||
|
{
|
||||||
|
register union double_long dl1;
|
||||||
|
register int exp;
|
||||||
|
register unsigned long long l;
|
||||||
|
|
||||||
|
dl1.d = a1;
|
||||||
|
|
||||||
|
if (dl1.ll == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
exp = EXPD (dl1) - EXCESSD - 53;
|
||||||
|
|
||||||
|
l = MANTD_LL(dl1);
|
||||||
|
|
||||||
|
if (exp >= 12)
|
||||||
|
return (unsigned long long)-1;
|
||||||
|
else if (exp >= 0)
|
||||||
|
return l << exp;
|
||||||
|
else if (exp >= -52)
|
||||||
|
return l >> -exp;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long __fixunsxfdi (long double a1)
|
||||||
|
{
|
||||||
|
register union ldouble_long dl1;
|
||||||
|
register int exp;
|
||||||
|
register unsigned long long l;
|
||||||
|
|
||||||
|
dl1.ld = a1;
|
||||||
|
|
||||||
|
if (dl1.l.lower == 0 && dl1.l.upper == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
exp = EXPLD (dl1) - EXCESSLD - 64;
|
||||||
|
|
||||||
|
l = dl1.l.lower;
|
||||||
|
|
||||||
|
if (exp > 0)
|
||||||
|
return (unsigned long long)-1;
|
||||||
|
else if (exp >= -63)
|
||||||
|
return l >> -exp;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long __fixsfdi (float a1)
|
||||||
|
{
|
||||||
|
long long ret; int s;
|
||||||
|
ret = __fixunssfdi((s = a1 >= 0) ? a1 : -a1);
|
||||||
|
return s ? ret : -ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long __fixdfdi (double a1)
|
||||||
|
{
|
||||||
|
long long ret; int s;
|
||||||
|
ret = __fixunsdfdi((s = a1 >= 0) ? a1 : -a1);
|
||||||
|
return s ? ret : -ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long __fixxfdi (long double a1)
|
||||||
|
{
|
||||||
|
long long ret; int s;
|
||||||
|
ret = __fixunsxfdi((s = a1 >= 0) ? a1 : -a1);
|
||||||
|
return s ? ret : -ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(TCC_TARGET_X86_64) && !defined(_WIN64)
|
||||||
|
|
||||||
|
#ifndef __TINYC__
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#else
|
||||||
|
/* Avoid including stdlib.h because it is not easily available when
|
||||||
|
cross compiling */
|
||||||
|
#include <stddef.h> /* size_t definition is needed for a x86_64-tcc to parse memset() */
|
||||||
|
void *malloc(unsigned long long);
|
||||||
|
void *memset(void *s, int c, size_t n);
|
||||||
|
void free(void*);
|
||||||
|
void abort(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum __va_arg_type {
|
||||||
|
__va_gen_reg, __va_float_reg, __va_stack
|
||||||
|
};
|
||||||
|
|
||||||
|
//This should be in sync with the declaration on our include/stdarg.h
|
||||||
|
/* GCC compatible definition of va_list. */
|
||||||
|
typedef struct {
|
||||||
|
unsigned int gp_offset;
|
||||||
|
unsigned int fp_offset;
|
||||||
|
union {
|
||||||
|
unsigned int overflow_offset;
|
||||||
|
char *overflow_arg_area;
|
||||||
|
};
|
||||||
|
char *reg_save_area;
|
||||||
|
} __va_list_struct;
|
||||||
|
|
||||||
|
#undef __va_start
|
||||||
|
#undef __va_arg
|
||||||
|
#undef __va_copy
|
||||||
|
#undef __va_end
|
||||||
|
|
||||||
|
void __va_start(__va_list_struct *ap, void *fp)
|
||||||
|
{
|
||||||
|
memset(ap, 0, sizeof(__va_list_struct));
|
||||||
|
*ap = *(__va_list_struct *)((char *)fp - 16);
|
||||||
|
ap->overflow_arg_area = (char *)fp + ap->overflow_offset;
|
||||||
|
ap->reg_save_area = (char *)fp - 176 - 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *__va_arg(__va_list_struct *ap,
|
||||||
|
enum __va_arg_type arg_type,
|
||||||
|
int size, int align)
|
||||||
|
{
|
||||||
|
size = (size + 7) & ~7;
|
||||||
|
align = (align + 7) & ~7;
|
||||||
|
switch (arg_type) {
|
||||||
|
case __va_gen_reg:
|
||||||
|
if (ap->gp_offset + size <= 48) {
|
||||||
|
ap->gp_offset += size;
|
||||||
|
return ap->reg_save_area + ap->gp_offset - size;
|
||||||
|
}
|
||||||
|
goto use_overflow_area;
|
||||||
|
|
||||||
|
case __va_float_reg:
|
||||||
|
if (ap->fp_offset < 128 + 48) {
|
||||||
|
ap->fp_offset += 16;
|
||||||
|
return ap->reg_save_area + ap->fp_offset - 16;
|
||||||
|
}
|
||||||
|
size = 8;
|
||||||
|
goto use_overflow_area;
|
||||||
|
|
||||||
|
case __va_stack:
|
||||||
|
use_overflow_area:
|
||||||
|
ap->overflow_arg_area += size;
|
||||||
|
ap->overflow_arg_area = (char*)((intptr_t)(ap->overflow_arg_area + align - 1) & -(intptr_t)align);
|
||||||
|
return ap->overflow_arg_area - size;
|
||||||
|
|
||||||
|
default:
|
||||||
|
#ifndef __TINYC__
|
||||||
|
fprintf(stderr, "unknown ABI type for __va_arg\n");
|
||||||
|
#endif
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __x86_64__ */
|
||||||
|
|
||||||
|
/* Flushing for tccrun */
|
||||||
|
#if defined(TCC_TARGET_X86_64) || defined(TCC_TARGET_I386)
|
||||||
|
|
||||||
|
void __clear_cache(void *beginning, void *end)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(TCC_TARGET_ARM)
|
||||||
|
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void __clear_cache(void *beginning, void *end)
|
||||||
|
{
|
||||||
|
/* __ARM_NR_cacheflush is kernel private and should not be used in user space.
|
||||||
|
* However, there is no ARM asm parser in tcc so we use it for now */
|
||||||
|
#if 1
|
||||||
|
syscall(__ARM_NR_cacheflush, beginning, end, 0);
|
||||||
|
#else
|
||||||
|
__asm__ ("push {r7}\n\t"
|
||||||
|
"mov r7, #0xf0002\n\t"
|
||||||
|
"mov r2, #0\n\t"
|
||||||
|
"swi 0\n\t"
|
||||||
|
"pop {r7}\n\t"
|
||||||
|
"ret");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#warning __clear_cache not defined for this architecture, avoid using tcc -run
|
||||||
|
#endif
|
@ -0,0 +1,20 @@
|
|||||||
|
/* memcpy( void *, const void *, size_t )
|
||||||
|
|
||||||
|
This file is part of the Public Domain C Library (PDCLib).
|
||||||
|
Permission is granted to use, modify, and / or redistribute at will.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
void * memcpy( void * s1, const void * s2, size_t n )
|
||||||
|
{
|
||||||
|
char * dest = ( char * ) s1;
|
||||||
|
const char * src = ( const char * ) s2;
|
||||||
|
|
||||||
|
while ( n-- )
|
||||||
|
{
|
||||||
|
*dest++ = *src++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s1;
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
/* memmove( void *, const void *, size_t )
|
||||||
|
|
||||||
|
This file is part of the Public Domain C Library (PDCLib).
|
||||||
|
Permission is granted to use, modify, and / or redistribute at will.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
void * memmove( void * s1, const void * s2, size_t n )
|
||||||
|
{
|
||||||
|
char * dest = ( char * ) s1;
|
||||||
|
const char * src = ( const char * ) s2;
|
||||||
|
|
||||||
|
if ( dest <= src )
|
||||||
|
{
|
||||||
|
while ( n-- )
|
||||||
|
{
|
||||||
|
*dest++ = *src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
src += n;
|
||||||
|
dest += n;
|
||||||
|
|
||||||
|
while ( n-- )
|
||||||
|
{
|
||||||
|
*--dest = *--src;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s1;
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
/* memset( void *, int, size_t )
|
||||||
|
|
||||||
|
This file is part of the Public Domain C Library (PDCLib).
|
||||||
|
Permission is granted to use, modify, and / or redistribute at will.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void * memset( void * s, int c, size_t n )
|
||||||
|
{
|
||||||
|
unsigned char * p = ( unsigned char * ) s;
|
||||||
|
|
||||||
|
while ( n-- )
|
||||||
|
{
|
||||||
|
*p++ = ( unsigned char ) c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
@ -0,0 +1,97 @@
|
|||||||
|
format coff
|
||||||
|
use32 ; Tell compiler to use 32 bit instructions
|
||||||
|
|
||||||
|
;section '.export'
|
||||||
|
|
||||||
|
section '.text'
|
||||||
|
|
||||||
|
include '../../../../proc32.inc'
|
||||||
|
include '../../../../macros.inc'
|
||||||
|
include '../../../../debug-fdo.inc'
|
||||||
|
include '../../../../dll.inc'
|
||||||
|
|
||||||
|
|
||||||
|
public mbedtls_init
|
||||||
|
;;; Returns 0 on success. -1 on failure.
|
||||||
|
|
||||||
|
__DEBUG__ = 1
|
||||||
|
__DEBUG_LEVEL__ = 2
|
||||||
|
|
||||||
|
|
||||||
|
mbedtls_init:
|
||||||
|
pushad
|
||||||
|
stdcall dll.Load, @IMPORT
|
||||||
|
;int3
|
||||||
|
test eax, eax
|
||||||
|
jnz .error
|
||||||
|
|
||||||
|
popad
|
||||||
|
mov eax, 0
|
||||||
|
ret
|
||||||
|
|
||||||
|
.error:
|
||||||
|
popad
|
||||||
|
mov eax, -1
|
||||||
|
ret
|
||||||
|
|
||||||
|
gmtime:
|
||||||
|
jmp [localtime]
|
||||||
|
|
||||||
|
;include_debug_strings
|
||||||
|
|
||||||
|
section '.data'
|
||||||
|
|
||||||
|
align 4
|
||||||
|
@IMPORT:
|
||||||
|
library libc, 'libc.obj', networklib, 'network.obj'
|
||||||
|
import libc, \
|
||||||
|
memcmp, 'memcmp', \
|
||||||
|
printf, 'printf', \
|
||||||
|
free, 'free', \
|
||||||
|
strlen, 'strlen', \
|
||||||
|
_strcmp, 'strcmp', \
|
||||||
|
strstr, 'strstr', \
|
||||||
|
rand, 'rand', \
|
||||||
|
vsnprintf, 'vsnprintf', \
|
||||||
|
socket, 'socket', \
|
||||||
|
connect, 'connect', \
|
||||||
|
close , 'close', \
|
||||||
|
recv, 'recv', \
|
||||||
|
send, 'send', \
|
||||||
|
time, 'time', \
|
||||||
|
strncmp, 'strncmp', \
|
||||||
|
strncpy, 'strncpy', \
|
||||||
|
calloc, 'calloc' , \
|
||||||
|
snprintf, 'snprintf', \
|
||||||
|
localtime, 'localtime'
|
||||||
|
|
||||||
|
import networklib, \
|
||||||
|
inet_addr, 'inet_addr', \
|
||||||
|
inet_ntoa, 'inet_ntoa', \
|
||||||
|
getaddrinfo, 'getaddrinfo', \
|
||||||
|
freeaddrinfo, 'freeaddrinfo'
|
||||||
|
|
||||||
|
public inet_addr
|
||||||
|
public inet_ntoa
|
||||||
|
public getaddrinfo
|
||||||
|
public freeaddrinfo
|
||||||
|
|
||||||
|
public rand
|
||||||
|
public memcmp
|
||||||
|
public printf
|
||||||
|
public calloc
|
||||||
|
public free
|
||||||
|
public strlen
|
||||||
|
public _strcmp as 'strcmp'
|
||||||
|
public strstr
|
||||||
|
public gmtime
|
||||||
|
public vsnprintf
|
||||||
|
public socket
|
||||||
|
public connect
|
||||||
|
public close
|
||||||
|
public recv
|
||||||
|
public send
|
||||||
|
public time
|
||||||
|
public strncmp
|
||||||
|
public strncpy
|
||||||
|
public snprintf
|
@ -44,9 +44,9 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "kosnet/socket.h"
|
#include <sys/socket.h>
|
||||||
#include "kosnet/network.h"
|
#include <clayer/network.h>
|
||||||
/*#include <sys/socket.h>
|
/*
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
@ -68,15 +68,17 @@
|
|||||||
*/
|
*/
|
||||||
static int net_prepare( void )
|
static int net_prepare( void )
|
||||||
{
|
{
|
||||||
load_network_obj();
|
//load_network_obj();
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize a context
|
* Initialize a context
|
||||||
*/
|
*/
|
||||||
void mbedtls_net_init( mbedtls_net_context *ctx )
|
void mbedtls_net_init( mbedtls_net_context *ctx )
|
||||||
{
|
{
|
||||||
|
//printf("snprintf=%p\n", printf);
|
||||||
ctx->fd = -1;
|
ctx->fd = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +121,7 @@ int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
closesocket( ctx->fd );
|
close( ctx->fd );
|
||||||
ret = MBEDTLS_ERR_NET_CONNECT_FAILED;
|
ret = MBEDTLS_ERR_NET_CONNECT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,7 +207,7 @@ void mbedtls_net_free( mbedtls_net_context *ctx )
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
//shutdown( ctx->fd, 2 );
|
//shutdown( ctx->fd, 2 );
|
||||||
closesocket( ctx->fd );
|
close( ctx->fd );
|
||||||
|
|
||||||
ctx->fd = -1;
|
ctx->fd = -1;
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@
|
|||||||
* mbedtls_platform_zeroize() to use a suitable implementation for their
|
* mbedtls_platform_zeroize() to use a suitable implementation for their
|
||||||
* platform and needs.
|
* platform and needs.
|
||||||
*/
|
*/
|
||||||
static void * (* const volatile memset_func)( void *, int, size_t ) = memset;
|
static void * (* const volatile memset_func)( void *, int, size_t ) = &memset;
|
||||||
|
|
||||||
void mbedtls_platform_zeroize( void *buf, size_t len )
|
void mbedtls_platform_zeroize( void *buf, size_t len )
|
||||||
{
|
{
|
||||||
@ -86,7 +86,7 @@ void mbedtls_platform_zeroize( void *buf, size_t len )
|
|||||||
#if !defined(_WIN32) && (defined(unix) || \
|
#if !defined(_WIN32) && (defined(unix) || \
|
||||||
defined(__unix) || defined(__unix__) || (defined(__APPLE__) && \
|
defined(__unix) || defined(__unix__) || (defined(__APPLE__) && \
|
||||||
defined(__MACH__)))
|
defined(__MACH__)))
|
||||||
#include <unistd.h>
|
//#include <unistd.h>
|
||||||
#endif /* !_WIN32 && (unix || __unix || __unix__ ||
|
#endif /* !_WIN32 && (unix || __unix || __unix__ ||
|
||||||
* (__APPLE__ && __MACH__)) */
|
* (__APPLE__ && __MACH__)) */
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
qemu-system-i386 -m 256 -fda ../../test_kos_images/kolibri.img -boot a -vga vmware -net nic,model=rtl8139 -net user -soundhw ac97 -usb -usbdevice tablet -drive file=fat:rw:.
|
|
@ -1,24 +1,12 @@
|
|||||||
NEWLIB_INCLUDES=D:\KOSSDK\newlib\libc\include
|
FASM = fasm
|
||||||
APP_DYNAMIC_LDS=D:\KOSSDK\newlib/app-dynamic.lds
|
TCC_DIR = /home/max/kolibri-svn/programs/develop/ktcc/trunk
|
||||||
LIBDIR=D:\KOSSDK\kos32-msys-5.4.0\win32\lib
|
TCC= $(TCC_DIR)/bin/kos32-tcc
|
||||||
MAIN_TARGET=ssl_client1
|
|
||||||
|
|
||||||
CC=kos32-gcc
|
CFLAGS= -I../../include -I$(TCC_DIR)/libc.obj/include -stack=10000
|
||||||
LD=kos32-ld
|
|
||||||
OBJCOPY=kos32-objcopy
|
|
||||||
|
|
||||||
CCFLAGS=-c -fomit-frame-pointer -I $(NEWLIB_INCLUDES) -I../../include -I../../kosnet/include -Wall -Wextra
|
all:
|
||||||
LDFLAGS=-call_shared -nostdlib --subsystem console -T $(APP_DYNAMIC_LDS) --image-base 0 -L $(LIBDIR) -L ../../kosnet -L ../../library -lmbedtls -lmbedx509 -lmbedcrypto -lkosnet -lgcc -lapp -lc.dll
|
$(FASM) load_mbedtls.asm
|
||||||
|
$(TCC) $(CFLAGS) ssl_client1.c load_mbedtls.o -o ssl_client1 -ltcc -lc.obj
|
||||||
all: ssl_client1
|
|
||||||
|
|
||||||
ssl_client1: ssl_client1.o
|
|
||||||
$(LD) ssl_client1.o -o $(MAIN_TARGET) $(LDFLAGS)
|
|
||||||
$(OBJCOPY) $(MAIN_TARGET) -O binary
|
|
||||||
|
|
||||||
ssl_client1.o: ssl_client1.c
|
|
||||||
$(CC) $(CCFLAGS) ssl_client1.c -o ssl_client1.o
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
del *.o
|
rm -f *.o ssl_client1
|
||||||
del $(MAIN_TARGET)
|
|
||||||
|
@ -0,0 +1,153 @@
|
|||||||
|
format elf
|
||||||
|
use32
|
||||||
|
|
||||||
|
section '.text' executable
|
||||||
|
|
||||||
|
include '../../../../../proc32.inc'
|
||||||
|
include '../../../../../macros.inc'
|
||||||
|
purge section,mov,add,sub
|
||||||
|
|
||||||
|
include '../../../../../dll.inc'
|
||||||
|
|
||||||
|
public mbedtls_load
|
||||||
|
public mbedtls_ctr_drbg_free
|
||||||
|
public mbedtls_ctr_drbg_init
|
||||||
|
public mbedtls_ctr_drbg_random
|
||||||
|
public mbedtls_ctr_drbg_seed
|
||||||
|
public mbedtls_debug_set_threshold
|
||||||
|
public mbedtls_entropy_free
|
||||||
|
public mbedtls_entropy_func
|
||||||
|
public mbedtls_entropy_init
|
||||||
|
public mbedtls_net_connect
|
||||||
|
public mbedtls_net_free
|
||||||
|
public mbedtls_net_init
|
||||||
|
public mbedtls_net_recv
|
||||||
|
public mbedtls_net_send
|
||||||
|
public mbedtls_ssl_close_notify
|
||||||
|
public mbedtls_ssl_conf_authmode
|
||||||
|
public mbedtls_ssl_conf_ca_chain
|
||||||
|
public mbedtls_ssl_conf_dbg
|
||||||
|
public mbedtls_ssl_config_defaults
|
||||||
|
public mbedtls_ssl_config_free
|
||||||
|
public mbedtls_ssl_config_init
|
||||||
|
public mbedtls_ssl_conf_rng
|
||||||
|
public mbedtls_ssl_free
|
||||||
|
public mbedtls_ssl_get_verify_result
|
||||||
|
public mbedtls_ssl_handshake
|
||||||
|
public mbedtls_ssl_init
|
||||||
|
public mbedtls_ssl_read
|
||||||
|
public mbedtls_ssl_set_bio
|
||||||
|
public mbedtls_ssl_set_hostname
|
||||||
|
public mbedtls_ssl_setup
|
||||||
|
public mbedtls_ssl_write
|
||||||
|
public mbedtls_strerror
|
||||||
|
public _mbedtls_test_cas_pem
|
||||||
|
public _mbedtls_test_cas_pem_len
|
||||||
|
public mbedtls_x509_crt_free
|
||||||
|
public mbedtls_x509_crt_init
|
||||||
|
public mbedtls_x509_crt_parse
|
||||||
|
public mbedtls_x509_crt_verify_info
|
||||||
|
public mbedtls_init
|
||||||
|
public __snprintf_test
|
||||||
|
|
||||||
|
__snprintf_test:
|
||||||
|
ret
|
||||||
|
|
||||||
|
;;; Returns 0 on success. -1 on failure.
|
||||||
|
|
||||||
|
proc mbedtls_load
|
||||||
|
stdcall dll.Load, @IMPORT
|
||||||
|
test eax, eax
|
||||||
|
jnz error
|
||||||
|
|
||||||
|
mov eax, 0
|
||||||
|
ret
|
||||||
|
|
||||||
|
error:
|
||||||
|
mov eax, -1
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
mbedtls_ctr_drbg_free: jmp [_mbedtls_ctr_drbg_free ]
|
||||||
|
mbedtls_ctr_drbg_init: jmp [_mbedtls_ctr_drbg_init ]
|
||||||
|
mbedtls_ctr_drbg_random: jmp [_mbedtls_ctr_drbg_random ]
|
||||||
|
mbedtls_ctr_drbg_seed: jmp [_mbedtls_ctr_drbg_seed ]
|
||||||
|
mbedtls_debug_set_threshold: jmp [_mbedtls_debug_set_threshold ]
|
||||||
|
mbedtls_entropy_free: jmp [_mbedtls_entropy_free ]
|
||||||
|
mbedtls_entropy_func: jmp [_mbedtls_entropy_func ]
|
||||||
|
mbedtls_entropy_init: jmp [_mbedtls_entropy_init ]
|
||||||
|
mbedtls_net_connect: jmp [_mbedtls_net_connect ]
|
||||||
|
mbedtls_net_free: jmp [_mbedtls_net_free ]
|
||||||
|
mbedtls_net_init: jmp [_mbedtls_net_init ]
|
||||||
|
mbedtls_net_recv: jmp [_mbedtls_net_recv ]
|
||||||
|
mbedtls_net_send: jmp [_mbedtls_net_send ]
|
||||||
|
mbedtls_ssl_close_notify: jmp [_mbedtls_ssl_close_notify ]
|
||||||
|
mbedtls_ssl_conf_authmode: jmp [_mbedtls_ssl_conf_authmode ]
|
||||||
|
mbedtls_ssl_conf_ca_chain: jmp [_mbedtls_ssl_conf_ca_chain ]
|
||||||
|
mbedtls_ssl_conf_dbg: jmp [_mbedtls_ssl_conf_dbg ]
|
||||||
|
mbedtls_ssl_config_defaults: jmp [_mbedtls_ssl_config_defaults ]
|
||||||
|
mbedtls_ssl_config_free: jmp [_mbedtls_ssl_config_free ]
|
||||||
|
mbedtls_ssl_config_init: jmp [_mbedtls_ssl_config_init ]
|
||||||
|
mbedtls_ssl_conf_rng: jmp [_mbedtls_ssl_conf_rng ]
|
||||||
|
mbedtls_ssl_free: jmp [_mbedtls_ssl_free ]
|
||||||
|
mbedtls_ssl_get_verify_result: jmp [_mbedtls_ssl_get_verify_result ]
|
||||||
|
mbedtls_ssl_handshake: jmp [_mbedtls_ssl_handshake ]
|
||||||
|
mbedtls_ssl_init: jmp [_mbedtls_ssl_init ]
|
||||||
|
mbedtls_ssl_read: jmp [_mbedtls_ssl_read ]
|
||||||
|
mbedtls_ssl_set_bio: jmp [_mbedtls_ssl_set_bio ]
|
||||||
|
mbedtls_ssl_set_hostname: jmp [_mbedtls_ssl_set_hostname ]
|
||||||
|
mbedtls_ssl_setup: jmp [_mbedtls_ssl_setup ]
|
||||||
|
mbedtls_ssl_write: jmp [_mbedtls_ssl_write ]
|
||||||
|
mbedtls_strerror: jmp [_mbedtls_strerror]
|
||||||
|
;mbedtls_test_cas_pem: jmp [_mbedtls_test_cas_pem ]
|
||||||
|
;mbedtls_test_cas_pem_len: jmp [_mbedtls_test_cas_pem_len ]
|
||||||
|
mbedtls_x509_crt_free: jmp [_mbedtls_x509_crt_free ]
|
||||||
|
mbedtls_x509_crt_init: jmp [_mbedtls_x509_crt_init ]
|
||||||
|
mbedtls_x509_crt_parse: jmp [_mbedtls_x509_crt_parse]
|
||||||
|
mbedtls_x509_crt_verify_info: jmp [_mbedtls_x509_crt_verify_info ]
|
||||||
|
mbedtls_init: jmp [_mbedtls_init]
|
||||||
|
;__snprintf_test: jmp[___snprintf_test]
|
||||||
|
|
||||||
|
section '.data' writable
|
||||||
|
@IMPORT:
|
||||||
|
library mbedtls, 'mbedtls.obj'
|
||||||
|
import mbedtls, \
|
||||||
|
_mbedtls_init , 'mbedtls_init' ,\
|
||||||
|
_mbedtls_strerror , 'mbedtls_strerror' ,\
|
||||||
|
_mbedtls_test_cas_pem , 'mbedtls_test_cas_pem' ,\
|
||||||
|
_mbedtls_test_cas_pem_len , 'mbedtls_test_cas_pem_len' ,\
|
||||||
|
_mbedtls_x509_crt_free , 'mbedtls_x509_crt_free' ,\
|
||||||
|
_mbedtls_x509_crt_init , 'mbedtls_x509_crt_init' ,\
|
||||||
|
_mbedtls_x509_crt_parse , 'mbedtls_x509_crt_parse' ,\
|
||||||
|
_mbedtls_x509_crt_verify_info , 'mbedtls_x509_crt_verify_info' ,\
|
||||||
|
_mbedtls_ctr_drbg_free , 'mbedtls_ctr_drbg_free' ,\
|
||||||
|
_mbedtls_ctr_drbg_init , 'mbedtls_ctr_drbg_init' ,\
|
||||||
|
_mbedtls_ctr_drbg_random , 'mbedtls_ctr_drbg_random' ,\
|
||||||
|
_mbedtls_ctr_drbg_seed , 'mbedtls_ctr_drbg_seed' ,\
|
||||||
|
_mbedtls_debug_set_threshold , 'mbedtls_debug_set_threshold' ,\
|
||||||
|
_mbedtls_entropy_free , 'mbedtls_entropy_free' ,\
|
||||||
|
_mbedtls_entropy_func , 'mbedtls_entropy_func' ,\
|
||||||
|
_mbedtls_entropy_init , 'mbedtls_entropy_init' ,\
|
||||||
|
_mbedtls_net_connect , 'mbedtls_net_connect' ,\
|
||||||
|
_mbedtls_net_free , 'mbedtls_net_free' ,\
|
||||||
|
_mbedtls_net_init , 'mbedtls_net_init' ,\
|
||||||
|
_mbedtls_net_recv , 'mbedtls_net_recv' ,\
|
||||||
|
_mbedtls_net_send , 'mbedtls_net_send' ,\
|
||||||
|
_mbedtls_ssl_close_notify , 'mbedtls_ssl_close_notify' ,\
|
||||||
|
_mbedtls_ssl_conf_authmode , 'mbedtls_ssl_conf_authmode' ,\
|
||||||
|
_mbedtls_ssl_conf_ca_chain , 'mbedtls_ssl_conf_ca_chain' ,\
|
||||||
|
_mbedtls_ssl_conf_dbg , 'mbedtls_ssl_conf_dbg' ,\
|
||||||
|
_mbedtls_ssl_config_defaults , 'mbedtls_ssl_config_defaults' ,\
|
||||||
|
_mbedtls_ssl_config_free , 'mbedtls_ssl_config_free' ,\
|
||||||
|
_mbedtls_ssl_config_init , 'mbedtls_ssl_config_init' ,\
|
||||||
|
_mbedtls_ssl_conf_rng , 'mbedtls_ssl_conf_rng' ,\
|
||||||
|
_mbedtls_ssl_free , 'mbedtls_ssl_free' ,\
|
||||||
|
_mbedtls_ssl_get_verify_result , 'mbedtls_ssl_get_verify_result' ,\
|
||||||
|
_mbedtls_ssl_handshake , 'mbedtls_ssl_handshake' ,\
|
||||||
|
_mbedtls_ssl_init , 'mbedtls_ssl_init' ,\
|
||||||
|
_mbedtls_ssl_read , 'mbedtls_ssl_read' ,\
|
||||||
|
_mbedtls_ssl_set_bio , 'mbedtls_ssl_set_bio' ,\
|
||||||
|
_mbedtls_ssl_set_hostname , 'mbedtls_ssl_set_hostname' ,\
|
||||||
|
_mbedtls_ssl_setup , 'mbedtls_ssl_setup' ,\
|
||||||
|
_mbedtls_ssl_write , 'mbedtls_ssl_write'
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
qemu-system-i386 -m 256 -fda ../../test_kos_images/kolibri.img -boot a -vga vmware -net nic,model=rtl8139 -net user -soundhw ac97 -usb -usbdevice tablet -drive file=fat:rw:.
|
|
Binary file not shown.
@ -20,16 +20,17 @@
|
|||||||
*
|
*
|
||||||
* This file is part of mbed TLS (https://tls.mbed.org)
|
* This file is part of mbed TLS (https://tls.mbed.org)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if !defined(MBEDTLS_CONFIG_FILE)
|
#if !defined(MBEDTLS_CONFIG_FILE)
|
||||||
#include "mbedtls/config.h"
|
#include "mbedtls/config.h"
|
||||||
#else
|
#else
|
||||||
#include MBEDTLS_CONFIG_FILE
|
#include MBEDTLS_CONFIG_FILE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_PLATFORM_C)
|
#include <sys/ksys.h>
|
||||||
#include "mbedtls/platform.h"
|
|
||||||
#else
|
//#if defined(MBEDTLS_PLATFORM_C)
|
||||||
|
//#include "mbedtls/platform.h"
|
||||||
|
//#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#define mbedtls_time time
|
#define mbedtls_time time
|
||||||
@ -37,16 +38,16 @@
|
|||||||
#define mbedtls_fprintf fprintf
|
#define mbedtls_fprintf fprintf
|
||||||
#define mbedtls_printf printf
|
#define mbedtls_printf printf
|
||||||
#define mbedtls_exit exit
|
#define mbedtls_exit exit
|
||||||
#define MBEDTLS_EXIT_SUCCESS EXIT_SUCCESS
|
#define MBEDTLS_EXIT_SUCCESS 0
|
||||||
#define MBEDTLS_EXIT_FAILURE EXIT_FAILURE
|
#define MBEDTLS_EXIT_FAILURE -1
|
||||||
#endif /* MBEDTLS_PLATFORM_C */
|
//#endif /* MBEDTLS_PLATFORM_C */
|
||||||
|
|
||||||
#if !defined(MBEDTLS_BIGNUM_C) || !defined(MBEDTLS_ENTROPY_C) || \
|
//#if !defined(MBEDTLS_BIGNUM_C) || !defined(MBEDTLS_ENTROPY_C) || \
|
||||||
!defined(MBEDTLS_SSL_TLS_C) || !defined(MBEDTLS_SSL_CLI_C) || \
|
!defined(MBEDTLS_SSL_TLS_C) || !defined(MBEDTLS_SSL_CLI_C) || \
|
||||||
!defined(MBEDTLS_NET_C) || !defined(MBEDTLS_RSA_C) || \
|
!defined(MBEDTLS_NET_C) || !defined(MBEDTLS_RSA_C) || \
|
||||||
!defined(MBEDTLS_CERTS_C) || !defined(MBEDTLS_PEM_PARSE_C) || \
|
!defined(MBEDTLS_CERTS_C) || !defined(MBEDTLS_PEM_PARSE_C) || \
|
||||||
!defined(MBEDTLS_CTR_DRBG_C) || !defined(MBEDTLS_X509_CRT_PARSE_C)
|
!defined(MBEDTLS_CTR_DRBG_C) || !defined(MBEDTLS_X509_CRT_PARSE_C)
|
||||||
int main( void )
|
/*int main( void )
|
||||||
{
|
{
|
||||||
mbedtls_printf("MBEDTLS_BIGNUM_C and/or MBEDTLS_ENTROPY_C and/or "
|
mbedtls_printf("MBEDTLS_BIGNUM_C and/or MBEDTLS_ENTROPY_C and/or "
|
||||||
"MBEDTLS_SSL_TLS_C and/or MBEDTLS_SSL_CLI_C and/or "
|
"MBEDTLS_SSL_TLS_C and/or MBEDTLS_SSL_CLI_C and/or "
|
||||||
@ -55,7 +56,7 @@ int main( void )
|
|||||||
"not defined.\n");
|
"not defined.\n");
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
#else
|
//#else*/
|
||||||
|
|
||||||
#include "mbedtls/net_sockets.h"
|
#include "mbedtls/net_sockets.h"
|
||||||
#include "mbedtls/debug.h"
|
#include "mbedtls/debug.h"
|
||||||
@ -70,12 +71,21 @@ int main( void )
|
|||||||
//#define SERVER_PORT "443"
|
//#define SERVER_PORT "443"
|
||||||
//#define SERVER_NAME "wikipedia.org"
|
//#define SERVER_NAME "wikipedia.org"
|
||||||
//#define GET_REQUEST "GET / HTTP/1.0\r\n\r\n"
|
//#define GET_REQUEST "GET / HTTP/1.0\r\n\r\n"
|
||||||
char SERVER_PORT[16];
|
static char SERVER_PORT[16];
|
||||||
char SERVER_NAME[128];
|
static char SERVER_NAME[128];
|
||||||
char GET_REQUEST[512];
|
static char GET_REQUEST[512];
|
||||||
|
|
||||||
#define DEBUG_LEVEL 1
|
#define DEBUG_LEVEL 1
|
||||||
|
|
||||||
|
extern int *_mbedtls_test_cas_pem_len;
|
||||||
|
extern char* _mbedtls_test_cas_pem;
|
||||||
|
|
||||||
|
#define mbedtls_test_cas_pem_len *_mbedtls_test_cas_pem_len
|
||||||
|
#define mbedtls_test_cas_pem _mbedtls_test_cas_pem
|
||||||
|
|
||||||
|
//gmtime(time_t t){puts("gmtime stub");};
|
||||||
|
|
||||||
|
//int load_network_obj(){return networklib_init();}
|
||||||
|
|
||||||
static void my_debug( void *ctx, int level,
|
static void my_debug( void *ctx, int level,
|
||||||
const char *file, int line,
|
const char *file, int line,
|
||||||
@ -90,11 +100,21 @@ static void my_debug( void *ctx, int level,
|
|||||||
|
|
||||||
int main( void )
|
int main( void )
|
||||||
{
|
{
|
||||||
|
if(mbedtls_load()){
|
||||||
|
printf("mbedtls.obj not load!\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if(mbedtls_init()){
|
||||||
|
puts("mbedtls.obj not init!");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
puts("Enter SERVER_NAME : ");
|
puts("Enter SERVER_NAME : ");
|
||||||
gets(SERVER_NAME);
|
gets(SERVER_NAME);
|
||||||
puts("Enter SERVER_PORT : ");
|
puts("Enter SERVER_PORT : ");
|
||||||
gets(SERVER_PORT);
|
gets(SERVER_PORT);
|
||||||
sprintf(GET_REQUEST, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", SERVER_NAME);
|
sprintf(GET_REQUEST, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", SERVER_NAME);
|
||||||
|
//puts(GET_REQUEST);
|
||||||
|
|
||||||
int ret = 1, len;
|
int ret = 1, len;
|
||||||
int exit_code = MBEDTLS_EXIT_FAILURE;
|
int exit_code = MBEDTLS_EXIT_FAILURE;
|
||||||
@ -102,7 +122,6 @@ int main( void )
|
|||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
unsigned char buf[1024];
|
unsigned char buf[1024];
|
||||||
const char *pers = "ssl_client1";
|
const char *pers = "ssl_client1";
|
||||||
|
|
||||||
mbedtls_entropy_context entropy;
|
mbedtls_entropy_context entropy;
|
||||||
mbedtls_ctr_drbg_context ctr_drbg;
|
mbedtls_ctr_drbg_context ctr_drbg;
|
||||||
mbedtls_ssl_context ssl;
|
mbedtls_ssl_context ssl;
|
||||||
@ -110,7 +129,7 @@ int main( void )
|
|||||||
mbedtls_x509_crt cacert;
|
mbedtls_x509_crt cacert;
|
||||||
|
|
||||||
#if defined(MBEDTLS_DEBUG_C)
|
#if defined(MBEDTLS_DEBUG_C)
|
||||||
mbedtls_debug_set_threshold( DEBUG_LEVEL );
|
// mbedtls_debug_set_threshold( DEBUG_LEVEL );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -121,10 +140,8 @@ int main( void )
|
|||||||
mbedtls_ssl_config_init( &conf );
|
mbedtls_ssl_config_init( &conf );
|
||||||
mbedtls_x509_crt_init( &cacert );
|
mbedtls_x509_crt_init( &cacert );
|
||||||
mbedtls_ctr_drbg_init( &ctr_drbg );
|
mbedtls_ctr_drbg_init( &ctr_drbg );
|
||||||
|
|
||||||
mbedtls_printf( "\n . Seeding the random number generator..." );
|
mbedtls_printf( "\n . Seeding the random number generator..." );
|
||||||
//fflush( stdout );
|
//fflush( stdout );
|
||||||
|
|
||||||
mbedtls_entropy_init( &entropy );
|
mbedtls_entropy_init( &entropy );
|
||||||
if( ( ret = mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, &entropy,
|
if( ( ret = mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, &entropy,
|
||||||
(const unsigned char *) pers,
|
(const unsigned char *) pers,
|
||||||
@ -133,15 +150,15 @@ int main( void )
|
|||||||
mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned %d\n", ret );
|
mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned %d\n", ret );
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
mbedtls_printf( " ok\n" );
|
mbedtls_printf( " ok\n" );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 0. Initialize certificates
|
* 0. Initialize certificates
|
||||||
*/
|
*/;
|
||||||
mbedtls_printf( " . Loading the CA root certificate ..." );
|
mbedtls_printf( " . Loading the CA root certificate ..." );
|
||||||
//fflush( stdout );
|
//fflush( stdout );
|
||||||
|
|
||||||
ret = mbedtls_x509_crt_parse( &cacert, (const unsigned char *) mbedtls_test_cas_pem,
|
ret = mbedtls_x509_crt_parse( &cacert, (const unsigned char *) mbedtls_test_cas_pem,
|
||||||
mbedtls_test_cas_pem_len );
|
mbedtls_test_cas_pem_len );
|
||||||
if( ret < 0 )
|
if( ret < 0 )
|
||||||
@ -151,7 +168,7 @@ int main( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
mbedtls_printf( " ok (%d skipped)\n", ret );
|
mbedtls_printf( " ok (%d skipped)\n", ret );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 1. Start the connection
|
* 1. Start the connection
|
||||||
*/
|
*/
|
||||||
@ -204,7 +221,6 @@ int main( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
mbedtls_ssl_set_bio( &ssl, &server_fd, mbedtls_net_send, mbedtls_net_recv, NULL );
|
mbedtls_ssl_set_bio( &ssl, &server_fd, mbedtls_net_send, mbedtls_net_recv, NULL );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 4. Handshake
|
* 4. Handshake
|
||||||
*/
|
*/
|
||||||
@ -301,15 +317,14 @@ int main( void )
|
|||||||
exit_code = MBEDTLS_EXIT_SUCCESS;
|
exit_code = MBEDTLS_EXIT_SUCCESS;
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
//#ifdef MBEDTLS_ERROR_C
|
||||||
#ifdef MBEDTLS_ERROR_C
|
|
||||||
if( exit_code != MBEDTLS_EXIT_SUCCESS )
|
if( exit_code != MBEDTLS_EXIT_SUCCESS )
|
||||||
{
|
{
|
||||||
char error_buf[100];
|
static char error_buf[100];
|
||||||
mbedtls_strerror( ret, error_buf, 100 );
|
mbedtls_strerror( ret, error_buf, 100 );
|
||||||
mbedtls_printf("Last error was: %d - %s\n\n", ret, error_buf );
|
mbedtls_printf("Last error was: %d - %s\n\n", ret, error_buf );
|
||||||
}
|
}
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
mbedtls_net_free( &server_fd );
|
mbedtls_net_free( &server_fd );
|
||||||
|
|
||||||
@ -322,7 +337,7 @@ exit:
|
|||||||
|
|
||||||
return( exit_code );
|
return( exit_code );
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_BIGNUM_C && MBEDTLS_ENTROPY_C && MBEDTLS_SSL_TLS_C &&
|
/*#endif MBEDTLS_BIGNUM_C && MBEDTLS_ENTROPY_C && MBEDTLS_SSL_TLS_C &&
|
||||||
MBEDTLS_SSL_CLI_C && MBEDTLS_NET_C && MBEDTLS_RSA_C &&
|
MBEDTLS_SSL_CLI_C && MBEDTLS_NET_C && MBEDTLS_RSA_C &&
|
||||||
MBEDTLS_CERTS_C && MBEDTLS_PEM_PARSE_C && MBEDTLS_CTR_DRBG_C &&
|
MBEDTLS_CERTS_C && MBEDTLS_PEM_PARSE_C && MBEDTLS_CTR_DRBG_C &&
|
||||||
MBEDTLS_X509_CRT_PARSE_C */
|
MBEDTLS_X509_CRT_PARSE_C */
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
Test KOS image features:
|
|
||||||
- rev 8498
|
|
||||||
- kernel unpacked (to run faster in qemu for windows)
|
|
||||||
- kolibrios/ directory with lib/libc.dll (newlib) inside automatically mounts on start
|
|
||||||
- DOCKY removed from autorun.dat (cuz its very annoying :D )
|
|
||||||
- removed 3d, demos, games, fnav, kfm, animage, iconedit, etc. to get free space for things above
|
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user