1/* 2 * Copyright 2006, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef NET_R5_COMPATIBILITY_H 6#define NET_R5_COMPATIBILITY_H 7 8 9#include <SupportDefs.h> 10 11 12#define R5_SOCK_DGRAM 1 13#define R5_SOCK_STREAM 2 14 15#define R5_AF_INET 1 16 17#define R5_IPPROTO_UDP 1 18#define R5_IPPROTO_TCP 2 19#define R5_IPPROTO_ICMP 3 20 21// setsockopt() defines 22 23#define R5_SOL_SOCKET 1 24 25#define R5_SO_DEBUG 1 26#define R5_SO_REUSEADDR 2 27#define R5_SO_NONBLOCK 3 28#define R5_SO_REUSEPORT 4 29#define R5_SO_FIONREAD 5 30 31#define R5_MSG_OOB 0x01 32 33 34struct r5_sockaddr_in { 35 uint16 sin_family; 36 uint16 sin_port; 37 uint32 sin_addr; 38 char sin_zero[4]; 39}; 40 41extern bool __gR5Compatibility; 42extern addr_t __gNetworkStart; 43extern addr_t __gNetworkEnd; 44extern addr_t __gNetAPIStart; 45extern addr_t __gNetAPIEnd; 46 47 48static inline bool 49check_r5_compatibility() 50{ 51 if (!__gR5Compatibility) 52 return false; 53 54#ifndef __INTEL__ 55 return false; 56#else 57 58 struct stack_frame { 59 struct stack_frame* previous; 60 addr_t return_address; 61 }; 62 63 stack_frame* frame = (stack_frame*)get_stack_frame(); 64 if (frame->return_address >= __gNetworkStart 65 && frame->return_address < __gNetworkEnd) { 66 return false; 67 } 68 69 return true; 70#endif 71} 72 73 74#endif // NET_R5_COMPATIBILITY_H 75