;;;; See the LICENSE file for licensing information.

(defpackage :usocket
  (:use #-genera :common-lisp
        #+genera :future-common-lisp
	#+abcl :java
	:split-sequence)
  (:export   #:*version*
             #:*wildcard-host*
             #:*auto-port*

             #:+max-datagram-packet-size+

             #:socket-connect ; socket constructors and methods
             #:socket-listen
             #:socket-accept
             #:socket-close
             #:socket-shutdown
             #:get-local-address
             #:get-peer-address
             #:get-local-port
             #:get-peer-port
             #:get-local-name
             #:get-peer-name

             #:socket-send    ; udp function (send)
             #:socket-receive ; udp function (receive)

             #:wait-for-input ; waiting for input-ready state (select() like)
             #:make-wait-list
             #:add-waiter
             #:remove-waiter
             #:remove-all-waiters

             #:with-connected-socket ; convenience macros
             #:with-server-socket
             #:with-client-socket
             #:with-socket-listener

             #:usocket ; socket object and accessors
             #:stream-usocket
             #:stream-server-usocket
             #:socket
             #:socket-stream
             #:datagram-usocket
             #:socket-state ; 0.6.4

             ;; predicates (for version 0.6 or 1.0 ?)
             #:usocket-p
             #:stream-usocket-p
             #:stream-server-usocket-p
             #:datagram-usocket-p

             #:host-byte-order ; IPv4 utility functions
             #:hbo-to-dotted-quad
             #:hbo-to-vector-quad
             #:vector-quad-to-dotted-quad
             #:dotted-quad-to-vector-quad

             #:vector-to-ipv6-host ; IPv6 utility functions
             #:ipv6-host-to-vector

             #:ip= ; IPv4+IPv6 utility function
             #:ip/=

             #:integer-to-octet-buffer ; Network utility functions
             #:octet-buffer-to-integer
             #:port-to-octet-buffer
             #:port-from-octet-buffer
             #:ip-to-octet-buffer
             #:ip-from-octet-buffer

             #:with-mapped-conditions

             #:socket-condition ; conditions
             #:ns-condition
             #:socket-error ; errors
             #:ns-error
             #:unknown-condition
             #:ns-unknown-condition
             #:unknown-error
             #:ns-unknown-error
             #:socket-warning ; warnings (udp)

             #:insufficient-implementation ; conditions regarding usocket support level
             #:unsupported
             #:unimplemented

             #:socket-server
             #:*remote-host*
             #:*remote-port*

             ;; added in 0.7.1
             #:get-host-by-name
             #:get-hosts-by-name
             #:get-random-host-by-name
             #:ns-host-not-found-error
             #:ns-no-recovery-error
             #:ns-try-again-condition
             #:default-udp-handler
             #:default-tcp-handler
             #:echo-tcp-handler ;; server handlers

             ;; added in 0.8.0
             #:*backend*
             #:*default-event-base*
             #:host-to-hostname

             ;; these're socket-related conditions from IOlib
             #:ADDRESS-NOT-AVAILABLE-ERROR #:HOST-DOWN-ERROR
             #:OPERATION-NOT-SUPPORTED-ERROR #:SOCKET-OPTION
             #:NETWORK-DOWN-ERROR #:INVALID-SOCKET-ERROR
             #:SOCKET-TYPE-NOT-SUPPORTED-ERROR #:DEADLINE-TIMEOUT-ERROR
             #:SHUTDOWN-ERROR #:HOST-UNREACHABLE-ERROR
             #:NETWORK-UNREACHABLE-ERROR #:CONNECTION-ABORTED-ERROR
             #:BAD-FILE-DESCRIPTOR-ERROR #:PROTOCOL-NOT-SUPPORTED-ERROR
             #:CONNECTION-RESET-ERROR #:TIMEOUT-ERROR
             #:ADDRESS-IN-USE-ERROR #:NO-BUFFERS-ERROR
             #:INVALID-SOCKET-STREAM-ERROR #:INTERRUPTED-CONDITION
             #:INVALID-ARGUMENT-ERROR #:OPERATION-NOT-PERMITTED-ERROR
             #:NETWORK-RESET-ERROR #:CONNECTION-REFUSED-ERROR
             ))
