Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / 2 / lab.04.by mice / hail / cdm_hailer

.h
Скачиваний:
10
Добавлен:
17.04.2013
Размер:
2.54 Кб
Скачать
/*******************************************************************************
* file:         cdm_hailer.h                                                   *
* version:      0.9.0                                                          *
* author:       d-evil [tmd] (mailto:d-evil.tmd@mail.ru)                       *
* description:  not available                                                  *
*******************************************************************************/

#ifndef CDM_HAILER_INCLUDED
#define CDM_HAILER_INCLUDED

#include <malloc.h>
#include <winsock2.h>
#include <time.h>

#include "cdm_addr_info.h"
#include "check_sum.h"


////////////////////////////////////////////////////////////////////////////////
// icmp header declaration
struct icmp_h {
	unsigned char type;
	unsigned char code;
	unsigned short check_sum;
	unsigned short id;
	unsigned short num;
};


////////////////////////////////////////////////////////////////////////////////
// icmp header declaration
struct ip_h{
	unsigned char  len:4;
	unsigned char  ver:4;
	unsigned char  type_of_service;
	unsigned short total_len;
	unsigned short id;
	unsigned short flags;
	unsigned char  ttl;
	unsigned char  proto;
	unsigned short checksum;
	unsigned int   sourceIP;
	unsigned int   destIP;
};


struct sdm_hail_res {
	clock_t rtime;
	unsigned int num;
	unsigned char ttl;
};


////////////////////////////////////////////////////////////////////////////////
// cdm_hailer declaration
class cdm_hailer {
public:
	cdm_hailer();
	~cdm_hailer();

	cdm_addr_info *iaddr() { return &_iaddr; }
	sdm_hail_res *hail_reply() const { return _hail_res; }
	int pckt_sz() const { return _pckt_sz; }
	int set_pckt_sz(const int pckt_sz) { return _pckt_sz = pckt_sz; }
	int mx_pckt_sz() const { return MX_BUF_SZ - sizeof(ip_h) - sizeof(icmp_h); }

	int target(const char *const host, const int pckt_sz = DEF_PCKT_SZ);
	int link();

	int can_read(const int timeout = 200);
	int hail_it(const int num = 0);
	int listen_it(const int timeout_ms = 200);

private:
	int _init();
	int _free();

protected:
	////////////////////////////////////////////////////////////////////////////
	// protected constants
	static const int ICMP_ECHO		= 8;

	static const int MX_BUF_SZ		= 0xFFFF;
	static const int DEF_PCKT_SZ	= 32;

	cdm_addr_info _iaddr;

	char *_snd_buf;
	char *_rcv_buf;

	int _pckt_sz;

	SOCKET _sock;
	sdm_hail_res  *_hail_res;

	unsigned short _id;
};



#endif
Соседние файлы в папке hail