0 | ||| FFI binding to the low-Level C Sockets bindings for Idris.
  1 | |||
  2 | ||| Modified (C) The Idris Community, 2020
  3 | module Network.FFI
  4 |
  5 | import Network.Socket.Data
  6 | import Data.Buffer
  7 |
  8 | -- From idris_net.h
  9 |
 10 | %foreign "C:idrnet_socket, libidris2_support, idris_net.h"
 11 | export
 12 | prim__idrnet_socket : (domain, type, protocol : Int) -> PrimIO Int
 13 |
 14 | %foreign "C:idrnet_close, libidris2_support, idris_net.h"
 15 | export
 16 | prim__idrnet_close : (sockdes : SocketDescriptor) -> PrimIO Int
 17 |
 18 | %foreign "C:idrnet_bind, libidris2_support, idris_net.h"
 19 | export
 20 | prim__idrnet_bind : (sockfd : SocketDescriptor) -> (family, socket_type : Int) ->
 21 |                     (host : String) -> (port : Port) -> PrimIO Int
 22 |
 23 | %foreign "C:idrnet_connect, libidris2_support, idris_net.h"
 24 | export
 25 | prim__idrnet_connect : (sockfd : SocketDescriptor) -> (family, socket_type : Int) ->
 26 |                        (host : String) -> (port : Port) -> PrimIO Int
 27 |
 28 | %foreign "C:idrnet_listen, libidris2_support, idris_net.h"
 29 | export
 30 | prim__idrnet_listen : (sockfd : SocketDescriptor) -> (backlog : Int) -> PrimIO Int
 31 |
 32 | %foreign "C:idrnet_fdopen, libidris2_support, idris_net.h"
 33 | export
 34 | prim__idrnet_fdopen : Int -> String -> PrimIO AnyPtr
 35 |
 36 | %foreign "C:idrnet_sockaddr_family, libidris2_support, idris_net.h"
 37 | export
 38 | prim__idrnet_sockaddr_family : (sockaddr : AnyPtr) -> PrimIO Int
 39 |
 40 | %foreign "C:idrnet_sockaddr_ipv4, libidris2_support, idris_net.h"
 41 | export
 42 | prim__idrnet_sockaddr_ipv4 : (sockaddr : AnyPtr) -> PrimIO String
 43 |
 44 | %foreign "C:idrnet_sockaddr_unix, libidris2_support, idris_net.h"
 45 | export
 46 | prim__idrnet_sockaddr_unix : (sockaddr : AnyPtr) -> PrimIO String
 47 |
 48 | %foreign "C:idrnet_sockaddr_ipv4_port, libidris2_support, idris_net.h"
 49 | export
 50 | prim__idrnet_sockaddr_ipv4_port : (sockaddr : AnyPtr) -> PrimIO Int
 51 |
 52 | %foreign "C:idrnet_sockaddr_port, libidris2_support, idris_net.h"
 53 | export
 54 | prim__idrnet_sockaddr_port : (sockfd : SocketDescriptor) -> PrimIO Int
 55 |
 56 |
 57 | %foreign "C:idrnet_create_sockaddr, libidris2_support, idris_net.h"
 58 | export
 59 | prim__idrnet_create_sockaddr : PrimIO AnyPtr
 60 |
 61 | %foreign "C__collect_safe:idrnet_accept, libidris2_support, idris_net.h"
 62 |          "C:idrnet_accept, libidris2_support, idris_net.h"
 63 | export
 64 | prim__idrnet_accept : (sockfd : SocketDescriptor) -> (sockaddr : AnyPtr) -> PrimIO Int
 65 |
 66 | %foreign "C:idrnet_send, libidris2_support, idris_net.h"
 67 | export
 68 | prim__idrnet_send : (sockfd : SocketDescriptor) -> (dataString : String) -> PrimIO Int
 69 |
 70 | %foreign "C:idrnet_send_bytes, libidris2_support, idris_net.h"
 71 | export
 72 | prim__idrnet_send_bytes : (sockfd : SocketDescriptor) -> (content : Buffer) -> (nbytes : Int) -> (flags : Bits32) -> PrimIO Int
 73 |
 74 | %foreign "C:idrnet_send_buf, libidris2_support, idris_net.h"
 75 | export
 76 | prim__idrnet_send_buf : (sockfd : SocketDescriptor) -> (dataBuffer : AnyPtr) -> (len : Int) -> PrimIO Int
 77 |
 78 |
 79 | %foreign "C__collect_safe:idrnet_recv, libidris2_support, idris_net.h"
 80 |          "C:idrnet_recv, libidris2_support, idris_net.h"
 81 | export
 82 | prim__idrnet_recv : (sockfd : SocketDescriptor) -> (len : Int) -> PrimIO AnyPtr
 83 |
 84 | %foreign "C:idrnet_recv_bytes, libidris2_support, idris_net.h"
 85 | export
 86 | prim__idrnet_recv_bytes : (sockfd : SocketDescriptor) -> (content : Buffer) -> (nbytes : Int) -> (flags : Int) -> PrimIO Int
 87 |
 88 | %foreign "C__collect_safe:idrnet_recv_buf, libidris2_support, idris_net.h"
 89 |          "C:idrnet_recv_buf, libidris2_support, idris_net.h"
 90 | export
 91 | prim__idrnet_recv_buf : (sockfd : SocketDescriptor) -> (buf : AnyPtr) -> (len : Int) -> PrimIO Int
 92 |
 93 | %foreign "C:idrnet_sendto, libidris2_support, idris_net.h"
 94 | export
 95 | prim__idrnet_sendto : (sockfd : SocketDescriptor) -> (dataString,host : String) ->
 96 |                       (port : Port) -> (family : Int) -> PrimIO Int
 97 |
 98 | %foreign "C:idrnet_sendto_buf, libidris2_support, idris_net.h"
 99 | export
