[Javanetsim-cvs] javaNetSim/core/protocolsuite/tcp_ip Echo_tcp.java, 1.36, 1.37 TCP_session.java, 1
Status: Beta
Brought to you by:
darkkey
From: QweR <qw...@us...> - 2007-09-28 22:15:59
|
Update of /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv7803/core/protocolsuite/tcp_ip Modified Files: Echo_tcp.java TCP_session.java Tcp.java socketLayer.java Log Message: TCP without RTT works (I hope at least). Index: Tcp.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/Tcp.java,v retrieving revision 1.95 retrieving revision 1.96 diff -C2 -d -r1.95 -r1.96 *** Tcp.java 25 Sep 2007 22:34:09 -0000 1.95 --- Tcp.java 28 Sep 2007 22:15:51 -0000 1.96 *************** *** 45,48 **** --- 45,49 ---- import java.util.concurrent.ConcurrentLinkedQueue; import java.util.Vector; + import java.util.concurrent.SynchronousQueue; /** *************** *** 78,91 **** */ public void run() { synchronized(tcp_timers_lock){ while(!tcp_timers.isEmpty() && current_time > ((Resender)tcp_timers.peek()).getResendTime()){ Resender rs = (Resender)tcp_timers.poll(); ! if(rs.resend(current_time)){ tcp_timers.add(rs); } } - current_time += TCP_TIMER_DELAY; //System.out.println("Host: "+mParentStack.getHostName()+", time: " + current_time); } } } --- 79,108 ---- */ 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(); + } + current_time += TCP_TIMER_DELAY; } } *************** *** 95,99 **** private TCP_packet packet; private int sock; ! private int nearest_resend; public long timerID; --- 112,116 ---- private TCP_packet packet; private int sock; ! public int nearest_resend; public long timerID; *************** *** 111,119 **** } ! public boolean resend(int cur_time){ boolean res = false; - int nt = nextTime(cur_time); if(nt>=0){ - System.out.println("pack resend"); try{ mParentStack.sendPacket(packet); --- 128,134 ---- } ! public boolean resend(int nt){ boolean res = false; if(nt>=0){ try{ mParentStack.sendPacket(packet); *************** *** 128,136 **** } else{ switch(nt){ case 0:{ //normal quit, do nothing break; } ! case -1:{ //acknowledgment have not recieved, close connection // send RST segment try{ --- 143,172 ---- } 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); ! mSL.get_socket(sock).app.OnDisconnect(sock); ! mSL.close(sock); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); ! } ! break; ! } ! case -2:{ ! mSL.get_socket(sock).app.OnError(sock, -1); //connect error ! try{ ! mSL.close(sock); ! }catch(TransportLayerException e){ ! System.out.println(e.toString()); ! } ! break; ! } ! case -3:{ //acknowledgment have not recieved, close connection // send RST segment try{ *************** *** 147,169 **** // close seession try{ - mSL.close(sock); mSL.get_socket(sock).app.OnError(sock, -2); //disconnect on timeout, sending RST - }catch(TransportLayerException e){ - System.out.println(e.toString()); - } - break; - } - case -2:{ - mSL.get_socket(sock).app.OnError(sock, -1); //connect error - break; - } - case -3:{ - try{ - removeTimer(getSession(mSL.get_socket(sock).genKey()).last_timer); - mSL.get_socket(sock).app.OnDisconnect(sock); mSL.close(sock); }catch(TransportLayerException e){ System.out.println(e.toString()); } } default: System.out.println("TCP error: unsupported resend time"); --- 183,192 ---- // close seession try{ mSL.get_socket(sock).app.OnError(sock, -2); //disconnect on timeout, sending RST mSL.close(sock); }catch(TransportLayerException e){ System.out.println(e.toString()); } + break; } default: System.out.println("TCP error: unsupported resend time"); *************** *** 182,186 **** } ! private int nextTime(int cur_time){ if(resend_time.isEmpty()) nearest_resend = 0; else{ --- 205,209 ---- } ! public int nextTime(int cur_time){ if(resend_time.isEmpty()) nearest_resend = 0; else{ *************** *** 214,225 **** private long nextTimerID = 0; private static final boolean USE_2MSL = false; ! private static final int MSL_TIME = 5000; ! private static final int resendtimes_SYN_ACK[] = {1500,3000,6000,12000,24000,28000,-2}; ! private static final int resendtimes_SYN[] = {6000,24000,45000,-2}; ! private static final int resendtimes_DEFAULT[] = {1500,3000,6000,12000,24000,48000,64000,64000,64000,64000,64000,64000,-1}; private static final int resendtimes_NULL[] = {}; ! private static final int resendtimes_2MSL[] = {2*MSL_TIME,-3}; // 2MSL ! private static final int resendtimes_EXIT[] = {75000,-3}; // non-RFC exit ! private static final int resendtimes_SYNC_CLOSE[] = {75000, -3}; // synchronous closing --- 237,255 ---- private long nextTimerID = 0; private static final boolean USE_2MSL = false; ! private static final int MSL_TIME = 2500; ! // private static final int resendtimes_SYN_ACK[] = {1500,3000,6000,12000,24000,28000,-2}; ! // private static final int resendtimes_SYN[] = {6000,24000,45000,-2}; ! // private static final int resendtimes_DEFAULT[] = {1500,3000,6000,12000,24000,48000,64000,64000,64000,64000,64000,64000,-3}; ! // private static final int resendtimes_NULL[] = {}; ! // private static final int resendtimes_2MSL[] = {2*MSL_TIME,-1}; // 2MSL ! // private static final int resendtimes_EXIT[] = {75000,-1}; // non-RFC exit ! // private static final int resendtimes_SYNC_CLOSE[] = {75000, -1}; // synchronous closing ! private static final int resendtimes_SYN_ACK[] = {1000,1000,1000,1000,1000,1000,-2}; ! private static final int resendtimes_SYN[] = {1000,1000,1000,-2}; ! private static final int resendtimes_DEFAULT[] = {1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,-3}; private static final int resendtimes_NULL[] = {}; ! private static final int resendtimes_2MSL[] = {2*MSL_TIME,-1}; // 2MSL ! private static final int resendtimes_EXIT[] = {15000,-1}; // non-RFC exit ! private static final int resendtimes_SYNC_CLOSE[] = {15000, -1}; // synchronous closing *************** *** 323,327 **** Reserved=true; mSL.get_socket(sock).src_port = number; ! printLayerInfo("Local port " + number + " reserved for client app."); } --- 353,357 ---- Reserved=true; mSL.get_socket(sock).src_port = number; ! addSession(jnSocket.genTCPkey(number,"0.0.0.0",0), sock); printLayerInfo("Local port " + number + " reserved for client app."); } *************** *** 331,334 **** --- 361,365 ---- if (!Reserved) //all ports are busy :( { + printLayerInfo("TCP Error: all ports are busy! Cannot reserve port for socket!"); throw new TransportLayerException("TCP Error: all ports are busy! Cannot reserve port for socket!"); } *************** *** 339,361 **** // bind port to socket public void bindPort(int sock_num, int in_Port) throws TransportLayerException ! { ! if( mSL.get_socket(sock_num).src_port == 0 ) ! { ! if (in_Port>0 && in_Port<=65535){ ! //create such a record in hashtable ! mSL.get_socket(sock_num).src_port = in_Port; ! printLayerInfo("Local port " + in_Port + " binded."); ! } ! else if(in_Port == 0){ ! reserveFreePort(sock_num); ! } ! else { ! throw new TransportLayerException("TCP error: can not bind to port "+ in_Port +"! Use port range from 1 to 65535 to listen to."); ! } ! } else // ! { ! if (mSL.get_socket(sock_num).src_port==in_Port) throw new TransportLayerException("error: can not double bind to port "+ in_Port +"! Server is already listening to this port"); ! throw new TransportLayerException("TCP error: can not bind to port "+ in_Port +"! Already listening to port " + mSL.get_socket(sock_num).src_port); ! } } --- 370,398 ---- // bind port to socket public void bindPort(int sock_num, int in_Port) throws TransportLayerException ! { ! if(!mSL.get_socket(sock_num).open_state){ ! if (in_Port>0 && in_Port<=65535){ ! //create such a record in hashtable ! mSL.get_socket(sock_num).src_port = in_Port; ! printLayerInfo("Local port " + in_Port + " binded."); ! } ! else if(in_Port == 0){ ! reserveFreePort(sock_num); ! } ! else { ! printLayerInfo("TCP error: can not bind to port "+ in_Port +"! Use port range from 1 to 65535 to listen to."); ! throw new TransportLayerException("TCP error: can not bind to port "+ in_Port +"! Use port range from 1 to 65535 to listen to."); ! } ! } ! else{ ! if (mSL.get_socket(sock_num).src_port==in_Port){ ! printLayerInfo("TCP error: can not double bind to port "+ in_Port +"! Server is already listening to this port"); ! throw new TransportLayerException("error: can not bind listen to port "+ in_Port +"! Server is already listening to this port"); ! } ! else{ ! printLayerInfo("TCP error: can not bind to port "+ in_Port +"! Already listening to port " + mSL.get_socket(sock_num).src_port); ! throw new TransportLayerException("TCP error: can not bind to port "+ in_Port +"! Already listening to port " + mSL.get_socket(sock_num).src_port); ! } ! } } *************** *** 364,372 **** { int in_Port = mSL.get_socket(sock_num).src_port; ! if( in_Port!= 0 ) { if (in_Port>0 && in_Port<=65535){ ! TCP_session tcps = addSession(jnSocket.genTCPkey(in_Port,"0.0.0.0",0), sock_num); ! tcps.setState(tcps.LISTEN); ! printLayerInfo("Local port " + in_Port + " is listening."); } else { throw new TransportLayerException("TCP error: can not listen to port "+ in_Port +"! Use port range from 1 to 65535 to listen to."); --- 401,421 ---- { int in_Port = mSL.get_socket(sock_num).src_port; ! if( in_Port != 0 ) { if (in_Port>0 && in_Port<=65535){ ! if(!mSL.get_socket(sock_num).open_state){ ! TCP_session tcps = addSession(jnSocket.genTCPkey(in_Port,"0.0.0.0",0), sock_num); ! tcps.setState(tcps.LISTEN); ! printLayerInfo("Local port " + in_Port + " is listening."); ! } ! else{ ! if (mSL.get_socket(sock_num).src_port==in_Port){ ! printLayerInfo("TCP error: can not double listen to port "+ in_Port +"! Server is already listening to this port"); ! throw new TransportLayerException("error: can not double listen to port "+ in_Port +"! Server is already listening to this port"); ! } ! else{ ! printLayerInfo("TCP error: can not listen to port "+ in_Port +"! Already listening to port " + mSL.get_socket(sock_num).src_port); ! throw new TransportLayerException("TCP error: can not listen to port "+ in_Port +"! Already listening to port " + mSL.get_socket(sock_num).src_port); ! } ! } } else { throw new TransportLayerException("TCP error: can not listen to port "+ in_Port +"! Use port range from 1 to 65535 to listen to."); *************** *** 412,416 **** else{ Elm.setState(Elm.CLOSED); - System.out.println(">> TCP: sendTCPSegment false"); } } --- 461,464 ---- *************** *** 468,474 **** if(portToClose!=0 && Elm!=null){ TCP_session mainses = getSession(jnSocket.genTCPkey(portToClose,"0.0.0.0",0)); ! if(mainses != null && mainses.getSocket() == sock){ // remove listening session on client size only removeSession(jnSocket.genTCPkey(portToClose,"0.0.0.0",0)); } removeSession(mSL.get_socket(sock).genKey()); mSL.close(Elm.sock); --- 516,528 ---- if(portToClose!=0 && Elm!=null){ TCP_session mainses = getSession(jnSocket.genTCPkey(portToClose,"0.0.0.0",0)); ! if(mainses != null && mainses.getSocket() == sock){ // remove listening session on client side only removeSession(jnSocket.genTCPkey(portToClose,"0.0.0.0",0)); } + Enumeration<Integer> segs = Elm.getAllSegmentToResendNumbers(); + while(segs.hasMoreElements()){ + int segment = segs.nextElement().intValue(); + long tid = Elm.removeSegmentToResend(segment); + removeTimer(tid); + } removeSession(mSL.get_socket(sock).genKey()); mSL.close(Elm.sock); *************** *** 535,540 **** String pack_flags = (tosend.get_ACK_flag()?"ACK,":"")+(tosend.get_SYN_flag()?"SYN,":"")+(tosend.get_FIN_flag()?"FIN,":"")+(tosend.get_RST_flag()?"RST":""); System.out.println("|| <<< TCP send pack: src="+pack_src+" dst="+pack_dst+" flags="+pack_flags+" seq="+tosend.get_sequence_number()+" ack="+tosend.get_acknowledgment_number()+" data='"+tosend.getTCP_message()+"'"); - System.out.println("|| <<<< Host="+mParentStack.getHostName()+" IP="+mParentStack.getSrcIP()+" sock="+sock+" state="+Elm.getState()); mParentStack.sendPacket(tosend); --- 589,594 ---- String pack_flags = (tosend.get_ACK_flag()?"ACK,":"")+(tosend.get_SYN_flag()?"SYN,":"")+(tosend.get_FIN_flag()?"FIN,":"")+(tosend.get_RST_flag()?"RST":""); System.out.println("|| <<< TCP send pack: src="+pack_src+" dst="+pack_dst+" flags="+pack_flags+" seq="+tosend.get_sequence_number()+" ack="+tosend.get_acknowledgment_number()+" data='"+tosend.getTCP_message()+"'"); System.out.println("|| <<<< Host="+mParentStack.getHostName()+" IP="+mParentStack.getSrcIP()+" sock="+sock+" state="+Elm.getState()); + printLayerInfo("TCP packet send to "+pack_dst+" flags="+pack_flags+" seq="+tosend.get_sequence_number()+" ack="+tosend.get_acknowledgment_number()+" data='"+tosend.getTCP_message()+"'"); mParentStack.sendPacket(tosend); *************** *** 657,662 **** if(!inPacket.get_ACK_flag() || inPacket.get_acknowledgment_number() > Elm.getLastACK() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag()){ if(inPacket.get_ACK_flag() && inPacket.get_acknowledgment_number() > Elm.getLastACK()){ ! removeTimer(Elm.getSegmentToResend(inPacket.get_acknowledgment_number()-1)); ! Elm.removeSegmentToResend(inPacket.get_acknowledgment_number()-1); Elm.setLastACK(inPacket.get_acknowledgment_number()); trySendSegments(Elm); --- 711,716 ---- if(!inPacket.get_ACK_flag() || inPacket.get_acknowledgment_number() > Elm.getLastACK() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag()){ 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); *************** *** 698,702 **** // rstpack.setTCP_message(""); // mParentStack.sendPacket(rstpack); ! throw new TransportLayerPortException("TCP Error: no application binded port "+inPacket.get_destPort() +" on host \""+ mParentStack.getParentNodeName()+"\"!"); } --- 752,756 ---- // rstpack.setTCP_message(""); // mParentStack.sendPacket(rstpack); ! printLayerInfo("TCP packet received from "+ pack_src +" flags: "+pack_flags+" message: \"" +inPacket.getTCP_message() + "\"."); throw new TransportLayerPortException("TCP Error: no application binded port "+inPacket.get_destPort() +" on host \""+ mParentStack.getParentNodeName()+"\"!"); } *************** *** 743,750 **** --- 797,808 ---- Elm.setState(Elm.ESTABLISHED); mSL.get_socket(Elm.getSocket()).app.OnConnect(Elm.getSocket()); + processSegment(Elm, null); // pass already reveived segments to application } else if(inPacket.get_SYN_flag() && !(inPacket.get_ACK_flag() || inPacket.get_FIN_flag())){ //do nothing, resending works :) } + else if(!(inPacket.get_ACK_flag() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag())){ + Elm.addReceivedSegment(inPacket); // save received segments, although connection have not established yet + } else throw new TransportLayerException("TCP: recv_SYN_RCVD: unexpected packet"); *************** *** 762,768 **** sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes_DEFAULT); } else if(inPacket.get_ACK_flag()){ //do nothing, segment have been already processed - int i = 0; } else if(!(inPacket.get_ACK_flag() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag())){ --- 820,829 ---- sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes_DEFAULT); } + else if(inPacket.get_SYN_flag() && inPacket.get_ACK_flag()){ + boolean flags[] = genFlags(ACK); + sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes_NULL); + } else if(inPacket.get_ACK_flag()){ //do nothing, segment have been already processed } else if(!(inPacket.get_ACK_flag() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag())){ *************** *** 799,808 **** if(inPacket.get_ACK_flag() && inPacket.get_FIN_flag()){ Elm.setState(Elm.TIME_WAIT); - boolean flags[] = genFlags(ACK); - sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes_NULL); if(USE_2MSL){ Elm.last_timer = createTimer(Elm.getSocket(), null, resendtimes_2MSL); } ! else{ mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); mSL.close(Elm.getSocket()); --- 860,869 ---- if(inPacket.get_ACK_flag() && inPacket.get_FIN_flag()){ Elm.setState(Elm.TIME_WAIT); if(USE_2MSL){ Elm.last_timer = createTimer(Elm.getSocket(), null, resendtimes_2MSL); } ! boolean flags[] = genFlags(ACK); ! sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes_NULL); ! if(!USE_2MSL){ mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); mSL.close(Elm.getSocket()); *************** *** 815,821 **** else if(inPacket.get_FIN_flag()){ Elm.setState(Elm.CLOSING); boolean flags[] = genFlags(ACK); sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes_NULL); - Elm.last_timer = createTimer(Elm.getSocket(), null, resendtimes_SYNC_CLOSE); } else if(!(inPacket.get_ACK_flag() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag())){ --- 876,882 ---- else if(inPacket.get_FIN_flag()){ Elm.setState(Elm.CLOSING); + Elm.last_timer = createTimer(Elm.getSocket(), null, resendtimes_SYNC_CLOSE); boolean flags[] = genFlags(ACK); sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes_NULL); } else if(!(inPacket.get_ACK_flag() || inPacket.get_SYN_flag() || inPacket.get_FIN_flag())){ *************** *** 830,840 **** if(inPacket.get_FIN_flag()){ Elm.setState(Elm.TIME_WAIT); - boolean flags[] = genFlags(ACK); - sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes_NULL); removeTimer(Elm.last_timer); if(USE_2MSL){ Elm.last_timer = createTimer(Elm.getSocket(), null, resendtimes_2MSL); } ! else{ mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); mSL.close(Elm.getSocket()); --- 891,901 ---- if(inPacket.get_FIN_flag()){ Elm.setState(Elm.TIME_WAIT); removeTimer(Elm.last_timer); if(USE_2MSL){ Elm.last_timer = createTimer(Elm.getSocket(), null, resendtimes_2MSL); } ! boolean flags[] = genFlags(ACK); ! sendTCPSegment(Elm.getSocket(), "", flags, inPacket.get_sequence_number()+1, resendtimes_NULL); ! if(!USE_2MSL){ mSL.get_socket(Elm.getSocket()).app.OnDisconnect(Elm.getSocket()); mSL.close(Elm.getSocket()); *************** *** 872,876 **** private void processSegment(TCP_session Elm, TCP_packet packet) throws LowLinkException, TransportLayerException, CommunicationException { ! Elm.addReceivedSegment(packet); String out = ""; int readySegments = 0; --- 933,939 ---- private void processSegment(TCP_session Elm, TCP_packet packet) throws LowLinkException, TransportLayerException, CommunicationException { ! if(packet!=null && !(packet.get_SYN_flag() || packet.get_FIN_flag())) { ! Elm.addReceivedSegment(packet); ! } String out = ""; int readySegments = 0; *************** *** 893,896 **** --- 956,964 ---- synchronized(tcp_timers_lock){ tcp_timers.add(rsnd); + String ttt=""; + for(int i=0; i<times.length; i++){ + ttt += times[i]+","; + } + //printLayerInfo(">>> Timer "+mParentStack.getHostName()+":"+rsnd.timerID+" was added {"+ttt+"}"); } } *************** *** 900,909 **** private void removeTimer(long timerid){ ! Iterator<Resender> it = tcp_timers.iterator(); ! boolean notFound = true; ! while(notFound && it.hasNext()){ ! if(it.next().timerID == timerid){ ! notFound = false; ! it.remove(); } } --- 968,984 ---- private void removeTimer(long timerid){ ! synchronized(tcp_timers_lock){ ! Iterator<Resender> it = tcp_timers.iterator(); ! boolean notFound = true; ! while(notFound && it.hasNext()){ ! if(it.next().timerID == timerid){ ! notFound = false; ! it.remove(); ! //printLayerInfo(">>> Timer "+mParentStack.getHostName()+":"+timerid+" was removed"); ! } ! } ! if(notFound){ ! printLayerInfo(">>> TCP error: timer "+mParentStack.getHostName()+":"+timerid+" removing failed"); ! System.out.println(">>> TCP error: timer "+mParentStack.getHostName()+":"+timerid+" removing failed"); } } Index: TCP_session.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/TCP_session.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** TCP_session.java 25 Sep 2007 22:34:09 -0000 1.7 --- TCP_session.java 28 Sep 2007 22:15:51 -0000 1.8 *************** *** 13,16 **** --- 13,17 ---- import java.util.PriorityQueue; import java.util.Iterator; + import java.util.Enumeration; /** *************** *** 171,174 **** --- 172,179 ---- } + public Enumeration<Integer> getAllSegmentToResendNumbers(){ + return segmentsToResend.keys(); + } + /** * Pop expected segment from buffer Index: socketLayer.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/socketLayer.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** socketLayer.java 25 Sep 2007 22:34:09 -0000 1.7 --- socketLayer.java 28 Sep 2007 22:15:51 -0000 1.8 *************** *** 41,45 **** jnsock.src_IP = srcIP; //((jnSocket)sockTable.get(sock)).src_port = srcPort; <-- WRONG! ! jnsock.open_state = true; //bind or connect or listen if(jnsock.type == jnsock.UDP_socket){ mParentStack.UDP().bindPort(sock, srcPort); --- 41,45 ---- jnsock.src_IP = srcIP; //((jnSocket)sockTable.get(sock)).src_port = srcPort; <-- WRONG! ! //jnsock.open_state = true; //bind or connect or listen if(jnsock.type == jnsock.UDP_socket){ mParentStack.UDP().bindPort(sock, srcPort); *************** *** 55,59 **** jnSocket jnsock = get_socket(sock); //((jnSocket)sockTable.get(sock)).src_port = srcPort; <-- WRONG! - jnsock.open_state = true; //bind or connect or listen if(jnsock.type == jnsock.UDP_socket){ //mParentStack.UDP().bindPort(sock, srcPort); --- 55,58 ---- *************** *** 62,65 **** --- 61,65 ---- mParentStack.TCP().listen(sock); } + jnsock.open_state = true; //bind or connect or listen } Index: Echo_tcp.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/Echo_tcp.java,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** Echo_tcp.java 25 Sep 2007 22:34:09 -0000 1.36 --- Echo_tcp.java 28 Sep 2007 22:15:51 -0000 1.37 *************** *** 113,116 **** --- 113,117 ---- public void OnConnect(int sock){ System.out.println("ECHO_TCP: Connected "+sock+" !"); + printLayerInfo("Connected "+sock+" !"); try{ if(appType == 0){ |