Subversion Repositories Kolibri OS

Rev

Rev 4249 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #include <menuet/net.h>
  2.  
  3.  
  4. unsigned long inet_addr(char *cp)
  5. {
  6.   // Adapted from here http://stackoverflow.com/a/1684635
  7.   unsigned long __ret;
  8.   unsigned int c1,c2,c3,c4;
  9.   sscanf(cp, "%d.%d.%d.%d", &c1,&c2,&c3,&c4);
  10.   __ret = (unsigned long)c4+c3*256+c2*256*256+c1*256*256*256;
  11.   return htonl(__ret);
  12. }
  13.  
  14. int socket(int domain, int type, int protocol)
  15. {
  16.   int __ret;
  17.   __asm__("int $0x40":"=a"(__ret):"a"(_SOCKETF),"b"(_OPENSF),"c"(domain),"d"(type),"S"(protocol));
  18.   return __ret;
  19. }
  20.  
  21. int closesocket(int s)
  22. {
  23.   int __ret;
  24.   __asm__("int $0x40":"=a"(__ret):"a"(_SOCKETF),"b"(_CLOSESF),"c"(s));
  25.   return __ret;
  26. }
  27.  
  28.  
  29. int connect(int sockfd, const struct sockaddr *serv_addr, int addrlen)
  30. {
  31.   int __ret;
  32.   __asm__("int $0x40":"=a"(__ret):"a"(_SOCKETF),"b"(_CONNECTSF),"c"(sockfd),"d"(serv_addr),"S"(addrlen));
  33.   return __ret;
  34. }
  35.  
  36. int send(int s, const void *buf, int len, int flags)
  37. {
  38.   int __ret;
  39.   __asm__("int $0x40":"=a"(__ret):"a"(_SOCKETF),"b"(_SENDSF),"c"(s),"d"(buf),"S"(len),"D"(flags));
  40.   return __ret;
  41. }
  42.  
  43. int recv(int sockfd, void *buf, int len, int flags)
  44. {
  45.   int __ret;
  46.   __asm__("int $0x40":"=a"(__ret):"a"(_SOCKETF),"b"(_RECEIVESF),"c"(sockfd),"d"(buf),"S"(len),"D"(flags));
  47.   return __ret;
  48. }
  49.  
  50. // --------------------------------------------------------------
  51.  
  52. __u32 __menuet__open_UDP_socket(__u32 local_port,__u32 remote_port,__u32 remote_ip)
  53. {
  54.  __u32 __ret;
  55.  __asm__("int $0x40":"=a"(__ret):"a"(__NET_socket),"b"(__NET_sock_open_UDP),
  56.   "c"(local_port),"d"(remote_port),"S"(remote_ip));
  57.  return __ret;
  58. }
  59.  
  60. __u32 __menuet__open_TCP_socket(__u32 local_port,__u32 remote_port,__u32 remote_ip,int mode)
  61. {
  62.  __u32 __ret;
  63.  __asm__("int $0x40":"=a"(__ret):"a"(__NET_socket),"b"(__NET_sock_open_TCP),
  64.   "c"(local_port),"d"(remote_port),"S"(remote_ip),"D"(mode));
  65.  return __ret;
  66. }
  67.  
  68. int __menuet__close_UDP_socket(int socket)
  69. {
  70.  int __ret;
  71.  __asm__("int $0x40":"=a"(__ret):"a"(__NET_socket),"b"(__NET_sock_close_UDP),
  72.   "c"(socket));
  73.  return __ret;
  74. }
  75.  
  76. int __menuet__close_TCP_socket(int socket)
  77. {
  78.  int __ret;
  79.  __asm__("int $0x40":"=a"(__ret):"a"(__NET_socket),"b"(__NET_sock_close_TCP),
  80.   "c"(socket));
  81.  return __ret;
  82. }
  83.  
  84. int __menuet__poll_socket(int sock)
  85. {
  86.  int __ret;
  87.  __asm__("int $0x40":"=a"(__ret):"a"(__NET_socket),"b"(__NET_sock_poll),
  88.   "c"(sock));
  89.  return __ret;
  90. }
  91.  
  92. int __menuet__read_socket(int sock,__u8 * return_data)
  93. {
  94.  int data_remaining;
  95.  __u8 data_byte;
  96.  __asm__("int $0x40":"=a"(data_remaining),"=b"(data_byte):"a"(__NET_socket),
  97.   "b"(__NET_sock_poll),"c"(sock));
  98.  if(return_data) *return_data=data_byte;
  99.  return data_remaining;
  100. }
  101.  
  102. int __menuet__get_TCP_socket_status(int sock)
  103. {
  104.  int __ret;
  105.  __asm__("int $0x40":"=a"(__ret):"a"(__NET_socket),"b"(__NET_sock_get_status),
  106.   "c"(sock));
  107.  return __ret;
  108. }
  109.  
  110. int __menuet__write_UDP_socket(int sock,int count,void * buffer)
  111. {
  112.  int __ret;
  113.  __asm__("int $0x40":"=a"(__ret):"a"(__NET_socket),"b"(__NET_sock_write_UDP),
  114.   "c"(sock),"d"(count),"S"((__u32)buffer));
  115.  return __ret;
  116. }
  117.  
  118. int __menuet__write_TCP_socket(int sock,int count,void * buffer)
  119. {
  120.  int __ret;
  121.  __asm__("int $0x40":"=a"(__ret):"a"(__NET_socket),"b"(__NET_sock_write_TCP),
  122.   "c"(sock),"d"(count),"S"((__u32)buffer));
  123.  return __ret;
  124. }
  125.  
  126. int __menuet__check_net_port_availability(int port)
  127. {
  128.  int __ret;
  129.  __asm__("int $0x40":"=a"(__ret):"a"(__NET_socket),"b"(__NET_sock_check_port),
  130.   "c"(port));
  131.  return __ret;
  132. }
  133.