100 | prim__idrnet_sendto_buf : (sockfd : SocketDescriptor) -> (dataBuf : AnyPtr) ->
101 |                           (buf_len : Int) -> (host : String) -> (port : Port) ->
102 |                           (family : Int) -> PrimIO Int
103 |
104 | %foreign "C__collect_safe:idrnet_recvfrom, libidris2_support, idris_net.h"
105 |          "C:idrnet_recvfrom, libidris2_support, idris_net.h"
106 | export
107 | prim__idrnet_recvfrom : (sockfd : SocketDescriptor) -> (len : Int) -> PrimIO AnyPtr
108 |
109 | %foreign "C__collect_safe:idrnet_recvfrom_buf, libidris2_support, idris_net.h"
110 |          "C:idrnet_recvfrom_buf, libidris2_support, idris_net.h"
111 | export
112 | prim__idrnet_recvfrom_buf : (sockfd : SocketDescriptor) -> (buf : AnyPtr) -> (len : Int) -> PrimIO AnyPtr
113 |
114 | %foreign "C:idrnet_get_recv_res, libidris2_support, idris_net.h"
115 | export
116 | prim__idrnet_get_recv_res : (res_struct : AnyPtr) -> PrimIO Int
117 |
118 | %foreign "C:idrnet_get_recv_payload, libidris2_support, idris_net.h"
119 | export
120 | prim__idrnet_get_recv_payload : (res_struct : AnyPtr) -> PrimIO String
121 |
122 | %foreign "C:idrnet_free_recv_struct, libidris2_support, idris_net.h"
123 | export
124 | prim__idrnet_free_recv_struct : (res_struct : AnyPtr) -> PrimIO ()
125 |
126 | %foreign "C:idrnet_get_recvfrom_res, libidris2_support, idris_net.h"
127 | export
128 | prim__idrnet_get_recvfrom_res : (res_struct : AnyPtr) -> PrimIO Int
129 |
130 | %foreign "C:idrnet_get_recvfrom_payload, libidris2_support, idris_net.h"
131 | export
132 | prim__idrnet_get_recvfrom_payload : (res_struct : AnyPtr) -> PrimIO String
133 |
134 | %foreign "C:idrnet_get_recvfrom_sockaddr, libidris2_support, idris_net.h"
135 | export
136 | prim__idrnet_get_recvfrom_sockaddr : (res_struct : AnyPtr) -> PrimIO AnyPtr
137 |
138 | %foreign "C:idrnet_free_recvfrom_struct, libidris2_support, idris_net.h"
139 | export
140 | prim__idrnet_free_recvfrom_struct : (res_struct : AnyPtr) -> PrimIO ()
141 |
142 |
143 | %foreign "C:idrnet_geteagain, libidris2_support, idris_net.h"
144 | export
145 | prim__idrnet_geteagain : PrimIO Int
146 |
147 | %foreign "C:idrnet_errno, libidris2_support, idris_net.h"
148 | export
149 | prim__idrnet_errno : PrimIO Int
150 |
151 | %foreign "C:idrnet_peek, libidris2_support, idris_net.h"
152 | export
153 | prim__idrnet_peek : (ptr : AnyPtr) -> (offset : {-Unsigned-} Int) -> PrimIO {-Unsigned-} Int
154 |
155 | %foreign "C:idrnet_poke, libidris2_support, idris_net.h"
156 | export
157 | prim__idrnet_poke : (ptr : AnyPtr) -> (offset : {-Unsigned-} Int) ->
158 |                     (val : Int {- should be Char? -}) -> PrimIO ()
159 |