- Made NODATA_TIMEOUT a configuration option
authormichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>
Mon, 29 Dec 2014 16:53:16 +0000 (16:53 +0000)
committermichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>
Mon, 29 Dec 2014 16:53:16 +0000 (16:53 +0000)
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/hopm/trunk@5198 82007160-df01-0410-b94d-b575c5fd34c7

doc/reference.conf
src/config-lexer.c
src/config-lexer.l
src/config-parser.c
src/config-parser.h
src/config-parser.y
src/config.c
src/config.h
src/irc.c
src/options.h

index 5fce173419d3f3af7a5b221836de5f672f9d6cf9..6ca4fedc74cbc9d309d186c336e89a9a97e8e445 100644 (file)
@@ -106,6 +106,12 @@ irc {
         */
        port = 6667;
 
+
+       /*
+        * Defines time in which bot will timeout if no data is received
+        */
+       readtimeout = 15 minutes;
+
        /*
         * Command to execute to identify to NickServ (if your network uses
         * it). This is the raw IRC command text, and the below example
index 36794de1933da44e8f89cfba4d12a14541308e19..4c7ada6dc85c40b3676695f1972033e25983d131 100644 (file)
@@ -365,8 +365,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 89
-#define YY_END_OF_BUFFER 90
+#define YY_NUM_RULES 90
+#define YY_END_OF_BUFFER 91
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -374,46 +374,47 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[344] =
+static yyconst flex_int16_t yy_accept[352] =
     {   0,
-       87,   87,   90,   88,   87,   86,   88,    2,   88,   79,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       87,   86,    0,    3,    2,    1,    2,   79,    0,    0,
+       88,   88,   91,   89,   88,   87,   89,    2,   89,   80,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       88,   87,    0,    3,    2,    1,    2,   80,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,   13,    0,
-        0,    0,    0,   67,    0,    0,    0,    0,   72,    0,
-        0,    0,    0,    0,    0,   84,    0,   82,    0,    0,
+        0,    0,    0,   68,    0,    0,    0,    0,   73,    0,
+        0,    0,    0,    0,    0,   85,    0,   83,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   54,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   55,    0,    0,    0,    0,    0,
 
         0,   15,    0,   17,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   85,    0,   26,    0,
+        0,    0,    0,    0,    0,    0,   86,    0,   26,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   81,    4,    0,    0,   62,    0,    0,   53,
-        0,    0,    0,    0,   56,   73,    0,    0,    0,    0,
+        0,    0,   82,    4,    0,    0,   63,    0,    0,   54,
+        0,    0,    0,    0,   57,   74,    0,    0,    0,    0,
        18,    0,    0,    0,    0,   20,    0,   21,    0,   23,
        25,    0,    0,    0,    0,   31,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   80,   43,   44,
-        0,   52,    0,   48,    0,    0,   61,    0,    0,    0,
-
-        0,    0,   83,   55,    0,    0,   66,    0,   16,    0,
-       71,    0,    0,   50,    0,    0,    0,    0,    0,    0,
-        0,    0,   34,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   46,   51,    0,   47,    0,    0,    0,
-        0,    0,    0,   12,    0,   14,   65,    0,    0,   70,
-        0,   58,   49,    0,    0,    0,    0,    0,    0,    0,
-        0,   78,    0,    0,   60,    0,   38,   75,   76,    0,
-        0,    0,    0,    0,    0,    7,    0,    0,    0,    0,
-        0,    0,    0,    0,   57,    0,    0,   27,    0,   29,
-       30,    0,    0,   35,   36,   59,    0,    0,   42,    0,
-
-       77,    0,    0,    0,    0,   11,    0,   74,   64,   19,
-       69,   22,   24,   28,   32,   33,   37,    0,    0,    0,
-       45,    0,    6,    8,    0,    0,   63,   68,   39,    0,
-        0,    0,   10,    0,    0,    0,    5,    9,   40,    0,
-        0,   41,    0
+        0,    0,    0,    0,    0,    0,    0,    0,   81,   44,
+       45,    0,   53,    0,   49,    0,    0,   62,    0,    0,
+
+        0,    0,    0,   84,   56,    0,    0,   67,    0,   16,
+        0,   72,    0,    0,   51,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   35,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   47,   52,    0,   48,    0,
+        0,    0,    0,    0,    0,   12,    0,   14,   66,    0,
+        0,   71,    0,   59,   50,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   79,    0,    0,   61,    0,   39,
+       76,   77,    0,    0,    0,    0,    0,    0,    7,    0,
+        0,    0,    0,    0,    0,    0,    0,   58,    0,    0,
+       27,    0,   29,   30,    0,    0,    0,   36,   37,   60,
+
+        0,    0,   43,    0,   78,    0,    0,    0,    0,   11,
+        0,   75,   65,   19,   70,   22,   24,   28,   32,    0,
+       34,   38,    0,    0,    0,   46,    0,    6,    8,    0,
+        0,   64,   69,    0,   40,    0,    0,    0,   10,    0,
+        0,    0,    0,    5,    9,   33,   41,    0,    0,   42,
+        0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -458,91 +459,93 @@ static yyconst flex_int32_t yy_meta[58] =
         1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[347] =
+static yyconst flex_int16_t yy_base[355] =
     {   0,
-        0,    0,  169,  689,  165,    0,   55,    0,   54,   54,
+        0,    0,  169,  708,  165,    0,   55,    0,   54,   54,
        34,   55,   49,   57,   37,   60,   51,   55,   94,  129,
        99,  103,  167,   72,  112,  155,   43,   59,  116,   68,
-      160,    0,   81,  689,    0,  689,    0,  148,   97,   98,
-      111,  133,  152,  147,  138,  146,  160,  155,  689,  150,
+      160,    0,   81,  708,    0,  708,    0,  148,   97,   98,
+      111,  133,  152,  147,  138,  146,  160,  155,  708,  150,
       152,  153,  171,  156,  159,  175,  182,  182,  178,  201,
-      196,  207,  200,  206,  211,  689,  210,  689,  212,  201,
+      196,  207,  200,  206,  211,  708,  210,  708,  212,  201,
       203,  217,  206,  212,  238,  208,  230,  244,  231,  233,
       240,  237,  244,  256,  248,  259,  252,  265,  244,  120,
       265,  264,  257,  259,  257,  273,  266,  262,  271,  280,
 
-      291,  689,  283,  689,  290,  292,  297,   95,  290,  308,
-      291,  307,  295,  309,  312,  306,  689,  301,  689,  309,
-      303,  315,  316,  305,  308,  316,  319,  317,  330,  334,
-      345,  332,  343,  348,  351,  352,  353,  344,  344,  352,
-      356,  348,  689,  689,  346,  356,  351,  356,  354,  689,
-      360,  368,  360,  373,  366,  376,  378,  392,  398,  396,
-      689,  387,  399,  403,  388,  689,  400,  689,  408,  393,
-      689,  397,  391,  399,  405,  689,  402,  404,  395,  414,
-      433,  410,  414,  426,  422,  440,  434,  689,  689,  436,
-      433,  435,  452,  437,  443,  446,  689,  453,  454,   90,
-
-      456,  443,  689,  689,  448,  459,  448,  443,  689,  462,
-      454,  451,  474,  470,  489,  488,  481,  482,  481,  488,
-      497,  500,  689,  486,  490,  500,  502,  506,  492,  107,
-      491,  491,  511,  689,  689,  495,  689,  504,  506,  508,
-      515,  529,  516,  689,  523,  689,  689,  523,  541,  689,
-      526,  528,  689,  540,  533,  533,  536,  541,  549,  541,
-      544,  689,  550,  542,  543,  552,  689,  689,  689,   52,
-      544,  551,  562,  557,  558,  689,  578,  572,  575,  581,
-      574,  588,  591,  591,  689,  592,  578,  689,  596,  689,
-      689,  590,  597,  689,  689,  689,  592,  614,  689,  599,
-
-      689,  592,  590,  587,  596,  689,  599,  689,  598,  689,
-      601,  689,  689,  689,  689,  689,  689,  621,  623,  620,
-      689,  619,  689,  689,  629,  634,  689,  689,  689,  628,
-      629,  633,  689,  630,  631,  641,  689,  689,  689,  638,
-      645,  689,  689,   81,  686,   71
+      291,  708,  283,  708,  290,  292,  297,   95,  290,  308,
+      291,  307,  295,  309,  312,  306,  708,  301,  708,  309,
+      303,  315,  316,  305,  308,  344,  316,  312,  322,  329,
+      345,  332,  343,  349,  352,  353,  355,  345,  345,  353,
+      357,  349,  708,  708,  347,  358,  352,  357,  355,  708,
+      363,  369,  363,  378,  374,  381,  379,  395,  399,  398,
+      708,  388,  400,  404,  390,  708,  401,  708,  409,  394,
+      708,  398,  392,  400,  407,  708,  403,  400,  406,  399,
+      418,  437,  418,  427,  439,  428,  444,  437,  708,  708,
+      439,  435,  437,  455,  440,  445,  448,  708,  455,  456,
+
+       90,  458,  446,  708,  708,  451,  461,  450,  447,  708,
+      466,  462,  464,  487,  476,  493,  492,  485,  485,  484,
+      490,  499,  495,  504,  708,  490,  493,  503,  505,  509,
+      496,  107,  495,  495,  514,  708,  708,  500,  708,  509,
+      518,  524,  533,  535,  533,  708,  528,  708,  708,  528,
+      546,  708,  530,  532,  708,  542,  536,  537,  539,  544,
+      552,  544,  548,  549,  708,  555,  547,  549,  558,  708,
+      708,  708,   52,  557,  571,  583,  576,  575,  708,  588,
+      578,  581,  587,  579,  593,  596,  596,  708,  597,  583,
+      708,  600,  708,  708,  594,  601,  603,  708,  708,  708,
+
+      598,  622,  708,  605,  708,  597,  596,  601,  622,  708,
+      628,  708,  624,  708,  625,  708,  708,  708,  708,  629,
+      708,  708,  629,  631,  628,  708,  627,  708,  708,  637,
+      641,  708,  708,  632,  708,  636,  637,  641,  708,  638,
+      639,  640,  650,  708,  708,  708,  708,  649,  664,  708,
+      708,   81,  705,   71
     } ;
 
-static yyconst flex_int16_t yy_def[347] =
+static yyconst flex_int16_t yy_def[355] =
     {   0,
-      343,    1,  343,  343,  343,  344,  345,  346,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  344,  345,  343,  346,  343,  346,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,    0,  343,  343,  343
+      351,    1,  351,  351,  351,  352,  353,  354,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  352,  353,  351,  354,  351,  354,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+        0,  351,  351,  351
     } ;
 
-static yyconst flex_int16_t yy_nxt[747] =
+static yyconst flex_int16_t yy_nxt[766] =
     {   0,
         4,    5,    6,    7,    8,    4,    9,   10,   10,   10,
        11,   12,   13,   14,   15,   16,    4,   17,   18,   19,
@@ -552,16 +555,16 @@ static yyconst flex_int16_t yy_nxt[747] =
        25,   26,   27,   28,   29,    4,   30,   34,   34,   36,
        37,   38,   38,   38,   39,   40,   43,   45,   47,   84,
        48,   35,   44,   49,   50,   41,   85,   52,   51,   46,
-       53,   32,   88,   34,   34,  298,   75,   42,   39,   40,
+       53,   32,   88,   34,   34,  302,   75,   42,   39,   40,
        43,   45,   47,   84,   48,   76,   44,   49,   50,   41,
 
        85,   52,   51,   46,   53,   54,   88,   89,   55,   63,
-       75,   42,   56,   64,   57,  268,  269,   65,   67,   76,
-       90,   91,   66,  242,   77,   68,   78,   69,  162,   54,
+       75,   42,   56,   64,   57,  271,  272,   65,   67,   76,
+       90,   91,   66,  244,   77,   68,   78,   69,  162,   54,
        86,   89,   55,   63,   87,   79,   56,   64,   57,   58,
        59,   65,   67,   60,   90,   91,   66,   61,   77,   68,
        78,   69,   62,  145,   86,   38,   38,   38,   87,   79,
-       92,   31,   93,   58,   59,   80,   31,   60,  343,   94,
+       92,   31,   93,   58,   59,   80,   31,   60,  351,   94,
        95,   61,   96,   81,   97,   98,   62,   70,   99,  100,
        82,   71,  101,  102,   92,   72,   93,   83,  103,   80,
        73,  104,   74,   94,   95,  105,   96,   81,   97,   98,
@@ -569,7 +572,7 @@ static yyconst flex_int16_t yy_nxt[747] =
       106,   70,   99,  100,   82,   71,  101,  102,  107,   72,
       109,   83,  103,  108,   73,  104,   74,  110,  111,  105,
       112,  114,  115,  116,  106,  117,  118,  121,  122,  113,
-      123,  124,  107,  119,  109,  125,  128,  108,  343,  120,
+      123,  124,  107,  119,  109,  125,  128,  108,  351,  120,
       129,  110,  111,  133,  112,  114,  115,  116,  126,  117,
       118,  121,  122,  113,  123,  124,  130,  119,  134,  125,
       128,  135,  127,  120,  129,  136,  131,  133,  137,  132,
@@ -580,55 +583,57 @@ static yyconst flex_int16_t yy_nxt[747] =
       144,  146,  147,  148,  156,  149,  152,  150,  151,  157,
       158,  153,  154,  159,  160,  143,  161,  163,  164,  165,
       155,  166,  167,  168,  169,  170,  171,  172,  156,  173,
-      174,  175,  176,  157,  158,  177,  178,  159,  160,  179,
-      161,  163,  164,  165,  180,  166,  167,  168,  169,  170,
-      171,  172,  181,  173,  174,  175,  176,  182,  183,  177,
-      178,  184,  185,  179,  186,  187,  188,  189,  180,  190,
-      191,  192,  193,  194,  195,  196,  181,  197,  198,  199,
-      200,  182,  183,  201,  202,  184,  185,  203,  186,  187,
+      174,  175,  176,  157,  158,  177,  180,  159,  160,  181,
+      161,  163,  164,  165,  182,  166,  167,  168,  169,  170,
+      171,  172,  183,  173,  174,  175,  176,  178,  184,  177,
+      180,  185,  186,  181,  179,  187,  188,  189,  182,  190,
+      191,  192,  193,  194,  195,  196,  183,  197,  198,  199,
+      200,  178,  184,  201,  202,  185,  186,  203,  179,  187,
       188,  189,  204,  190,  191,  192,  193,  194,  195,  196,
 
       205,  197,  198,  199,  200,  206,  207,  201,  202,  208,
       209,  203,  210,  211,  212,  213,  204,  214,  215,  216,
       217,  218,  219,  220,  205,  221,  222,  223,  224,  206,
-      207,  343,  227,  208,  209,  228,  210,  211,  212,  213,
+      207,  225,  226,  208,  209,  351,  210,  211,  212,  213,
       229,  214,  215,  216,  217,  218,  219,  220,  230,  221,
-      222,  223,  224,  225,  231,  226,  227,  232,  233,  228,
-      234,  235,  236,  237,  229,  238,  239,  240,  241,  243,
-      244,  245,  230,  246,  247,  248,  249,  225,  231,  226,
-      250,  232,  233,  251,  234,  235,  236,  237,  252,  238,
-      239,  240,  241,  243,  244,  245,  253,  246,  247,  248,
-
-      249,  254,  255,  256,  250,  257,  258,  251,  259,  260,
-      261,  262,  252,  263,  264,  265,  266,  267,  270,  271,
-      253,  272,  273,  274,  275,  254,  255,  256,  276,  257,
-      258,  277,  259,  260,  261,  262,  280,  263,  264,  265,
-      266,  267,  270,  271,  278,  272,  273,  274,  275,  281,
-      282,  283,  276,  284,  285,  277,  279,  286,  287,  288,
-      280,  289,  290,  291,  292,  293,  294,  295,  278,  296,
-      297,  299,  300,  281,  282,  283,  301,  284,  285,  302,
-      279,  286,  287,  288,  303,  289,  290,  291,  292,  293,
-      294,  295,  304,  296,  297,  299,  300,  305,  306,  307,
-
-      301,  308,  309,  302,  310,  311,  312,  313,  303,  314,
-      315,  316,  317,  321,  343,  322,  304,  323,  324,  325,
-      326,  305,  306,  307,  327,  308,  309,  328,  310,  311,
-      312,  313,  318,  314,  315,  316,  317,  321,  319,  322,
-      320,  323,  324,  325,  326,  329,  330,  331,  327,  332,
-      333,  328,  334,  335,  336,  337,  318,  338,  339,  340,
-      341,  342,  319,  343,  320,  343,  343,  343,  343,  329,
-      330,  331,  343,  332,  333,  343,  334,  335,  336,  337,
-      343,  338,  339,  340,  341,  342,   33,   33,    3,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343
+      222,  223,  224,  231,  232,  225,  226,  227,  233,  228,
+      234,  235,  236,  237,  229,  238,  239,  240,  241,  242,
+      243,  245,  230,  246,  247,  248,  249,  231,  232,  250,
+      251,  227,  233,  228,  234,  235,  236,  237,  252,  238,
+      239,  240,  241,  242,  243,  245,  253,  246,  247,  248,
+
+      249,  254,  255,  250,  251,  256,  257,  258,  259,  260,
+      261,  262,  252,  263,  264,  265,  266,  267,  268,  269,
+      253,  270,  273,  274,  275,  254,  255,  276,  277,  256,
+      257,  258,  259,  260,  261,  262,  278,  263,  264,  265,
+      266,  267,  268,  269,  279,  270,  273,  274,  275,  280,
+      281,  276,  277,  283,  284,  285,  286,  287,  288,  289,
+      278,  290,  282,  291,  292,  293,  294,  295,  279,  296,
+      297,  298,  299,  280,  281,  300,  301,  283,  284,  285,
+      286,  287,  288,  289,  303,  290,  282,  291,  292,  293,
+      294,  295,  304,  296,  297,  298,  299,  305,  306,  300,
+
+      301,  307,  308,  309,  310,  311,  312,  313,  303,  314,
+      315,  316,  317,  318,  319,  320,  304,  321,  322,  326,
+      327,  305,  306,  328,  351,  307,  308,  309,  310,  311,
+      312,  313,  329,  314,  315,  316,  317,  318,  319,  320,
+      323,  321,  322,  326,  327,  330,  324,  328,  325,  331,
+      332,  333,  334,  335,  336,  337,  329,  338,  339,  340,
+      341,  342,  343,  344,  323,  345,  346,  347,  348,  330,
+      324,  349,  325,  331,  332,  333,  334,  335,  336,  337,
+      350,  338,  339,  340,  341,  342,  343,  344,  351,  345,
+      346,  347,  348,  351,  351,  349,  351,  351,  351,  351,
+
+      351,  351,  351,  351,  350,   33,   33,    3,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351
     } ;
 
-static yyconst flex_int16_t yy_chk[747] =
+static yyconst flex_int16_t yy_chk[766] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -637,13 +642,13 @@ static yyconst flex_int16_t yy_chk[747] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    7,    7,    9,
         9,   10,   10,   10,   11,   12,   13,   14,   15,   27,
-       16,  346,   13,   16,   17,   12,   28,   18,   17,   14,
-       18,  344,   30,   33,   33,  270,   24,   12,   11,   12,
+       16,  354,   13,   16,   17,   12,   28,   18,   17,   14,
+       18,  352,   30,   33,   33,  273,   24,   12,   11,   12,
        13,   14,   15,   27,   16,   24,   13,   16,   17,   12,
 
        28,   18,   17,   14,   18,   19,   30,   39,   19,   21,
-       24,   12,   19,   21,   19,  230,  230,   21,   22,   24,
-       40,   41,   21,  200,   25,   22,   25,   22,  108,   19,
+       24,   12,   19,   21,   19,  232,  232,   21,   22,   24,
+       40,   41,   21,  201,   25,   22,   25,   22,  108,   19,
        29,   39,   19,   21,   29,   25,   19,   21,   19,   20,
        20,   21,   22,   20,   40,   41,   21,   20,   25,   22,
        25,   22,   20,   90,   29,   38,   38,   38,   29,   25,
@@ -666,52 +671,54 @@ static yyconst flex_int16_t yy_chk[747] =
        89,   91,   92,   93,  100,   94,   96,   95,   96,  101,
       103,   97,   98,  105,  106,   88,  107,  109,  110,  111,
        99,  112,  113,  114,  115,  116,  118,  120,  100,  121,
-      122,  123,  124,  101,  103,  125,  126,  105,  106,  127,
-      107,  109,  110,  111,  128,  112,  113,  114,  115,  116,
-      118,  120,  129,  121,  122,  123,  124,  130,  131,  125,
-      126,  132,  133,  127,  134,  135,  136,  137,  128,  138,
-      139,  140,  141,  142,  145,  146,  129,  147,  148,  149,
-      151,  130,  131,  152,  153,  132,  133,  154,  134,  135,
-      136,  137,  155,  138,  139,  140,  141,  142,  145,  146,
-
-      156,  147,  148,  149,  151,  157,  158,  152,  153,  159,
-      160,  154,  162,  163,  164,  165,  155,  167,  169,  170,
-      172,  173,  174,  175,  156,  177,  178,  179,  180,  157,
-      158,    0,  182,  159,  160,  183,  162,  163,  164,  165,
-      184,  167,  169,  170,  172,  173,  174,  175,  185,  177,
-      178,  179,  180,  181,  186,  181,  182,  187,  190,  183,
-      191,  192,  193,  194,  184,  195,  196,  198,  199,  201,
-      202,  205,  185,  206,  207,  208,  210,  181,  186,  181,
-      211,  187,  190,  212,  191,  192,  193,  194,  213,  195,
-      196,  198,  199,  201,  202,  205,  214,  206,  207,  208,
-
-      210,  215,  216,  217,  211,  218,  219,  212,  220,  221,
-      222,  224,  213,  225,  226,  227,  228,  229,  231,  232,
-      214,  233,  236,  238,  239,  215,  216,  217,  240,  218,
-      219,  241,  220,  221,  222,  224,  243,  225,  226,  227,
-      228,  229,  231,  232,  242,  233,  236,  238,  239,  245,
-      248,  249,  240,  251,  252,  241,  242,  254,  255,  256,
-      243,  257,  258,  259,  260,  261,  263,  264,  242,  265,
-      266,  271,  272,  245,  248,  249,  273,  251,  252,  274,
-      242,  254,  255,  256,  275,  257,  258,  259,  260,  261,
-      263,  264,  277,  265,  266,  271,  272,  278,  279,  280,
-
-      273,  281,  282,  274,  283,  284,  286,  287,  275,  289,
-      292,  293,  297,  300,    0,  302,  277,  303,  304,  305,
-      307,  278,  279,  280,  309,  281,  282,  311,  283,  284,
-      286,  287,  298,  289,  292,  293,  297,  300,  298,  302,
-      298,  303,  304,  305,  307,  318,  319,  320,  309,  322,
-      325,  311,  326,  330,  331,  332,  298,  334,  335,  336,
-      340,  341,  298,    0,  298,    0,    0,    0,    0,  318,
-      319,  320,    0,  322,  325,    0,  326,  330,  331,  332,
-        0,  334,  335,  336,  340,  341,  345,  345,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  343,  343
+      122,  123,  124,  101,  103,  125,  127,  105,  106,  128,
+      107,  109,  110,  111,  129,  112,  113,  114,  115,  116,
+      118,  120,  130,  121,  122,  123,  124,  126,  131,  125,
+      127,  132,  133,  128,  126,  134,  135,  136,  129,  137,
+      138,  139,  140,  141,  142,  145,  130,  146,  147,  148,
+      149,  126,  131,  151,  152,  132,  133,  153,  126,  134,
+      135,  136,  154,  137,  138,  139,  140,  141,  142,  145,
+
+      155,  146,  147,  148,  149,  156,  157,  151,  152,  158,
+      159,  153,  160,  162,  163,  164,  154,  165,  167,  169,
+      170,  172,  173,  174,  155,  175,  177,  178,  179,  156,
+      157,  180,  181,  158,  159,    0,  160,  162,  163,  164,
+      183,  165,  167,  169,  170,  172,  173,  174,  184,  175,
+      177,  178,  179,  185,  186,  180,  181,  182,  187,  182,
+      188,  191,  192,  193,  183,  194,  195,  196,  197,  199,
+      200,  202,  184,  203,  206,  207,  208,  185,  186,  209,
+      211,  182,  187,  182,  188,  191,  192,  193,  212,  194,
+      195,  196,  197,  199,  200,  202,  213,  203,  206,  207,
+
+      208,  214,  215,  209,  211,  216,  217,  218,  219,  220,
+      221,  222,  212,  223,  224,  226,  227,  228,  229,  230,
+      213,  231,  233,  234,  235,  214,  215,  238,  240,  216,
+      217,  218,  219,  220,  221,  222,  241,  223,  224,  226,
+      227,  228,  229,  230,  242,  231,  233,  234,  235,  243,
+      244,  238,  240,  245,  247,  250,  251,  253,  254,  256,
+      241,  257,  244,  258,  259,  260,  261,  262,  242,  263,
+      264,  266,  267,  243,  244,  268,  269,  245,  247,  250,
+      251,  253,  254,  256,  274,  257,  244,  258,  259,  260,
+      261,  262,  275,  263,  264,  266,  267,  276,  277,  268,
+
+      269,  278,  280,  281,  282,  283,  284,  285,  274,  286,
+      287,  289,  290,  292,  295,  296,  275,  297,  301,  304,
+      306,  276,  277,  307,    0,  278,  280,  281,  282,  283,
+      284,  285,  308,  286,  287,  289,  290,  292,  295,  296,
+      302,  297,  301,  304,  306,  309,  302,  307,  302,  311,
+      313,  315,  320,  323,  324,  325,  308,  327,  330,  331,
+      334,  336,  337,  338,  302,  340,  341,  342,  343,  309,
+      302,  348,  302,  311,  313,  315,  320,  323,  324,  325,
+      349,  327,  330,  331,  334,  336,  337,  338,    0,  340,
+      341,  342,  343,    0,    0,  348,    0,    0,    0,    0,
+
+        0,    0,    0,    0,  349,  353,  353,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -770,7 +777,7 @@ void ccomment(void);
 int linenum = 1;
 char linebuf[512];
 
-#line 774 "config-lexer.c"
+#line 781 "config-lexer.c"
 
 #define INITIAL 0
 
@@ -980,7 +987,7 @@ YY_DECL
 #line 51 "config-lexer.l"
 
 
-#line 984 "config-lexer.c"
+#line 991 "config-lexer.c"
 
        while ( 1 )             /* loops until end-of-file is reached */
                {
@@ -1013,13 +1020,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 344 )
+                               if ( yy_current_state >= 352 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 689 );
+               while ( yy_base[yy_current_state] != 708 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1244,77 +1251,77 @@ YY_RULE_SETUP
 case 33:
 YY_RULE_SETUP
 #line 125 "config-lexer.l"
-{ return REALNAME;     }
+{ return READTIMEOUT;  }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 126 "config-lexer.l"
-{ return REPLY;        }
+{ return REALNAME;     }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 127 "config-lexer.l"
-{ return SCANLOG;      }
+{ return REPLY;        }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 128 "config-lexer.l"
-{ return SCANNER;      }
+{ return SCANLOG;      }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 129 "config-lexer.l"
-{ return SENDMAIL;     }
+{ return SCANNER;      }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 130 "config-lexer.l"
-{ return SERVER;       }
+{ return SENDMAIL;     }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 131 "config-lexer.l"
-{ return TARGET_IP;    }
+{ return SERVER;       }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 132 "config-lexer.l"
-{ return TARGET_PORT;  }
+{ return TARGET_IP;    }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 133 "config-lexer.l"
-{ return TARGET_STRING;}
+{ return TARGET_PORT;  }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 134 "config-lexer.l"
-{ return TIMEOUT;      }
+{ return TARGET_STRING;}
        YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 135 "config-lexer.l"
-{ return TYPE;         }
+{ return TIMEOUT;      }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 136 "config-lexer.l"
-{ return USER;         }
+{ return TYPE;         }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 137 "config-lexer.l"
-{ return USERNAME;     }
+{ return USER;         }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 138 "config-lexer.l"
-{ return VHOST;        }
+{ return USERNAME;     }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 140 "config-lexer.l"
-{ return YEARS; }
+#line 139 "config-lexer.l"
+{ return VHOST;        }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
@@ -1324,7 +1331,7 @@ YY_RULE_SETUP
 case 49:
 YY_RULE_SETUP
 #line 142 "config-lexer.l"
-{ return MONTHS; }
+{ return YEARS; }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
@@ -1334,7 +1341,7 @@ YY_RULE_SETUP
 case 51:
 YY_RULE_SETUP
 #line 144 "config-lexer.l"
-{ return WEEKS; }
+{ return MONTHS; }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
@@ -1344,7 +1351,7 @@ YY_RULE_SETUP
 case 53:
 YY_RULE_SETUP
 #line 146 "config-lexer.l"
-{ return DAYS; }
+{ return WEEKS; }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
@@ -1354,7 +1361,7 @@ YY_RULE_SETUP
 case 55:
 YY_RULE_SETUP
 #line 148 "config-lexer.l"
-{ return HOURS; }
+{ return DAYS; }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
@@ -1364,7 +1371,7 @@ YY_RULE_SETUP
 case 57:
 YY_RULE_SETUP
 #line 150 "config-lexer.l"
-{ return MINUTES; }
+{ return HOURS; }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
@@ -1374,7 +1381,7 @@ YY_RULE_SETUP
 case 59:
 YY_RULE_SETUP
 #line 152 "config-lexer.l"
-{ return SECONDS; }
+{ return MINUTES; }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
@@ -1383,8 +1390,8 @@ YY_RULE_SETUP
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 155 "config-lexer.l"
-{ return BYTES; }
+#line 154 "config-lexer.l"
+{ return SECONDS; }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
@@ -1394,7 +1401,7 @@ YY_RULE_SETUP
 case 63:
 YY_RULE_SETUP
 #line 157 "config-lexer.l"
-{ return KBYTES; }
+{ return BYTES; }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
@@ -1419,7 +1426,7 @@ YY_RULE_SETUP
 case 68:
 YY_RULE_SETUP
 #line 162 "config-lexer.l"
-{ return MBYTES; }
+{ return KBYTES; }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
@@ -1443,134 +1450,139 @@ YY_RULE_SETUP
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 168 "config-lexer.l"
+#line 167 "config-lexer.l"
+{ return MBYTES; }
+       YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 169 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_HTTP;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 74:
+case 75:
 YY_RULE_SETUP
-#line 173 "config-lexer.l"
+#line 174 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_HTTPPOST;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 75:
+case 76:
 YY_RULE_SETUP
-#line 178 "config-lexer.l"
+#line 179 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_SOCKS4;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 76:
+case 77:
 YY_RULE_SETUP
-#line 183 "config-lexer.l"
+#line 184 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_SOCKS5;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 77:
+case 78:
 YY_RULE_SETUP
-#line 188 "config-lexer.l"
+#line 189 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_WINGATE;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 78:
+case 79:
 YY_RULE_SETUP
-#line 193 "config-lexer.l"
+#line 194 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_ROUTER;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 79:
+case 80:
 YY_RULE_SETUP
-#line 199 "config-lexer.l"
+#line 200 "config-lexer.l"
 {
                            yylval.number=atoi(yytext); 
                            return NUMBER;
                         }
        YY_BREAK
-case 80:
+case 81:
 YY_RULE_SETUP
-#line 208 "config-lexer.l"
+#line 209 "config-lexer.l"
 {
                            yylval.number=1;
                            return NUMBER;
                          }
        YY_BREAK
-case 81:
+case 82:
 YY_RULE_SETUP
-#line 212 "config-lexer.l"
+#line 213 "config-lexer.l"
 {
                            yylval.number=1;
                            return NUMBER;
                          }
        YY_BREAK
-case 82:
+case 83:
 YY_RULE_SETUP
-#line 216 "config-lexer.l"
+#line 217 "config-lexer.l"
 {
                            yylval.number=1;
                            return NUMBER;
                          }
        YY_BREAK
-case 83:
+case 84:
 YY_RULE_SETUP
-#line 223 "config-lexer.l"
+#line 224 "config-lexer.l"
 {
                            yylval.number=0;
                            return NUMBER;
                          }
        YY_BREAK
-case 84:
+case 85:
 YY_RULE_SETUP
-#line 228 "config-lexer.l"
+#line 229 "config-lexer.l"
 {
                            yylval.number=0;
                            return NUMBER;
                          }
        YY_BREAK
-case 85:
+case 86:
 YY_RULE_SETUP
-#line 233 "config-lexer.l"
+#line 234 "config-lexer.l"
 {
                            yylval.number=0;
                            return NUMBER;
                          }
        YY_BREAK
-case 86:
-/* rule 86 can match eol */
+case 87:
+/* rule 87 can match eol */
 YY_RULE_SETUP
-#line 239 "config-lexer.l"
+#line 240 "config-lexer.l"
 {
                            strlcpy(linebuf, yytext + 1, sizeof(linebuf));
                            ++linenum;
                            yyless(1);
                          }
        YY_BREAK
-case 87:
+case 88:
 YY_RULE_SETUP
-#line 245 "config-lexer.l"
+#line 246 "config-lexer.l"
 /* ignore whitespace */;
        YY_BREAK
-case 88:
+case 89:
 YY_RULE_SETUP
-#line 247 "config-lexer.l"
+#line 248 "config-lexer.l"
 return yytext[0]; 
        YY_BREAK
-case 89:
+case 90:
 YY_RULE_SETUP
-#line 249 "config-lexer.l"
+#line 250 "config-lexer.l"
 ECHO;
        YY_BREAK
-#line 1574 "config-lexer.c"
+#line 1586 "config-lexer.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -1863,7 +1875,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 344 )
+                       if ( yy_current_state >= 352 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1891,11 +1903,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 344 )
+               if ( yy_current_state >= 352 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 343);
+       yy_is_jam = (yy_current_state == 351);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2528,7 +2540,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 249 "config-lexer.l"
+#line 250 "config-lexer.l"
 
 
 
index 07bc6d5b4f19d8fa1da3da40afc4af363b2672a2..0d51e6a58d573ef5a40097a800c79232adcaed3e 100644 (file)
@@ -122,6 +122,7 @@ PERFORM                 { return PERFORM;      }
 PIDFILE                 { return PIDFILE;      }
 PORT                    { return PORT;         }
 PROTOCOL                { return PROTOCOL;     }
+READTIMEOUT             { return READTIMEOUT;  }
 REALNAME                { return REALNAME;     }
 REPLY                   { return REPLY;        }
 SCANLOG                 { return SCANLOG;      }
index 268d62e55fe580ca4fab11e2258fdf19da88cda0..fb746dc382afaccb9082703a98b9f224442b32c7 100644 (file)
@@ -142,30 +142,31 @@ extern int yydebug;
     PIDFILE = 287,
     PORT = 288,
     PROTOCOL = 289,
-    REALNAME = 290,
-    REPLY = 291,
-    SCANLOG = 292,
-    SCANNER = 293,
-    SECONDS = 294,
-    MINUTES = 295,
-    HOURS = 296,
-    DAYS = 297,
-    WEEKS = 298,
-    MONTHS = 299,
-    YEARS = 300,
-    SENDMAIL = 301,
-    SERVER = 302,
-    TARGET_IP = 303,
-    TARGET_PORT = 304,
-    TARGET_STRING = 305,
-    TIMEOUT = 306,
-    TYPE = 307,
-    USERNAME = 308,
-    USER = 309,
-    VHOST = 310,
-    NUMBER = 311,
-    STRING = 312,
-    PROTOCOLTYPE = 313
+    READTIMEOUT = 290,
+    REALNAME = 291,
+    REPLY = 292,
+    SCANLOG = 293,
+    SCANNER = 294,
+    SECONDS = 295,
+    MINUTES = 296,
+    HOURS = 297,
+    DAYS = 298,
+    WEEKS = 299,
+    MONTHS = 300,
+    YEARS = 301,
+    SENDMAIL = 302,
+    SERVER = 303,
+    TARGET_IP = 304,
+    TARGET_PORT = 305,
+    TARGET_STRING = 306,
+    TIMEOUT = 307,
+    TYPE = 308,
+    USERNAME = 309,
+    USER = 310,
+    VHOST = 311,
+    NUMBER = 312,
+    STRING = 313,
+    PROTOCOLTYPE = 314
   };
 #endif
 /* Tokens.  */
@@ -201,42 +202,43 @@ extern int yydebug;
 #define PIDFILE 287
 #define PORT 288
 #define PROTOCOL 289
-#define REALNAME 290
-#define REPLY 291
-#define SCANLOG 292
-#define SCANNER 293
-#define SECONDS 294
-#define MINUTES 295
-#define HOURS 296
-#define DAYS 297
-#define WEEKS 298
-#define MONTHS 299
-#define YEARS 300
-#define SENDMAIL 301
-#define SERVER 302
-#define TARGET_IP 303
-#define TARGET_PORT 304
-#define TARGET_STRING 305
-#define TIMEOUT 306
-#define TYPE 307
-#define USERNAME 308
-#define USER 309
-#define VHOST 310
-#define NUMBER 311
-#define STRING 312
-#define PROTOCOLTYPE 313
+#define READTIMEOUT 290
+#define REALNAME 291
+#define REPLY 292
+#define SCANLOG 293
+#define SCANNER 294
+#define SECONDS 295
+#define MINUTES 296
+#define HOURS 297
+#define DAYS 298
+#define WEEKS 299
+#define MONTHS 300
+#define YEARS 301
+#define SENDMAIL 302
+#define SERVER 303
+#define TARGET_IP 304
+#define TARGET_PORT 305
+#define TARGET_STRING 306
+#define TIMEOUT 307
+#define TYPE 308
+#define USERNAME 309
+#define USER 310
+#define VHOST 311
+#define NUMBER 312
+#define STRING 313
+#define PROTOCOLTYPE 314
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 85 "config-parser.y" /* yacc.c:355  */
+#line 86 "config-parser.y" /* yacc.c:355  */
 
         int number;
         char *string;
 
-#line 240 "config-parser.c" /* yacc.c:355  */
+#line 242 "config-parser.c" /* yacc.c:355  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -251,7 +253,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 255 "config-parser.c" /* yacc.c:358  */
+#line 257 "config-parser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -493,21 +495,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   301
+#define YYLAST   306
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  64
+#define YYNTOKENS  65
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  78
+#define YYNNTS  79
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  147
+#define YYNRULES  149
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  319
+#define YYNSTATES  324
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   313
+#define YYMAXUTOK   314
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -521,14 +523,14 @@ static const yytype_uint8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    63,    61,
-       2,    62,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    64,    62,
+       2,    63,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    59,     2,    60,     2,     2,     2,     2,
+       2,     2,     2,    60,     2,    61,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -547,28 +549,28 @@ static const yytype_uint8 yytranslate[] =
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58
+      55,    56,    57,    58,    59
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   100,   100,   101,   104,   105,   106,   107,   108,   109,
-     111,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     122,   122,   123,   124,   125,   126,   131,   133,   134,   136,
-     137,   138,   139,   140,   142,   147,   153,   158,   166,   168,
-     169,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   188,   194,   200,
-     206,   212,   218,   224,   230,   238,   243,   249,   255,   261,
-     267,   277,   277,   294,   295,   297,   298,   299,   301,   309,
-     317,   328,   328,   344,   345,   347,   348,   349,   351,   361,
-     374,   374,   419,   420,   422,   423,   424,   425,   426,   427,
-     428,   429,   430,   431,   433,   440,   447,   454,   470,   476,
-     482,   488,   494,   513,   515,   516,   518,   519,   520,   521,
-     522,   524,   530,   536,   545,   545,   564,   565,   567,   568,
-     569,   570,   571,   572,   574,   581,   588,   599,   605,   607,
-     608,   610,   628,   630,   631,   633,   634,   636
+       0,   101,   101,   102,   105,   106,   107,   108,   109,   110,
+     112,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     123,   123,   124,   125,   126,   127,   132,   134,   135,   137,
+     138,   139,   140,   141,   143,   148,   154,   159,   167,   169,
+     170,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   190,   196,
+     202,   208,   214,   220,   226,   232,   240,   245,   250,   256,
+     262,   268,   274,   284,   284,   301,   302,   304,   305,   306,
+     308,   316,   324,   335,   335,   351,   352,   354,   355,   356,
+     358,   368,   381,   381,   426,   427,   429,   430,   431,   432,
+     433,   434,   435,   436,   437,   438,   440,   447,   454,   461,
+     477,   483,   489,   495,   501,   520,   522,   523,   525,   526,
+     527,   528,   529,   531,   537,   543,   552,   552,   571,   572,
+     574,   575,   576,   577,   578,   579,   581,   588,   595,   606,
+     612,   614,   615,   617,   635,   637,   638,   640,   641,   643
 };
 #endif
 
