File: ClntMsgReply.cpp

package info (click to toggle)
dibbler 1.0.1-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 13,352 kB
  • sloc: cpp: 60,323; ansic: 12,235; sh: 11,951; yacc: 3,418; lex: 969; makefile: 940; perl: 319; xml: 116; python: 74
file content (59 lines) | stat: -rw-r--r-- 1,456 bytes parent folder | download | duplicates (3)
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
/*
 * Dibbler - a portable DHCPv6
 *
 * authors: Tomasz Mrugalski <thomson@klub.com.pl>
 *          Marek Senderski <msend@o2.pl>
 *
 * released under GNU GPL v2 only licence
 *
 * $Id: ClntMsgReply.cpp,v 1.9 2008-08-29 00:07:28 thomson Exp $
 *
 */

#include "SmartPtr.h"
#include "ClntMsgReply.h"
#include "ClntOptIAAddress.h"

TClntMsgReply::TClntMsgReply(int iface, SPtr<TIPv6Addr> addr, char* buf, int bufSize)
    :TClntMsg(iface, addr,buf,bufSize)
{
}

void TClntMsgReply::answer(SPtr<TClntMsg> Reply) {
    // this should never happen. After receiving REPLY for e.g. REQUEST,
    // request->answer(reply) is called. Client nevers sends reply msg, so
    // this method will never be called.
}

void TClntMsgReply::doDuties() {
}

bool TClntMsgReply::check() {
    bool anonInfReq = ClntCfgMgr().anonInfRequest();
    return TClntMsg::check(!anonInfReq /* clientID mandatory */, true /* serverID mandatory */ );
}

std::string TClntMsgReply::getName() const {
    return "REPLY";
}

SPtr<TIPv6Addr> TClntMsgReply::getFirstAddr() {
    firstOption();
    SPtr<TOpt> opt, subopt;
    while (opt=getOption()) {
	if (opt->getOptType() != OPTION_IA_NA)
	    continue;
	opt->firstOption();
	while (subopt=opt->getOption()) {
	    if (subopt->getOptType() != OPTION_IAADDR)
		continue;
	    SPtr<TOptIAAddress> optAddr = (Ptr*) subopt;
	    return optAddr->getAddr();
	}
    }

    return SPtr<TIPv6Addr>(); // NULL
}

TClntMsgReply::~TClntMsgReply() {
}