[Javanetsim-cvs] javaNetSim/core/protocolsuite/tcp_ip TCP_session.java, 1.10, 1.11 Tcp.java, 1.102,
Status: Beta
Brought to you by:
darkkey
From: QweR <qw...@us...> - 2007-11-11 19:52:07
|
Update of /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv19828/core/protocolsuite/tcp_ip Modified Files: TCP_session.java Tcp.java Log Message: TCP bugs fixed Index: Tcp.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/Tcp.java,v retrieving revision 1.102 retrieving revision 1.103 diff -C2 -d -r1.102 -r1.103 *** Tcp.java 15 Oct 2007 21:41:43 -0000 1.102 --- Tcp.java 11 Nov 2007 19:51:57 -0000 1.103 *************** *** 80,104 **** public void run() { try{ ! LinkedList q_rs = new LinkedList(); ! LinkedList q_nt = new LinkedList(); ! synchronized(tcp_timers_lock){ ! while(!tcp_timers.isEmpty() && current_time > ((Resender)tcp_timers.peek()).getResendTime()){ ! Resender rs = (Resender)tcp_timers.poll(); ! int nt = rs.nextTime(current_time); ! if(nt>0){ ! tcp_timers.add(rs); } ! q_rs.add(rs); ! q_nt.add(new Integer(nt)); ! //printLayerInfo(">>> Timer "+mParentStack.getHostName()+":"+rs.timerID+" was reistalled"); } ! //System.out.println("Host: "+mParentStack.getHostName()+", time: " + current_time); ! } ! while(!q_rs.isEmpty()){ ! Resender rs = (Resender) q_rs.poll(); ! int nt = ((Integer)q_nt.poll()).intValue(); ! rs.resend(nt); ! } ! if(!q_nt.isEmpty()) printLayerInfo(">>> TCP timer: synchronization ERROR!!!!"); }catch(Exception e){ e.printStackTrace(); --- 80,104 ---- public void run() { try{ ! LinkedList q_rs = new LinkedList(); ! LinkedList q_nt = new LinkedList(); ! synchronized(tcp_timers_lock){ ! while(!tcp_timers.isEmpty() && current_time > ((Resender)tcp_timers.peek()).getResendTime()){ ! Resender rs = (Resender)tcp_timers.poll(); ! int nt = rs.nextTime(current_time); ! if(nt>0){ ! tcp_timers.add(rs); ! } ! q_rs.add(rs); ! q_nt.add(new Integer(nt)); ! //printLayerInfo(">>> Timer "+mParentStack.getHostName()+":"+rs.timerID+" was reistalled"); } ! //System.out.println("Host: "+mParentStack.getHostName()+", time: " + current_time); } ! while(!q_rs.isEmpty()){ ! Resender rs = (Resender) q_rs.poll(); ! int nt = ((Integer)q_nt.poll()).intValue(); ! rs.resend(nt); ! } ! if(!q_nt.isEmpty()) printLayerInfo(">>> TCP timer: synchronization ERROR!!!!"); }catch(Exception e){ e.printStackTrace(); *************** *** 133,138 **** try{ IncSentDuplicatesNumber(1); ! getSession(mParentStack.SL().get_socket(sock).genKey()).inc_sent_duplicates(); ! sendPacket(packet, getSession(mParentStack.SL().get_socket(sock).genKey())); }catch(TransportLayerException e){ System.out.println(e.toString()); --- 133,141 ---- try{ IncSentDuplicatesNumber(1); ! TCP_session tcps = getSession(mParentStack.SL().get_socket(sock).genKey()); ! if(tcps!=null){ ! tcps.inc_sent_duplicates(); ! sendPacket(packet, getSession(mParentStack.SL().get_socket(sock).genKey())); ! } }catch(TransportLayerException e){ System.out.println(e.toString()); *************** *** 147,202 **** } else{ ! TCP_session tcps = getSession(mParentStack.SL().get_socket(sock).genKey()); ! tcps.removeSegmentToResend(packet.get_sequence_number()); ! switch(nt){ ! case 0:{ //normal quit, do nothing ! break; ! } ! case -1:{ ! try{ ! removeTimer(getSession(mSL.get_socket(sock).genKey()).last_timer); ! Application app = mSL.get_socket(sock).app; ! mSL.close(sock); ! app.OnDisconnect(sock); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); } ! break; ! } ! case -2:{ ! try{ ! Application app = mSL.get_socket(sock).app; //connect error ! mSL.close(sock); ! app.OnError(sock, -1); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); } ! break; ! } ! case -3:{ //acknowledgment have not recieved, close connection ! // send RST segment ! printLayerInfo(">>> Sending RST segment"); ! try{ ! boolean flags[] = genFlags(RST); ! TCP_packet rstpack = getTCPPacket_tosend(sock, "", flags, packet.get_acknowledgment_number(), packet.get_sequence_number()+1); ! sendPacket(rstpack, getSession(mParentStack.SL().get_socket(sock).genKey())); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); ! }catch(LowLinkException e){ ! System.out.println(e.toString()); ! }catch(CommunicationException e){ ! System.out.println(e.toString()); } ! // close seession ! try{ ! Application app = mSL.get_socket(sock).app; //disconnect on timeout, sending RST ! mSL.close(sock); ! app.OnError(sock, -2); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); } ! break; } - default: System.out.println("TCP error: unsupported resend time"); } } --- 150,209 ---- } else{ ! TCP_session tcps = getSession(mSL.get_socket(sock).genKey()); ! //TCP_session tcps = getSession(mParentStack.SL().get_socket(sock).genKey()); ! if(tcps!=null){ ! tcps.inc_sent_duplicates(); ! tcps.removeSegmentToResend(packet.get_sequence_number()); ! switch(nt){ ! case 0:{ //normal quit, do nothing ! break; } ! case -1:{ ! try{ ! removeTimer(tcps.last_timer); ! Application app = mSL.get_socket(sock).app; ! mSL.close(sock); ! app.OnDisconnect(sock); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); ! } ! break; } ! case -2:{ ! try{ ! Application app = mSL.get_socket(sock).app; //connect error ! mSL.close(sock); ! app.OnError(sock, -1); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); ! } ! break; } ! case -3:{ //acknowledgment have not recieved, close connection ! // send RST segment ! printLayerInfo("Sending RST segment"); ! try{ ! boolean flags[] = genFlags(RST); ! TCP_packet rstpack = getTCPPacket_tosend(sock, "", flags, packet.get_acknowledgment_number(), packet.get_sequence_number()+1); ! sendPacket(rstpack, tcps); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); ! }catch(LowLinkException e){ ! System.out.println(e.toString()); ! }catch(CommunicationException e){ ! System.out.println(e.toString()); ! } ! // close seession ! try{ ! Application app = mSL.get_socket(sock).app; //disconnect on timeout, sending RST ! mSL.close(sock); ! app.OnError(sock, -2); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); ! } ! break; } ! default: System.out.println("TCP error: unsupported resend time"); } } } *************** *** 241,245 **** private Timer timer; private PriorityQueue tcp_timers = new PriorityQueue(); ! private int window_size = 10; //tcp window-size for new sessions private Object tcp_timers_lock = new Object(); //for locking queue tcp_timers private int current_time = 0; --- 248,252 ---- private Timer timer; private PriorityQueue tcp_timers = new PriorityQueue(); ! private int window_size = 2; //tcp window-size for new sessions private Object tcp_timers_lock = new Object(); //for locking queue tcp_timers private int current_time = 0; *************** *** 577,582 **** TCP_session Elm = getSession(jnsock.genKey()); ! Elm.addSendingSegment(tosend, resendtimes); ! trySendSegments(Elm); return true; --- 584,594 ---- TCP_session Elm = getSession(jnsock.genKey()); ! if(!(flags[ACK_flag] || flags[RST_flag])){ ! Elm.addSendingSegment(tosend, resendtimes); ! trySendSegments(Elm); ! } ! else{ ! sendPacket(tosend, Elm); ! } return true; *************** *** 608,614 **** String pack_flags = (packet.get_ACK_flag()?"ACK,":"")+(packet.get_SYN_flag()?"SYN,":"")+(packet.get_FIN_flag()?"FIN,":"")+(packet.get_RST_flag()?"RST":""); System.out.println("|| <<< TCP send pack: src="+pack_src+" dst="+pack_dst+" flags="+pack_flags+" seq="+packet.get_sequence_number()+" ack="+packet.get_acknowledgment_number()+" data='"+packet.getTCP_message()+"'"); ! System.out.println("|| <<<< Host="+mParentStack.getHostName()+" IP="+mParentStack.getSrcIP()+" sock="+Elm.getSocket()+" state="+Elm.getState()); printLayerInfo("TCP packet send to "+pack_dst+" flags="+pack_flags+" seq="+packet.get_sequence_number()+" ack="+packet.get_acknowledgment_number()+" data='"+packet.getTCP_message()+"'"); IncSentSegmentsNumber(1); Elm.inc_sent_segments(); --- 620,635 ---- String pack_flags = (packet.get_ACK_flag()?"ACK,":"")+(packet.get_SYN_flag()?"SYN,":"")+(packet.get_FIN_flag()?"FIN,":"")+(packet.get_RST_flag()?"RST":""); System.out.println("|| <<< TCP send pack: src="+pack_src+" dst="+pack_dst+" flags="+pack_flags+" seq="+packet.get_sequence_number()+" ack="+packet.get_acknowledgment_number()+" data='"+packet.getTCP_message()+"'"); ! System.out.println("|| <<<< Host="+mParentStack.getHostName()+" IP="+mParentStack.getSrcIP()+" sock="+Elm.getSocket()+" state="+Elm.getStateString()); printLayerInfo("TCP packet send to "+pack_dst+" flags="+pack_flags+" seq="+packet.get_sequence_number()+" ack="+packet.get_acknowledgment_number()+" data='"+packet.getTCP_message()+"'"); + // if(packet.get_acknowledgment_number()!=Elm.getNextSequenceNumber()){ + // try{ + // throw new Exception(); + // } + // catch(Exception e){ + // e.printStackTrace(); + // } + // } + IncSentSegmentsNumber(1); Elm.inc_sent_segments(); *************** *** 744,749 **** } if(inPacket.get_ACK_flag() && inPacket.get_acknowledgment_number() > Elm.getLastACK()){ ! long tid = Elm.removeSegmentToResend(inPacket.get_acknowledgment_number()-1); ! removeTimer(tid); Elm.setLastACK(inPacket.get_acknowledgment_number()); trySendSegments(Elm); --- 765,779 ---- } if(inPacket.get_ACK_flag() && inPacket.get_acknowledgment_number() > Elm.getLastACK()){ ! Enumeration<Integer> acks = Elm.getAllSegmentToResendNumbers(); ! long tid; ! int lack = inPacket.get_acknowledgment_number(); ! int cack; ! while(acks.hasMoreElements()){ ! cack = acks.nextElement().intValue(); ! if(cack<lack){ ! tid = Elm.removeSegmentToResend(cack); ! removeTimer(tid); ! } ! } Elm.setLastACK(inPacket.get_acknowledgment_number()); trySendSegments(Elm); *************** *** 755,759 **** } else{ ! System.out.println("|| >>>> Host="+mParentStack.getHostName()+" IP="+mParentStack.getSrcIP()+" sock="+Elm.getSocket()+" state="+Elm.getState()); printLayerInfo("TCP packet received from "+ pack_src +" flags: "+pack_flags+" message: \"" +inPacket.getTCP_message() + "\"."); --- 785,789 ---- } else{ ! System.out.println("|| >>>> Host="+mParentStack.getHostName()+" IP="+mParentStack.getSrcIP()+" sock="+Elm.getSocket()+" state="+Elm.getStateString()); printLayerInfo("TCP packet received from "+ pack_src +" flags: "+pack_flags+" message: \"" +inPacket.getTCP_message() + "\"."); *************** *** 774,778 **** } } - } else { --- 804,807 ---- *************** *** 1010,1017 **** } if(readySegments>0){ - boolean flags[] = genFlags(ACK); - sendTCPSegment(Elm.getSocket(), "", flags, readySegments+1, resendtimes_NULL); mSL.recv(Elm.getSocket(), out); } } --- 1039,1047 ---- } if(readySegments>0){ mSL.recv(Elm.getSocket(), out); } + boolean flags[] = genFlags(ACK); + //sendTCPSegment(Elm.getSocket(), "", flags, readySegments+1, resendtimes_NULL); + sendTCPSegment(Elm.getSocket(), "", flags, Elm.getNextSequenceNumber(), resendtimes_NULL); } Index: TCP_session.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/TCP_session.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** TCP_session.java 14 Oct 2007 22:14:52 -0000 1.10 --- TCP_session.java 11 Nov 2007 19:51:57 -0000 1.11 *************** *** 211,215 **** if(!Found){ receivedSegments.add(pack); ! if(next_pass_seq_num == -1) next_pass_seq_num = pack.get_sequence_number(); } } --- 211,216 ---- if(!Found){ receivedSegments.add(pack); ! if(next_pass_seq_num == -1) ! next_pass_seq_num = pack.get_sequence_number(); } } *************** *** 220,224 **** } ! /** * Pop expected segment from buffer * @result null if expected segment have not received yet --- 221,225 ---- } ! /** * Pop expected segment from buffer * @result null if expected segment have not received yet *************** *** 296,299 **** --- 297,304 ---- } + public int getNextSequenceNumber(){ + return next_pass_seq_num; + } + public void inc_received_segments(){ received_segments++; |