@@ -582,29 +584,31 @@ static const char *const yytname[] =
   "DNSBL_FROM", "DNSBL_TO", "EXEMPT", "FD", "INVITE", "IRC", "KLINE",
   "KEY", "MASK", "MAX_READ", "MODE", "NAME", "NEGCACHE", "NICK",
   "NICKSERV", "OPER", "OPM", "OPTIONS", "PASSWORD", "PERFORM", "PIDFILE",
-  "PORT", "PROTOCOL", "REALNAME", "REPLY", "SCANLOG", "SCANNER", "SECONDS",
-  "MINUTES", "HOURS", "DAYS", "WEEKS", "MONTHS", "YEARS", "SENDMAIL",
-  "SERVER", "TARGET_IP", "TARGET_PORT", "TARGET_STRING", "TIMEOUT", "TYPE",
-  "USERNAME", "USER", "VHOST", "NUMBER", "STRING", "PROTOCOLTYPE", "'{'",
-  "'}'", "';'", "'='", "':'", "$accept", "config", "config_items",
-  "timespec_", "timespec", "sizespec_", "sizespec", "options_entry",
-  "options_items", "options_item", "options_negcache", "options_pidfile",
+  "PORT", "PROTOCOL", "READTIMEOUT", "REALNAME", "REPLY", "SCANLOG",
+  "SCANNER", "SECONDS", "MINUTES", "HOURS", "DAYS", "WEEKS", "MONTHS",
+  "YEARS", "SENDMAIL", "SERVER", "TARGET_IP", "TARGET_PORT",
+  "TARGET_STRING", "TIMEOUT", "TYPE", "USERNAME", "USER", "VHOST",
+  "NUMBER", "STRING", "PROTOCOLTYPE", "'{'", "'}'", "';'", "'='", "':'",
+  "$accept", "config", "config_items", "timespec_", "timespec",
+  "sizespec_", "sizespec", "options_entry", "options_items",
+  "options_item", "options_negcache", "options_pidfile",
   "options_dns_fdlimit", "options_scanlog", "irc_entry", "irc_items",
   "irc_item", "irc_away", "irc_kline", "irc_mode", "irc_nick",
   "irc_nickserv", "irc_oper", "irc_password", "irc_perform", "irc_port",
-  "irc_realname", "irc_server", "irc_username", "irc_vhost",
-  "irc_connregex", "channel_entry", "$@1", "channel_items", "channel_item",
-  "channel_name", "channel_key", "channel_invite", "user_entry", "$@2",
-  "user_items", "user_item", "user_mask", "user_scanner", "scanner_entry",
-  "$@3", "scanner_items", "scanner_item", "scanner_name", "scanner_vhost",
-  "scanner_target_ip", "scanner_target_string", "scanner_fd",
-  "scanner_target_port", "scanner_timeout", "scanner_max_read",
-  "scanner_protocol", "opm_entry", "opm_items", "opm_item",
-  "opm_dnsbl_from", "opm_dnsbl_to", "opm_sendmail", "opm_blacklist_entry",
-  "$@4", "blacklist_items", "blacklist_item", "blacklist_name",
-  "blacklist_kline", "blacklist_type", "blacklist_ban_unknown",
-  "blacklist_reply", "blacklist_reply_items", "blacklist_reply_item",
-  "exempt_entry", "exempt_items", "exempt_item", "exempt_mask", YY_NULLPTR
+  "irc_readtimeout", "irc_realname", "irc_server", "irc_username",
+  "irc_vhost", "irc_connregex", "channel_entry", "$@1", "channel_items",
+  "channel_item", "channel_name", "channel_key", "channel_invite",
+  "user_entry", "$@2", "user_items", "user_item", "user_mask",
+  "user_scanner", "scanner_entry", "$@3", "scanner_items", "scanner_item",
+  "scanner_name", "scanner_vhost", "scanner_target_ip",
+  "scanner_target_string", "scanner_fd", "scanner_target_port",
+  "scanner_timeout", "scanner_max_read", "scanner_protocol", "opm_entry",
+  "opm_items", "opm_item", "opm_dnsbl_from", "opm_dnsbl_to",
+  "opm_sendmail", "opm_blacklist_entry", "$@4", "blacklist_items",
+  "blacklist_item", "blacklist_name", "blacklist_kline", "blacklist_type",
+  "blacklist_ban_unknown", "blacklist_reply", "blacklist_reply_items",
+  "blacklist_reply_item", "exempt_entry", "exempt_items", "exempt_item",
+  "exempt_mask", YY_NULLPTR
 };
 #endif
 
@@ -618,17 +622,17 @@ static const yytype_uint16 yytoknum[] =
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   123,
-     125,    59,    61,    58
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     123,   125,    59,    61,    58
 };
 # endif
 
-#define YYPACT_NINF -157
+#define YYPACT_NINF -149
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-157)))
+  (!!((Yystate) == (-149)))
 
-#define YYTABLE_NINF -125
+#define YYTABLE_NINF -127
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -637,38 +641,39 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -157,   126,  -157,   -52,   -48,   -40,   -36,  -157,  -157,  -157,
-    -157,   -49,  -157,    -9,  -157,  -157,    39,    80,    83,   136,
-     -22,   -18,  -157,   -17,    19,  -157,  -157,  -157,   -16,   -10,
-      -4,     4,    12,    23,    24,    30,    32,    37,    42,    56,
-      62,    66,     0,  -157,  -157,  -157,  -157,  -157,  -157,  -157,
-    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,    59,
-    -157,    68,    69,    72,     3,  -157,  -157,  -157,  -157,  -157,
-     133,  -157,    77,    79,    82,    84,    33,  -157,  -157,  -157,
-    -157,  -157,    16,   102,    44,    81,  -157,    88,    92,    99,
-     101,   104,   105,   106,   108,   109,   103,   110,   112,   113,
-     114,   111,  -157,   129,   132,   137,   138,   131,  -157,   134,
-     140,   141,   142,   143,   144,  -157,  -157,   128,   139,    31,
-    -157,  -157,  -157,  -157,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,    27,  -157,  -157,  -157,  -157,  -157,  -157,
-    -157,  -157,  -157,  -157,   155,  -157,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-    -157,    93,   170,   171,   172,  -157,    96,   173,   135,   174,
-     175,   176,  -157,   181,   182,   179,  -157,   185,   186,   187,
-     188,   190,   189,   191,   141,   192,   193,  -157,  -157,  -157,
-    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,
-    -157,  -157,  -157,   194,   195,   196,    48,  -157,  -157,  -157,
-    -157,  -157,  -157,  -157,  -157,   197,   198,   199,   184,   200,
-      20,  -157,  -157,  -157,  -157,  -157,  -157,  -157,   141,   141,
-     141,   141,   141,   141,   141,  -157,  -157,  -157,  -157,  -157,
-     202,   203,  -157,   204,     6,   205,   206,   207,   208,   210,
-     211,   212,   213,  -157,   218,   219,   220,   217,  -157,   223,
-     224,   225,   227,   228,   226,  -157,  -157,  -157,  -157,  -157,
-    -157,  -157,  -157,  -157,  -157,  -157,   186,   186,   186,  -157,
-    -157,  -157,  -157,   230,  -157,  -157,  -157,  -157,  -157,   229,
-     231,   232,  -157,   233,   234,   235,   222,   -54,  -157,   236,
-    -157,  -157,  -157,  -157,   237,  -157,  -157,  -157,  -157,  -157,
-    -157,   242,   239,  -157,  -157,  -157,   240,  -157,  -157
+    -149,   122,  -149,   -53,   -52,   -46,   -44,  -149,  -149,  -149,
+    -149,   -50,  -149,   -22,  -149,  -149,    43,    73,   113,   130,
+     -41,   -32,  -149,   -34,     3,  -149,  -149,  -149,   -31,   -26,
+     -24,   -18,   -17,   -14,   -13,   -11,     4,     9,    14,    21,
+      22,    25,    33,     0,  -149,  -149,  -149,  -149,  -149,  -149,
+    -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,
+    -149,    57,  -149,    39,    47,    49,    46,  -149,  -149,  -149,
+    -149,  -149,   108,  -149,    53,    65,    75,    77,    54,  -149,
+    -149,  -149,  -149,  -149,   104,    96,    86,    87,  -149,    95,
+      97,    99,   100,   101,   106,   107,   109,   111,   114,   131,
+     129,   134,   135,   136,   127,  -149,   137,   138,   140,   141,
+     139,  -149,   142,   143,   131,   145,   146,   144,  -149,  -149,
+     128,   132,    40,  -149,  -149,  -149,  -149,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,    19,  -149,  -149,  -149,
+    -149,  -149,  -149,  -149,  -149,  -149,  -149,   158,  -149,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   133,
+     169,   170,   171,   172,   173,  -149,   147,   174,   175,   176,
+    -149,   119,   177,   178,   179,   180,  -149,   185,   186,   183,
+    -149,   189,   190,   191,   192,   194,   193,   195,   131,   196,
+     197,  -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,
+    -149,  -149,  -149,   131,   131,   131,   131,   131,   131,   131,
+    -149,  -149,  -149,  -149,  -149,  -149,  -149,   198,   199,   200,
+      71,  -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,   201,
+     202,   203,   188,   204,    20,  -149,  -149,  -149,  -149,  -149,
+    -149,  -149,  -149,  -149,  -149,   206,   207,  -149,   208,     5,
+     209,   210,   211,   212,   214,   215,   216,   217,  -149,  -149,
+    -149,  -149,  -149,  -149,  -149,  -149,   222,   223,   224,   221,
+    -149,   227,   228,   229,   231,   232,   230,  -149,  -149,  -149,
+    -149,   190,   190,   190,  -149,  -149,  -149,  -149,   234,  -149,
+    -149,  -149,  -149,  -149,   233,   235,   236,  -149,   237,   238,
+     239,   226,   -55,  -149,   240,  -149,  -149,  -149,  -149,   241,
+    -149,  -149,  -149,  -149,  -149,  -149,   246,   243,  -149,  -149,
+    -149,   244,  -149,  -149
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -676,64 +681,65 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,    81,     1,     0,     0,     0,     0,     3,     5,     4,
+       2,    83,     1,     0,     0,     0,     0,     3,     5,     4,
        7,     0,     8,     0,     6,     9,     0,     0,     0,     0,
-       0,     0,   146,     0,     0,   144,   145,    56,     0,     0,
+       0,     0,   148,     0,     0,   146,   147,    57,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    40,    41,    43,    46,    44,    45,    47,
-      48,    54,    49,    50,    51,    52,    53,    42,    55,     0,
-     120,     0,     0,     0,     0,   115,   116,   117,   118,   119,
-       0,    33,     0,     0,     0,     0,     0,    28,    29,    30,
-      31,    32,     0,     0,     0,     0,   143,     0,     0,     0,
+       0,     0,     0,     0,    40,    41,    43,    46,    44,    45,
+      47,    48,    55,    49,    50,    51,    52,    53,    54,    42,
+      56,     0,   122,     0,     0,     0,     0,   117,   118,   119,
+     120,   121,     0,    33,     0,     0,     0,     0,     0,    28,
+      29,    30,    31,    32,     0,     0,     0,     0,   145,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    39,     0,     0,     0,     0,     0,   114,     0,
-       0,     0,     0,     0,     0,    27,    87,     0,     0,     0,
-      84,    85,    86,   103,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    93,    94,    95,    97,    99,    96,
-      98,   101,   102,   100,     0,   142,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      38,     0,     0,     0,     0,   113,     0,     0,    10,     0,
-       0,     0,    26,     0,     0,     0,    83,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    92,   147,    57,
-      70,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,     0,     0,     0,     0,    74,    75,    76,
-      77,   121,   122,   123,   133,     0,     0,     0,     0,     0,
-       0,   127,   128,   130,   129,   131,   132,    36,    10,    10,
-      10,    10,    10,    10,    10,    12,    11,    34,    35,    37,
-       0,     0,    82,     0,    20,     0,     0,     0,     0,     0,
-       0,     0,     0,    91,     0,     0,     0,     0,    73,     0,
-       0,     0,     0,     0,     0,   126,    13,    14,    15,    16,
-      17,    18,    19,    88,    89,   108,    20,    20,    20,    22,
-      21,   111,   104,     0,   106,   109,   107,   110,   105,     0,
-       0,     0,    72,     0,     0,     0,     0,     0,   140,     0,
-     125,    23,    24,    25,     0,    80,    79,    78,   137,   135,
-     134,     0,     0,   139,   136,   112,     0,   138,   141
+       0,     0,     0,     0,     0,    39,     0,     0,     0,     0,
+       0,   116,     0,     0,     0,     0,     0,     0,    27,    89,
+       0,     0,     0,    86,    87,    88,   105,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    95,    96,    97,
+      99,   101,    98,   100,   103,   104,   102,     0,   144,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    10,
+       0,     0,     0,     0,     0,    38,     0,     0,     0,     0,
+     115,     0,     0,     0,     0,     0,    26,     0,     0,     0,
+      85,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    94,   149,    58,    72,    59,    60,    61,    62,    63,
+      64,    65,    66,    10,    10,    10,    10,    10,    10,    10,
+      12,    11,    67,    68,    69,    70,    71,     0,     0,     0,
+       0,    76,    77,    78,    79,   123,   124,   125,   135,     0,
+       0,     0,     0,     0,     0,   129,   130,   132,   131,   133,
+     134,    36,    34,    35,    37,     0,     0,    84,     0,    20,
+       0,     0,     0,     0,     0,     0,     0,     0,    93,    13,
+      14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
+      75,     0,     0,     0,     0,     0,     0,   128,    90,    91,
+     110,    20,    20,    20,    22,    21,   113,   106,     0,   108,
+     111,   109,   112,   107,     0,     0,     0,    74,     0,     0,
+       0,     0,     0,   142,     0,   127,    23,    24,    25,     0,
+      82,    81,    80,   139,   137,   136,     0,     0,   141,   138,
+     114,     0,   140,   143
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -157,  -157,  -157,   -47,  -111,  -156,    25,  -157,  -157,   122,
-    -157,  -157,  -157,  -157,  -157,  -157,   209,  -157,  -157,  -157,
-    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,
-    -157,  -157,  -157,  -157,    -2,  -157,  -157,  -157,  -157,  -157,
-    -157,    87,  -157,  -157,  -157,  -157,  -157,   117,  -157,  -157,
-    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,   216,
-    -157,  -157,  -157,  -157,  -157,  -157,    35,  -157,  -157,  -157,
-    -157,  -157,  -157,   -95,  -157,  -157,   244,  -157
+    -149,  -149,  -149,   -23,   -99,  -148,    23,  -149,  -149,   182,
+    -149,  -149,  -149,  -149,  -149,  -149,   213,  -149,  -149,  -149,
+    -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,
+    -149,  -149,  -149,  -149,  -149,   -12,  -149,  -149,  -149,  -149,
+    -149,  -149,    85,  -149,  -149,  -149,  -149,  -149,    74,  -149,
+    -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,  -149,
+     219,  -149,  -149,  -149,  -149,  -149,  -149,   -25,  -149,  -149,
+    -149,  -149,  -149,  -149,   -47,  -149,  -149,   249,  -149
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     7,   235,   236,   279,   280,     8,    76,    77,
-      78,    79,    80,    81,     9,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,   206,   207,   208,   209,   210,    10,    11,
-     119,   120,   121,   122,    12,    13,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,    14,    64,    65,
-      66,    67,    68,    69,    70,   220,   221,   222,   223,   224,
-     225,   226,   297,   298,    15,    24,    25,    26
+      -1,     1,     7,   210,   211,   284,   285,     8,    78,    79,
+      80,    81,    82,    83,     9,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,   220,   221,   222,   223,   224,    10,
+      11,   122,   123,   124,   125,    12,    13,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,    14,    66,
+      67,    68,    69,    70,    71,    72,   234,   235,   236,   237,
+     238,   239,   240,   302,   303,    15,    24,    25,    26
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -741,130 +747,131 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     169,    27,   296,    28,    60,    20,   312,    16,  -124,   -71,
-      29,    17,   276,   277,   278,    61,    62,   116,    30,    18,
-      22,   214,    31,    19,   215,    32,    33,    34,   123,    21,
-      35,    36,   116,    37,    71,    38,   117,    82,   216,    23,
-      22,    83,   124,   217,    72,    84,    87,    39,   125,    63,
-     126,   117,    88,    40,   118,    41,   218,    73,    89,    23,
-     101,   127,   244,   107,   203,    74,    90,   204,   103,   118,
-      75,   205,   219,   251,    91,   128,   129,   130,   131,    85,
-     264,    27,   132,    28,    60,    92,    93,   186,  -124,   -71,
-      29,   175,    94,   114,    95,    61,    62,   214,    30,    96,
-     215,   144,    31,   123,    97,    32,    33,    34,   257,   203,
-      35,    36,   204,    37,   216,    38,   205,   124,    98,   217,
-     301,   302,   303,   125,    99,   126,     2,    39,   100,    63,
-     104,   105,   218,    40,   106,    41,   127,    71,   109,   110,
-       3,   111,   145,     4,   112,   146,   113,    72,   219,   147,
-     128,   129,   130,   131,     5,     6,   148,   132,   149,   155,
-      73,   150,   151,   152,   -90,   153,   154,   156,    74,   157,
-     158,   159,   160,    75,   228,   229,   230,   231,   232,   233,
-     234,   266,   267,   268,   269,   270,   271,   272,   161,   162,
-     173,   168,   165,   166,   163,   164,   167,   168,   115,   170,
-     171,   174,   313,   245,   258,   172,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   188,   189,   190,   191,
+     160,    27,   301,    28,    22,    20,   317,    16,    17,   -73,
+      29,   281,   282,   283,    18,   173,    19,    21,    30,    84,
+     126,   228,    31,    23,   229,    32,    33,    34,    85,    86,
+      35,    36,    89,    37,   127,    38,    39,    90,   230,    91,
+     128,   119,   129,   231,    22,    92,    93,    62,    40,    94,
+      95,  -126,    96,   130,    41,    73,    42,   232,    63,    64,
+     120,   104,   249,    23,    87,    74,   106,    97,   131,   132,
+     133,   134,    98,   233,    27,   135,    28,    99,    75,   121,
+     190,   276,   -73,    29,   100,   101,    76,   217,   102,   256,
+     218,    30,    77,    65,   219,    31,   103,   126,    32,    33,
+      34,   179,   107,    35,    36,   119,    37,   110,    38,    39,
+     108,   127,   109,   112,    62,   117,   113,   128,  -126,   129,
+     228,    40,     2,   229,   120,    63,    64,    41,   114,    42,
+     130,    73,   269,   306,   307,   308,     3,   230,   115,     4,
+     116,    74,   231,   121,   147,   131,   132,   133,   134,   148,
+       5,     6,   135,   149,    75,   150,   232,   151,   152,   153,
+      65,   -92,    76,   217,   154,   155,   218,   156,    77,   157,
+     219,   158,   233,   203,   204,   205,   206,   207,   208,   209,
+     259,   260,   261,   262,   263,   264,   265,   161,   159,   165,
+     159,   177,   162,   163,   164,   178,   167,   166,   168,   169,
+     172,   170,   171,   174,   175,   250,   176,   180,   270,   277,
+     191,   181,   182,   183,   184,   185,   186,   187,   188,   189,
      192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   211,   212,   213,   227,   237,   238,   239,   240,   241,
