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() {
}
|