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

📄 tcpconnection.sm

📁 SMC takes a state machine stored in a .sm file and generates a State pattern in twelve programming l
💻 SM
📖 第 1 页 / 共 2 页
字号:
       segment.getSourcePort() == ctxt.getFarPort() &&       segment.getAcknowledgeNumber() == ctxt.getSequenceNumber()]        CLOSED        {            closeSocket();            closed("");        }    CloseAckTimeout        CLOSED        {            closeSocket();            closed("");        }}FIN_WAIT_1Entry{    startTimer("CLOSE_ACK_TIMER",               TcpConnection.ACK_TIMEOUT);}Exit{    stopTimer("CLOSE_ACK_TIMER");}{    ACK(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == true &&       segment.getSourcePort() == ctxt.getFarPort() &&       segment.getAcknowledgeNumber() == ctxt.getSequenceNumber()]        FIN_WAIT_2        {}    FIN(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == true &&       segment.getSourcePort() == ctxt.getFarPort()]        CLOSING        {            send(TcpSegment.ACK,                 null,                 0,                 0,                 segment);        }    FIN_ACK(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == true &&       segment.getSourcePort() == ctxt.getFarPort() &&       segment.getAcknowledgeNumber() == ctxt.getSequenceNumber()]        TIME_WAIT        {            send(TcpSegment.ACK,                 null,                 0,                 0,                 segment);        }    CloseAckTimeout        FIN_WAIT_2        {            closeSocket();            closed("");        }}FIN_WAIT_2{    FIN(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == true &&       segment.getSourcePort() == ctxt.getFarPort()]        TIME_WAIT        {            send(TcpSegment.ACK,                 null,                 0,                 0,                 segment);        }}CLOSINGEntry{    startTimer("CLOSE_ACK_TIMER",               TcpConnection.ACK_TIMEOUT);}Exit{    stopTimer("CLOSE_ACK_TIMER");}{    ACK(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == true &&       segment.getSourcePort() == ctxt.getFarPort() &&       segment.getAcknowledgeNumber() == ctxt.getSequenceNumber()]        TIME_WAIT        {}    CloseAckTimeout        TIME_WAIT        {            closeSocket();            closed("");        }    // Ignore undefined transitions.    UNDEF(segment: TcpSegment)		nil        {}}TIME_WAITEntry{    startTimer("CLOSE_TIMER", TcpConnection.CLOSE_TIMEOUT);}{    CloseTimeout        CLOSED        {            closeSocket();            closed("");        }    // Ignore undefined transitions.    UNDEF(segment: TcpSegment)		nil        {}}Default{    PassiveOpen(port: int)        nil        {            openFailed("already open");        }    ActiveOpen(address: InetAddress, port: int)        nil        {            openFailed("already open");        }    Transmit(data: byte[], offset: int, size: int)        nil        {            transmitFailed("connection not established");        }    // The default action when an unknown client sends us a    // segment is to reset the unknown client but remain in    // the current state for a segment from the real client.    FIN(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == false ||       segment.getSourcePort() != ctxt.getFarPort()]        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    SYN(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == false ||       segment.getSourcePort() != ctxt.getFarPort()]        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    PSH(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == false ||       segment.getSourcePort() != ctxt.getFarPort()]        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    ACK(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == false ||       segment.getSourcePort() != ctxt.getFarPort()]        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    URG(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == false ||       segment.getSourcePort() != ctxt.getFarPort()]        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    FIN_ACK(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == false ||       segment.getSourcePort() != ctxt.getFarPort()]        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    SYN_ACK(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == false ||       segment.getSourcePort() != ctxt.getFarPort()]        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }   PSH_ACK(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == false ||       segment.getSourcePort() != ctxt.getFarPort()]        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    UNDEF(segment: TcpSegment)      [(segment.getSourceAddress()).equals(ctxt.getFarAddress()) == false ||       segment.getSourcePort() != ctxt.getFarPort()]        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    // Do not reset a reset. Just go to closed.    RST(segment: TcpSegment)        CLOSED        {            closed("connection reset by peer");        }    RST_ACK(segment: TcpSegment)        CLOSED        {            closed("connection reset by peer");        }    // The remain transitions represent segments received    // when they were not expected from the peer. The    // connection is reset.    FIN(segment: TcpSegment)        CLOSED        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    SYN(segment: TcpSegment)        CLOSED        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    PSH(segment: TcpSegment)        CLOSED                 {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    ACK(segment: TcpSegment)        CLOSED        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    URG(segment: TcpSegment)        CLOSED        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    FIN_ACK(segment: TcpSegment)        CLOSED        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    SYN_ACK(segment: TcpSegment)        CLOSED        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    PSH_ACK(segment: TcpSegment)        CLOSED        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");}    UNDEF(segment: TcpSegment)        nil        {            send(TcpSegment.RST,                 null,                 0,                 0,                 segment);            closed("connection reset");        }    // Ignore timeouts which occur when not expected.    ConnAckTimeout        nil        {}    TransAckTimeout        nil        {}    CloseAckTimeout        nil        {}    CloseTimeout        nil        {}}%%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -