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.2 by pcg, Wed Apr 2 03:25:17 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) 2003 Marc Lehmann <gvpe@schmorp.de>
4
5 This file is part of GVPE.
3 6
4 Copyright (C) 2003 Marc Lehmann <pcg@goof.com>
5
6 This program is free software; you can redistribute it and/or modify 7 GVPE is free software; you can redistribute it and/or modify
7 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
8 the Free Software Foundation; either version 2 of the License, or 9 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 10 (at your option) any later version.
10 11
11 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,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 15 GNU General Public License for more details.
15 16
16 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
17 along with this program; if not, write to the Free Software 18 along with gvpe; if not, write to the Free Software
18 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
19*/ 20*/
20 21
21#ifndef VPE_SOCKINFO_H__ 22#ifndef GVPE_SOCKINFO_H__
22#define VPE_SOCKINFO_H__ 23#define GVPE_SOCKINFO_H__
23 24
24#include <sys/socket.h> 25#include "netcompat.h"
25#include <netinet/in.h>
26 26
27#include "conf.h" 27#include "conf.h"
28 28
29// encapsulate one or more network addresses. this structure 29// encapsulate one or more network addresses. this structure
30// gets transferred over the wire, so be careful with endianness etc. 30// gets transferred over the wire, so be careful with endianness etc.
31struct 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
32 { 50 {
33 u32 host; 51 return sizeof (sockaddr_in);
34 u16 port; 52 }
35 u8 prot;
36 u8 pad1;
37 53
38 void set (const sockaddr_in *sa, u8 prot_ = PROT_UDPv4); 54 const char *ntoa () const;
39 void set (const conf_node *conf);
40 55
41 operator const char *() const; 56 bool valid () const
57 {
58 return prot != 0 && host != 0;
59 }
42 60
43 const sockaddr *sav4 () const; 61 sockinfo() { prot = 0; }
44 const socklen_t salenv4 () const
45 {
46 return sizeof (sockaddr_in);
47 }
48 62
49 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};
50 67
51 sockinfo() 68bool operator == (const sockinfo &a, const sockinfo &b);
52 { 69bool operator < (const sockinfo &a, const sockinfo &b);
53 prot = 0;
54 }
55 70
56 sockinfo(const sockaddr_in &sa, u8 prot_ = PROT_UDPv4)
57 {
58 set (&sa, prot_);
59 }
60 };
61
62inline bool
63operator == (const sockinfo &a, const sockinfo &b) 71inline bool operator != (const sockinfo &a, const sockinfo &b)
64{ 72{
65 return a.host == b.host && a.port == b.port && a.prot == b.prot; 73 return !(a == b);
66} 74}
67 75
68#endif 76#endif
69 77

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines