require option table to fix negotiation "race" issie (experimental)
diff --git a/libtelnet.h b/libtelnet.h
index 4ea72c5..c9f2583 100644
--- a/libtelnet.h
+++ b/libtelnet.h
@@ -15,6 +15,7 @@
 /* forward declarations */
 typedef struct telnet_t telnet_t;
 typedef struct telnet_event_t telnet_event_t;
+typedef struct telnet_telopt_t telnet_telopt_t;
 
 /* telnet special values */
 #define TELNET_IAC 255
@@ -144,18 +145,24 @@
 	unsigned char command;
 	/* telopt info: for negotiation events SUBNEGOTIATION */
 	unsigned char telopt;
-	/* accept status: for WILL and DO events */
-	unsigned char accept;
 };
 
 /* event handler declaration */
 typedef void (*telnet_event_handler_t)(telnet_t *telnet,
 		telnet_event_t *event, void *user_data);
 
+/* telopt support table element; use telopt of -1 for end marker */
+struct telnet_telopt_t {
+	short telopt;
+	short us:1, him:1;
+};
+
 /* state tracker */
 struct telnet_t {
 	/* user data */
 	void *ud;
+	/* telopt support table */
+	const telnet_telopt_t *telopts;
 	/* event handler */
 	telnet_event_handler_t eh;
 #ifdef HAVE_ZLIB
@@ -181,8 +188,8 @@
 };
 
 /* initialize a telnet state tracker */
-extern void telnet_init(telnet_t *telnet, telnet_event_handler_t eh,
-		unsigned char flags, void *user_data);
+extern void telnet_init(telnet_t *telnet, const telnet_telopt_t *telopts,
+		telnet_event_handler_t eh, unsigned char flags, void *user_data);
 
 /* free up any memory allocated by a state tracker */
 extern void telnet_free(telnet_t *telnet);