[Javanetsim-cvs] javaNetSim/core/protocolsuite/tcp_ip ProtocolStack.java, 1.56, 1.57 TCP_session.ja
Status: Beta
Brought to you by:
darkkey
From: QweR <qw...@us...> - 2007-09-23 01:50:06
|
Update of /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv10582/core/protocolsuite/tcp_ip Modified Files: ProtocolStack.java TCP_session.java Tcp.java Log Message: third test version of TCP Index: ProtocolStack.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/ProtocolStack.java,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** ProtocolStack.java 21 Sep 2007 22:42:31 -0000 1.56 --- ProtocolStack.java 23 Sep 2007 01:49:58 -0000 1.57 *************** *** 839,843 **** }catch(TransportLayerException te){} catch(NullPointerException e){ ! System.out.println("ProtocolStack.java: " + e.toString()); } catch (CommunicationException ce) {} --- 839,844 ---- }catch(TransportLayerException te){} catch(NullPointerException e){ ! System.out.println("ProtocolStack.java: receivePacket" + e.toString()); ! e.printStackTrace(); } catch (CommunicationException ce) {} *************** *** 960,964 **** }catch(TransportLayerException te){} catch(NullPointerException e){ ! System.out.println("ProtocolStack.java: " + e.toString()); } catch (CommunicationException ce) {} --- 961,965 ---- }catch(TransportLayerException te){} catch(NullPointerException e){ ! System.out.println("ProtocolStack.java: receiveTCP_packet " + e.toString()); } catch (CommunicationException ce) {} Index: Tcp.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/Tcp.java,v retrieving revision 1.91 retrieving revision 1.92 diff -C2 -d -r1.91 -r1.92 *** Tcp.java 22 Sep 2007 23:06:44 -0000 1.91 --- Tcp.java 23 Sep 2007 01:49:58 -0000 1.92 *************** *** 146,150 **** // close seession try{ ! closePort(sock); }catch(TransportLayerException e){ e.toString(); --- 146,150 ---- // close seession try{ ! mSL.close(sock); }catch(TransportLayerException e){ e.toString(); *************** *** 156,159 **** --- 156,166 ---- break; } + case -3:{ + try{ + mSL.close(sock); + }catch(TransportLayerException e){ + e.toString(); + } + } default: System.out.println("TCP error: unsupported resend time"); } *************** *** 369,373 **** { int CONNECTION_DELAY_EXAM = (int)TCP_TIMER_DELAY/4; //examination delay is 10ms, but may be any number ! int resendtimes[] = {6000,24000,-2}; boolean flags[] = genFlags(SYN); boolean connected = false; --- 376,380 ---- { int CONNECTION_DELAY_EXAM = (int)TCP_TIMER_DELAY/4; //examination delay is 10ms, but may be any number ! int resendtimes[] = {6000,24000,45000,-2}; boolean flags[] = genFlags(SYN); boolean connected = false; *************** *** 381,401 **** if (sendTCPSegment(sock, "", flags, -1, resendtimes)) { ! int time = 0; ! while(Elm.getState()!=Elm.ESTABLISHED && time < 40000){ ! try{ ! Thread.sleep(CONNECTION_DELAY_EXAM); ! } ! catch(InterruptedException e){ ! System.out.println("TCP: InterruptedException raised"); ! } ! time += CONNECTION_DELAY_EXAM; ! if(time%TCP_TIMER_DELAY==0) System.out.println("TCP: connection wait "+time); ! } ! if(Elm.getState()==Elm.ESTABLISHED){ ! System.out.println(">> TCP: connected"); ! connected = true; ! } ! else ! System.out.println(">> TCP: connect false"); } else{ --- 388,392 ---- if (sendTCPSegment(sock, "", flags, -1, resendtimes)) { ! } else{ *************** *** 428,431 **** --- 419,434 ---- public boolean disconnect(int sock) throws LowLinkException, CommunicationException, TransportLayerException { + TCP_session Elm = getSession(mSL.get_socket(sock).genKey()); + + if(Elm != null){ + Elm.setState(Elm.FIN_WAIT_1); + mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); + int resendtimes[] = {1500,3000,6000,12000,24000,48000,64000,64000,64000,64000,64000,64000,-1}; + boolean flags[] = genFlags(FIN); + sendTCPSegment(Elm.getSocket(), "", flags, -1, resendtimes); + } + else { + throw new TransportLayerException("TCP Error: no session exists for socket '"+sock+"'"); + } return true; } *************** *** 614,633 **** Elm.setLastACK(inPacket.get_acknowledgment_number()); } ! printLayerInfo("TCP packet received from "+ inPacket.getSourceIPAddress() + ":" + inPacket.get_srcPort() + " message: \"" +inPacket.getTCP_message() + "\"."); ! ! switch(Elm.getState()){ ! case TCP_session.CLOSED: revc_CLOSED(Elm, inPacket); break; ! case TCP_session.LISTEN: revc_LISTEN(Elm, inPacket); break; ! case TCP_session.SYN_SENT: revc_SYN_SENT(Elm, inPacket); break; ! case TCP_session.SYN_RCVD: revc_SYN_RCVD(Elm, inPacket); break; ! case TCP_session.ESTABLISHED: revc_ESTABLISHED(Elm, inPacket); break; ! case TCP_session.CLOSE_WAIT: revc_CLOSE_WAIT(Elm, inPacket); break; ! case TCP_session.LAST_ACK: revc_LAST_ACK(Elm, inPacket); break; ! case TCP_session.FIN_WAIT_1: revc_FIN_WAIT_1(Elm, inPacket); break; ! case TCP_session.FIN_WAIT_2: revc_FIN_WAIT_2(Elm, inPacket); break; ! case TCP_session.CLOSING: revc_CLOSING(Elm, inPacket); break; ! case TCP_session.TIME_WAIT: revc_TIME_WAIT(Elm, inPacket); break; ! default: } } --- 617,640 ---- Elm.setLastACK(inPacket.get_acknowledgment_number()); } + if(inPacket.get_RST_flag()){ + mSL.close(Elm.getSocket()); + } + else{ + printLayerInfo("TCP packet received from "+ inPacket.getSourceIPAddress() + ":" + inPacket.get_srcPort() + " message: \"" +inPacket.getTCP_message() + "\"."); ! switch(Elm.getState()){ ! case TCP_session.CLOSED: recv_CLOSED(Elm, inPacket); break; ! case TCP_session.LISTEN: recv_LISTEN(Elm, inPacket); break; ! case TCP_session.SYN_SENT: recv_SYN_SENT(Elm, inPacket); break; ! case TCP_session.SYN_RCVD: recv_SYN_RCVD(Elm, inPacket); break; ! case TCP_session.ESTABLISHED: recv_ESTABLISHED(Elm, inPacket); break; ! case TCP_session.CLOSE_WAIT: recv_CLOSE_WAIT(Elm, inPacket); break; ! case TCP_session.LAST_ACK: recv_LAST_ACK(Elm, inPacket); break; ! case TCP_session.FIN_WAIT_1: recv_FIN_WAIT_1(Elm, inPacket); break; ! case TCP_session.FIN_WAIT_2: recv_FIN_WAIT_2(Elm, inPacket); break; ! case TCP_session.CLOSING: recv_CLOSING(Elm, inPacket); break; ! case TCP_session.TIME_WAIT: recv_TIME_WAIT(Elm, inPacket); break; ! default: ! } } } *************** *** 635,641 **** } else { ! //throw new TransportLayerPortException("UDP Error: port " + inPacket.get_destPort() + " does not exist. Host \"" + mParentStack.getParentNodeName()+"\"."); ! throw new TransportLayerPortException("TCP Error: no application binded port "+inPacket.get_destPort() +" on host \""+ mParentStack.getParentNodeName()+"\"!"); ! } } } else { --- 642,648 ---- } else { ! //throw new TransportLayerPortException("UDP Error: port " + inPacket.get_destPort() + " does not exist. Host \"" + mParentStack.getParentNodeName()+"\"."); ! throw new TransportLayerPortException("TCP Error: no application binded port "+inPacket.get_destPort() +" on host \""+ mParentStack.getParentNodeName()+"\"!"); ! } } } else { *************** *** 644,653 **** } ! private void revc_CLOSED(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { // hm... it is bug! throw new TransportLayerException("Session exists, but port "+ mSL.get_socket(Elm.getSocket()).dst_port +" not binded!"); } ! private void revc_LISTEN(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { if(inPacket.get_SYN_flag()){ --- 651,661 ---- } ! private void recv_CLOSED(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { // hm... it is bug! throw new TransportLayerException("Session exists, but port "+ mSL.get_socket(Elm.getSocket()).dst_port +" not binded!"); } ! ! private void recv_LISTEN(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { if(inPacket.get_SYN_flag()){ *************** *** 657,662 **** sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes); } } ! private void revc_SYN_SENT(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { if(inPacket.get_SYN_flag() && inPacket.get_ACK_flag()){ --- 665,673 ---- sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes); } + else + throw new TransportLayerException("TCP: recv_LISTEN: unexpected packet"); } ! ! private void recv_SYN_SENT(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { if(inPacket.get_SYN_flag() && inPacket.get_ACK_flag()){ *************** *** 667,672 **** mSL.get_socket(Elm.getSocket()).app.OnConnect(Elm.getSocket()); } } ! private void revc_SYN_RCVD(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { if(inPacket.get_ACK_flag()){ --- 678,686 ---- mSL.get_socket(Elm.getSocket()).app.OnConnect(Elm.getSocket()); } + else + throw new TransportLayerException("TCP: recv_SYN_SENT: unexpected packet"); } ! ! private void recv_SYN_RCVD(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { if(inPacket.get_ACK_flag()){ *************** *** 674,705 **** mSL.get_socket(Elm.getSocket()).app.OnConnect(Elm.getSocket()); } } ! private void revc_ESTABLISHED(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! } ! private void revc_CLOSE_WAIT(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! } ! private void revc_LAST_ACK(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! } ! private void revc_FIN_WAIT_1(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! } ! private void revc_FIN_WAIT_2(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! } ! private void revc_CLOSING(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! } ! private void revc_TIME_WAIT(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! } --- 688,799 ---- mSL.get_socket(Elm.getSocket()).app.OnConnect(Elm.getSocket()); } + else + throw new TransportLayerException("TCP: recv_SYN_RCVD: unexpected packet"); } ! ! private void recv_ESTABLISHED(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! if(inPacket.get_FIN_flag()){ ! Elm.setState(Elm.CLOSE_WAIT); ! int resendtimes1[] = {}; ! boolean flags[] = genFlags(ACK); ! sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes1); ! mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); ! ! Elm.setState(Elm.LAST_ACK); ! mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); ! int resendtimes2[] = {1500,3000,6000,12000,24000,48000,64000,64000,64000,64000,64000,64000,-1}; //to resend or not to resend ? ! flags = genFlags(FIN); ! sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes2); ! } ! else if(!(inPacket.get_ACK_flag() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag())){ ! //normal data processing ! } ! else ! throw new TransportLayerException("TCP: recv_ESTABLISHED: unexpected packet"); } ! ! private void recv_CLOSE_WAIT(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! if(false){ ! } ! else ! throw new TransportLayerException("TCP: recv_CLOSE_WAIT: unexpected packet"); } ! ! private void recv_LAST_ACK(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! if(inPacket.get_ACK_flag()){ ! mSL.close(Elm.getSocket()); ! } ! else if(inPacket.get_FIN_flag()){ ! int resendtimes[] = {}; ! boolean flags[] = genFlags(ACK); ! sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes); ! } ! else ! throw new TransportLayerException("TCP: recv_LAST_ACK: unexpected packet"); } ! ! private void recv_FIN_WAIT_1(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! if(inPacket.get_ACK_flag() && inPacket.get_FIN_flag()){ ! Elm.setState(Elm.TIME_WAIT); ! mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); ! int resendtimes[] = {}; ! boolean flags[] = genFlags(ACK); ! sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes); ! } ! else if(inPacket.get_ACK_flag()){ ! Elm.setState(Elm.FIN_WAIT_2); ! int resendtimes[] = {75000,-3}; ! Elm.fin_wait_2_timer = createTimer(Elm.getSocket(), null, resendtimes); ! } ! else if(inPacket.get_FIN_flag()){ ! Elm.setState(Elm.CLOSING); ! mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); ! int resendtimes[] = {}; ! boolean flags[] = genFlags(ACK); ! sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes); ! } ! else if(!(inPacket.get_ACK_flag() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag())){ ! //normal data processing ! } ! else ! throw new TransportLayerException("TCP: recv_FIN_WAIT_1: unexpected packet"); } ! ! private void recv_FIN_WAIT_2(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! if(inPacket.get_FIN_flag()){ ! Elm.setState(Elm.CLOSING); ! int resendtimes[] = {}; ! boolean flags[] = genFlags(ACK); ! mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); ! sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes); ! } ! else if(!(inPacket.get_ACK_flag() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag())){ ! //normal data processing ! } ! else ! throw new TransportLayerException("TCP: recv_FIN_WAIT_2: unexpected packet"); } ! ! private void recv_CLOSING(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! if(inPacket.get_ACK_flag()){ ! Elm.setState(Elm.TIME_WAIT); ! } ! else ! throw new TransportLayerException("TCP: recv_CLOSING: unexpected packet"); } ! ! private void recv_TIME_WAIT(TCP_session Elm, TCP_packet inPacket) throws TransportLayerPortException, TransportLayerException, LowLinkException, CommunicationException { ! if(true){ ! ! } ! else ! throw new TransportLayerException("TCP: recv_TIME_WAIT: unexpected packet"); } Index: TCP_session.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/TCP_session.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** TCP_session.java 22 Sep 2007 23:06:44 -0000 1.3 --- TCP_session.java 23 Sep 2007 01:49:58 -0000 1.4 *************** *** 32,35 **** --- 32,36 ---- public static int Element_id = 0; private int state = CLOSED; + public long fin_wait_2_timer = -1; public static final int CLOSED = 0; |