/* * Copyright 2006, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef NET_R5_COMPATIBILITY_H #define NET_R5_COMPATIBILITY_H #include #define R5_SOCK_DGRAM 1 #define R5_SOCK_STREAM 2 #define R5_AF_INET 1 #define R5_IPPROTO_UDP 1 #define R5_IPPROTO_TCP 2 #define R5_IPPROTO_ICMP 3 // setsockopt() defines #define R5_SOL_SOCKET 1 #define R5_SO_DEBUG 1 #define R5_SO_REUSEADDR 2 #define R5_SO_NONBLOCK 3 #define R5_SO_REUSEPORT 4 #define R5_SO_FIONREAD 5 #define R5_MSG_OOB 0x01 struct r5_sockaddr_in { uint16 sin_family; uint16 sin_port; uint32 sin_addr; char sin_zero[4]; }; extern bool __gR5Compatibility; extern addr_t __gNetworkStart; extern addr_t __gNetworkEnd; static inline bool check_r5_compatibility() { if (!__gR5Compatibility) return false; #ifndef __i386__ return false; #else struct stack_frame { struct stack_frame* previous; addr_t return_address; }; stack_frame* frame = (stack_frame*)get_stack_frame(); if (frame->return_address >= __gNetworkStart && frame->return_address < __gNetworkEnd) { return false; } return true; #endif } #endif // NET_R5_COMPATIBILITY_H