📄 motcp.cpp
字号:
/*! \file MoTcp.cpp \brief TCP僾儘僩僐儖幚憰僋儔僗 Copyright (c) 2004 Yamami All rights reserved. License=MIT/X License \author Yamami \version $Revision: 1.1 $ \date create:2004/10/11 update:$Date: 2004/10/31 14:29:43 $*//*! \class MoTcp * \brief IP僾儘僩僐儖幚憰僋儔僗 */#include "MoTcp.h"#include "MonesConfig.h"#include "MonesGlobal.h"/*! \brief initialize MoTcp 僐儞僗僩儔僋僞 \author Yamami \date create:2004/10/11 update:$Date: 2004/10/31 14:29:43 $*/MoTcp::MoTcp(){}/*! \brief initialize MoTcp initTcp \author Yamami \param AbstractMonic *pminsNic [in] NIC僋儔僗傊偺億僀儞僞 \date create:2004/10/11 update:$Date: 2004/10/31 14:29:43 $*/void MoTcp::initTcp(AbstractMonic *pminsNic ) { //NIC僋儔僗傪曐帩 insAbstractNic = pminsNic; return;}/*! \brief initialize MoTcp 僨僗僋僩儔僋僞 \author Yamami \date create:2004/10/11 update:$Date: 2004/10/31 14:29:43 $*/MoTcp::~MoTcp() {}/*! \brief send_tcp TCP僨乕僞憲弌張棟 \param T_TSOCK *sock [in] 捠怣憡庤傪巜偡TCP僜働僢僩峔憿懱 \param char flags [in] 惂屼僼儔僌 \param struct Packet *packet [in] 僜働僢僩 \param char *data [in] 憲怣僨乕僞 \param dword size [in] 憲怣僨乕僞偺僒僀僘 \return 柍偟 \author Yamami \date create:2004/09/20 update:2004/09/20*/void send_tcp(T_TSOCK *sock, char flags, struct Packet *packet, char *data, dword size){ dword tsize; dword sum; char *ip_hdr; char *tcp_hdr; char *tcp_body; //僷働僢僩偺億僀儞僞傪丄僀乕僒僱僢僩僿僢僟暘偲偡傞丅 packet->ptr = packet->buffer + SIZEOF_ETHERHDR; //僷働僢僩偺僒僀僘偼丄TCP僿僢僟+僨乕僞僒僀僘 packet->size = SIZEOF_TCPHDR + size; //IP僿僢僟傊偺億僀儞僞偼丄僷働僢僩偺億僀儞僞 ip_hdr = packet->ptr; //TCP僿僢僟偺億僀儞僞偼丄IP僿僢僟偐傜丄IP僿僢僟僒僀僘暘僾儔僗 tcp_hdr = ip_hdr + SIZEOF_IPHDR; //TCP儃僨傿傊偺億僀儞僞偼丄TCP僿僢僟偐傜丄TCP僿僢僟僒僀僘暘 tcp_body = tcp_hdr + SIZEOF_TCPHDR; // TCP僨乕僞晹偺僙僢僩 memcpy(tcp_body, data, size);/* // TCP僿僢僟偺僙僢僩 packet_put_n(tcp_hdr, tcphdr_src_port, sock->myport); packet_put_n(tcp_hdr, tcphdr_dest_port, sock->youport); packet_put_nl(tcp_hdr, tcphdr_opt_mss, 0x020405b4); // kind = 2, len = 4, mss = 1460 tcp_hdr[tcphdr_len] &= 0x0f; tcp_hdr[tcphdr_len] |= (5 + 1) << 4; // Unit is 32bit words tcp_hdr[tcphdr_flag] = flags & 0x3f; packet_put_n(tcp_hdr, tcphdr_chksum, 0); packet_put_n(tcp_hdr, tcphdr_urg, 0); packet_put_nl(tcp_hdr, tcphdr_ack, sock->ack); packet_put_nl(tcp_hdr, tcphdr_seq, sock->seq); // pseudo header & checksum packet_put_nl(tcp_hdr, pseudo_dest, node_ip_addr); packet_put_nl(tcp_hdr, pseudo_src, sock->ip); tcp_hdr[pseudo_zero] = 0; tcp_hdr[pseudo_proto] = 6; tsize = size + SIZEOF_TCPHDR; if (size & 0x01) { // size is odd //tsize++; tcp_hdr[tsize] = 0x00; } packet_put_n(tcp_hdr, pseudo_len, tsize); sum = calc_chksum(tcp_hdr + pseudo_src, tsize + 12); packet_put_n(tcp_hdr, tcphdr_chksum, sum); // IP僿僢僟偺僙僢僩 ip_hdr[iphdr_protocol] = IP_PROTO_TCP; packet_put_nl(ip_hdr, iphdr_src_addr, node_ip_addr); packet_put_nl(ip_hdr, iphdr_dest_addr, sock->ip); //IP僋儔僗偱憲怣張棟 ip_output(packet); //僔乕働儞僗斣崋張棟 if (flags & (TCP_FLAG_SYN | TCP_FLAG_FIN)) { sock->seq++; } else if (size > 0) { sock->seq += size; }*/}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -