ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/sockinfo.h
(Generate patch)

Comparing gvpe/src/sockinfo.h (file contents):
Revision 1.1 by pcg, Fri Mar 28 04:05:10 2003 UTC vs.
Revision 1.14 by pcg, Sun Dec 2 00:09:36 2007 UTC

1/* 1/*
2 sockinfo.h -- socket address management 2 sockinfo.h -- socket address management
3 Copyright (C) 1998-2002 Ivo Timmermans <ivo@o2w.nl> 3 Copyright (C) 2003 Marc Lehmann <gvpe@schmorp.de>
4 2000-2002 Guus Sliepen <guus@sliepen.eu.org>
5 2003 Marc Lehmannn <pcg@goof.com>
6 4
5 This file is part of GVPE.
6
7 This program is free software; you can redistribute it and/or modify 7 GVPE is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or 9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details. 15 GNU General Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software 18 along with gvpe; if not, write to the Free Software
19 Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20*/ 20*/
21 21
22#ifndef SOCKINFO_H__ 22#ifndef GVPE_SOCKINFO_H__
23#define SOCKINFO_H__ 23#define GVPE_SOCKINFO_H__
24 24
25#include <sys/socket.h> 25#include "netcompat.h"
26#include <netinet/in.h>
27 26
28#include "conf.h" 27#include "conf.h"
29 28
30// encapsulate one or more network addresses. this structure 29// encapsulate one or more network addresses. this structure
31// gets transferred over the wire, so be careful with endianness etc. 30// gets transferred over the wire, so be careful with endianness etc.
32struct sockinfo 31struct sockinfo
32{
33 u32 host;
34 u16 port;
35 u8 prot;
36 u8 pad1;
37
38 void set (const sockaddr_in *sa, u8 prot_);
39 void set (const conf_node *conf, u8 prot_);
40 void set (const char *hostname, u16 port_, u8 prot_);
41
42 // return the supported protocols
43 u8 supported_protocols (conf_node *conf = 0);
44 bool upgrade_protocol (u8 prot_, conf_node *conf = 0);
45
46 operator const char *() const;
47
48 const sockaddr *sav4 () const;
49 const socklen_t salenv4 () const
33 { 50 {
34 u32 host; 51 return sizeof (sockaddr_in);
35 u16 port; 52 }
36 u8 prot;
37 u8 pad1;
38 53
39 void set (const sockaddr_in *sa, u8 prot_ = PROT_UDPv4); 54 const char *ntoa () const;
40 void set (const conf_node *conf);
41 55
42 operator const char *() const; 56 bool valid () const
57 {
58 return prot != 0 && host != 0;
59 }
43 60
44 const sockaddr *sav4 () const; 61 sockinfo() { prot = 0; }
45 const socklen_t salenv4 () const
46 {
47 return sizeof (sockaddr_in);
48 }
49 62
50 const char *ntoa () const; 63 sockinfo(const char *hostname, u16 port, u8 prot) { set (hostname, port, prot); }
64 sockinfo(const sockaddr_in &sa, u8 prot) { set (&sa, prot); }
65 sockinfo(const conf_node *conf, u8 prot) { set (conf, prot); }
66};
51 67
52 sockinfo() 68bool operator == (const sockinfo &a, const sockinfo &b);
53 { 69bool operator < (const sockinfo &a, const sockinfo &b);
54 prot = 0;
55 }
56 70
57 sockinfo(const sockaddr_in &sa, u8 prot_ = PROT_UDPv4)
58 {
59 set (&sa, prot_);
60 }
61 };
62
63inline bool
64operator == (const sockinfo &a, const sockinfo &b) 71inline bool operator != (const sockinfo &a, const sockinfo &b)
65{ 72{
66 return a.host == b.host && a.port == b.port && a.prot == b.prot; 73 return !(a == b);
67} 74}
68 75
69#endif 76#endif
70 77

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines