syslog-ng source
gsockaddr.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2010 Balabit
3  * Copyright (c) 1998-2010 Balázs Scheidler
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  *
19  * As an additional exemption you are allowed to compile & link against the
20  * OpenSSL libraries as published by the OpenSSL project. See the file
21  * COPYING for details.
22  *
23  */
24 
25 #ifndef G_SOCKADDR_H_INCLUDED
26 #define G_SOCKADDR_H_INCLUDED
27 
28 #include "syslog-ng.h"
29 #include "atomic.h"
30 
31 #include <sys/types.h>
32 #include <sys/socket.h>
33 #include <compat/un.h>
34 #include <netinet/in.h>
35 
36 /* sockaddr public interface */
37 
38 #define MAX_SOCKADDR_STRING 64
39 
40 #define GSA_FULL 0
41 #define GSA_ADDRESS_ONLY 1
42 
43 typedef struct _GSockAddrFuncs GSockAddrFuncs;
44 
45 typedef struct _GSockAddr
46 {
48  guint32 flags;
49  GSockAddrFuncs *sa_funcs;
50  int salen;
51  struct sockaddr sa;
52 } GSockAddr;
53 
55 {
56  GIOStatus (*bind_prepare)(gint sock, GSockAddr *addr);
57  GIOStatus (*bind)(int sock, GSockAddr *addr);
58  gchar *(*format)(GSockAddr *addr, gchar *text, gulong n, gint format);
59  guint16 (*get_port) (GSockAddr *addr);
60  void (*set_port) (GSockAddr *addr, guint16 port);
61 };
62 
63 gchar *g_sockaddr_format(GSockAddr *a, gchar *text, gulong n, gint format);
64 guint16 g_sockaddr_get_port(GSockAddr *a);
65 void g_sockaddr_set_port(GSockAddr *a, guint16 port);
66 guint8 *g_sockaddr_get_address(GSockAddr *self, guint8 *buffer, gsize buffer_size, gsize *addr_len);
67 gsize g_sockaddr_len(GSockAddr *a);
68 
69 GSockAddr *g_sockaddr_new(struct sockaddr *sa, int salen);
72 
73 static inline struct sockaddr *
74 g_sockaddr_get_sa(GSockAddr *self)
75 {
76  return &self->sa;
77 }
78 
79 gboolean g_sockaddr_inet_check(GSockAddr *a);
80 GSockAddr *g_sockaddr_inet_new(const gchar *ip, guint16 port);
81 GSockAddr *g_sockaddr_inet_new2(struct sockaddr_in *sin);
82 
83 static inline struct sockaddr_in *
84 g_sockaddr_inet_get_sa(GSockAddr *s)
85 {
86  g_assert(g_sockaddr_inet_check(s));
87 
88  return (struct sockaddr_in *) g_sockaddr_get_sa(s);
89 }
90 
91 
99 static inline struct in_addr
100 g_sockaddr_inet_get_address(GSockAddr *s)
101 {
102  return g_sockaddr_inet_get_sa(s)->sin_addr;
103 }
104 
113 static inline void
114 g_sockaddr_inet_set_address(GSockAddr *s, struct in_addr addr)
115 {
116  g_sockaddr_inet_get_sa(s)->sin_addr = addr;
117 }
118 
119 
120 #if SYSLOG_NG_ENABLE_IPV6
121 gboolean g_sockaddr_inet6_check(GSockAddr *a);
122 GSockAddr *g_sockaddr_inet6_new(const gchar *ip, guint16 port);
123 GSockAddr *g_sockaddr_inet6_new2(struct sockaddr_in6 *sin6);
124 
125 static inline struct sockaddr_in6 *
126 g_sockaddr_inet6_get_sa(GSockAddr *s)
127 {
128  g_assert(g_sockaddr_inet6_check(s));
129 
130  return (struct sockaddr_in6 *) g_sockaddr_get_sa(s);
131 }
132 
140 static inline struct in6_addr *
141 g_sockaddr_inet6_get_address(GSockAddr *s)
142 {
143  return &g_sockaddr_inet6_get_sa(s)->sin6_addr;
144 }
145 
154 static inline void
155 g_sockaddr_inet6_set_address(GSockAddr *s, struct in6_addr *addr)
156 {
157  g_sockaddr_inet6_get_sa(s)->sin6_addr = *addr;
158 }
159 
160 gboolean g_sockaddr_inet6_is_v4_mapped(GSockAddr *s);
161 
162 #endif
163 
164 GSockAddr *g_sockaddr_inet_or_inet6_new(const gchar *name, guint16 port);
166 
167 GSockAddr *g_sockaddr_unix_new(const gchar *name);
168 GSockAddr *g_sockaddr_unix_new2(struct sockaddr_un *s_un, int sunlen);
169 
170 #endif
const gchar * name
Definition: debugger.c:265
GSockAddr * g_sockaddr_ref(GSockAddr *a)
Definition: gsockaddr.c:168
GSockAddr * g_sockaddr_inet_or_inet6_new(const gchar *name, guint16 port)
Definition: gsockaddr.c:505
void g_sockaddr_unref(GSockAddr *a)
Definition: gsockaddr.c:188
GSockAddr * g_sockaddr_unix_new(const gchar *name)
Definition: gsockaddr.c:568
gchar * g_sockaddr_format(GSockAddr *a, gchar *text, gulong n, gint format)
Definition: gsockaddr.c:100
void g_sockaddr_set_port(GSockAddr *a, guint16 port)
Definition: gsockaddr.c:113
gsize g_sockaddr_len(GSockAddr *a)
Definition: gsockaddr.c:676
guint16 g_sockaddr_get_port(GSockAddr *a)
Definition: gsockaddr.c:106
gboolean g_sockaddr_inet_check(GSockAddr *a)
Definition: gsockaddr.c:284
GSockAddr * g_sockaddr_inet_new(const gchar *ip, guint16 port)
Definition: gsockaddr.c:302
GSockAddr * g_sockaddr_unix_new2(struct sockaddr_un *s_un, int sunlen)
Definition: gsockaddr.c:604
GSockAddr * g_sockaddr_inet_new2(struct sockaddr_in *sin)
Definition: gsockaddr.c:335
GSockAddr * g_sockaddr_new(struct sockaddr *sa, int salen)
Definition: gsockaddr.c:56
gboolean g_sockaddr_inet_or_inet6_check(GSockAddr *a)
Definition: gsockaddr.c:516
guint8 * g_sockaddr_get_address(GSockAddr *self, guint8 *buffer, gsize buffer_size, gsize *addr_len)
Definition: gsockaddr.c:120
Definition: atomic.h:31
Definition: gsockaddr.h:46
GAtomicCounter refcnt
Definition: gsockaddr.h:47
guint32 flags
Definition: gsockaddr.h:48
GSockAddrFuncs * sa_funcs
Definition: gsockaddr.h:49
Definition: gsockaddr.h:55
void(* set_port)(GSockAddr *addr, guint16 port)
Definition: gsockaddr.h:60
guint16(* get_port)(GSockAddr *addr)
Definition: gsockaddr.h:59
GIOStatus(* bind)(int sock, GSockAddr *addr)
Definition: gsockaddr.h:57
GIOStatus(* bind_prepare)(gint sock, GSockAddr *addr)
Definition: gsockaddr.h:56
gchar *(* format)(GSockAddr *addr, gchar *text, gulong n, gint format)
Definition: gsockaddr.h:58
GString * buffer
Definition: test_smart_multi_line.c:69
int sock
Definition: test_thread_wakeup.c:93
SerializeArchive * sa
Definition: test_timestamp_serialize.c:31