diff --git a/contrib/C_Layer/ASM/loadnetwork.asm b/contrib/C_Layer/ASM/loadnetwork.asm new file mode 100644 index 0000000000..e260b3677a --- /dev/null +++ b/contrib/C_Layer/ASM/loadnetwork.asm @@ -0,0 +1,48 @@ +format coff +use32 ; Tell compiler to use 32 bit instructions + +section '.flat' code + +include '../../../programs/proc32.inc' +include '../../../programs/macros.inc' +purge section,mov,add,sub + +include '../../../programs/dll.inc' + +purge section,mov,add,sub + +public lib_init as '_networklib_init' + +proc lib_init +local retval dd ? + mov [retval], eax + pusha + mcall 68, 11 + test eax, eax + jnz @f + mov [retval], -1 + jmp exit_init_networklib +@@: + stdcall dll.Load, @IMPORT + test eax, eax + jz exit_init_networklib + mov [retval], -1 +exit_init_networklib: + popa + mov eax, [retval] + ret +endp + +@IMPORT: +library networklib, 'network.obj' + +import networklib, \ + inet_addr, 'inet_addr', \ + inet_ntoa, 'inet_ntoa', \ + getaddrinfo, 'getaddrinfo', \ + freeaddrinfo, 'freeaddrinfo' + +public inet_addr as '_inet_addr' +public inet_ntoa as '_inet_ntoa' +public getaddrinfo as '_getaddrinfo' +public freeaddrinfo as '_freeaddrinfo' diff --git a/contrib/C_Layer/INCLUDE/kolibri_network.h b/contrib/C_Layer/INCLUDE/kolibri_network.h new file mode 100644 index 0000000000..46a33da3d9 --- /dev/null +++ b/contrib/C_Layer/INCLUDE/kolibri_network.h @@ -0,0 +1,54 @@ +#ifndef __NETWORK_H +#define __NETWORK_H + +#include + +#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 networklib_init (); +extern int (*inet_addr)(const char* hostname) __attribute__ ((stdcall)); +extern char* (*inet_ntoa)(int ip_addr) __attribute__ ((stdcall)); +extern int (*getaddrinfo)(char* hostname, int servname, struct addrinfo* hints, struct addrinfo** res) __attribute__ ((stdcall)); +extern void (*freeaddrinfo)(struct addrinfo* ai) __attribute__ ((stdcall)); + +#endif