HTTPLexer.java
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:22k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /* The following code was generated by JFlex 1.2 on 18.05.00 09:47 */
  2. package net.wastl.webmail.standalone;
  3. import java_cup.runtime.*;   /* this is convenience, but not necessary */
  4. import java.io.Reader;
  5. /*
  6.  * http.lex
  7.  *
  8.  * Created: April 1999
  9.  *
  10.  * Copyright (C) 1999-2000 Sebastian Schaffert
  11.  * 
  12.  * This program is free software; you can redistribute it and/or
  13.  * modify it under the terms of the GNU General Public License
  14.  * as published by the Free Software Foundation; either version 2
  15.  * of the License, or (at your option) any later version.
  16.  * 
  17.  * This program is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  * GNU General Public License for more details.
  21.  * 
  22.  * You should have received a copy of the GNU General Public License
  23.  * along with this program; if not, write to the Free Software
  24.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  25.  */
  26. /**
  27.  * This class is a scanner generated by 
  28.  * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2
  29.  * on 18.05.00 09:47 from the specification file
  30.  * <tt>http.lex</tt>
  31.  */
  32. class HTTPLexer extends sym {
  33.   /** this character denotes the end of file */
  34.   final public static int YYEOF = -1;
  35.   /** lexical states */
  36.   final public static int HEADERDATA = 2;
  37.   final public static int CONTENT = 4;
  38.   final public static int YYINITIAL = 0;
  39.   final public static int HEADER = 1;
  40.   final public static int END = 3;
  41.   /** 
  42.    * Translates characters to character classes
  43.    */
  44.   final private static char [] yycmap = {
  45.     24, 24, 24, 24, 24, 24, 24, 24, 24, 14, 12, 24, 24, 11, 24, 24, 
  46.     24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 26, 25, 25, 25, 25, 25, 
  47.     13, 28, 26, 25, 28, 28, 28, 28, 27, 27, 28, 28, 27, 32, 22, 21, 
  48.      1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 23, 31, 26, 29, 26, 27, 
  49.     27,  2,  3,  4,  5,  6,  7,  9, 18,  8, 28, 28, 34, 33, 20, 16, 
  50.     15, 28, 35, 17, 10, 19, 28, 30, 37, 36, 28, 26, 26, 26, 25, 28, 
  51.     25,  2,  3,  4,  5,  6,  7,  9, 18,  8, 28, 28, 34, 33, 20, 16, 
  52.     15, 28, 35, 17, 10, 19, 28, 38, 37, 36, 28, 26, 28, 26, 25, 25, 
  53.     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 
  54.     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 
  55.     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,  0,  0, 
  56.      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
  57.      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
  58.      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
  59.      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
  60.      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
  61.   };
  62.   /** 
  63.    * Translates a state to a row index in the transition table
  64.    */
  65.   final private static int yy_rowMap [] = { 
  66.         0,    39,    78,   117,   156,   195,   234,   273,   312,   351, 
  67.       390,   429,   468,   507,   312,   546,   585,   312,   624,   663, 
  68.       702,   741,   780,   819,   858,   312,   312,   195,   897,   936, 
  69.       975,  1014,  1053,  1092,   546,   312,  1131,   819,  1170,  1209, 
  70.       195,  1248,  1287,  1326,  1365,  1404,   507,  1443,  1482,  1521, 
  71.      1560,  1599,  1638,  1677,  1716,  1755,  1794,  1833,  1872,  1911, 
  72.      1950,  1872,  1989,  2028,  2067,  2106,  2145,  2184,  2223,  2262, 
  73.      2301,  2340,  2379,  2418,  2457,  2496,  2535,  2574,  2613,  2652, 
  74.      2691,  2730,  2769,  2808,  2847,  2886,  2925,  2964,  3003,  3042, 
  75.      3081,  3120,  3159,  3198,  3237,  3276,  3315,  3354,  3393,  3432, 
  76.      3471,  3510,  3549,  3588,  3627,  3666,  3705,  3744,  3783,  3822, 
  77.      3744,  3861
  78.   };
  79.   /** 
  80.    * The packed transition table of the DFA
  81.    */
  82.   final private static String yy_packed = 
  83.     "1161716110111212113114"+
  84.     "16115261161621716217"+
  85.     "16317761320121122223620"+
  86.     "117120124117120217120317"+
  87.     "7201171251261025127130125"+
  88.     "1171125117102513152547324733"+
  89.     "1334463411341351134"+
  90.     "2134315341364344634"+
  91.     "1134135113421343"+
  92.     "734141111162123013344"+
  93.     "1341372341361341134135"+
  94.     "11342134322344140"+
  95.     "534113413511342134"+
  96.     "3153414133414246341"+
  97.     "134135113421343734"+
  98.     "11216411163141613434"+
  99.     "643114314411432143"+
  100.     "3743141224722310124"+
  101.     "34224311225212511125"+
  102.     "116251122521251145"+
  103.     "1025116251413024645246"+
  104.     "31122521251425147425"+
  105.     "11625251502112341514"+
  106.     "634113413511342134"+
  107.     "3223442341363341134"+
  108.     "1351134213432134152"+
  109.     "4634113413511342"+
  110.     "13431134153103446341"+
  111.     "1341351134213432134"+
  112.     "154463411341351134"+
  113.     "21343734112252125"+
  114.     "1155102511625112252"+
  115.     "125111251112515642525"+
  116.     "15721103416023446341"+
  117.     "1341351134213431434"+
  118.     "151534463411341351"+
  119.     "1342134322344161534"+
  120.     "1134135113421343"+
  121.     "734112252125111251"+
  122.     "1125162425111251632125"+
  123.     "111251162513344134164"+
  124.     "434113413511342134"+
  125.     "3223446341651341351"+
  126.     "134213437341725166"+
  127.     "225212511125116251"+
  128.     "7251672252125111251"+
  129.     "1625133445341511134135"+
  130.     "1134213437341170"+
  131.     "46325171625212511125"+
  132.     "116251122521251172"+
  133.     "10251162511702417321"+
  134.     "12517410252125111251"+
  135.     "16251125175102521251"+
  136.     "1125116251176461125177"+
  137.     "2125111251162511225"+
  138.     "212511125112251100325"+
  139.     "17251101225212511125"+
  140.     "1162511125110221251"+
  141.     "1125116251122521251"+
  142.     "125110372511625112252"+
  143.     "12516251104225116251"+
  144.     "12252125152511053251"+
  145.     "16251625110632521251"+
  146.     "1125116251122521251"+
  147.     "625110722511625112252"+
  148.     "12511251110725116251"+
  149.     "1225212511125114251111"+
  150.     "125112252125111251"+
  151.     "122511123251122521251"+
  152.     "112517251113625112252"+
  153.     "125111251102511145251"+
  154.     "122521251112515251115"+
  155.     "725111511225212511125"+
  156.     "17251116625112252125"+
  157.     "111251525111772511171"+
  158.     "42511205252125111251"+
  159.     "1625112252125111251"+
  160.     "52511217251121112511221025"+
  161.     "2125111251162511225"+
  162.     "21251112517251123625"+
  163.     "1112511242125111251"+
  164.     "16251625112532521251"+
  165.     "1125116251125112610252"+
  166.     "1251112511625112252"+
  167.     "12511251127725116251"+
  168.     "122521251112516251130"+
  169.     "725112252125111251"+
  170.     "1225113132511225211321"+
  171.     "1125116251122521251"+
  172.     "112511025113352512251134"+
  173.     "725212511125116251"+
  174.     "122521251112517251135"+
  175.     "62511225212511251136"+
  176.     "725116251122521251"+
  177.     "425113742511625112252"+
  178.     "12514251140425116251"+
  179.     "1225212511125112251141"+
  180.     "32511225212515251142"+
  181.     "325116251122521251"+
  182.     "112511125114342514251144"+
  183.     "525212511125116251"+
  184.     "52511454252125111251"+
  185.     "162511251146102521251"+
  186.     "1125116251122521251"+
  187.     "525114732511625112252"+
  188.     "125111251122511503251"+
  189.     "32511516252125111251"+
  190.     "1625112252125111251"+
  191.     "132511522251122521251"+
  192.     "125115372511625112252"+
  193.     "125111251425115411251"+
  194.     "42511555252125111251"+
  195.     "1625115612157212516157125"+
  196.     "11571251115722511573257157"+
  197.     "15251160425212511125"+
  198.     "116251315646156111562"+
  199.     "1156211563715614251157"+
  200.     "52521251112511625";
  201.   /** 
  202.    * The transition table of the DFA
  203.    */
  204.   final private static int yytrans [] = yy_unpack(yy_packed);
  205.   /* error codes */
  206.   final private static int YY_UNKNOWN_ERROR = 0;
  207.   final private static int YY_ILLEGAL_STATE = 1;
  208.   final private static int YY_NO_MATCH = 2;
  209.   final private static int YY_PUSHBACK_2BIG = 3;
  210.   /* error messages for the codes above */
  211.   final private static String YY_ERROR_MSG[] = {
  212.     "Unkown internal scanner error",
  213.     "Internal error: unknown state",
  214.     "Error: could not match input",
  215.     "Error: pushback value was too large"
  216.   };
  217.   /**
  218.    * YY_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
  219.    */
  220.   private final static byte YY_ATTRIBUTE[] = {
  221.      0,  0,  0,  0,  0,  1,  1,  1,  9,  1,  1,  1,  1,  1,  9,  3, 
  222.      1,  9,  1,  1,  1,  1,  1,  1,  1,  9,  9,  0,  0,  0,  0,  0, 
  223.      0,  0,  2, 13,  1,  1,  1,  0,  1,  0,  0,  0,  1,  1,  0,  0, 
  224.      0,  1,  1,  0,  0,  1,  1,  0,  1,  1,  0,  1,  1,  1,  1,  1, 
  225.      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
  226.      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
  227.      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1
  228.   };
  229.   /** the input device */
  230.   private java.io.Reader yy_reader;
  231.   /** the current state of the DFA */
  232.   private int yy_state;
  233.   /** the current lexical state */
  234.   private int yy_lexical_state = YYINITIAL;
  235.   /** this buffer contains the current text to be matched and is
  236.       the source of the yytext() string */
  237.   private char yy_buffer[] = new char[16384];
  238.   /** the textposition at the last accepting state */
  239.   private int yy_markedPos;
  240.   /** the current text position in the buffer */
  241.   private int yy_currentPos;
  242.   /** startRead marks the beginning of the yytext() string in the buffer */
  243.   private int yy_startRead;
  244.   /** endRead marks the last character in the buffer, that has been read
  245.       from input */
  246.   private int yy_endRead;
  247.   /** number of newlines encountered up to the start of the matched text */
  248.   private int yyline;
  249.   /** the number of characters up to the start of the matched text */
  250.   private int yychar;
  251.   /**
  252.    * the number of characters from the last newline up to the start of the 
  253.    * matched text
  254.    */
  255.   private int yycolumn; 
  256.   /** 
  257.    * yy_atBOL == true <=> the scanner is currently at the beginning of a line
  258.    */
  259.   private boolean yy_atBOL;
  260.   /** yy_atEOF == true <=> the scanner has returned a value for EOF */
  261.   private boolean yy_atEOF;
  262.   /* user code: */
  263.     boolean has_content=false;
  264.     boolean versionset=false;
  265.     boolean set_contenttype=false;
  266.     boolean set_contentlength=false;
  267.     String content_type;
  268.     int contentlength=0;
  269.     int cur_contentlength;
  270.     StringBuffer string = new StringBuffer();
  271.     private Symbol symbol(int type) {
  272. return new Symbol(type, yyline, yycolumn);
  273.     }
  274.     private Symbol symbol(int type, Object value) {
  275. return new Symbol(type, yyline, yycolumn, value);
  276.     }
  277.   
  278.     public String getContentType() {
  279. return content_type;
  280.     }
  281.   /**
  282.    * Creates a new scanner
  283.    * There is also a java.io.InputStream version of this constructor.
  284.    *
  285.    * @param   in  the java.io.Reader to read input from.
  286.    */
  287.   HTTPLexer(java.io.Reader in) {
  288.     this.yy_reader = in;
  289.   }
  290.   /**
  291.    * Creates a new scanner.
  292.    * There is also java.io.Reader version of this constructor.
  293.    *
  294.    * @param   in  the java.io.Inputstream to read input from.
  295.    */
  296.   HTTPLexer(java.io.InputStream in) {
  297.     this(new java.io.InputStreamReader(in));
  298.   }
  299.   /** 
  300.    * Unpacks the compressed DFA transition table.
  301.    *
  302.    * @param packed   the packed transition table
  303.    * @return         the unpacked transition table
  304.    */
  305.   private static int [] yy_unpack(String packed) {
  306.     int [] trans = new int[3900];
  307.     int i = 0;  /* index in packed string  */
  308.     int j = 0;  /* index in unpacked array */
  309.     while (i < 1886) {
  310.       int count = packed.charAt(i++);
  311.       int value = packed.charAt(i++);
  312.       value--;
  313.       do trans[j++] = value; while (--count > 0);
  314.     }
  315.     return trans;
  316.   }
  317.   /**
  318.    * Gets the next input character.
  319.    *
  320.    * @return      the next character of the input stream, EOF if the
  321.    *              end of the stream is reached.
  322.    * @exception   IOException  if any I/O-Error occurs
  323.    */
  324.   private int yy_advance() throws java.io.IOException {
  325.     /* standard case */
  326.     if (yy_currentPos < yy_endRead) return yy_buffer[yy_currentPos++];
  327.     /* if the eof is reached, we don't need to work hard */ 
  328.     if (yy_atEOF) return YYEOF;
  329.     /* otherwise: need to refill the buffer */
  330.     /* first: make room (if you can) */
  331.     if (yy_startRead > 0) {
  332.       System.arraycopy(yy_buffer, yy_startRead, 
  333.                        yy_buffer, 0, 
  334.                        yy_endRead-yy_startRead);
  335.       /* translate stored positions */
  336.       yy_endRead-= yy_startRead;
  337.       yy_currentPos-= yy_startRead;
  338.       yy_markedPos-= yy_startRead;
  339.       yy_startRead = 0;
  340.     }
  341.     /* is the buffer big enough? */
  342.     if (yy_currentPos >= yy_buffer.length) {
  343.       /* if not: blow it up */
  344.       char newBuffer[] = new char[yy_currentPos*2];
  345.       System.arraycopy(yy_buffer, 0, newBuffer, 0, yy_buffer.length);
  346.       yy_buffer = newBuffer;
  347.     }
  348.     /* finally: fill the buffer with new input */
  349.     int numRead = yy_reader.read(yy_buffer, yy_endRead, 
  350.                                             yy_buffer.length-yy_endRead);
  351.     if ( numRead == -1 ) return YYEOF;
  352.     yy_endRead+= numRead;
  353.     return yy_buffer[yy_currentPos++];
  354.   }
  355.   /**
  356.    * Closes the input stream.
  357.    */
  358.   final public void yyclose() throws java.io.IOException {
  359.     yy_atEOF = true;            /* indicate end of file */
  360.     yy_endRead = yy_startRead;  /* invalidate buffer    */
  361.     yy_reader.close();
  362.   }
  363.   /**
  364.    * Returns the current lexical state.
  365.    */
  366.   final public int yystate() {
  367.     return yy_lexical_state;
  368.   }
  369.   /**
  370.    * Enters a new lexical state
  371.    *
  372.    * @param newState the new lexical state
  373.    */
  374.   final public void yybegin(int newState) {
  375.     yy_lexical_state = newState;
  376.   }
  377.   /**
  378.    * Returns the text matched by the current regular expression.
  379.    */
  380.   final public String yytext() {
  381.     return new String( yy_buffer, yy_startRead, yy_markedPos-yy_startRead );
  382.   }
  383.   /**
  384.    * Returns the length of the matched text region.
  385.    */
  386.   final public int yylength() {
  387.     return yy_markedPos-yy_startRead;
  388.   }
  389.   /**
  390.    * Reports an error that occured while scanning.
  391.    *
  392.    * @param   errorCode  the code of the errormessage to display
  393.    */
  394.   private void yy_ScanError(int errorCode) {
  395.     try {
  396.       System.out.println(YY_ERROR_MSG[errorCode]);
  397.     }
  398.     catch (ArrayIndexOutOfBoundsException e) {
  399.       System.out.println(YY_ERROR_MSG[YY_UNKNOWN_ERROR]);
  400.     }
  401.     System.exit(1);
  402.   } 
  403.   /**
  404.    * Pushes the specified amount of characters back into the input stream.
  405.    *
  406.    * They will be read again by then next call of the scanning method
  407.    *
  408.    * @param number  the number of characters to be read again.
  409.    *                This number must not be greater than yylength()!
  410.    */
  411.   private void yypushback(int number) {
  412.     if ( number > yylength() )
  413.       yy_ScanError(YY_PUSHBACK_2BIG);
  414.     yy_markedPos -= number;
  415.   }
  416.   /**
  417.    * Resumes scanning until the next regular expression is matched,
  418.    * the end of input is encountered or an I/O-Error occurs.
  419.    *
  420.    * @return      the next token
  421.    * @exception   IOException  if any I/O-Error occurs
  422.    */
  423.   public java_cup.runtime.Symbol yylex() throws java.io.IOException {
  424.     int yy_input;
  425.     int yy_action;
  426.     int yy_pushbackPos = -1;
  427.     boolean yy_was_pushback;
  428.     while (true) {
  429.       boolean yy_counted = false;
  430.       for (yy_currentPos = yy_startRead; yy_currentPos < yy_markedPos;
  431.                                                       yy_currentPos++) {
  432.         switch (yy_buffer[yy_currentPos]) {
  433.         case 'r':
  434.           yyline++;
  435.           yycolumn = 0;
  436.           yy_counted = true;
  437.           break;
  438.         case 'n':
  439.           if (yy_counted)
  440.             yy_counted = false;
  441.           else {
  442.             yyline++;
  443.             yycolumn = 0;
  444.           }
  445.           break;
  446.         default:
  447.           yy_counted = false;
  448.           yycolumn++;
  449.         }
  450.       }
  451.       if (yy_counted) {
  452.         if ( yy_advance() == 'n' ) yyline--;
  453.         if ( !yy_atEOF ) yy_currentPos--;
  454.       }
  455.       yy_action = -1;
  456.       yy_currentPos = yy_startRead = yy_markedPos;
  457.       yy_state = yy_lexical_state;
  458.       yy_was_pushback = false;
  459.       yy_forAction: {
  460.         while (true) {
  461.           yy_input = yy_advance();
  462.           if ( yy_input == YYEOF ) break yy_forAction;
  463.           int yy_next = yytrans[ yy_rowMap[yy_state] + yycmap[yy_input] ];
  464.           if (yy_next == -1) break yy_forAction;
  465.           yy_state = yy_next;
  466.           int yy_attributes = YY_ATTRIBUTE[yy_state];
  467.           if ( (yy_attributes & 2) > 0 )
  468.             yy_pushbackPos = yy_currentPos;
  469.           if ( (yy_attributes & 1) > 0 ) {
  470.             yy_was_pushback = (yy_attributes & 4) > 0;
  471.             yy_action = yy_state; 
  472.             yy_markedPos = yy_currentPos; 
  473.             if ( (yy_attributes & 8) > 0 ) break yy_forAction;
  474.           }
  475.         }
  476.       }
  477.       if (yy_was_pushback)
  478.         yy_markedPos = yy_pushbackPos;
  479.       switch (yy_action) {    
  480.         case 40: 
  481.           { versionset=true;
  482.                       return symbol(METHOD,yytext()); }
  483.         case 113: break;
  484.         case 37: 
  485.           { string.append(" "); }
  486.         case 114: break;
  487.         case 19: 
  488.           { string.setLength(0); 
  489.                      yybegin(HEADERDATA); 
  490.      return symbol(HEAD_SEP); }
  491.         case 115: break;
  492.         case 20: 
  493.         case 21: 
  494.         case 24: 
  495.         case 36: 
  496.         case 38: 
  497.         case 44: 
  498.         case 45: 
  499.         case 49: 
  500.         case 50: 
  501.         case 53: 
  502.         case 54: 
  503.         case 56: 
  504.         case 57: 
  505.         case 59: 
  506.         case 60: 
  507.         case 62: 
  508.         case 63: 
  509.         case 64: 
  510.         case 65: 
  511.         case 66: 
  512.         case 67: 
  513.         case 68: 
  514.         case 69: 
  515.         case 70: 
  516.         case 71: 
  517.         case 72: 
  518.         case 73: 
  519.         case 74: 
  520.         case 75: 
  521.         case 76: 
  522.         case 77: 
  523.         case 78: 
  524.         case 79: 
  525.         case 80: 
  526.         case 81: 
  527.         case 82: 
  528.         case 83: 
  529.         case 84: 
  530.         case 85: 
  531.         case 86: 
  532.         case 87: 
  533.         case 88: 
  534.         case 89: 
  535.         case 90: 
  536.         case 91: 
  537.         case 92: 
  538.         case 93: 
  539.         case 94: 
  540.         case 95: 
  541.         case 96: 
  542.         case 97: 
  543.         case 98: 
  544.         case 99: 
  545.         case 100: 
  546.         case 101: 
  547.         case 102: 
  548.         case 103: 
  549.         case 104: 
  550.         case 105: 
  551.         case 106: 
  552.         case 107: 
  553.         case 108: 
  554.         case 111: 
  555.           { string.append(yytext()); }
  556.         case 116: break;
  557.         case 61: 
  558.           { return symbol(VERSION,yytext().substring(5)); }
  559.         case 117: break;
  560.         case 25: 
  561.           { return symbol(EOF); }
  562.         case 118: break;
  563.         case 9: 
  564.         case 18: 
  565.           { return symbol(SP); }
  566.         case 119: break;
  567.         case 13: 
  568.           { return symbol(URI,yytext()); }
  569.         case 120: break;
  570.         case 26: 
  571.           { string.append(yytext());
  572.      cur_contentlength++;
  573.      if(contentlength>0 && cur_contentlength >= contentlength) {
  574.        yy_atEOF = true;            /* indicate end of file */
  575.        yy_endRead = yy_startRead;  /* invalidate buffer    */
  576.        yybegin(END);  
  577.                        return symbol(DATA,string.toString()); 
  578.      } }
  579.         case 121: break;
  580.         case 5: 
  581.         case 6: 
  582.         case 10: 
  583.         case 11: 
  584.         case 12: 
  585.         case 14: 
  586.         case 15: 
  587.           { System.err.println("Invalid input!"); }
  588.         case 122: break;
  589.         case 35: 
  590.           { if(yytext().toUpperCase().trim().equals("CONTENT-LENGTH")) {
  591.  set_contentlength=true;
  592.      } else if(yytext().toUpperCase().trim().equals("CONTENT-TYPE")) {
  593.  set_contenttype=true;
  594.      }
  595.                      return symbol(TOKEN,yytext()); }
  596.         case 123: break;
  597.         case 16: 
  598.         case 17: 
  599.           { if(has_content) {
  600.  cur_contentlength=0;
  601.  string.setLength(0); 
  602.  yybegin(CONTENT);
  603.                     } else {
  604. yy_atEOF = true;            /* indicate end of file */
  605. yy_endRead = yy_startRead;  /* invalidate buffer    */
  606. yybegin(END);
  607.     }
  608.      return symbol(CRLF); }
  609.         case 124: break;
  610.         case 22: 
  611.         case 23: 
  612.           { if(set_contentlength) {
  613.  try {
  614.      contentlength=Integer.parseInt(string.toString());
  615.  } catch(NumberFormatException e) {
  616.      e.printStackTrace();
  617.  }
  618.  set_contentlength=false;
  619.      } else if(set_contenttype) {
  620.  content_type=string.toString();
  621.  set_contenttype=false;
  622.      }
  623.      yybegin(HEADER);  
  624.                      return symbol(DATA,string.toString()); }
  625.         case 125: break;
  626.         case 109: 
  627.         case 110: 
  628.           { has_content=true;
  629.      string.append(yytext()); }
  630.         case 126: break;
  631.         case 7: 
  632.         case 8: 
  633.           { if(versionset) {
  634.                         yybegin(HEADER); 
  635.         return symbol(CRLF);
  636.                       } }
  637.         case 127: break;
  638.         default: 
  639.           if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
  640.             yy_atEOF = true;
  641.               {     return new java_cup.runtime.Symbol(sym.EOF);
  642.  }
  643.           } 
  644.           else {
  645.             yy_ScanError(YY_NO_MATCH);
  646.           }
  647.       }
  648.     }
  649.   }    
  650. }