socket_core.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2009 Lukas Mejdrech
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  *
00009  * - Redistributions of source code must retain the above copyright
00010  *   notice, this list of conditions and the following disclaimer.
00011  * - Redistributions in binary form must reproduce the above copyright
00012  *   notice, this list of conditions and the following disclaimer in the
00013  *   documentation and/or other materials provided with the distribution.
00014  * - The name of the author may not be used to endorse or promote products
00015  *   derived from this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
00018  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00019  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00020  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
00021  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00022  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00023  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00024  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
00026  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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 

Generated on Thu Jun 2 07:45:48 2011 for HelenOS/USB by  doxygen 1.4.7