00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00037 #ifndef LIBNET_SOCKET_CORE_H_
00038 #define LIBNET_SOCKET_CORE_H_
00039
00040 #include <sys/types.h>
00041 #include <adt/generic_char_map.h>
00042 #include <adt/dynamic_fifo.h>
00043 #include <adt/int_map.h>
00044 #include <net/in.h>
00045 #include <net/device.h>
00046 #include <net/packet.h>
00047
00049 #define SOCKET_INITIAL_RECEIVED_SIZE 4
00050
00052 #define SOCKET_MAX_RECEIVED_SIZE 0
00053
00055 #define SOCKET_INITIAL_ACCEPTED_SIZE 1
00056
00058 #define SOCKET_MAX_ACCEPTEDED_SIZE 0
00059
00061 #define SOCKET_MAP_KEY_LISTENING "L"
00062
00066 typedef struct socket_core socket_core_t;
00067
00071 typedef struct socket_port socket_port_t;
00072
00074 struct socket_core {
00076 int socket_id;
00078 int phone;
00080 int port;
00082 dyn_fifo_t received;
00084 dyn_fifo_t accepted;
00086 void *specific_data;
00088 const uint8_t *key;
00090 size_t key_length;
00091 };
00092
00096 INT_MAP_DECLARE(socket_cores, socket_core_t);
00097
00103 GENERIC_CHAR_MAP_DECLARE(socket_port_map, socket_core_t *);
00104
00108 INT_MAP_DECLARE(socket_ports, socket_port_t);
00109
00110 extern void socket_cores_release(int, socket_cores_t *, socket_ports_t *,
00111 void (*)(socket_core_t *));
00112 extern int socket_bind(socket_cores_t *, socket_ports_t *, int, void *, size_t,
00113 int, int, int);
00114 extern int socket_bind_free_port(socket_ports_t *, socket_core_t *, int, int,
00115 int);
00116 extern int socket_create(socket_cores_t *, int, void *, int *);
00117 extern int socket_destroy(int, int, socket_cores_t *, socket_ports_t *,
00118 void (*)(socket_core_t *));
00119 extern int socket_reply_packets(packet_t *, size_t *);
00120 extern socket_core_t *socket_port_find(socket_ports_t *, int, const uint8_t *,
00121 size_t);
00122 extern void socket_port_release(socket_ports_t *, socket_core_t *);
00123 extern int socket_port_add(socket_ports_t *, int, socket_core_t *,
00124 const uint8_t *, size_t);
00125
00126 #endif
00127