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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines