亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? auth.cc

?? RIP 協議實現
?? CC
?? 第 1 頁 / 共 2 頁
字號:
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-// Copyright (c) 2001-2008 XORP, Inc.//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the "Software")// to deal in the Software without restriction, subject to the conditions// listed in the XORP LICENSE file. These conditions include: you must// preserve this copyright notice, and you cannot mention the copyright// holders in advertising related to the Software without their permission.// The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This// notice is a summary of the XORP LICENSE file; the license in that file is// legally binding.#ident "$XORP: xorp/rip/auth.cc,v 1.38 2008/07/23 05:11:34 pavlin Exp $"#include "rip_module.h"#include "libxorp/xorp.h"#include "libxorp/xlog.h"#include "libxorp/eventloop.hh"#include <functional>#include <openssl/md5.h>#include "constants.hh"#include "auth.hh"// ----------------------------------------------------------------------------// AuthHandlerBase implementationAuthHandlerBase::~AuthHandlerBase(){}const string&AuthHandlerBase::error() const{    return _err;}inline voidAuthHandlerBase::reset_error(){    if (_err.empty() == false)	_err.erase();}inline voidAuthHandlerBase::set_error(const string& err){    _err = err;}// ----------------------------------------------------------------------------// NullAuthHandler implementationconst char*NullAuthHandler::effective_name() const{    return auth_type_name();}const char*NullAuthHandler::auth_type_name(){    return "none";}voidNullAuthHandler::reset(){}uint32_tNullAuthHandler::head_entries() const{    return 0;}uint32_tNullAuthHandler::max_routing_entries() const{    return RIPv2_ROUTES_PER_PACKET;}boolNullAuthHandler::authenticate_inbound(const uint8_t*		packet,				      size_t			packet_bytes,				      const uint8_t*&		entries_ptr,				      uint32_t&			n_entries,				      const IPv4&,				      bool){    entries_ptr = NULL;    n_entries = 0;    if (packet_bytes > RIPv2_MAX_PACKET_BYTES) {	set_error(c_format("packet too large (%u bytes)",			   XORP_UINT_CAST(packet_bytes)));	return false;    } else if (packet_bytes < RIPv2_MIN_PACKET_BYTES) {	set_error(c_format("packet too small (%u bytes)",			   XORP_UINT_CAST(packet_bytes)));	return false;    }    size_t entry_bytes = packet_bytes - RipPacketHeader::size();    if (entry_bytes % PacketRouteEntry<IPv4>::size()) {	set_error(c_format("non-integral route entries (%u bytes)",			    XORP_UINT_CAST(entry_bytes)));	return false;    }    n_entries = entry_bytes / PacketRouteEntry<IPv4>::size();    if (n_entries == 0) {	return true;    }    entries_ptr = packet + RipPacketHeader::size();    const PacketRouteEntry<IPv4> entry(entries_ptr);    // Reject packet if first entry is authentication data    if (entry.is_auth_entry()) {	set_error(c_format("unexpected authentication data (type %d)",			   entry.tag()));	entries_ptr = NULL;	n_entries = 0;	return false;    }    reset_error();    return true;}boolNullAuthHandler::authenticate_outbound(RipPacket<IPv4>&	packet,				       list<RipPacket<IPv4> *>& auth_packets,				       size_t&		n_routes){    // XXX: nothing to do so just create a single copy    RipPacket<IPv4>* copy_packet = new RipPacket<IPv4>(packet);    auth_packets.push_back(copy_packet);    reset_error();    n_routes = packet.data_bytes() - RipPacketHeader::size();    n_routes /= PacketRouteEntry<IPv4>::size();    return (true);}// ----------------------------------------------------------------------------// Plaintext handler implementationconst char*PlaintextAuthHandler::effective_name() const{    return auth_type_name();}const char*PlaintextAuthHandler::auth_type_name(){    return "simple";}voidPlaintextAuthHandler::reset(){}uint32_tPlaintextAuthHandler::head_entries() const{    return 1;}uint32_tPlaintextAuthHandler::max_routing_entries() const{    return RIPv2_ROUTES_PER_PACKET - 1;}boolPlaintextAuthHandler::authenticate_inbound(const uint8_t*	packet,					   size_t		packet_bytes,					   const uint8_t*&	entries_ptr,					   uint32_t&		n_entries,					   const IPv4&,					   bool){    entries_ptr = NULL;    n_entries = 0;    if (packet_bytes > RIPv2_MAX_PACKET_BYTES) {	set_error(c_format("packet too large (%u bytes)",			   XORP_UINT_CAST(packet_bytes)));	return false;    }    if (packet_bytes < RIPv2_MIN_AUTH_PACKET_BYTES) {	set_error(c_format("packet too small (%u bytes)",			   XORP_UINT_CAST(packet_bytes)));	return false;    }    size_t entry_bytes = packet_bytes - RipPacketHeader::size();    if (entry_bytes % PacketRouteEntry<IPv4>::size()) {	set_error(c_format("non-integral route entries (%u bytes)",			   XORP_UINT_CAST(entry_bytes)));	return false;    }    const PlaintextPacketRouteEntry4 ppr(packet + RipPacketHeader::size());    if (ppr.addr_family() != PlaintextPacketRouteEntry4::ADDR_FAMILY) {	set_error("not an authenticated packet");	return false;    } else if (ppr.auth_type() != PlaintextPacketRouteEntry4::AUTH_TYPE) {	set_error("not a plaintext authenticated packet");	return false;    }    string passwd = ppr.password();    if (passwd != key()) {	set_error(c_format("wrong password \"%s\"", passwd.c_str()));	return false;    }    reset_error();    n_entries = entry_bytes / PacketRouteEntry<IPv4>::size() - 1;    if (n_entries) {	entries_ptr = (packet + RipPacketHeader::size()		       + PlaintextPacketRouteEntry4::size());    }    return true;}boolPlaintextAuthHandler::authenticate_outbound(RipPacket<IPv4>&	packet,					    list<RipPacket<IPv4> *>& auth_packets,					    size_t&		n_routes){    uint8_t* first_entry_ptr = NULL;    if (head_entries() > 0)	first_entry_ptr = packet.route_entry_ptr(0);    static_assert(PacketRouteEntry<IPv4>::SIZE == 20);    static_assert(PlaintextPacketRouteEntry4::SIZE == 20);    XLOG_ASSERT(packet.data_ptr() + RipPacketHeader::size()		== first_entry_ptr);    PlaintextPacketRouteEntry4Writer ppr(first_entry_ptr);    ppr.initialize(key());    // XXX: just create a single copy    RipPacket<IPv4>* copy_packet = new RipPacket<IPv4>(packet);    auth_packets.push_back(copy_packet);    reset_error();    n_routes = packet.data_bytes() - RipPacketHeader::size();    n_routes /= PacketRouteEntry<IPv4>::size();    n_routes--;		// XXX: exclude the first (authentication) entry    return (true);}const string&PlaintextAuthHandler::key() const{    return _key;}voidPlaintextAuthHandler::set_key(const string& plaintext_key){    _key = string(plaintext_key, 0, 16);}// ----------------------------------------------------------------------------// MD5AuthHandler::MD5Key implementationMD5AuthHandler::MD5Key::MD5Key(uint8_t		key_id,			       const string&	key,			       const TimeVal&	start_timeval,			       const TimeVal&	end_timeval,			       XorpTimer	start_timer,			       XorpTimer	stop_timer)    : _id(key_id),      _start_timeval(start_timeval),      _end_timeval(end_timeval),      _is_persistent(false),      _o_seqno(0),      _start_timer(start_timer),      _stop_timer(stop_timer){    string::size_type n = key.copy(_key_data, 16);    if (n < KEY_BYTES) {	memset(_key_data + n, 0, KEY_BYTES - n);    }}stringMD5AuthHandler::MD5Key::key() const{    return string(_key_data, 0, 16);}boolMD5AuthHandler::MD5Key::valid_at(const TimeVal& when) const{    if (is_persistent())	return true;    return ((_start_timeval <= when) && (when <= _end_timeval));}voidMD5AuthHandler::MD5Key::reset(){    //    // Reset the seqno    //    _lr_seqno.clear();    //    // Reset the flag that a packet has been received    //    _pkts_recv.clear();}voidMD5AuthHandler::MD5Key::reset(const IPv4& src_addr){    map<IPv4, uint32_t>::iterator seqno_iter;    map<IPv4, bool>::iterator recv_iter;    //    // Reset the seqno    //    seqno_iter = _lr_seqno.find(src_addr);    if (seqno_iter != _lr_seqno.end())	_lr_seqno.erase(seqno_iter);    //    // Reset the flag that a packet has been received    //    recv_iter = _pkts_recv.find(src_addr);    if (recv_iter != _pkts_recv.end())	_pkts_recv.erase(recv_iter);}boolMD5AuthHandler::MD5Key::packets_received(const IPv4& src_addr) const{    map<IPv4, bool>::const_iterator iter;    iter = _pkts_recv.find(src_addr);    if (iter == _pkts_recv.end())	return (false);    return (iter->second);}uint32_tMD5AuthHandler::MD5Key::last_seqno_recv(const IPv4& src_addr) const{    map<IPv4, uint32_t>::const_iterator iter;    iter = _lr_seqno.find(src_addr);    if (iter == _lr_seqno.end())	return (0);    return (iter->second);}voidMD5AuthHandler::MD5Key::set_last_seqno_recv(const IPv4& src_addr,					    uint32_t seqno){    map<IPv4, uint32_t>::iterator seqno_iter;    map<IPv4, bool>::iterator recv_iter;    //    // Set the seqno    //    seqno_iter = _lr_seqno.find(src_addr);    if (seqno_iter == _lr_seqno.end())	_lr_seqno.insert(make_pair(src_addr, seqno));    else	seqno_iter->second = seqno;    //    // Set the flag that a packet has been received    //    recv_iter = _pkts_recv.find(src_addr);    if (recv_iter == _pkts_recv.end())	_pkts_recv.insert(make_pair(src_addr, true));    else	recv_iter->second = true;}// ----------------------------------------------------------------------------// MD5AuthHandler implementationMD5AuthHandler::MD5AuthHandler(EventLoop& eventloop)    : _eventloop(eventloop){}const char*MD5AuthHandler::effective_name() const{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产高清一区二区| 成人一区在线观看| 一区二区三区免费| 一区二区三区不卡视频在线观看| 欧美国产成人在线| 国产精品久久久久永久免费观看 | 国产精品一线二线三线精华| 美女高潮久久久| 国产麻豆精品theporn| 国产精品12区| 91亚洲国产成人精品一区二三 | 欧美在线一二三| 91精品久久久久久蜜臀| 91精品国产美女浴室洗澡无遮挡| 日韩欧美国产一区二区在线播放 | 日韩毛片精品高清免费| 亚洲综合在线免费观看| 日韩高清在线一区| 国产精品夜夜嗨| 色婷婷激情一区二区三区| 欧美美女直播网站| 日韩欧美电影一二三| 亚洲精品一区二区三区香蕉| 国产精品久久久久久久久图文区 | 欧美一区二区三区视频免费| 精品噜噜噜噜久久久久久久久试看| 久久久久国产成人精品亚洲午夜| 国产精品色婷婷| 午夜影院久久久| 国产在线视频精品一区| 91福利在线导航| 精品sm捆绑视频| 亚洲激情在线激情| 国产一区二区三区精品视频| 一本一道久久a久久精品| 91精品一区二区三区在线观看| 国产三级久久久| 午夜伦理一区二区| 成人av在线播放网址| 91精品久久久久久蜜臀| 中文字幕日本乱码精品影院| 天天操天天干天天综合网| 波多野结衣中文字幕一区二区三区| 欧美日韩综合色| 国产精品乱人伦| 麻豆精品一区二区| 欧美喷水一区二区| 亚洲日本成人在线观看| 国产一区二区在线看| 欧美日韩国产大片| 一级日本不卡的影视| 国产99久久久国产精品潘金| 欧美一级片在线观看| 一区二区三区电影在线播| va亚洲va日韩不卡在线观看| 久久综合九色欧美综合狠狠| 日韩国产欧美在线播放| 色94色欧美sute亚洲线路二| 亚洲欧洲韩国日本视频| 国产成人精品亚洲日本在线桃色| 日韩欧美黄色影院| 日韩电影免费在线| 91精品国产综合久久久久久| 亚洲综合激情另类小说区| 99国产精品久久| 亚洲三级在线观看| 成人av在线看| 亚洲欧美日韩在线不卡| 成人亚洲一区二区一| 国产拍欧美日韩视频二区| 国产乱码字幕精品高清av| 精品国产一区二区三区久久久蜜月| 无码av中文一区二区三区桃花岛| 欧美亚洲日本国产| 亚洲国产精品久久久久秋霞影院| 欧美综合在线视频| 亚洲成人精品在线观看| 欧美视频日韩视频| 五月天激情综合| 欧美一区二区在线免费观看| 蜜臀av性久久久久av蜜臀妖精| 欧美电影免费观看高清完整版在线| 激情综合网天天干| 日本一区二区三区久久久久久久久不| 春色校园综合激情亚洲| 中文字幕日韩一区| 欧美日韩精品福利| 久久国产精品区| 国产区在线观看成人精品| a在线欧美一区| 性久久久久久久| 久久亚洲精品小早川怜子| 国产成人av一区| 亚洲一区中文在线| 欧美电视剧在线看免费| 处破女av一区二区| 亚洲靠逼com| 欧美刺激脚交jootjob| 国产成人午夜精品5599| 亚洲色图都市小说| 欧美一区二区三区在线视频| 国产大片一区二区| 亚洲一区在线观看免费观看电影高清| 欧美电影在线免费观看| 国产成人精品免费网站| 亚洲精品成a人| 久久精品视频在线免费观看| 日本韩国欧美三级| 精品综合久久久久久8888| 中文字幕一区二区日韩精品绯色 | 裸体歌舞表演一区二区| 亚洲国产精品二十页| 欧美日韩精品二区第二页| 国产精品一卡二卡在线观看| 亚洲va国产va欧美va观看| 久久精品一区二区三区不卡| 欧美视频一区二区三区在线观看| 国产乱人伦偷精品视频不卡| 亚洲成人中文在线| 亚洲欧洲无码一区二区三区| 欧美一区二区久久久| 欧美专区在线观看一区| 国产91丝袜在线播放| 日韩av一区二区三区四区| 亚洲另类色综合网站| 欧美韩国一区二区| 精品久久久三级丝袜| 欧美性色黄大片手机版| av在线不卡电影| 风间由美中文字幕在线看视频国产欧美| 亚洲成人在线免费| 一区二区三区毛片| 国产精品无码永久免费888| 日韩精品一区二区三区视频播放| 欧美性高清videossexo| zzijzzij亚洲日本少妇熟睡| 韩国一区二区三区| 久国产精品韩国三级视频| 午夜久久久影院| 午夜精品123| 亚洲国产精品一区二区久久恐怖片| 欧美高清在线视频| 亚洲国产精华液网站w| 久久嫩草精品久久久久| 日韩视频在线一区二区| 91精品啪在线观看国产60岁| 欧美午夜电影一区| 欧美日韩精品欧美日韩精品一综合 | 亚洲在线视频一区| 亚洲精品久久嫩草网站秘色| 国产精品国模大尺度视频| 中文字幕人成不卡一区| 亚洲欧洲av在线| 一区二区三区不卡视频在线观看| 一区二区三区美女| 日韩精品一二区| 九九热在线视频观看这里只有精品| 捆绑调教美女网站视频一区| 麻豆成人综合网| 国产伦精品一区二区三区免费| 激情文学综合网| 成人国产精品免费观看动漫 | 欧美日本国产一区| 欧美电影在线免费观看| 精品国产乱码久久久久久浪潮 | 欧美日本一区二区三区| 日韩欧美国产午夜精品| 久久久亚洲综合| 日韩一区欧美一区| 一区二区成人在线观看| 免费人成在线不卡| 国产高清久久久久| 色综合久久久久综合99| 在线综合视频播放| 国产亚洲欧洲997久久综合 | 欧美日韩大陆一区二区| 日韩精品中文字幕一区| 中文字幕电影一区| 午夜成人在线视频| 激情综合色丁香一区二区| 国产盗摄视频一区二区三区| 在线观看91视频| 久久日韩精品一区二区五区| 亚洲婷婷在线视频| 美女www一区二区| 天天色综合天天| www.欧美日韩| 日韩欧美电影一区| 亚洲最新视频在线播放| 精品一区二区在线视频| 欧亚一区二区三区| 久久久精品综合| 亚洲mv大片欧洲mv大片精品| 成人做爰69片免费看网站| 91精品国产综合久久久久| 成人欧美一区二区三区在线播放| 日本不卡高清视频| 色综合久久天天| 国产精品久久综合| 激情都市一区二区|