[go: up one dir, main page]

File: SrvMsg.h

package info (click to toggle)
dibbler 0.7.3-1.3
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 11,148 kB
  • ctags: 8,720
  • sloc: cpp: 54,863; sh: 9,389; ansic: 8,659; yacc: 2,570; makefile: 1,061; lex: 842; perl: 49; xml: 6
file content (112 lines) | stat: -rw-r--r-- 3,699 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
 * Dibbler - a portable DHCPv6
 *
 * authors: Tomasz Mrugalski <thomson@klub.com.pl>
 *          Marek Senderski <msend@o2.pl>
 * changes: Krzysztof Wnuk <keczi@poczta.onet.pl>
 *          Michal Kowalczuk <michal@kowalczuk.eu>
 *
 * released under GNU GPL v2 only licence
 *
 * $Id: SrvMsg.h,v 1.20 2008-08-29 00:07:34 thomson Exp $
 *
 */

class TSrvMsg;
#ifndef SRVMSG_H
#define SRVMSG_H

#include "Msg.h"
#include "SmartPtr.h"
#include "Opt.h"
#include "SrvIfaceMgr.h"
#include "SrvTransMgr.h"
#include "SrvCfgMgr.h"
#include "SrvAddrMgr.h"
#include "IPv6Addr.h"
#include "SrvOptOptionRequest.h"
#include "SrvOptInterfaceID.h"
#include "SrvOptFQDN.h"
#include "SrvOptRemoteID.h"
#include "SrvOptGeneric.h"

class TSrvMsg : public TMsg
{
public:
    TSrvMsg(SPtr<TSrvIfaceMgr> IfaceMgr, SPtr<TSrvTransMgr> TransMgr, 
	    SPtr<TSrvCfgMgr> CfgMgr,     SPtr<TSrvAddrMgr> AddrMgr,
	    int iface,  SPtr<TIPv6Addr> addr, char* buf,  int bufSize);
    
    TSrvMsg(SPtr<TSrvIfaceMgr> IfaceMgr, SPtr<TSrvTransMgr> TransMgr, 
	    SPtr<TSrvCfgMgr> CfgMgr,     SPtr<TSrvAddrMgr> AddrMgr,
	    int iface, SPtr<TIPv6Addr> addr, int msgType, long transID);
    
    TSrvMsg(SPtr<TSrvIfaceMgr> IfaceMgr, SPtr<TSrvTransMgr> TransMgr, 
	    SPtr<TSrvCfgMgr> CfgMgr,     SPtr<TSrvAddrMgr> AddrMgr);
    
    SPtr<TSrvTransMgr>  SrvTransMgr;
    SPtr<TSrvAddrMgr>   SrvAddrMgr;
    SPtr<TSrvCfgMgr>    SrvCfgMgr;
    SPtr<TSrvIfaceMgr>  SrvIfaceMgr;
    
    void copyRelayInfo(SPtr<TSrvMsg> q);
    void copyAAASPI(SPtr<TSrvMsg> q);
    void copyRemoteID(SPtr<TSrvMsg> q);

    void appendAuthenticationOption(SmartPtr<TDUID> duid);

    bool appendRequestedOptions(SPtr<TDUID> duid, SPtr<TIPv6Addr> addr, 
				int iface, SPtr<TSrvOptOptionRequest> reqOpt);
    string showRequestedOptions(SPtr<TSrvOptOptionRequest> oro);
    bool appendVendorSpec(SPtr<TDUID> duid, int iface, int vendor, SPtr<TSrvOptOptionRequest> reqOpt);
    void appendStatusCode();
    bool delOption(int code);

    void addRelayInfo(SPtr<TIPv6Addr> linkAddr,
		      SPtr<TIPv6Addr> peerAddr,
		      int hop,
		      SPtr<TSrvOptInterfaceID> interfaceID,
		      List(TSrvOptGeneric) echoList);

    int getRelayCount();

    bool validateReplayDetection();

    SmartPtr<TSrvTransMgr> getSrvTransMgr();

    virtual bool check() = 0;

    void setRemoteID(SPtr<TSrvOptRemoteID> remoteID);
    SPtr<TSrvOptRemoteID> getRemoteID();

    unsigned long getTimeout();
    void doDuties();
    void send();
protected:
    void setAttribs(SPtr<TSrvIfaceMgr> IfaceMgr, 
		    SPtr<TSrvTransMgr> TransMgr, 
		    SPtr<TSrvCfgMgr> CfgMgr,
		    SPtr<TSrvAddrMgr> AddrMgr);
    bool check(bool clntIDmandatory, bool srvIDmandatory);
    SPtr<TSrvOptFQDN> prepareFQDN(SPtr<TSrvOptFQDN> requestFQDN, SPtr<TDUID> clntDuid, 
				  SPtr<TIPv6Addr> clntAddr, string hint, bool doRealUpdate);
    void fqdnRelease(SPtr<TSrvCfgIface> ptrIface, SPtr<TAddrIA> ia, SPtr<TFQDN> fqdn);
    int storeSelfRelay(char * buf, int relayLevel, ESrvIfaceIdOrder order);

    // relay
    SPtr<TIPv6Addr> LinkAddrTbl[HOP_COUNT_LIMIT];
    SPtr<TIPv6Addr> PeerAddrTbl[HOP_COUNT_LIMIT];
    SPtr<TSrvOptInterfaceID> InterfaceIDTbl[HOP_COUNT_LIMIT];
    List(TSrvOptGeneric) EchoListTbl[HOP_COUNT_LIMIT];  // list of options to be
    int len[HOP_COUNT_LIMIT];
    int HopTbl[HOP_COUNT_LIMIT];

    unsigned long FirstTimeStamp; // timestamp of first message transmission
    unsigned long MRT;            // maximum retransmission timeout
    int Relays;

    SPtr<TSrvOptRemoteID> RemoteID; // this MAY be set, if message was recevied via relay AND relay appended this RemoteID
    int Parent; // type of the parent message (used in ADVERTISE and REPLY)
};

#endif