Add "extern C {...} to header files for C++ builds.
[freeradius.git] / src / include / packet.h
index c8d9d8e..4b455db 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef LRAD_PACKET_H
-#define LRAD_PACKET_H
+#ifndef FR_PACKET_H
+#define FR_PACKET_H
 
 /*
  * packet.h    Structures and prototypes
  * Copyright 2001,2002,2003,2004,2005,2006  The FreeRADIUS server project
  */
 
-uint32_t lrad_request_packet_hash(const RADIUS_PACKET *packet);
-uint32_t lrad_reply_packet_hash(const RADIUS_PACKET *packet);
-int lrad_packet_cmp(const RADIUS_PACKET *a, const RADIUS_PACKET *b);
-void lrad_request_from_reply(RADIUS_PACKET *request,
+#include <freeradius-devel/ident.h>
+RCSIDH(packet_h, "$Id$")
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+uint32_t fr_request_packet_hash(const RADIUS_PACKET *packet);
+uint32_t fr_reply_packet_hash(const RADIUS_PACKET *packet);
+int fr_packet_cmp(const RADIUS_PACKET *a, const RADIUS_PACKET *b);
+int fr_inaddr_any(fr_ipaddr_t *ipaddr);
+void fr_request_from_reply(RADIUS_PACKET *request,
                             const RADIUS_PACKET *reply);
-int lrad_socket(lrad_ipaddr_t *ipaddr, int port);
+int fr_socket(fr_ipaddr_t *ipaddr, int port);
+int fr_nonblock(int fd);
+
+typedef struct fr_packet_list_t fr_packet_list_t;
+
+fr_packet_list_t *fr_packet_list_create(int alloc_id);
+void fr_packet_list_free(fr_packet_list_t *pl);
+int fr_packet_list_insert(fr_packet_list_t *pl,
+                           RADIUS_PACKET **request_p);
+
+RADIUS_PACKET **fr_packet_list_find(fr_packet_list_t *pl,
+                                     RADIUS_PACKET *request);
+RADIUS_PACKET **fr_packet_list_find_byreply(fr_packet_list_t *pl,
+                                             RADIUS_PACKET *reply);
+RADIUS_PACKET **fr_packet_list_yank(fr_packet_list_t *pl,
+                                     RADIUS_PACKET *request);
+int fr_packet_list_num_elements(fr_packet_list_t *pl);
+int fr_packet_list_id_alloc(fr_packet_list_t *pl, int proto,
+                           RADIUS_PACKET *request, void **pctx);
+int fr_packet_list_id_free(fr_packet_list_t *pl,
+                            RADIUS_PACKET *request);
+int fr_packet_list_socket_add(fr_packet_list_t *pl, int sockfd, int proto,
+                             fr_ipaddr_t *dst_ipaddr, int dst_port,
+                             void *ctx);
+int fr_packet_list_socket_remove(fr_packet_list_t *pl, int sockfd,
+                                void **pctx);
+int fr_packet_list_socket_freeze(fr_packet_list_t *pl, int sockfd);
+int fr_packet_list_walk(fr_packet_list_t *pl, void *ctx,
+                         fr_hash_table_walk_t callback);
+int fr_packet_list_fd_set(fr_packet_list_t *pl, fd_set *set);
+RADIUS_PACKET *fr_packet_list_recv(fr_packet_list_t *pl, fd_set *set);
+
+int fr_packet_list_num_incoming(fr_packet_list_t *pl);
+int fr_packet_list_num_outgoing(fr_packet_list_t *pl);
+
+/*
+ *     "find" returns a pointer to the RADIUS_PACKET* member in the
+ *     caller's structure.  In order to get the pointer to the *top*
+ *     of the caller's structure, you have to subtract the offset to
+ *     the member from the returned pointer, and cast it to the
+ *     required type.
+ */
+# define fr_packet2myptr(TYPE, MEMBER, PTR) (TYPE *) (((char *)PTR) - offsetof(TYPE, MEMBER))
+
+#ifdef __cplusplus
+}
+#endif
 
-#endif /* LRAD_PACKET_H */
+#endif /* FR_PACKET_H */