-     242,   243,   244,   262,   246,   249,   247,   248,   250,   252,
-     187,   102,     0,     0,   253,   265,   254,   255,   256,   259,
-     260,   261,   263,   273,   274,   275,   281,   282,    86,   284,
-     283,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     108,   294,   295,   296,   311,   299,   304,   300,     0,     0,
-     305,     0,   306,   307,   308,   309,   310,   314,   315,   316,
-     317,   318
+     202,   212,   213,   214,   215,   216,   225,   226,   227,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   274,   251,
+     254,   252,   253,   255,   257,   318,   105,     0,     0,   258,
+     118,   266,   267,   268,   271,   272,   273,   275,   278,   279,
+     280,   286,   287,    88,   289,   288,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   111,   299,   300,   301,   316,
+     304,   309,   305,     0,     0,   310,     0,   311,   312,   313,
+     314,   315,   319,   320,   321,   322,   323
 };
 
 static const yytype_int16 yycheck[] =
 {
-     111,     1,    56,     3,     1,    54,    60,    59,     5,     9,
-      10,    59,     6,     7,     8,    12,    13,     1,    18,    59,
-       1,     1,    22,    59,     4,    25,    26,    27,     1,    38,
-      30,    31,     1,    33,     1,    35,    20,    59,    18,    20,
-       1,    59,    15,    23,    11,    62,    62,    47,    21,    46,
-      23,    20,    62,    53,    38,    55,    36,    24,    62,    20,
-      60,    34,    56,    60,    16,    32,    62,    19,     9,    38,
-      37,    23,    52,   184,    62,    48,    49,    50,    51,    60,
-      60,     1,    55,     3,     1,    62,    62,    60,     5,     9,
-      10,    60,    62,    60,    62,    12,    13,     1,    18,    62,
-       4,    57,    22,     1,    62,    25,    26,    27,    60,    16,
-      30,    31,    19,    33,    18,    35,    23,    15,    62,    23,
-     276,   277,   278,    21,    62,    23,     0,    47,    62,    46,
-      62,    62,    36,    53,    62,    55,    34,     1,     5,    62,
-      14,    62,    61,    17,    62,    57,    62,    11,    52,    57,
-      48,    49,    50,    51,    28,    29,    57,    55,    57,    56,
-      24,    57,    57,    57,    38,    57,    57,    57,    32,    57,
-      57,    57,    61,    37,    39,    40,    41,    42,    43,    44,
-      45,   228,   229,   230,   231,   232,   233,   234,    59,    57,
-      62,    56,    61,    59,    57,    57,    56,    56,    76,    57,
-      57,    62,   297,   178,   206,    61,   119,    62,    62,    62,
-      62,    62,    62,    62,    62,    62,    61,    61,    61,    61,
-      61,    61,    61,    61,    61,    61,    61,    61,    61,    61,
-      61,    61,    61,    61,    61,    61,    61,    61,    57,    57,
-      61,    56,    56,    59,    57,    56,    58,    57,    57,    57,
-     133,    42,    -1,    -1,    61,   220,    62,    62,    62,    62,
-      62,    62,    62,    61,    61,    61,    61,    61,    24,    61,
-      63,    61,    61,    61,    61,    57,    57,    57,    61,    56,
-      64,    57,    57,    56,    62,    57,    56,    61,    -1,    -1,
-      61,    -1,    61,    61,    61,    61,    61,    61,    61,    57,
-      61,    61
+      99,     1,    57,     3,     1,    55,    61,    60,    60,     9,
+      10,     6,     7,     8,    60,   114,    60,    39,    18,    60,
+       1,     1,    22,    20,     4,    25,    26,    27,    60,    63,
+      30,    31,    63,    33,    15,    35,    36,    63,    18,    63,
+      21,     1,    23,    23,     1,    63,    63,     1,    48,    63,
+      63,     5,    63,    34,    54,     1,    56,    37,    12,    13,
+      20,    61,    57,    20,    61,    11,     9,    63,    49,    50,
+      51,    52,    63,    53,     1,    56,     3,    63,    24,    39,
+      61,    61,     9,    10,    63,    63,    32,    16,    63,   188,
+      19,    18,    38,    47,    23,    22,    63,     1,    25,    26,
+      27,    61,    63,    30,    31,     1,    33,    61,    35,    36,
+      63,    15,    63,     5,     1,    61,    63,    21,     5,    23,
+       1,    48,     0,     4,    20,    12,    13,    54,    63,    56,
+      34,     1,    61,   281,   282,   283,    14,    18,    63,    17,
+      63,    11,    23,    39,    58,    49,    50,    51,    52,    62,
+      28,    29,    56,    58,    24,    58,    37,    58,    58,    58,
+      47,    39,    32,    16,    58,    58,    19,    58,    38,    58,
+      23,    57,    53,    40,    41,    42,    43,    44,    45,    46,
+     203,   204,   205,   206,   207,   208,   209,    58,    57,    62,
+      57,    63,    58,    58,    58,    63,    58,    60,    58,    58,
+      57,    62,    60,    58,    58,   182,    62,   122,   220,   234,
+     136,    63,    63,    63,    63,    63,    63,    63,    63,    63,
+      62,    62,    62,    62,    62,    62,    62,    62,    62,    62,
+      62,    62,    62,    62,    62,    62,    62,    62,    62,    62,
+      62,    62,    62,    58,    58,    62,    57,    57,    60,    58,
+      57,    59,    58,    58,    58,   302,    43,    -1,    -1,    62,
+      78,    63,    63,    63,    63,    63,    63,    63,    62,    62,
+      62,    62,    62,    24,    62,    64,    62,    62,    62,    62,
+      58,    58,    58,    62,    57,    66,    58,    58,    57,    63,
+      58,    57,    62,    -1,    -1,    62,    -1,    62,    62,    62,
+      62,    62,    62,    62,    58,    62,    62
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    65,     0,    14,    17,    28,    29,    66,    71,    78,
-     102,   103,   108,   109,   121,   138,    59,    59,    59,    59,
-      54,    38,     1,    20,   139,   140,   141,     1,     3,    10,
-      18,    22,    25,    26,    27,    30,    31,    33,    35,    47,
-      53,    55,    79,    80,    81,    82,    83,    84,    85,    86,
+       0,    66,     0,    14,    17,    28,    29,    67,    72,    79,
+     104,   105,   110,   111,   123,   140,    60,    60,    60,    60,
+      55,    39,     1,    20,   141,   142,   143,     1,     3,    10,
+      18,    22,    25,    26,    27,    30,    31,    33,    35,    36,
+      48,    54,    56,    80,    81,    82,    83,    84,    85,    86,
       87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-       1,    12,    13,    46,   122,   123,   124,   125,   126,   127,
-     128,     1,    11,    24,    32,    37,    72,    73,    74,    75,
-      76,    77,    59,    59,    62,    60,   140,    62,    62,    62,
-      62,    62,    62,    62,    62,    62,    62,    62,    62,    62,
-      62,    60,    80,     9,    62,    62,    62,    60,   123,     5,
-      62,    62,    62,    62,    60,    73,     1,    20,    38,   104,
-     105,   106,   107,     1,    15,    21,    23,    34,    48,    49,
-      50,    51,    55,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,    57,    61,    57,    57,    57,    57,
-      57,    57,    57,    57,    57,    56,    57,    57,    57,    57,
-      61,    59,    57,    57,    57,    61,    59,    56,    56,    68,
-      57,    57,    61,    62,    62,    60,   105,    62,    62,    62,
-      62,    62,    62,    62,    62,    62,    60,   111,    61,    61,
-      61,    61,    61,    61,    61,    61,    61,    61,    61,    61,
-      61,    61,    61,    16,    19,    23,    97,    98,    99,   100,
-     101,    61,    61,    61,     1,     4,    18,    23,    36,    52,
-     129,   130,   131,   132,   133,   134,   135,    61,    39,    40,
-      41,    42,    43,    44,    45,    67,    68,    61,    61,    61,
-      57,    57,    61,    56,    56,    70,    57,    58,    57,    56,
-      57,    68,    57,    61,    62,    62,    62,    60,    98,    62,
-      62,    62,    59,    62,    60,   130,    67,    67,    67,    67,
-      67,    67,    67,    61,    61,    61,     6,     7,     8,    69,
-      70,    61,    61,    63,    61,    61,    61,    61,    61,    57,
-      57,    57,    61,    56,    57,    57,    56,   136,   137,    57,
-      61,    69,    69,    69,    56,    61,    61,    61,    61,    61,
-      61,    62,    60,   137,    61,    61,    57,    61,    61
+      97,    98,     1,    12,    13,    47,   124,   125,   126,   127,
+     128,   129,   130,     1,    11,    24,    32,    38,    73,    74,
+      75,    76,    77,    78,    60,    60,    63,    61,   142,    63,
+      63,    63,    63,    63,    63,    63,    63,    63,    63,    63,
+      63,    63,    63,    63,    61,    81,     9,    63,    63,    63,
+      61,   125,     5,    63,    63,    63,    63,    61,    74,     1,
+      20,    39,   106,   107,   108,   109,     1,    15,    21,    23,
+      34,    49,    50,    51,    52,    56,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,    58,    62,    58,
+      58,    58,    58,    58,    58,    58,    58,    58,    57,    57,
+      69,    58,    58,    58,    58,    62,    60,    58,    58,    58,
+      62,    60,    57,    69,    58,    58,    62,    63,    63,    61,
+     107,    63,    63,    63,    63,    63,    63,    63,    63,    63,
+      61,   113,    62,    62,    62,    62,    62,    62,    62,    62,
+      62,    62,    62,    40,    41,    42,    43,    44,    45,    46,
+      68,    69,    62,    62,    62,    62,    62,    16,    19,    23,
+      99,   100,   101,   102,   103,    62,    62,    62,     1,     4,
+      18,    23,    37,    53,   131,   132,   133,   134,   135,   136,
+     137,    62,    62,    62,    62,    58,    58,    62,    57,    57,
+      71,    58,    59,    58,    57,    58,    69,    58,    62,    68,
+      68,    68,    68,    68,    68,    68,    63,    63,    63,    61,
+     100,    63,    63,    63,    60,    63,    61,   132,    62,    62,
+      62,     6,     7,     8,    70,    71,    62,    62,    64,    62,
+      62,    62,    62,    62,    58,    58,    58,    62,    57,    58,
+      58,    57,   138,   139,    58,    62,    70,    70,    70,    57,
+      62,    62,    62,    62,    62,    62,    63,    61,   139,    62,
+      62,    58,    62,    62
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    64,    65,    65,    66,    66,    66,    66,    66,    66,
-      67,    67,    68,    68,    68,    68,    68,    68,    68,    68,
-      69,    69,    70,    70,    70,    70,    71,    72,    72,    73,
-      73,    73,    73,    73,    74,    75,    76,    77,    78,    79,
-      79,    80,    80,    80,    80,    80,    80,    80,    80,    80,
-      80,    80,    80,    80,    80,    80,    80,    81,    82,    83,
+       0,    65,    66,    66,    67,    67,    67,    67,    67,    67,
+      68,    68,    69,    69,    69,    69,    69,    69,    69,    69,
+      70,    70,    71,    71,    71,    71,    72,    73,    73,    74,
+      74,    74,    74,    74,    75,    76,    77,    78,    79,    80,
+      80,    81,    81,    81,    81,    81,    81,    81,    81,    81,
+      81,    81,    81,    81,    81,    81,    81,    81,    82,    83,
       84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    96,    95,    97,    97,    98,    98,    98,    99,   100,
-     101,   103,   102,   104,   104,   105,   105,   105,   106,   107,
-     109,   108,   110,   110,   111,   111,   111,   111,   111,   111,
-     111,   111,   111,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   122,   123,   123,   123,   123,
-     123,   124,   125,   126,   128,   127,   129,   129,   130,   130,
-     130,   130,   130,   130,   131,   132,   133,   134,   135,   136,
-     136,   137,   138,   139,   139,   140,   140,   141
+      94,    95,    96,    98,    97,    99,    99,   100,   100,   100,
+     101,   102,   103,   105,   104,   106,   106,   107,   107,   107,
+     108,   109,   111,   110,   112,   112,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   124,   125,   125,
+     125,   125,   125,   126,   127,   128,   130,   129,   131,   131,
+     132,   132,   132,   132,   132,   132,   133,   134,   135,   136,
+     137,   138,   138,   139,   140,   141,   141,   142,   142,   143
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -875,16 +882,16 @@ static const yytype_uint8 yyr2[] =
        0,     1,     2,     3,     3,     3,     5,     2,     1,     1,
        1,     1,     1,     1,     4,     4,     4,     4,     5,     2,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     4,     4,     4,
+       1,     1,     1,     1,     1,     1,     1,     1,     4,     4,
        4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     0,     6,     2,     1,     1,     1,     1,     4,     4,
-       4,     0,     6,     2,     1,     1,     1,     1,     4,     4,
-       0,     6,     2,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     4,     4,     4,     4,     4,     4,
-       4,     4,     6,     5,     2,     1,     1,     1,     1,     1,
-       1,     4,     4,     4,     0,     6,     2,     1,     1,     1,
-       1,     1,     1,     1,     4,     4,     4,     4,     5,     2,
-       1,     4,     5,     2,     1,     1,     1,     4
+       4,     4,     4,     0,     6,     2,     1,     1,     1,     1,
+       4,     4,     4,     0,     6,     2,     1,     1,     1,     1,
+       4,     4,     0,     6,     2,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     4,     4,     4,     4,
+       4,     4,     4,     4,     6,     5,     2,     1,     1,     1,
+       1,     1,     1,     4,     4,     4,     0,     6,     2,     1,
+       1,     1,     1,     1,     1,     1,     4,     4,     4,     4,
+       5,     2,     1,     4,     5,     2,     1,     1,     1,     4
 };
 
 
