1 /**************************************************************************/
2 /* ---------------------------------------------------------------------- */
3 /* Copyright (C) 2006 - 2008 FRESCOR consortium partners: */
5 /* Universidad de Cantabria, SPAIN */
6 /* University of York, UK */
7 /* Scuola Superiore Sant'Anna, ITALY */
8 /* Kaiserslautern University, GERMANY */
9 /* Univ. Politécnica Valencia, SPAIN */
10 /* Czech Technical University in Prague, CZECH REPUBLIC */
12 /* Thales Communication S.A. FRANCE */
13 /* Visual Tools S.A. SPAIN */
14 /* Rapita Systems Ltd UK */
17 /* See http://www.frescor.org for a link to partners' websites */
19 /* FRESCOR project (FP6/2005/IST/5-034026) is funded */
20 /* in part by the European Union Sixth Framework Programme */
21 /* The European Union is not liable of any use that may be */
22 /* made of this code. */
25 /* This file is part of FORB (Frescor Object Request Broker) */
27 /* FORB is free software; you can redistribute it and/or modify it */
28 /* under terms of the GNU General Public License as published by the */
29 /* Free Software Foundation; either version 2, or (at your option) any */
30 /* later version. FORB is distributed in the hope that it will be */
31 /* useful, but WITHOUT ANY WARRANTY; without even the implied warranty */
32 /* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */
33 /* General Public License for more details. You should have received a */
34 /* copy of the GNU General Public License along with FORB; see file */
35 /* COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, */
36 /* Cambridge, MA 02139, USA. */
38 /* As a special exception, including FORB header files in a file, */
39 /* instantiating FORB generics or templates, or linking other files */
40 /* with FORB objects to produce an executable application, does not */
41 /* by itself cause the resulting executable application to be covered */
42 /* by the GNU General Public License. This exception does not */
43 /* however invalidate any other reasons why the executable file might be */
44 /* covered by the GNU Public License. */
45 /**************************************************************************/
49 * @author Michal Sojka <sojkam1@fel.cvut.cz>
50 * @date Thu Aug 28 10:36:23 2008
52 * @brief FORB transport protocol declarations
60 #include "forb-internal.h"
63 #include <ul_logbase.h>
67 typedef struct forb_proto forb_proto_t;
70 * Description of a FORB transport protocol.
73 /** Number of seconds between sending of HELLO messages for discovery process */
74 unsigned hello_interval;
77 * Called to free any protocol resources associated with the port.
79 * @param port The port to be destroyed.
81 * @return Zero on success, negatove error code on error.
83 int (*port_destroy)(forb_port_t *port);
86 * Sends data to a peer.
88 * If the protocol is connection-oriented, the connection data
89 * can be stored at @c port->proto_priv and used by later
92 * @param peer Peer to send data
93 * @param buf Data to send
94 * @param len Length of data to send
96 * @return Length of the sent data (should be equal to @a len on
97 * success) or negative error code on error.
99 ssize_t (*send)(forb_peer_t *peer, const void *buf, size_t len);
102 * Called to free any protocol resources associated with the
105 * @param peer Peer to destroy
107 * @note The memory allocated by @a deserialize_addr (if any)
108 * is deallocated by FORB and should not be deallocated here.
110 void (*peer_destroy)(forb_peer_t *peer);
112 * Receives data through a port
114 * @param port Port to use
115 * @param buf Where to store the received data
116 * @param len Length the buffer @a buf
118 * @return Length of the received data or negative error code
121 ssize_t (*recv)(forb_port_t *port, void *buf, size_t len);
124 * Broadcasts/multicasts a message. All FORBs connected the
125 * the network/bus represented by the @a port should receive
128 * This function is used by peer discovery protocol.
130 * @param port Port to use
131 * @param buf Data to broadcast
132 * @param len Length of the @a data
134 * @return Zero or positive number on success, negative error
137 ssize_t (*broadcast)(forb_port_t *port, const void *buf, size_t len);
139 /** Serializes the protocol specific address */
140 CORBA_boolean (*serialize_addr)(FORB_CDR_Codec *codec, const void *addr);
142 /** Deserializes the protocol specific address. The memory for
143 * storing the address should be allocated by forb_malloc(). */
144 CORBA_boolean (*deserialize_addr)(FORB_CDR_Codec *codec, void **addr);
146 /** Converts protocol specific address to string */
147 size_t (*addr2str)(char *dest, size_t maxlen, const void *addr);
150 * Callback caled when the port is registered to FORB just
151 * before reception and discovery threads are started.
153 void (*register_cb)(forb_port_t *port);
156 ssize_t forb_proto_send(forb_peer_t *peer, FORB_CDR_Codec *codec);
159 forb_get_next_hop(forb_t *forb, forb_server_id *server, fosa_abs_time_t *timeout);