[irrtoolset]Some patches...

Tony Li Tony.Li at procket.com
Fri Feb 6 13:50:05 CET 2004


These diffs are relative to 4.8.1 and resolve a number of issues
that I was seeing.

Tony


Index: README
===================================================================
RCS file: /cvs/IRRToolSet/README,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -c -w -r1.1.1.1 -r1.2
*** README	21 Jan 2004 08:12:18 -0000	1.1.1.1
--- README	23 Jan 2004 10:59:35 -0000	1.2
***************
*** 22,29 ****
  	available upon request.
  
  INSTALLATION
! 	0. To install, you need g++ 2.8.0 or higher, libstdc++-2.8.0 or
! 	   higher, bison, flex and gmake.
             Please note that the toolset is not gcc3 compliant (yet).
  
  	   For roe and aoe, you also need Tk4.0/Tcl7.4 or higher. If
Tcl/Tk 
--- 22,29 ----
  	available upon request.
  
  INSTALLATION
! 	0. To install, you need g++ 2.95.3., libstdc++-2.9.0, bison,
flex
!    	   and gmake. 
             Please note that the toolset is not gcc3 compliant (yet).
  
  	   For roe and aoe, you also need Tk4.0/Tcl7.4 or higher. If
Tcl/Tk 
Index: src/Core/util/FixedSizeAllocator.hh
===================================================================
RCS file: /cvs/IRRToolSet/src/Core/util/FixedSizeAllocator.hh,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -c -w -r1.1.1.1 -r1.2
*** src/Core/util/FixedSizeAllocator.hh	21 Jan 2004 08:12:18 -0000
1.1.1.1
--- src/Core/util/FixedSizeAllocator.hh	23 Jan 2004 10:41:30 -0000
1.2
***************
*** 1,4 ****
! //  $Id: FixedSizeAllocator.hh,v 1.1.1.1 2004/01/21 08:12:18 tli Exp $
  // Copyright (c) 2001,2002                        RIPE NCC
  //
  // All Rights Reserved
--- 1,4 ----
! //  $Id: FixedSizeAllocator.hh,v 1.2 2004/01/23 10:41:30 tli Exp $
  // Copyright (c) 2001,2002                        RIPE NCC
  //
  // All Rights Reserved
***************
*** 74,79 ****
--- 74,81 ----
     void get_more_memory() {
        void *p = malloc(size * count + sizeof(void *));
  
+       assert(p);
+ 
        * (void **) ((char *) p + size * count) = root;
        root = p;
  
***************
*** 103,108 ****
--- 105,112 ----
     void *allocate() {
        if (!free_ptr)
  	 get_more_memory();
+ 
+       assert(free_ptr);
  
        void *p = free_ptr;
        free_ptr = * (void **) free_ptr;
Index: src/RtConfig/command.l
===================================================================
RCS file: /cvs/IRRToolSet/src/RtConfig/command.l,v
retrieving revision 1.1.1.2
retrieving revision 1.2
diff -c -w -r1.1.1.2 -r1.2
*** src/RtConfig/command.l	23 Jan 2004 09:26:31 -0000	1.1.1.2
--- src/RtConfig/command.l	23 Jan 2004 10:28:21 -0000	1.2
***************
*** 18,24 ****
  // AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
OUT OF
  // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  //
! //  $Id: command.l,v 1.1.1.2 2004/01/23 09:26:31 tli Exp $
  //
  //  Copyright (c) 1994 by the University of Southern California
  //  All rights reserved.
--- 18,24 ----
  // AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
OUT OF
  // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  //
! //  $Id: command.l,v 1.2 2004/01/23 10:28:21 tli Exp $
  //
  //  Copyright (c) 1994 by the University of Southern California
  //  All rights reserved.
***************
*** 152,157 ****
--- 152,162 ----
     LEXER_RETURN((int) *yytext);
  }
  
+ \r {
+    /* Ignore this character.  It's likely that our input is */
+    /* a DOS or MAC file. */
+ }
+ 
  . {
     ECHO;
     /* simply skip this line, it is not interesting to us */
***************
*** 171,176 ****
--- 176,186 ----
     LEXER_RETURN((int) *yytext);
  }
  
+ <USELESS_LINE>\r {
+    /* Ignore this character.  It's likely that our input is */
+    /* a DOS or MAC file. */
+ }
+ 
  <USEFUL_LINE>[Aa][Ss][0-9]+ {
     yylval.as = atoi(yytext+2);
     LEXER_RETURN(TKN_ASNUM);
***************
*** 208,213 ****
--- 218,229 ----
  }
  
  <USEFUL_LINE>filter\ .* {
+    char *tmp;
+ 
+    tmp = strchr(yytext, '\r');
+    if (tmp) {
+        *tmp = 0;
+    }   
     yylval.val = yytext + 7; 
     LEXER_RETURN(TKN_FILTER);
  }
***************
*** 220,225 ****
--- 236,246 ----
     yylineno++;
     BEGIN(INITIAL);
     LEXER_RETURN((int) *yytext);
+ }
+ 
+ <USEFUL_LINE>\r {
+    /* Ignore this character.  It's likely that our input is */
+    /* a DOS or MAC file. */
  }
  
  <USEFUL_LINE>= {
Index: src/RtConfig/command.y
===================================================================
RCS file: /cvs/IRRToolSet/src/RtConfig/command.y,v
retrieving revision 1.1.1.2
retrieving revision 1.2
diff -c -w -r1.1.1.2 -r1.2
*** src/RtConfig/command.y	23 Jan 2004 09:26:31 -0000	1.1.1.2
--- src/RtConfig/command.y	23 Jan 2004 10:27:49 -0000	1.2
***************
*** 18,24 ****
  // AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
OUT OF
  // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  //
! //  $Id: command.y,v 1.1.1.2 2004/01/23 09:26:31 tli Exp $
  //
  //  Copyright (c) 1994 by the University of Southern California
  //  All rights reserved.
--- 18,24 ----
  // AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
OUT OF
  // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  //
! //  $Id: command.y,v 1.2 2004/01/23 10:27:49 tli Exp $
  //
  //  Copyright (c) 1994 by the University of Southern California
  //  All rights reserved.
***************
*** 449,455 ****
  extern char *yytext;
  
  int yyerror(char *s) {
!    cerr << "Error in template file\n";
     return(0);
  }
  
--- 449,455 ----
  extern char *yytext;
  
  int yyerror(char *s) {
!     cerr << "Error in template file, line " << yylineno << "\n";
      return(0);
  }
  
Index: src/RtConfig/f_cisco.cc
===================================================================
RCS file: /cvs/IRRToolSet/src/RtConfig/f_cisco.cc,v
retrieving revision 1.1.1.2
diff -c -w -r1.1.1.2 f_cisco.cc
*** src/RtConfig/f_cisco.cc	23 Jan 2004 09:26:31 -0000	1.1.1.2
--- src/RtConfig/f_cisco.cc	6 Feb 2004 12:37:51 -0000
***************
*** 1170,1176 ****
  	        for (i = cmp->start; i <= cmp->end; i++)
  		        cout << " match community " << i 
  		        << (cmp->flag ? " exact\n" : "\n");
! 	       if (!import_flag || forcedInboundMatchIP) {
  		       for (prp = prfx_acls->head(); prp; prp
=prfx_acls->next(prp)) {
  		         for (i = prp->start; i <= prp->end; i++) {
  			         if (usePrefixLists)
--- 1170,1176 ----
  	        for (i = cmp->start; i <= cmp->end; i++)
  		        cout << " match community " << i 
  		        << (cmp->flag ? " exact\n" : "\n");
! 	       if ((!import_flag || forcedInboundMatchIP) && prfx_acls)
{
  		       for (prp = prfx_acls->head(); prp; prp
=prfx_acls->next(prp)) {
  		         for (i = prp->start; i <= prp->end; i++) {
  			         if (usePrefixLists)
Index: src/irr/rawhoisc.cc
===================================================================
RCS file: /cvs/IRRToolSet/src/irr/rawhoisc.cc,v
retrieving revision 1.1.1.2
diff -c -w -r1.1.1.2 rawhoisc.cc
*** src/irr/rawhoisc.cc	23 Jan 2004 09:26:31 -0000	1.1.1.2
--- src/irr/rawhoisc.cc	6 Feb 2004 12:37:51 -0000
***************
*** 98,103 ****
--- 98,106 ----
  #ifndef HAVE_MEMCPY
  #  define memcpy(d, s, n) bcopy ((s), (d), (n))
  #endif
+ #ifndef BUFFER_SIZE
+ #  define BUFFER_SIZE 2048
+ #endif
  }
  
  void RAWhoisClient::Open(const char *_host, const int _port, const
char *_sources) {
***************
*** 168,173 ****
--- 171,192 ----
     _is_open = 0;
  }
  
+ void RAWhoisClient::CheckConnection() {
+ 
+     if (!_is_open)
+ 	return;
+ 
+     if (feof(in)) {
+ 	Trace(TR_WHOIS_QUERY) << "Whois: Closed" << endl;
+ 
+ 	_is_open = 0;
+ 	fclose(in);
+ 	fclose(out);
+ 
+ 	version = 0;			// Don't know who we're talking
to now
+     }
+ }
+     
  void RAWhoisClient::GetVersion() {
     char *buffer = (char *) calloc (80,1);
     char *start;
***************
*** 256,269 ****
  
     // Read the "A<byte-count>" line
     if (! fgets(buffer, sizeof(buffer), in)) {
!       error.Die("Error: fgets() failed.\n");
        return 0;
     }
  
     Trace(TR_WHOIS_RESPONSE) << "Whois: Response " << buffer << endl;
  
     if (*buffer == 'D') { // key not found error
!       error.warning("Warning: key not found error for query %s.\n",
last_query);
        return 0;
     }
     if (*buffer == 'C') { // returned success
--- 275,289 ----
  
     // Read the "A<byte-count>" line
     if (! fgets(buffer, sizeof(buffer), in)) {
!       error.Die("Error: fgets() failed, no answer.\n");
        return 0;
     }
  
     Trace(TR_WHOIS_RESPONSE) << "Whois: Response " << buffer << endl;
  
     if (*buffer == 'D') { // key not found error
!       error.warning("Warning: key not found error for query %s.\n",
! 		    last_query);
        return 0;
     }
     if (*buffer == 'C') { // returned success
***************
*** 279,292 ****
        return 0;
     }
     if (is_rpslng()) {
!       char result[1024];
!       memset(result, 0, strlen(result));
!       char prev[1024];
!       memset(prev, 0, strlen(prev));
        do {
          if (strstr (buffer, "route") || strstr(buffer, "route6")) {
            char *prefix;
!           char end_prefix[1024];
            prefix = strstr(buffer, ":");
            do {
              prefix++;
--- 299,321 ----
        return 0;
     }
     if (is_rpslng()) {
!       char prev[BUFFER_SIZE];
!       char result[BUFFER_SIZE];
!       int first = 1;
!       
!       memset(result, 0, BUFFER_SIZE);
!       memset(prev, 0, BUFFER_SIZE);
        do {
+ 	  if (first) {
+ 	      first = 0;
+ 	  } else {
+ 	      Trace(TR_WHOIS_RESPONSE) << "Whois: Response " << buffer; 
+ 	  }
+ 
          if (strstr (buffer, "route") || strstr(buffer, "route6")) {
            char *prefix;
!           char end_prefix[BUFFER_SIZE];
! 	  
            prefix = strstr(buffer, ":");
            do {
              prefix++;
***************
*** 298,310 ****
          }
        } while (fgets(buffer, sizeof(buffer), in) && 
                !((*prev == '\n') && (*buffer == '\n')));
-       //} while (fgets(buffer, sizeof(buffer), in) && 
-       //        !(*buffer == '\n'));
  
!       int count = atoi(result);
        response = new char [count];
!       memset(response, 0, strlen(response));
!       strncpy(response, result, strlen(result));
        return count; // provide the char count
     }
  
--- 327,344 ----
          }
        } while (fgets(buffer, sizeof(buffer), in) && 
                !((*prev == '\n') && (*buffer == '\n')));
  
!       // Unfortunately, the syntax is such that there is no obvious
!       // way to tell when this response is complete.  The server may
!       // just time us out.  If so, we need to reopen the connection.
!       CheckConnection();
! 
!       int count = strlen(result) + 1;
        response = new char [count];
!       assert(response);
!       memset(response, 0, count);
!       strncpy(response, result, count);
!       response[count - 1] = '\0';
        return count; // provide the char count
     }
  
***************
*** 319,325 ****
  
     // Read the return code line
     if (!fgets(buffer, sizeof(buffer), in)) {
!       error.Die("Error: fgets() failed.\n");
        return 0;
     }
  
--- 353,360 ----
  
     // Read the return code line
     if (!fgets(buffer, sizeof(buffer), in)) {
!       error.Die("Error: fgets() of return code failed in "
! 		"RAWhoisClient::Response\n");
        return 0;
     }
  
Index: src/irr/rawhoisc.hh
===================================================================
RCS file: /cvs/IRRToolSet/src/irr/rawhoisc.hh,v
retrieving revision 1.1.1.2
diff -c -w -r1.1.1.2 rawhoisc.hh
*** src/irr/rawhoisc.hh	23 Jan 2004 09:26:31 -0000	1.1.1.2
--- src/irr/rawhoisc.hh	6 Feb 2004 12:37:51 -0000
***************
*** 131,136 ****
--- 131,138 ----
  
     void Close();
  
+    void CheckConnection();
+ 
     void SetSources(const char *_sources = dflt_sources);
  
     // Modified by wlee at isi.edu




More information about the irrtoolset mailing list