⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motcp.cpp

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 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 + -