@@ -1561,252 +1568,260 @@ yyreduce:
   switch (yyn)
     {
         case 10:
-#line 111 "config-parser.y" /* yacc.c:1646  */
+#line 112 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = 0; }
-#line 1567 "config-parser.c" /* yacc.c:1646  */
+#line 1574 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 112 "config-parser.y" /* yacc.c:1646  */
+#line 113 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); }
-#line 1573 "config-parser.c" /* yacc.c:1646  */
+#line 1580 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 113 "config-parser.y" /* yacc.c:1646  */
+#line 114 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); }
-#line 1579 "config-parser.c" /* yacc.c:1646  */
+#line 1586 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 114 "config-parser.y" /* yacc.c:1646  */
+#line 115 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) * 60 + (yyvsp[0].number); }
-#line 1585 "config-parser.c" /* yacc.c:1646  */
+#line 1592 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 115 "config-parser.y" /* yacc.c:1646  */
+#line 116 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) * 60 * 60 + (yyvsp[0].number); }
-#line 1591 "config-parser.c" /* yacc.c:1646  */
+#line 1598 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 116 "config-parser.y" /* yacc.c:1646  */
+#line 117 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 + (yyvsp[0].number); }
-#line 1597 "config-parser.c" /* yacc.c:1646  */
+#line 1604 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 117 "config-parser.y" /* yacc.c:1646  */
+#line 118 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 + (yyvsp[0].number); }
-#line 1603 "config-parser.c" /* yacc.c:1646  */
+#line 1610 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 118 "config-parser.y" /* yacc.c:1646  */
+#line 119 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 * 4 + (yyvsp[0].number); }
-#line 1609 "config-parser.c" /* yacc.c:1646  */
+#line 1616 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 119 "config-parser.y" /* yacc.c:1646  */
+#line 120 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 365 + (yyvsp[0].number); }
-#line 1615 "config-parser.c" /* yacc.c:1646  */
+#line 1622 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 122 "config-parser.y" /* yacc.c:1646  */
+#line 123 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = 0; }
-#line 1621 "config-parser.c" /* yacc.c:1646  */
+#line 1628 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 123 "config-parser.y" /* yacc.c:1646  */
+#line 124 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); }
-#line 1627 "config-parser.c" /* yacc.c:1646  */
+#line 1634 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 124 "config-parser.y" /* yacc.c:1646  */
+#line 125 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); }
-#line 1633 "config-parser.c" /* yacc.c:1646  */
+#line 1640 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 125 "config-parser.y" /* yacc.c:1646  */
+#line 126 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) * 1024 + (yyvsp[0].number); }
-#line 1639 "config-parser.c" /* yacc.c:1646  */
+#line 1646 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 126 "config-parser.y" /* yacc.c:1646  */
+#line 127 "config-parser.y" /* yacc.c:1646  */
     { (yyval.number) = (yyvsp[-2].number) * 1024 * 1024 + (yyvsp[0].number); }
-#line 1645 "config-parser.c" /* yacc.c:1646  */
+#line 1652 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 143 "config-parser.y" /* yacc.c:1646  */
+#line 144 "config-parser.y" /* yacc.c:1646  */
     {
    OptionsItem->negcache = (yyvsp[-1].number);
 }
-#line 1653 "config-parser.c" /* yacc.c:1646  */
+#line 1660 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 148 "config-parser.y" /* yacc.c:1646  */
+#line 149 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OptionsItem->pidfile);
    OptionsItem->pidfile = xstrdup((yyvsp[-1].string));
 }
-#line 1662 "config-parser.c" /* yacc.c:1646  */
+#line 1669 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 154 "config-parser.y" /* yacc.c:1646  */
+#line 155 "config-parser.y" /* yacc.c:1646  */
     {
    OptionsItem->dns_fdlimit = (yyvsp[-1].number);
 }
-#line 1670 "config-parser.c" /* yacc.c:1646  */
+#line 1677 "config-parser.c" /* yacc.c:1646  */
     break;
 
   case 37:
-#line 159 "config-parser.y" /* yacc.c:1646  */
+#line 160 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OptionsItem->scanlog);
    OptionsItem->scanlog = xstrdup((yyvsp[-1].string));
 }
-#line 1679 "config-parser.c" /* yacc.c:1646  */
+#line 1686 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 57:
-#line 189 "config-parser.y" /* yacc.c:1646  */
+  case 58:
+#line 191 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->away);
    IRCItem->away = xstrdup((yyvsp[-1].string));
 }
-#line 1688 "config-parser.c" /* yacc.c:1646  */
+#line 1695 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 58:
-#line 195 "config-parser.y" /* yacc.c:1646  */
+  case 59:
+#line 197 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->kline);
    IRCItem->kline = xstrdup((yyvsp[-1].string));
 }
-#line 1697 "config-parser.c" /* yacc.c:1646  */
+#line 1704 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 59:
-#line 201 "config-parser.y" /* yacc.c:1646  */
+  case 60:
+#line 203 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->mode);
    IRCItem->mode = xstrdup((yyvsp[-1].string));
 }
-#line 1706 "config-parser.c" /* yacc.c:1646  */
+#line 1713 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 60:
-#line 207 "config-parser.y" /* yacc.c:1646  */
+  case 61:
+#line 209 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->nick);
    IRCItem->nick = xstrdup((yyvsp[-1].string));
 }
-#line 1715 "config-parser.c" /* yacc.c:1646  */
+#line 1722 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 61:
-#line 213 "config-parser.y" /* yacc.c:1646  */
+  case 62:
+#line 215 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->nickserv);
    IRCItem->nickserv = xstrdup((yyvsp[-1].string));
 }
-#line 1724 "config-parser.c" /* yacc.c:1646  */
+#line 1731 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 62:
-#line 219 "config-parser.y" /* yacc.c:1646  */
+  case 63:
+#line 221 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->oper);
    IRCItem->oper = xstrdup((yyvsp[-1].string));
 }
-#line 1733 "config-parser.c" /* yacc.c:1646  */
+#line 1740 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 63:
-#line 225 "config-parser.y" /* yacc.c:1646  */
+  case 64:
+#line 227 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->password);
    IRCItem->password = xstrdup((yyvsp[-1].string));
 }
-#line 1742 "config-parser.c" /* yacc.c:1646  */
+#line 1749 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 64:
-#line 231 "config-parser.y" /* yacc.c:1646  */
+  case 65:
+#line 233 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    node = node_create(xstrdup((yyvsp[-1].string)));
 
    list_add(IRCItem->performs, node);
 }
-#line 1753 "config-parser.c" /* yacc.c:1646  */
+#line 1760 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 65:
-#line 239 "config-parser.y" /* yacc.c:1646  */
+  case 66:
+#line 241 "config-parser.y" /* yacc.c:1646  */
     {
    IRCItem->port = (yyvsp[-1].number);
 }
-#line 1761 "config-parser.c" /* yacc.c:1646  */
+#line 1768 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 66:
-#line 244 "config-parser.y" /* yacc.c:1646  */
+  case 67:
+#line 246 "config-parser.y" /* yacc.c:1646  */
+    {
+   IRCItem->readtimeout = (yyvsp[-1].number);
+}
+#line 1776 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 68:
+#line 251 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->realname);
    IRCItem->realname = xstrdup((yyvsp[-1].string));
 }
-#line 1770 "config-parser.c" /* yacc.c:1646  */
+#line 1785 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 67:
-#line 250 "config-parser.y" /* yacc.c:1646  */
+  case 69:
+#line 257 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->server);
    IRCItem->server = xstrdup((yyvsp[-1].string));
 }
-#line 1779 "config-parser.c" /* yacc.c:1646  */
+#line 1794 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 68:
-#line 256 "config-parser.y" /* yacc.c:1646  */
+  case 70:
+#line 263 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->username);
    IRCItem->username = xstrdup((yyvsp[-1].string));
 }
-#line 1788 "config-parser.c" /* yacc.c:1646  */
+#line 1803 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 69:
-#line 262 "config-parser.y" /* yacc.c:1646  */
+  case 71:
+#line 269 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->vhost);
    IRCItem->vhost = xstrdup((yyvsp[-1].string));
 }
-#line 1797 "config-parser.c" /* yacc.c:1646  */
+#line 1812 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 70:
-#line 268 "config-parser.y" /* yacc.c:1646  */
+  case 72:
+#line 275 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->connregex);
    IRCItem->connregex = xstrdup((yyvsp[-1].string));
 }
-#line 1806 "config-parser.c" /* yacc.c:1646  */
+#line 1821 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 71:
-#line 277 "config-parser.y" /* yacc.c:1646  */
+  case 73:
+#line 284 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    struct ChannelConf *item;
@@ -1822,44 +1837,44 @@ yyreduce:
 
    tmp = (void *) item;
 }
-#line 1826 "config-parser.c" /* yacc.c:1646  */
+#line 1841 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 78:
-#line 302 "config-parser.y" /* yacc.c:1646  */
+  case 80:
+#line 309 "config-parser.y" /* yacc.c:1646  */
     {
    struct ChannelConf *item = tmp;
 
    MyFree(item->name);
    item->name = xstrdup((yyvsp[-1].string));
 }
-#line 1837 "config-parser.c" /* yacc.c:1646  */
+#line 1852 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 79:
-#line 310 "config-parser.y" /* yacc.c:1646  */
+  case 81:
+#line 317 "config-parser.y" /* yacc.c:1646  */
     {
    struct ChannelConf *item = tmp;
 
    MyFree(item->key);
    item->key = xstrdup((yyvsp[-1].string));
 }
-#line 1848 "config-parser.c" /* yacc.c:1646  */
+#line 1863 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 80:
-#line 318 "config-parser.y" /* yacc.c:1646  */
+  case 82:
+#line 325 "config-parser.y" /* yacc.c:1646  */
     {
    struct ChannelConf *item = tmp;
 
    MyFree(item->invite);
    item->invite = xstrdup((yyvsp[-1].string));
 }
-#line 1859 "config-parser.c" /* yacc.c:1646  */
+#line 1874 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 81:
-#line 328 "config-parser.y" /* yacc.c:1646  */
+  case 83:
+#line 335 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    struct UserConf *item;
@@ -1874,11 +1889,11 @@ yyreduce:
 
    tmp = (void *) item; 
 }
-#line 1878 "config-parser.c" /* yacc.c:1646  */
+#line 1893 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 88:
-#line 352 "config-parser.y" /* yacc.c:1646  */
+  case 90:
+#line 359 "config-parser.y" /* yacc.c:1646  */
     {
    struct UserConf *item = (struct UserConf *) tmp;
 
@@ -1887,11 +1902,11 @@ yyreduce:
 
    list_add(item->masks, node);
 }
-#line 1891 "config-parser.c" /* yacc.c:1646  */
+#line 1906 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 89:
-#line 362 "config-parser.y" /* yacc.c:1646  */
+  case 91:
+#line 369 "config-parser.y" /* yacc.c:1646  */
     {
    struct UserConf *item = (struct UserConf *) tmp;
 
@@ -1900,11 +1915,11 @@ yyreduce:
 
    list_add(item->scanners, node);
 }
-#line 1904 "config-parser.c" /* yacc.c:1646  */
+#line 1919 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 90:
-#line 374 "config-parser.y" /* yacc.c:1646  */
+  case 92:
+#line 381 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    struct ScannerConf *item, *olditem;
@@ -1948,41 +1963,41 @@ yyreduce:
    list_add(ScannerItemList, node);
    tmp = (void *) item;
 }
-#line 1952 "config-parser.c" /* yacc.c:1646  */
+#line 1967 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 104:
-#line 434 "config-parser.y" /* yacc.c:1646  */
+  case 106:
+#line 441 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    MyFree(item->name);
    item->name = xstrdup((yyvsp[-1].string));
 }
-#line 1962 "config-parser.c" /* yacc.c:1646  */
+#line 1977 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 441 "config-parser.y" /* yacc.c:1646  */
+  case 107:
+#line 448 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    MyFree(item->vhost);
    item->vhost = xstrdup((yyvsp[-1].string));
 }
-#line 1972 "config-parser.c" /* yacc.c:1646  */
+#line 1987 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 448 "config-parser.y" /* yacc.c:1646  */
+  case 108:
+#line 455 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    MyFree(item->target_ip);
    item->target_ip = xstrdup((yyvsp[-1].string));
 }
-#line 1982 "config-parser.c" /* yacc.c:1646  */
+#line 1997 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 455 "config-parser.y" /* yacc.c:1646  */
+  case 109:
+#line 462 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
 
@@ -1997,47 +2012,47 @@ yyreduce:
 
    list_add(item->target_string, node);
 }
-#line 2001 "config-parser.c" /* yacc.c:1646  */
+#line 2016 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 471 "config-parser.y" /* yacc.c:1646  */
+  case 110:
+#line 478 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->fd = (yyvsp[-1].number);
 }
-#line 2010 "config-parser.c" /* yacc.c:1646  */
+#line 2025 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 109:
-#line 477 "config-parser.y" /* yacc.c:1646  */
+  case 111:
+#line 484 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->target_port = (yyvsp[-1].number);
 }
