增加Tcp和Udp,尝试扩展
This commit is contained in:
parent
ebc113ab9b
commit
6aa57b3006
|
@ -12,11 +12,13 @@ private:
|
|||
void* _param;
|
||||
|
||||
public:
|
||||
virtual void Send(byte* buf, uint len) = 0;
|
||||
void Register(DataHandler handler, void* param = NULL);
|
||||
// 获取负载数据指针。外部可以直接填充数据
|
||||
virtual byte* GetPayload() = 0;
|
||||
virtual void Send(IP_TYPE type, uint len) = 0;
|
||||
void Register(IP_TYPE type, DataHandler handler, void* param = NULL);
|
||||
|
||||
protected:
|
||||
virtual void OnReceive(byte* buf, uint len);
|
||||
virtual void OnReceive(byte* buf, uint len) = 0;
|
||||
};
|
||||
|
||||
// 以太网
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
#include "Tcp.h"
|
|
@ -0,0 +1,18 @@
|
|||
#ifndef __Tcp_H__
|
||||
#define __Tcp_H__
|
||||
|
||||
#include "Sys.h"
|
||||
#include "Net.h"
|
||||
#include "Ethernet.h"
|
||||
|
||||
// Tcp协议
|
||||
class Tcp
|
||||
{
|
||||
private:
|
||||
IEthernetAdapter* _adapter;
|
||||
|
||||
public:
|
||||
Tcp(IEthernetAdapter* adapter);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,28 @@
|
|||
#include "Udp.h"
|
||||
|
||||
Udp::Udp(IEthernetAdapter* adapter, ushort bufferSize)
|
||||
{
|
||||
_adapter = adapter;
|
||||
_Buffer = new byte[bufferSize];
|
||||
_header = (UDP_HEADER*)_Buffer;
|
||||
}
|
||||
|
||||
Udp::Udp()
|
||||
{
|
||||
_adapter = NULL;
|
||||
Register(NULL);
|
||||
|
||||
if(_Buffer) delete _Buffer;
|
||||
_Buffer = NULL
|
||||
}
|
||||
|
||||
// 向目标地址发送数据
|
||||
void Udp::Send(byte* buf, uint len, byte[4] remoteip, ushort remoteport)
|
||||
{
|
||||
_adapter->Send(IP_UDP, buf, len);
|
||||
}
|
||||
|
||||
void Udp::Listen()
|
||||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
#ifndef __Udp_H__
|
||||
#define __Udp_H__
|
||||
|
||||
#include "Sys.h"
|
||||
#include "Net.h"
|
||||
#include "Ethernet.h"
|
||||
|
||||
// UDP协议
|
||||
class Udp
|
||||
{
|
||||
private:
|
||||
IEthernetAdapter* adapter;
|
||||
byte* _Buffer;
|
||||
UDP_HEADER* _header;
|
||||
|
||||
public:
|
||||
Udp(IEthernetAdapter* adapter, ushort bufferSize = 1400);
|
||||
virtual ~Udp();
|
||||
|
||||
ushort Port; // 本地端口。0表示监听所有端口
|
||||
|
||||
void Listen();
|
||||
|
||||
// 向目标地址发送数据,数据必须提前填充到负载里面
|
||||
void Send(uint len, byte[4] remoteip, ushort remoteport);
|
||||
// 获取负载数据指针。外部可以直接填充数据
|
||||
byte* GetPayload() { return _Buffer + sizeof(UDP_HEADER); }
|
||||
// 注册回调函数
|
||||
void Register(DatHandler* handler, void* param = NULL);
|
||||
private:
|
||||
DataHandler _handler;
|
||||
void* _Param;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -45,7 +45,7 @@ TinyIP::TinyIP(Enc28j60* enc, byte ip[4], byte mac[6])
|
|||
seqnum = 0xa;
|
||||
|
||||
// 分配缓冲区。比较大,小心栈空间不够
|
||||
if(!Buffer) Buffer = new byte[BufferSize + 1];
|
||||
if(!Buffer) Buffer = new byte[BufferSize];
|
||||
assert_param(Buffer);
|
||||
assert_param(Sys.CheckMemory());
|
||||
|
||||
|
@ -816,6 +816,6 @@ void TinyIP::DHCPConfig(byte* buf)
|
|||
}
|
||||
}
|
||||
|
||||
void TinyIP::Send(byte* buf, uint len)
|
||||
void TinyIP::Send(IP_TYPE type, uint len)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "Net/Ethernet.h"
|
||||
|
||||
// 精简IP类
|
||||
class TinyIP //: protected IEthernetAdapter
|
||||
class TinyIP : protected IEthernetAdapter
|
||||
{
|
||||
private:
|
||||
Enc28j60* _enc;
|
||||
|
@ -41,7 +41,10 @@ private:
|
|||
void PareOption(byte* buf, int len);
|
||||
void DHCPConfig(byte* buf);
|
||||
|
||||
virtual void Send(byte* buf, uint len);
|
||||
virtual void Send(IP_TYPE type, uint len);
|
||||
// 获取负载数据指针。外部可以直接填充数据
|
||||
virtual byte* GetPayload();
|
||||
virtual void OnReceive(byte* buf, uint len);
|
||||
public:
|
||||
byte IP[4];
|
||||
byte Mask[4];
|
||||
|
|
Loading…
Reference in New Issue