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

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

?? fromfile.cc

?? Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
?? CC
字號:
// -*- mode: c++; c-basic-offset: 4 -*-/* * fromfile.{cc,hh} -- provides convenient, fast access to files * Eddie Kohler * * Copyright (c) 1999-2000 Massachusetts Institute of Technology * Copyright (c) 2001-2003 International Computer Science Institute * Copyright (c) 2004-2007 The Regents of the University of California * * 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 Click 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 Click LICENSE file; the license in that file is * legally binding. */#include <click/config.h>#include "fromfile.hh"#include <click/confparse.hh>#include <click/error.hh>#include <click/element.hh>#include <click/straccum.hh>#include <click/userutils.hh>#include "fakepcap.hh"#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#ifdef ALLOW_MMAP# include <sys/mman.h>#endifCLICK_DECLSFromFile::FromFile()    : _fd(-1), _buffer(0), _data_packet(0),#ifdef ALLOW_MMAP      _mmap(true),#endif      _filename(), _pipe(0), _landmark_pattern("%f"), _lineno(0){}intFromFile::configure_keywords(Vector<String> &conf, Element *e, ErrorHandler *errh){#ifndef ALLOW_MMAP    bool mmap = false;#else    bool mmap = _mmap;#endif    if (cp_va_kparse_remove_keywords(conf, e, errh,		    "MMAP", 0, cpBool, &mmap,		    cpEnd) < 0)	return -1;#ifdef ALLOW_MMAP    _mmap = mmap;#else    if (mmap)	errh->warning("'MMAP true' is not supported on this platform");#endif    return 0;}StringFromFile::print_filename() const{    if (!_filename || _filename == "-")	return String::make_stable("<stdin>", 7);    else	return _filename;}StringFromFile::landmark(const String &landmark_pattern) const{    StringAccum sa;    const char *e = landmark_pattern.end();    for (const char *s = landmark_pattern.begin(); s < e; s++)	if (s < e - 1 && s[0] == '%' && s[1] == 'f') {	    sa << print_filename();	    s++;	} else if (s < e - 1 && s[0] == '%' && s[1] == 'l') {	    sa << _lineno;	    s++;	} else if (s < e - 1 && s[0] == '%' && s[1] == '%') {	    sa << '%';	    s++;	} else	    sa << *s;    return sa.take_string();}intFromFile::error(ErrorHandler *errh, const char *format, ...) const{    if (!errh)	errh = ErrorHandler::default_handler();    va_list val;    va_start(val, format);    int r = errh->xmessage(landmark(), ErrorHandler::e_error, format, val);    va_end(val);    return r;}intFromFile::warning(ErrorHandler *errh, const char *format, ...) const{    if (!errh)	errh = ErrorHandler::default_handler();    va_list val;    va_start(val, format);    int r = errh->xmessage(landmark(), ErrorHandler::e_warning_annotated, format, val);    va_end(val);    return r;}#ifdef ALLOW_MMAPstatic voidmunmap_destructor(unsigned char *data, size_t amount){    if (munmap((caddr_t)data, amount) < 0)	click_chatter("FromFile: munmap: %s", strerror(errno));}intFromFile::read_buffer_mmap(ErrorHandler *errh){    if (_mmap_unit == 0) {	size_t page_size = getpagesize();	_mmap_unit = (WANT_MMAP_UNIT / page_size) * page_size;	_mmap_off = 0;	// don't report most errors on the first time through	errh = ErrorHandler::silent_handler();    }    // get length of file    struct stat statbuf;    if (fstat(_fd, &statbuf) < 0)	return error(errh, "stat: %s", strerror(errno));    // check for end of file    // But return -1 if we have not mmaped before: it might be a pipe, not    // true EOF.    if (_mmap_off >= statbuf.st_size)	return (_mmap_off == 0 ? -1 : 0);    // actually mmap    _len = _mmap_unit;    if ((off_t)(_mmap_off + _len) > statbuf.st_size)	_len = statbuf.st_size - _mmap_off;    void *mmap_data = mmap(0, _len, PROT_READ, MAP_SHARED, _fd, _mmap_off);    if (mmap_data == MAP_FAILED)	return error(errh, "mmap: %s", strerror(errno));    _data_packet = Packet::make((unsigned char *)mmap_data, _len, munmap_destructor);    _buffer = _data_packet->data();    _file_offset = _mmap_off;    _mmap_off += _len;# ifdef HAVE_MADVISE    // don't care about errors    (void) madvise((caddr_t)mmap_data, _len, MADV_SEQUENTIAL);# endif    return 1;}#endifintFromFile::read_buffer(ErrorHandler *errh){    if (_data_packet)	_data_packet->kill();    _data_packet = 0;    _file_offset += _len;    _pos -= _len;		// adjust _pos by _len: it might validly point				// beyond _len    _len = 0;#ifdef ALLOW_MMAP    if (_mmap) {	int result = read_buffer_mmap(errh);	if (result >= 0)	    return result;	// else, try a regular read	_mmap = false;	(void) lseek(_fd, _mmap_off, SEEK_SET);	_len = 0;    }#endif    _data_packet = Packet::make(0, 0, BUFFER_SIZE, 0);    if (!_data_packet)	return error(errh, strerror(ENOMEM));    _buffer = _data_packet->data();    unsigned char *data = _data_packet->data();    assert(_data_packet->headroom() == 0);    while (_len < BUFFER_SIZE) {	ssize_t got = ::read(_fd, data + _len, BUFFER_SIZE - _len);	if (got > 0)	    _len += got;	else if (got == 0)	// premature end of file	    return _len;	else if (got < 0 && errno != EINTR && errno != EAGAIN)	    return error(errh, strerror(errno));    }    return _len;}intFromFile::read(void *vdata, uint32_t dlen, ErrorHandler *errh){    unsigned char *data = reinterpret_cast<unsigned char *>(vdata);    uint32_t dpos = 0;    while (dpos < dlen) {	if (_pos < _len) {	    uint32_t howmuch = dlen - dpos;	    if (howmuch > _len - _pos)		howmuch = _len - _pos;	    memcpy(data + dpos, _buffer + _pos, howmuch);	    dpos += howmuch;	    _pos += howmuch;	}	if (dpos < dlen && read_buffer(errh) <= 0)	    return dpos;    }    return dlen;}intFromFile::read_line(String &result, ErrorHandler *errh, bool temporary){    // first, try to read a line from the current buffer    const unsigned char *s = _buffer + _pos;    const unsigned char *e = _buffer + _len;    while (s < e && *s != '\n' && *s != '\r')	s++;    if (s < e && (*s == '\n' || s + 1 < e)) {	s += (*s == '\r' && s[1] == '\n' ? 2 : 1);	int new_pos = s - _buffer;	if (temporary)	    result = String::make_stable((const char *) (_buffer + _pos), new_pos - _pos);	else	    result = String((const char *) (_buffer + _pos), new_pos - _pos);	_pos = new_pos;	_lineno++;	return 1;    }    // otherwise, build up a line    StringAccum sa;    sa.append(_buffer + _pos, _len - _pos);    while (1) {	int errcode = read_buffer(errh);	if (errcode < 0 || (errcode == 0 && !sa))	    return errcode;	// check doneness	bool done;	if (sa && sa.back() == '\r') {	    if (_len > 0 && _buffer[0] == '\n')		sa << '\n', _pos++;	    done = true;	} else if (errcode == 0) {	    _pos = _len;	    done = true;	} else {	    s = _buffer, e = _buffer + _len;	    while (s < e && *s != '\n' && *s != '\r')		s++;	    if (s < e && (*s == '\n' || s + 1 < e)) {		s += (*s == '\r' && s[1] == '\n' ? 2 : 1);		sa.append(_buffer, s - _buffer);		_pos = s - _buffer;		done = true;	    } else {		sa.append(_buffer, _len);		done = false;	    }	}	if (done) {	    result = sa.take_string();	    _lineno++;	    return 1;	}    }}intFromFile::peek_line(String &result, ErrorHandler *errh, bool temporary){    int before_pos = _pos;    int retval = read_line(result, errh, temporary);    if (retval > 0) {	_pos = before_pos;	_lineno--;    }    return retval;}intFromFile::seek(off_t want, ErrorHandler* errh){    if (want >= _file_offset && want < (off_t) (_file_offset + _len)) {	_pos = want;	return 0;    }#ifdef ALLOW_MMAP    if (_mmap) {	_mmap_off = (want / _mmap_unit) * _mmap_unit;	_pos = _len + want - _mmap_off;	return 0;    }#endif    // check length of file    struct stat statbuf;    if (fstat(_fd, &statbuf) < 0)	return error(errh, "stat: %s", strerror(errno));    if (S_ISREG(statbuf.st_mode) && statbuf.st_size && want > statbuf.st_size)	return errh->error("FILEPOS out of range");    // try to seek    if (lseek(_fd, want, SEEK_SET) != (off_t) -1) {	_pos = _len;	_file_offset = want - _len;	return 0;    }    // otherwise, read data    while ((off_t) (_file_offset + _len) < want && _len)	if (read_buffer(errh) < 0)	    return -1;    _pos = want - _file_offset;    return 0;}intFromFile::initialize(ErrorHandler *errh){    // open file    if (!_filename || _filename == "-")	_fd = STDIN_FILENO;    else	_fd = open(_filename.c_str(), O_RDONLY);    if (_fd < 0)	return errh->error("%s: %s", print_filename().c_str(), strerror(errno));  retry_file:#ifdef ALLOW_MMAP    _mmap_unit = 0;#endif    _file_offset = 0;    _pos = _len = 0;    int result = read_buffer(errh);    if (result < 0)	return -1;    else if (result == 0)	return error(errh, "empty file");    // check for a gziped or bzip2d dump    if (_fd == STDIN_FILENO || _pipe)	/* cannot handle gzip or bzip2 */;    else if (compressed_data(_buffer, _len)) {	close(_fd);	_fd = -1;	if (!(_pipe = open_uncompress_pipe(_filename, _buffer, _len, errh)))	    return -1;	_fd = fileno(_pipe);	goto retry_file;    }    return 0;}voidFromFile::take_state(FromFile &o, ErrorHandler *errh){    _fd = o._fd;    o._fd = -1;    _pipe = o._pipe;    o._pipe = 0;    _buffer = o._buffer;    _pos = o._pos;    _len = o._len;    _data_packet = o._data_packet;    o._data_packet = 0;#ifdef ALLOW_MMAP    if (_mmap != o._mmap)	errh->warning("different MMAP states");    _mmap = o._mmap;    _mmap_unit = o._mmap_unit;    _mmap_off = o._mmap_off;#endif    _file_offset = o._file_offset;}voidFromFile::cleanup(){    if (_pipe)	pclose(_pipe);    else if (_fd >= 0 && _fd != STDIN_FILENO)	close(_fd);    _pipe = 0;    _fd = -1;    if (_data_packet)	_data_packet->kill();    _data_packet = 0;}const uint8_t *FromFile::get_aligned(size_t size, void *buffer, ErrorHandler *errh){    // we may need to read bits of the file    if (_pos + size <= _len) {	const uint8_t *chunk = _buffer + _pos;	_pos += size;#if HAVE_INDIFFERENT_ALIGNMENT	return reinterpret_cast<const uint8_t *>(chunk);#else	// make a copy if required for alignment	if (((uintptr_t)(chunk) & 3) == 0)	    return reinterpret_cast<const uint8_t *>(chunk);	else {	    memcpy(buffer, chunk, size);	    return reinterpret_cast<uint8_t *>(buffer);	}#endif    } else if (read(buffer, size, errh) == (int)size)	return reinterpret_cast<uint8_t *>(buffer);    else	return 0;}const uint8_t *FromFile::get_unaligned(size_t size, void *buffer, ErrorHandler *errh){    // we may need to read bits of the file    if (_pos + size <= _len) {	const uint8_t *chunk = _buffer + _pos;	_pos += size;	return reinterpret_cast<const uint8_t *>(chunk);    } else if (read(buffer, size, errh) == (int)size)	return reinterpret_cast<uint8_t *>(buffer);    else	return 0;}StringFromFile::get_string(size_t size, ErrorHandler *errh){    // we may need to read bits of the file    if (_pos + size <= _len) {	const uint8_t *chunk = _buffer + _pos;	_pos += size;	return String::make_stable((const char *) chunk, size);    } else {	String s = String::make_garbage(size);	if (read(s.mutable_data(), size, errh) == (int) size)	    return s;	else	    return String();    }}Packet *FromFile::get_packet(size_t size, uint32_t sec, uint32_t subsec, ErrorHandler *errh){    if (_pos + size <= _len) {	if (Packet *p = _data_packet->clone()) {	    p->shrink_data(_buffer + _pos, size);	    p->timestamp_anno().assign(sec, subsec);	    _pos += size;	    return p;	}    } else {	if (WritablePacket *p = Packet::make(0, 0, size, 0)) {	    if (read(p->data(), size, errh) < (int)size) {		p->kill();		return 0;	    } else {		p->timestamp_anno().assign(sec, subsec);		return p;	    }	}    }    error(errh, strerror(ENOMEM));    return 0;}Packet *FromFile::get_packet_from_data(const void *data_void, size_t data_size, size_t size, uint32_t sec, uint32_t subsec, ErrorHandler *errh){    const uint8_t *data = reinterpret_cast<const uint8_t *>(data_void);    if (data >= _buffer && data + size <= _buffer + _len) {	if (Packet *p = _data_packet->clone()) {	    p->shrink_data(data, size);	    p->timestamp_anno().assign(sec, subsec);	    return p;	}    } else {	if (WritablePacket *p = Packet::make(0, 0, size, 0)) {	    memcpy(p->data(), data, data_size);	    if (data_size < size		&& read(p->data() + data_size, size - data_size, errh) != (int)(size - data_size)) {		p->kill();		return 0;	    }	    p->timestamp_anno().assign(sec, subsec);	    return p;	}    }    error(errh, strerror(ENOMEM));    return 0;}StringFromFile::filename_handler(Element *e, void *thunk){    FromFile *fd = reinterpret_cast<FromFile *>((uint8_t *)e + (intptr_t)thunk);    return fd->print_filename();}StringFromFile::filesize_handler(Element *e, void *thunk){    FromFile *fd = reinterpret_cast<FromFile *>((uint8_t *)e + (intptr_t)thunk);    struct stat s;    if (fd->_fd >= 0 && fstat(fd->_fd, &s) >= 0 && S_ISREG(s.st_mode))	return String(s.st_size);    else	return "-";}StringFromFile::filepos_handler(Element* e, void* thunk){    FromFile* fd = reinterpret_cast<FromFile*>((uint8_t*)e + (intptr_t)thunk);    return String(fd->_file_offset + fd->_pos);}intFromFile::filepos_write_handler(const String& str, Element* e, void* thunk, ErrorHandler* errh){    off_t offset;    if (!cp_file_offset(cp_uncomment(str), &offset))	return errh->error("argument must be file offset");    FromFile* fd = reinterpret_cast<FromFile*>((uint8_t*)e + (intptr_t)thunk);    return fd->seek(offset, errh);}voidFromFile::add_handlers(Element* e, bool filepos_writable) const{    intptr_t offset = (const uint8_t *)this - (const uint8_t *)e;    e->add_read_handler("filename", filename_handler, (void *)offset);    e->add_read_handler("filesize", filesize_handler, (void *)offset);    e->add_read_handler("filepos", filepos_handler, (void *)offset);    if (filepos_writable)	e->add_write_handler("filepos", filepos_write_handler, (void *)offset);}CLICK_ENDDECLSELEMENT_REQUIRES(userlevel|ns FakePcap)ELEMENT_PROVIDES(FromFile)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品久久不卡毛片| 欧美xxxxxxxx| 国产盗摄一区二区| 国产综合色在线视频区| 国产福利一区二区| 国产精品69久久久久水密桃| 国产91在线|亚洲| av在线播放一区二区三区| 成人中文字幕合集| 成人国产精品视频| 91片黄在线观看| 欧美亚洲尤物久久| 日韩一级二级三级| 精品国产91洋老外米糕| 久久久www成人免费毛片麻豆| 久久伊人中文字幕| 国产精品三级视频| 夜夜嗨av一区二区三区网页 | 国产精品免费丝袜| 亚洲欧洲日韩一区二区三区| 亚洲黄色免费网站| 日本美女视频一区二区| 精品在线免费观看| 成人av资源在线| 欧美精品国产精品| 久久蜜臀精品av| 一区二区三区在线看| 日本成人在线一区| 国产a视频精品免费观看| 91免费版在线看| 欧美日韩的一区二区| 久久免费视频一区| 亚洲精品成人天堂一二三| 蜜桃精品在线观看| 91色婷婷久久久久合中文| 91精品国产aⅴ一区二区| 国产欧美一区二区精品秋霞影院| 一区二区三区在线免费播放 | 久久久久久久久久美女| 亚洲天堂精品在线观看| 日本美女一区二区三区视频| 99久久精品一区| 精品国产三级a在线观看| 亚洲手机成人高清视频| 国精产品一区一区三区mba桃花| 97久久超碰国产精品电影| 2021国产精品久久精品| 亚洲二区在线观看| av在线不卡电影| 国产视频911| 日本伊人色综合网| 91九色最新地址| 中文av一区二区| 黄页网站大全一区二区| 7777女厕盗摄久久久| 玉足女爽爽91| 91在线丨porny丨国产| 日本一区免费视频| 韩国精品在线观看| 日韩欧美国产一二三区| 日韩高清在线观看| 91福利社在线观看| 亚洲黄色尤物视频| 懂色av中文一区二区三区| 久久综合一区二区| 精品一二三四在线| 精品国产三级a在线观看| 日韩精品欧美精品| 制服丝袜一区二区三区| 午夜免费欧美电影| 3d动漫精品啪啪| 日本一不卡视频| 日韩欧美资源站| 美女一区二区三区在线观看| 欧美一区二区视频网站| 偷偷要91色婷婷| 日韩一区二区三| 激情久久五月天| 国产日韩欧美亚洲| 99久久久无码国产精品| 亚洲人成在线观看一区二区| 色综合久久久久久久久| 一区二区在线电影| 欧美日韩久久一区| 日韩激情av在线| 精品国产露脸精彩对白| 黄网站免费久久| 国产精品免费网站在线观看| 色激情天天射综合网| 亚洲福利视频导航| 日韩精品一区二区三区四区视频| 久色婷婷小香蕉久久| 中文字幕乱码亚洲精品一区| 99久久夜色精品国产网站| 亚洲午夜精品17c| 日韩视频免费观看高清完整版 | 国产免费久久精品| 91视频com| 美女网站在线免费欧美精品| 久久久精品日韩欧美| 一本一道久久a久久精品| 亚洲一区国产视频| 精品欧美一区二区久久| 岛国一区二区三区| 天天色 色综合| 欧美国产1区2区| 欧美探花视频资源| 国产一区二区主播在线| 成人欧美一区二区三区在线播放| 欧美亚洲免费在线一区| 激情欧美日韩一区二区| 亚洲同性同志一二三专区| 欧美一区二区国产| 99视频精品全部免费在线| 亚洲不卡av一区二区三区| 久久久亚洲精品一区二区三区| 99久久久无码国产精品| 激情综合网av| 一二三四社区欧美黄| 国产亚洲综合在线| 欧美精品一二三| 99精品桃花视频在线观看| 麻豆成人91精品二区三区| 亚洲欧美日韩一区二区| 久久精品人人爽人人爽| 欧美一区2区视频在线观看| 成人ar影院免费观看视频| 精品中文字幕一区二区小辣椒| 亚洲女人小视频在线观看| 久久久综合精品| 日韩一区二区电影| 欧美日韩国产综合视频在线观看| 丁香另类激情小说| 国产专区综合网| 日本91福利区| 秋霞影院一区二区| 亚洲第一福利一区| 一区二区成人在线视频| 国产日韩欧美精品在线| 久久午夜国产精品| 日韩欧美黄色影院| 日韩视频一区在线观看| 6080午夜不卡| 欧美日韩mp4| 欧美伦理视频网站| 7777精品伊人久久久大香线蕉的| 91福利精品视频| 欧美亚洲综合色| 欧美视频一区二区三区| 欧美性xxxxxxxx| 欧美日韩黄色影视| 欧美精品一卡二卡| 欧美精品乱人伦久久久久久| 欧美日韩中文另类| 欧美日韩三级一区| 777午夜精品免费视频| 91精品中文字幕一区二区三区| 欧美三级日韩三级| 日韩欧美卡一卡二| 久久噜噜亚洲综合| 国产精品国产三级国产普通话99| 国产精品久久久99| 亚洲精品免费一二三区| 亚洲综合图片区| 亚洲成人av一区二区| 日本va欧美va欧美va精品| 精品在线亚洲视频| av动漫一区二区| 欧美无乱码久久久免费午夜一区| 欧美午夜精品理论片a级按摩| 欧美三级蜜桃2在线观看| 91精品国产综合久久久久| 精品噜噜噜噜久久久久久久久试看| 精品国一区二区三区| 中文字幕高清一区| 亚洲综合久久av| 黄色小说综合网站| 97久久精品人人澡人人爽| 欧美日韩不卡一区二区| ww亚洲ww在线观看国产| 国产精品久久久99| 日本vs亚洲vs韩国一区三区 | 日韩电影免费在线看| 国产精品一区免费视频| 色先锋aa成人| 日韩欧美一区在线观看| 国产精品―色哟哟| 亚洲成av人片www| 成人激情午夜影院| 欧美一区2区视频在线观看| 国产精品久久网站| 日韩av不卡在线观看| 99麻豆久久久国产精品免费 | 色综合天天在线| 欧美一区二区精品在线| 亚洲欧美福利一区二区| 久草这里只有精品视频| 欧美最新大片在线看| 国产视频亚洲色图| 久久福利视频一区二区|