-#line 2019 "config-parser.c" /* yacc.c:1646  */
+#line 2034 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 483 "config-parser.y" /* yacc.c:1646  */
+  case 112:
+#line 490 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->timeout = (yyvsp[-1].number);
 }
-#line 2028 "config-parser.c" /* yacc.c:1646  */
+#line 2043 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 489 "config-parser.y" /* yacc.c:1646  */
+  case 113:
+#line 496 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->max_read = (yyvsp[-1].number);
 }
-#line 2037 "config-parser.c" /* yacc.c:1646  */
+#line 2052 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 495 "config-parser.y" /* yacc.c:1646  */
+  case 114:
+#line 502 "config-parser.y" /* yacc.c:1646  */
     {
    struct ProtocolConf *item;
    struct ScannerConf  *item2;
@@ -2053,38 +2068,38 @@ yyreduce:
    node = node_create(item);
    list_add(item2->protocols, node);
 }
-#line 2057 "config-parser.c" /* yacc.c:1646  */
+#line 2072 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 525 "config-parser.y" /* yacc.c:1646  */
+  case 123:
+#line 532 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OpmItem->dnsbl_from);
    OpmItem->dnsbl_from = xstrdup((yyvsp[-1].string));
 }
-#line 2066 "config-parser.c" /* yacc.c:1646  */
+#line 2081 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 122:
-#line 531 "config-parser.y" /* yacc.c:1646  */
+  case 124:
+#line 538 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OpmItem->dnsbl_to);
    OpmItem->dnsbl_to = xstrdup((yyvsp[-1].string));
 }
-#line 2075 "config-parser.c" /* yacc.c:1646  */
+#line 2090 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 123:
-#line 537 "config-parser.y" /* yacc.c:1646  */
+  case 125:
+#line 544 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OpmItem->sendmail);
    OpmItem->sendmail = xstrdup((yyvsp[-1].string));
 }
-#line 2084 "config-parser.c" /* yacc.c:1646  */
+#line 2099 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 124:
-#line 545 "config-parser.y" /* yacc.c:1646  */
+  case 126:
+#line 552 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    struct BlacklistConf *item;
@@ -2102,33 +2117,33 @@ yyreduce:
 
    tmp = (void *) item;
 }
-#line 2106 "config-parser.c" /* yacc.c:1646  */
+#line 2121 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 134:
-#line 574 "config-parser.y" /* yacc.c:1646  */
+  case 136:
+#line 581 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistConf *item = tmp;
 
    MyFree(item->name);
    item->name = xstrdup((yyvsp[-1].string));
 }
-#line 2117 "config-parser.c" /* yacc.c:1646  */
+#line 2132 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 135:
-#line 581 "config-parser.y" /* yacc.c:1646  */
+  case 137:
+#line 588 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistConf *item = tmp;
 
    MyFree(item->kline);
    item->kline = xstrdup((yyvsp[-1].string));
 }
-#line 2128 "config-parser.c" /* yacc.c:1646  */
+#line 2143 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 136:
-#line 588 "config-parser.y" /* yacc.c:1646  */
+  case 138:
+#line 595 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistConf *item = tmp;
    
@@ -2139,21 +2154,21 @@ yyreduce:
    else
       yyerror("Unknown blacklist type defined");
 }
-#line 2143 "config-parser.c" /* yacc.c:1646  */
+#line 2158 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 137:
-#line 599 "config-parser.y" /* yacc.c:1646  */
+  case 139:
+#line 606 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistConf *item = tmp;
 
    item->ban_unknown = (yyvsp[-1].number);
 }
-#line 2153 "config-parser.c" /* yacc.c:1646  */
+#line 2168 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 141:
-#line 611 "config-parser.y" /* yacc.c:1646  */
+  case 143:
+#line 618 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistReplyConf *item;
    struct BlacklistConf *blacklist = tmp;
@@ -2167,22 +2182,22 @@ yyreduce:
    node = node_create(item);
    list_add(blacklist->reply, node);
 }
-#line 2171 "config-parser.c" /* yacc.c:1646  */
+#line 2186 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 147:
-#line 637 "config-parser.y" /* yacc.c:1646  */
+  case 149:
+#line 644 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    node = node_create(xstrdup((yyvsp[-1].string)));
 
    list_add(ExemptItem->masks, node);
 }
-#line 2182 "config-parser.c" /* yacc.c:1646  */
+#line 2197 "config-parser.c" /* yacc.c:1646  */
     break;
 
 
-#line 2186 "config-parser.c" /* yacc.c:1646  */
+#line 2201 "config-parser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -2410,5 +2425,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 644 "config-parser.y" /* yacc.c:1906  */
+#line 651 "config-parser.y" /* yacc.c:1906  */
 
index e6057cc663c79bae50b3593ed7ecec7c41b65ac0..fcdf311d4ad3d7b74bf777098a0a7c099af10790 100644 (file)
@@ -77,30 +77,31 @@ extern int yydebug;
     PIDFILE = 287,
     PORT = 288,
     PROTOCOL = 289,
-    REALNAME = 290,
-    REPLY = 291,
-    SCANLOG = 292,
-    SCANNER = 293,
-    SECONDS = 294,
-    MINUTES = 295,
-    HOURS = 296,
-    DAYS = 297,
-    WEEKS = 298,
-    MONTHS = 299,
-    YEARS = 300,
-    SENDMAIL = 301,
-    SERVER = 302,
-    TARGET_IP = 303,
-    TARGET_PORT = 304,
-    TARGET_STRING = 305,
-    TIMEOUT = 306,
-    TYPE = 307,
-    USERNAME = 308,
-    USER = 309,
-    VHOST = 310,
-    NUMBER = 311,
-    STRING = 312,
-    PROTOCOLTYPE = 313
+    READTIMEOUT = 290,
+    REALNAME = 291,
+    REPLY = 292,
+    SCANLOG = 293,
+    SCANNER = 294,
+    SECONDS = 295,
+    MINUTES = 296,
+    HOURS = 297,
+    DAYS = 298,
+    WEEKS = 299,
+    MONTHS = 300,
+    YEARS = 301,
+    SENDMAIL = 302,
+    SERVER = 303,
+    TARGET_IP = 304,
+    TARGET_PORT = 305,
+    TARGET_STRING = 306,
+    TIMEOUT = 307,
+    TYPE = 308,
+    USERNAME = 309,
+    USER = 310,
+    VHOST = 311,
+    NUMBER = 312,
+    STRING = 313,
+    PROTOCOLTYPE = 314
   };
 #endif
 /* Tokens.  */
@@ -136,42 +137,43 @@ extern int yydebug;
 #define PIDFILE 287
 #define PORT 288
 #define PROTOCOL 289
-#define REALNAME 290
-#define REPLY 291
-#define SCANLOG 292
-#define SCANNER 293
-#define SECONDS 294
-#define MINUTES 295
-#define HOURS 296
-#define DAYS 297
-#define WEEKS 298
-#define MONTHS 299
-#define YEARS 300
-#define SENDMAIL 301
-#define SERVER 302
-#define TARGET_IP 303
-#define TARGET_PORT 304
-#define TARGET_STRING 305
-#define TIMEOUT 306
-#define TYPE 307
-#define USERNAME 308
-#define USER 309
-#define VHOST 310
-#define NUMBER 311
-#define STRING 312
-#define PROTOCOLTYPE 313
+#define READTIMEOUT 290
+#define REALNAME 291
+#define REPLY 292
+#define SCANLOG 293
+#define SCANNER 294
+#define SECONDS 295
+#define MINUTES 296
+#define HOURS 297
+#define DAYS 298
+#define WEEKS 299
+#define MONTHS 300
+#define YEARS 301
+#define SENDMAIL 302
+#define SERVER 303
+#define TARGET_IP 304
+#define TARGET_PORT 305
+#define TARGET_STRING 306
+#define TIMEOUT 307
+#define TYPE 308
+#define USERNAME 309
+#define USER 310
+#define VHOST 311
+#define NUMBER 312
+#define STRING 313
+#define PROTOCOLTYPE 314
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 85 "config-parser.y" /* yacc.c:1909  */
+#line 86 "config-parser.y" /* yacc.c:1909  */
 
         int number;
         char *string;
 
-#line 175 "config-parser.h" /* yacc.c:1909  */
+#line 177 "config-parser.h" /* yacc.c:1909  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
index 879be9ec220248a1051cc6273953e5ef05d03255..8c474ecd2aedfeb8a00505e4ab237eddd526dbf3 100644 (file)
@@ -65,6 +65,7 @@ void *tmp;        /* Variable to temporarily hold nodes before insertion to list
 %token PIDFILE
 %token PORT
 %token PROTOCOL
+%token READTIMEOUT
 %token REALNAME
 %token REPLY
 %token SCANLOG
@@ -168,21 +169,22 @@ irc_entry: IRC '{' irc_items  '}' ';';
 irc_items: irc_items irc_item |
            irc_item;
 
-irc_item: irc_away      |
-          irc_connregex |
-          irc_kline     |
-          irc_nick      |
-          irc_nickserv  |
-          irc_mode      |
-          irc_oper      |
-          irc_password  |
-          irc_port      | 
-          irc_realname  |
-          irc_server    |
-          irc_username  |
-          irc_vhost     |
-          irc_perform   |
-          channel_entry |
+irc_item: irc_away        |
+          irc_connregex   |
+          irc_kline       |
+          irc_nick        |
+          irc_nickserv    |
+          irc_mode        |
+          irc_oper        |
+          irc_password    |
+          irc_port        | 
+          irc_readtimeout |
+          irc_realname    |
+          irc_server      |
+          irc_username    |
+          irc_vhost       |
+          irc_perform     |
+          channel_entry   |
           error;
 
 irc_away: AWAY '=' STRING ';'
@@ -240,6 +242,11 @@ irc_port: PORT '=' NUMBER ';'
    IRCItem->port = $3;
 };
 
+irc_readtimeout: READTIMEOUT '=' timespec ';'
+{
+   IRCItem->readtimeout = $3;
+};
+
 irc_realname: REALNAME '=' STRING ';'
 {
    MyFree(IRCItem->realname);
index 2f8d78525c3d525d05317562eb7bf7dae3885083..1949402b9335514b7aca6ce872e59c75c6acffe3 100644 (file)
@@ -117,6 +117,7 @@ config_setup(void)
   IRCItem->nickserv = xstrdup("");
   IRCItem->password = xstrdup("");
   IRCItem->port = 6667;
+  IRCItem->readtimeout = 900;
   IRCItem->oper = xstrdup("undefined");
   IRCItem->username = xstrdup("hopm");
   IRCItem->realname = xstrdup("Hybrid Open Proxy Monitor");
index 33335e6eaf7333a13eec526f7d4fd9ddd9b548bf..5e56b814182ff4707967cae6c734be526198d821 100644 (file)
@@ -2,6 +2,7 @@
 #define CONFIG_H
 
 #include <stdio.h>
+#include <time.h>
 #include "list.h"
 #include "libopm/src/opm_types.h"
 
@@ -19,6 +20,7 @@ struct IRCConf
   char *realname;
   char *server;
   int port;
+  time_t readtimeout;
   char *password;
   char *vhost;
   char *nickserv;
index 5c08b9cdb643fd3117350250602b79c00e5b4674..3a5bb861c80d16e7fcd047c697e56f1e4e6f5c16 100644 (file)
--- a/src/irc.c
+++ b/src/irc.c
@@ -606,8 +606,8 @@ irc_timer(void)
 
   delta = present - IRC_LAST;
 
-  /* No data in NODATA_TIMEOUT minutes (set in options.h). */
-  if (delta >= NODATA_TIMEOUT)
+  /* No data in IRCItem->readtimeout seconds */
+  if (delta >= IRCItem->readtimeout)
   {
     log_printf("IRC -> Timeout awaiting data from server.");
     irc_reconnect();
@@ -615,7 +615,7 @@ irc_timer(void)
     /* Make sure we dont do this again for a while */
     time(&IRC_LAST);
   }
-  else if (delta >= NODATA_TIMEOUT / 2)
+  else if (delta >= IRCItem->readtimeout / 2)
   {
     /*
      * Generate some data so high ping times or bugs in certain
index b34d46aa429456b8e4df9341a74d7dd8c77b74ee..67425e0003121804f18777d0c67e6bf5167e4dcf 100644 (file)
@@ -32,9 +32,4 @@
  * connecting (hundreds per minute).  Default is 12 hours.
  */
 #define NEG_CACHE_REBUILD (60 * 60 * 12)
-
-/* Defines time in which bot will timeout * if no data is received
- * (default 15 min) */
-#define NODATA_TIMEOUT 900
-
 #endif /* OPTIONS_H */