armour libwebsockets.h against careless enum changes affecting abi
authorAndy Green <andy.green@linaro.org>
Tue, 8 Dec 2015 03:04:19 +0000 (11:04 +0800)
committerAndy Green <andy.green@linaro.org>
Tue, 8 Dec 2015 03:04:19 +0000 (11:04 +0800)
Signed-off-by: Andy Green <andy.green@linaro.org>
lib/libwebsockets.h

index 7707011..8996668 100644 (file)
@@ -296,6 +296,10 @@ LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(void *buf, size_t len);
 /* extra parameter introduced in 917f43ab821 */
 #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN
 
+/*
+ * NOTE: These public enums are part of the abi.  If you want to add one,
+ * add it at where specified so existing users are unaffected.
+ */
 enum lws_context_options {
        LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT = 2,
        LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME = 4,
@@ -304,51 +308,59 @@ enum lws_context_options {
        LWS_SERVER_OPTION_DISABLE_IPV6 = 32,
        LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS = 64,
        LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED = 128,
+       
+       /****** add new things just above ---^ ******/
 };
 
+/*
+ * NOTE: These public enums are part of the abi.  If you want to add one,
+ * add it at where specified so existing users are unaffected.
+ */
 enum lws_callback_reasons {
-       LWS_CALLBACK_ESTABLISHED,
-       LWS_CALLBACK_CLIENT_CONNECTION_ERROR,
-       LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH,
-       LWS_CALLBACK_CLIENT_ESTABLISHED,
-       LWS_CALLBACK_CLOSED,
-       LWS_CALLBACK_CLOSED_HTTP,
-       LWS_CALLBACK_RECEIVE,
-       LWS_CALLBACK_RECEIVE_PONG,
-       LWS_CALLBACK_CLIENT_RECEIVE,
-       LWS_CALLBACK_CLIENT_RECEIVE_PONG,
-       LWS_CALLBACK_CLIENT_WRITEABLE,
-       LWS_CALLBACK_SERVER_WRITEABLE,
-       LWS_CALLBACK_HTTP,
-       LWS_CALLBACK_HTTP_BODY,
-       LWS_CALLBACK_HTTP_BODY_COMPLETION,
-       LWS_CALLBACK_HTTP_FILE_COMPLETION,
-       LWS_CALLBACK_HTTP_WRITEABLE,
-       LWS_CALLBACK_FILTER_NETWORK_CONNECTION,
-       LWS_CALLBACK_FILTER_HTTP_CONNECTION,
-       LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED,
-       LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION,
-       LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS,
-       LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS,
-       LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION,
-       LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER,
-       LWS_CALLBACK_CONFIRM_EXTENSION_OKAY,
-       LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED,
-       LWS_CALLBACK_PROTOCOL_INIT,
-       LWS_CALLBACK_PROTOCOL_DESTROY,
-       LWS_CALLBACK_WSI_CREATE, /* always protocol[0] */
-       LWS_CALLBACK_WSI_DESTROY, /* always protocol[0] */
-       LWS_CALLBACK_GET_THREAD_ID,
+       LWS_CALLBACK_ESTABLISHED                                =  0,
+       LWS_CALLBACK_CLIENT_CONNECTION_ERROR                    =  1,
+       LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH                =  2,
+       LWS_CALLBACK_CLIENT_ESTABLISHED                         =  3,
+       LWS_CALLBACK_CLOSED                                     =  4,
+       LWS_CALLBACK_CLOSED_HTTP                                =  5,
+       LWS_CALLBACK_RECEIVE                                    =  6,
+       LWS_CALLBACK_RECEIVE_PONG                               =  7,
+       LWS_CALLBACK_CLIENT_RECEIVE                             =  8,
+       LWS_CALLBACK_CLIENT_RECEIVE_PONG                        =  9,
+       LWS_CALLBACK_CLIENT_WRITEABLE                           = 10,
+       LWS_CALLBACK_SERVER_WRITEABLE                           = 11,
+       LWS_CALLBACK_HTTP                                       = 12,
+       LWS_CALLBACK_HTTP_BODY                                  = 13,
+       LWS_CALLBACK_HTTP_BODY_COMPLETION                       = 14,
+       LWS_CALLBACK_HTTP_FILE_COMPLETION                       = 15,
+       LWS_CALLBACK_HTTP_WRITEABLE                             = 16,
+       LWS_CALLBACK_FILTER_NETWORK_CONNECTION                  = 17,
+       LWS_CALLBACK_FILTER_HTTP_CONNECTION                     = 18,
+       LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED             = 19,
+       LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION                 = 20,
+       LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS     = 21,
+       LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS     = 22,
+       LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION   = 23,
+       LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER             = 24,
+       LWS_CALLBACK_CONFIRM_EXTENSION_OKAY                     = 25,
+       LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED         = 26,
+       LWS_CALLBACK_PROTOCOL_INIT                              = 27,
+       LWS_CALLBACK_PROTOCOL_DESTROY                           = 28,
+       LWS_CALLBACK_WSI_CREATE /* always protocol[0] */        = 29,
+       LWS_CALLBACK_WSI_DESTROY /* always protocol[0] */       = 30,
+       LWS_CALLBACK_GET_THREAD_ID                              = 31,
 
        /* external poll() management support */
-       LWS_CALLBACK_ADD_POLL_FD,
-       LWS_CALLBACK_DEL_POLL_FD,
-       LWS_CALLBACK_CHANGE_MODE_POLL_FD,
-       LWS_CALLBACK_LOCK_POLL,
-       LWS_CALLBACK_UNLOCK_POLL,
+       LWS_CALLBACK_ADD_POLL_FD                                = 32,
+       LWS_CALLBACK_DEL_POLL_FD                                = 33,
+       LWS_CALLBACK_CHANGE_MODE_POLL_FD                        = 34,
+       LWS_CALLBACK_LOCK_POLL                                  = 35,
+       LWS_CALLBACK_UNLOCK_POLL                                = 36,
+
+       LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY       = 37,
+
+       /****** add new things just above ---^ ******/
 
-       LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY,
-       
        LWS_CALLBACK_USER = 1000, /* user code can use any including / above */
 };
 
@@ -402,50 +414,62 @@ struct lws_pollargs {
     int prev_events;   // the previous event mask
 };
 
+/*
+ * NOTE: These public enums are part of the abi.  If you want to add one,
+ * add it at where specified so existing users are unaffected.
+ */
 enum lws_extension_callback_reasons {
-       LWS_EXT_CALLBACK_SERVER_CONTEXT_CONSTRUCT,
-       LWS_EXT_CALLBACK_CLIENT_CONTEXT_CONSTRUCT,
-       LWS_EXT_CALLBACK_SERVER_CONTEXT_DESTRUCT,
-       LWS_EXT_CALLBACK_CLIENT_CONTEXT_DESTRUCT,
-       LWS_EXT_CALLBACK_CONSTRUCT,
-       LWS_EXT_CALLBACK_CLIENT_CONSTRUCT,
-       LWS_EXT_CALLBACK_CHECK_OK_TO_REALLY_CLOSE,
-       LWS_EXT_CALLBACK_CHECK_OK_TO_PROPOSE_EXTENSION,
-       LWS_EXT_CALLBACK_DESTROY,
-       LWS_EXT_CALLBACK_DESTROY_ANY_WSI_CLOSING,
-       LWS_EXT_CALLBACK_ANY_WSI_ESTABLISHED,
-       LWS_EXT_CALLBACK_PACKET_RX_PREPARSE,
-       LWS_EXT_CALLBACK_PACKET_TX_PRESEND,
-       LWS_EXT_CALLBACK_PACKET_TX_DO_SEND,
-       LWS_EXT_CALLBACK_HANDSHAKE_REPLY_TX,
-       LWS_EXT_CALLBACK_FLUSH_PENDING_TX,
-       LWS_EXT_CALLBACK_EXTENDED_PAYLOAD_RX,
-       LWS_EXT_CALLBACK_CAN_PROXY_CLIENT_CONNECTION,
-       LWS_EXT_CALLBACK_1HZ,
-       LWS_EXT_CALLBACK_REQUEST_ON_WRITEABLE,
-       LWS_EXT_CALLBACK_IS_WRITEABLE,
-       LWS_EXT_CALLBACK_PAYLOAD_TX,
-       LWS_EXT_CALLBACK_PAYLOAD_RX,
+       LWS_EXT_CALLBACK_SERVER_CONTEXT_CONSTRUCT               =  0,
+       LWS_EXT_CALLBACK_CLIENT_CONTEXT_CONSTRUCT               =  1,
+       LWS_EXT_CALLBACK_SERVER_CONTEXT_DESTRUCT                =  2,
+       LWS_EXT_CALLBACK_CLIENT_CONTEXT_DESTRUCT                =  3,
+       LWS_EXT_CALLBACK_CONSTRUCT                              =  4,
+       LWS_EXT_CALLBACK_CLIENT_CONSTRUCT                       =  5,
+       LWS_EXT_CALLBACK_CHECK_OK_TO_REALLY_CLOSE               =  6,
+       LWS_EXT_CALLBACK_CHECK_OK_TO_PROPOSE_EXTENSION          =  7,
+       LWS_EXT_CALLBACK_DESTROY                                =  8,
+       LWS_EXT_CALLBACK_DESTROY_ANY_WSI_CLOSING                =  9,
+       LWS_EXT_CALLBACK_ANY_WSI_ESTABLISHED                    = 10,
+       LWS_EXT_CALLBACK_PACKET_RX_PREPARSE                     = 11,
+       LWS_EXT_CALLBACK_PACKET_TX_PRESEND                      = 12,
+       LWS_EXT_CALLBACK_PACKET_TX_DO_SEND                      = 13,
+       LWS_EXT_CALLBACK_HANDSHAKE_REPLY_TX                     = 14,
+       LWS_EXT_CALLBACK_FLUSH_PENDING_TX                       = 15,
+       LWS_EXT_CALLBACK_EXTENDED_PAYLOAD_RX                    = 16,
+       LWS_EXT_CALLBACK_CAN_PROXY_CLIENT_CONNECTION            = 17,
+       LWS_EXT_CALLBACK_1HZ                                    = 18,
+       LWS_EXT_CALLBACK_REQUEST_ON_WRITEABLE                   = 19,
+       LWS_EXT_CALLBACK_IS_WRITEABLE                           = 20,
+       LWS_EXT_CALLBACK_PAYLOAD_TX                             = 21,
+       LWS_EXT_CALLBACK_PAYLOAD_RX                             = 22,
+
+       /****** add new things just above ---^ ******/
 };
 
+/*
+ * NOTE: These public enums are part of the abi.  If you want to add one,
+ * add it at where specified so existing users are unaffected.
+ */
 enum lws_write_protocol {
-       LWS_WRITE_TEXT,
-       LWS_WRITE_BINARY,
-       LWS_WRITE_CONTINUATION,
-       LWS_WRITE_HTTP,
+       LWS_WRITE_TEXT                                          = 0,
+       LWS_WRITE_BINARY                                        = 1,
+       LWS_WRITE_CONTINUATION                                  = 2,
+       LWS_WRITE_HTTP                                          = 3,
 
        /* special 04+ opcodes */
 
-       LWS_WRITE_CLOSE,
-       LWS_WRITE_PING,
-       LWS_WRITE_PONG,
+       LWS_WRITE_CLOSE                                         = 4,
+       LWS_WRITE_PING                                          = 5,
+       LWS_WRITE_PONG                                          = 6,
 
        /* Same as write_http but we know this write ends the transaction */
-       LWS_WRITE_HTTP_FINAL,
+       LWS_WRITE_HTTP_FINAL                                    = 7,
        
        /* HTTP2 */
 
-       LWS_WRITE_HTTP_HEADERS,
+       LWS_WRITE_HTTP_HEADERS                                  = 8,
+       
+       /****** add new things just above ---^ ******/
        
        /* flags */
 
@@ -474,102 +498,107 @@ struct lws_tokens {
  * don't forget to update test server header dump accordingly
  *
  * these have to be kept in sync with lextable.h / minilex.c
+ *
+ * NOTE: These public enums are part of the abi.  If you want to add one,
+ * add it at where specified so existing users are unaffected.
  */
-
 enum lws_token_indexes {
-       WSI_TOKEN_GET_URI,
-       WSI_TOKEN_POST_URI,
-       WSI_TOKEN_OPTIONS_URI,
-       WSI_TOKEN_HOST,
-       WSI_TOKEN_CONNECTION,
-       WSI_TOKEN_UPGRADE,
-       WSI_TOKEN_ORIGIN,
-       WSI_TOKEN_DRAFT,
-       WSI_TOKEN_CHALLENGE,
-       WSI_TOKEN_EXTENSIONS,
-       WSI_TOKEN_KEY1,
-       WSI_TOKEN_KEY2,
-       WSI_TOKEN_PROTOCOL,
-       WSI_TOKEN_ACCEPT,
-       WSI_TOKEN_NONCE,
-       WSI_TOKEN_HTTP,
-       WSI_TOKEN_HTTP2_SETTINGS,
-       WSI_TOKEN_HTTP_ACCEPT,
-       WSI_TOKEN_HTTP_AC_REQUEST_HEADERS,
-       WSI_TOKEN_HTTP_IF_MODIFIED_SINCE,
-       WSI_TOKEN_HTTP_IF_NONE_MATCH,
-       WSI_TOKEN_HTTP_ACCEPT_ENCODING,
-       WSI_TOKEN_HTTP_ACCEPT_LANGUAGE,
-       WSI_TOKEN_HTTP_PRAGMA,
-       WSI_TOKEN_HTTP_CACHE_CONTROL,
-       WSI_TOKEN_HTTP_AUTHORIZATION,
-       WSI_TOKEN_HTTP_COOKIE,
-       WSI_TOKEN_HTTP_CONTENT_LENGTH,
-       WSI_TOKEN_HTTP_CONTENT_TYPE,
-       WSI_TOKEN_HTTP_DATE,
-       WSI_TOKEN_HTTP_RANGE,
-       WSI_TOKEN_HTTP_REFERER,
-       WSI_TOKEN_KEY,
-       WSI_TOKEN_VERSION,
-       WSI_TOKEN_SWORIGIN,
-
-       WSI_TOKEN_HTTP_COLON_AUTHORITY,
-       WSI_TOKEN_HTTP_COLON_METHOD,
-       WSI_TOKEN_HTTP_COLON_PATH,
-       WSI_TOKEN_HTTP_COLON_SCHEME,
-       WSI_TOKEN_HTTP_COLON_STATUS,
+       WSI_TOKEN_GET_URI                                       =  0,
+       WSI_TOKEN_POST_URI                                      =  1,
+       WSI_TOKEN_OPTIONS_URI                                   =  2,
+       WSI_TOKEN_HOST                                          =  3,
+       WSI_TOKEN_CONNECTION                                    =  4,
+       WSI_TOKEN_UPGRADE                                       =  5,
+       WSI_TOKEN_ORIGIN                                        =  6,
+       WSI_TOKEN_DRAFT                                         =  7,
+       WSI_TOKEN_CHALLENGE                                     =  8,
+       WSI_TOKEN_EXTENSIONS                                    =  9,
+       WSI_TOKEN_KEY1                                          = 10,
+       WSI_TOKEN_KEY2                                          = 11,
+       WSI_TOKEN_PROTOCOL                                      = 12,
+       WSI_TOKEN_ACCEPT                                        = 13,
+       WSI_TOKEN_NONCE                                         = 14,
+       WSI_TOKEN_HTTP                                          = 15,
+       WSI_TOKEN_HTTP2_SETTINGS                                = 16,
+       WSI_TOKEN_HTTP_ACCEPT                                   = 17,
+       WSI_TOKEN_HTTP_AC_REQUEST_HEADERS                       = 18,
+       WSI_TOKEN_HTTP_IF_MODIFIED_SINCE                        = 19,
+       WSI_TOKEN_HTTP_IF_NONE_MATCH                            = 20,
+       WSI_TOKEN_HTTP_ACCEPT_ENCODING                          = 21,
+       WSI_TOKEN_HTTP_ACCEPT_LANGUAGE                          = 22,
+       WSI_TOKEN_HTTP_PRAGMA                                   = 23,
+       WSI_TOKEN_HTTP_CACHE_CONTROL                            = 24,
+       WSI_TOKEN_HTTP_AUTHORIZATION                            = 25,
+       WSI_TOKEN_HTTP_COOKIE                                   = 26,
+       WSI_TOKEN_HTTP_CONTENT_LENGTH                           = 27,
+       WSI_TOKEN_HTTP_CONTENT_TYPE                             = 28,
+       WSI_TOKEN_HTTP_DATE                                     = 29,
+       WSI_TOKEN_HTTP_RANGE                                    = 30,
+       WSI_TOKEN_HTTP_REFERER                                  = 31,
+       WSI_TOKEN_KEY                                           = 32,
+       WSI_TOKEN_VERSION                                       = 33,
+       WSI_TOKEN_SWORIGIN                                      = 34,
+
+       WSI_TOKEN_HTTP_COLON_AUTHORITY                          = 35,
+       WSI_TOKEN_HTTP_COLON_METHOD                             = 36,
+       WSI_TOKEN_HTTP_COLON_PATH                               = 37,
+       WSI_TOKEN_HTTP_COLON_SCHEME                             = 38,
+       WSI_TOKEN_HTTP_COLON_STATUS                             = 39,
        
-       WSI_TOKEN_HTTP_ACCEPT_CHARSET,
-       WSI_TOKEN_HTTP_ACCEPT_RANGES,
-       WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN,
-       WSI_TOKEN_HTTP_AGE,
-       WSI_TOKEN_HTTP_ALLOW,
-       WSI_TOKEN_HTTP_CONTENT_DISPOSITION,
-       WSI_TOKEN_HTTP_CONTENT_ENCODING,
-       WSI_TOKEN_HTTP_CONTENT_LANGUAGE,
-       WSI_TOKEN_HTTP_CONTENT_LOCATION,
-       WSI_TOKEN_HTTP_CONTENT_RANGE,
-       WSI_TOKEN_HTTP_ETAG,
-       WSI_TOKEN_HTTP_EXPECT,
-       WSI_TOKEN_HTTP_EXPIRES,
-       WSI_TOKEN_HTTP_FROM,
-       WSI_TOKEN_HTTP_IF_MATCH,
-       WSI_TOKEN_HTTP_IF_RANGE,
-       WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE,
-       WSI_TOKEN_HTTP_LAST_MODIFIED,
-       WSI_TOKEN_HTTP_LINK,
-       WSI_TOKEN_HTTP_LOCATION,
-       WSI_TOKEN_HTTP_MAX_FORWARDS,
-       WSI_TOKEN_HTTP_PROXY_AUTHENTICATE,
-       WSI_TOKEN_HTTP_PROXY_AUTHORIZATION,
-       WSI_TOKEN_HTTP_REFRESH,
-       WSI_TOKEN_HTTP_RETRY_AFTER,
-       WSI_TOKEN_HTTP_SERVER,
-       WSI_TOKEN_HTTP_SET_COOKIE,
-       WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY,
-       WSI_TOKEN_HTTP_TRANSFER_ENCODING,
-       WSI_TOKEN_HTTP_USER_AGENT,
-       WSI_TOKEN_HTTP_VARY,
-       WSI_TOKEN_HTTP_VIA,
-       WSI_TOKEN_HTTP_WWW_AUTHENTICATE,
+       WSI_TOKEN_HTTP_ACCEPT_CHARSET                           = 40,
+       WSI_TOKEN_HTTP_ACCEPT_RANGES                            = 41,
+       WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN              = 42,
+       WSI_TOKEN_HTTP_AGE                                      = 43,
+       WSI_TOKEN_HTTP_ALLOW                                    = 44,
+       WSI_TOKEN_HTTP_CONTENT_DISPOSITION                      = 45,
+       WSI_TOKEN_HTTP_CONTENT_ENCODING                         = 46,
+       WSI_TOKEN_HTTP_CONTENT_LANGUAGE                         = 47,
+       WSI_TOKEN_HTTP_CONTENT_LOCATION                         = 48,
+       WSI_TOKEN_HTTP_CONTENT_RANGE                            = 49,
+       WSI_TOKEN_HTTP_ETAG                                     = 50,
+       WSI_TOKEN_HTTP_EXPECT                                   = 51,
+       WSI_TOKEN_HTTP_EXPIRES                                  = 52,
+       WSI_TOKEN_HTTP_FROM                                     = 53,
+       WSI_TOKEN_HTTP_IF_MATCH                                 = 54,
+       WSI_TOKEN_HTTP_IF_RANGE                                 = 55,
+       WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE                      = 56,
+       WSI_TOKEN_HTTP_LAST_MODIFIED                            = 57,
+       WSI_TOKEN_HTTP_LINK                                     = 58,
+       WSI_TOKEN_HTTP_LOCATION                                 = 59,
+       WSI_TOKEN_HTTP_MAX_FORWARDS                             = 60,
+       WSI_TOKEN_HTTP_PROXY_AUTHENTICATE                       = 61,
+       WSI_TOKEN_HTTP_PROXY_AUTHORIZATION                      = 62,
+       WSI_TOKEN_HTTP_REFRESH                                  = 63,
+       WSI_TOKEN_HTTP_RETRY_AFTER                              = 64,
+       WSI_TOKEN_HTTP_SERVER                                   = 65,
+       WSI_TOKEN_HTTP_SET_COOKIE                               = 66,
+       WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY                = 67,
+       WSI_TOKEN_HTTP_TRANSFER_ENCODING                        = 68,
+       WSI_TOKEN_HTTP_USER_AGENT                               = 69,
+       WSI_TOKEN_HTTP_VARY                                     = 70,
+       WSI_TOKEN_HTTP_VIA                                      = 71,
+       WSI_TOKEN_HTTP_WWW_AUTHENTICATE                         = 72,
        WSI_TOKEN_PROXY,
        
-       WSI_TOKEN_PATCH_URI,
-       WSI_TOKEN_PUT_URI,
-       WSI_TOKEN_DELETE_URI,
+       WSI_TOKEN_PATCH_URI                                     = 73,
+       WSI_TOKEN_PUT_URI                                       = 74,
+       WSI_TOKEN_DELETE_URI                                    = 75,
        
-       WSI_TOKEN_HTTP_URI_ARGS,
+       WSI_TOKEN_HTTP_URI_ARGS                                 = 76,
        
        /* use token storage to stash these */
 
-       _WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
-       _WSI_TOKEN_CLIENT_PEER_ADDRESS,
-       _WSI_TOKEN_CLIENT_URI,
-       _WSI_TOKEN_CLIENT_HOST,
-       _WSI_TOKEN_CLIENT_ORIGIN,
+       _WSI_TOKEN_CLIENT_SENT_PROTOCOLS                        = 77,
+       _WSI_TOKEN_CLIENT_PEER_ADDRESS                          = 78,
+       _WSI_TOKEN_CLIENT_URI                                   = 79,
+       _WSI_TOKEN_CLIENT_HOST                                  = 80,
+       _WSI_TOKEN_CLIENT_ORIGIN                                = 81,
+       
+       /****** add new things just above ---^ ******/
        
        /* always last real token index*/
        WSI_TOKEN_COUNT,
+
        /* parser state additions */
        WSI_TOKEN_NAME_PART,
        WSI_TOKEN_SKIPPING,
@@ -578,7 +607,7 @@ enum lws_token_indexes {
        WSI_INIT_TOKEN_MUXURL,
 };
 
-struct lws_token_limits {
+struct lws_token_limits {//
     unsigned short token_limit[WSI_TOKEN_COUNT];
 };
 
@@ -671,6 +700,10 @@ struct lws_token_limits {
       (e.g., the server certificate can't be verified).
 */
 
+/*
+ * NOTE: These public enums are part of the abi.  If you want to add one,
+ * add it at where specified so existing users are unaffected.
+ */
 enum lws_close_status {
        LWS_CLOSE_STATUS_NOSTATUS = 0,
        LWS_CLOSE_STATUS_NORMAL = 1000,
@@ -686,6 +719,8 @@ enum lws_close_status {
        LWS_CLOSE_STATUS_EXTENSION_REQUIRED = 1010,
        LWS_CLOSE_STATUS_UNEXPECTED_CONDITION = 1011,
        LWS_CLOSE_STATUS_TLS_FAILURE = 1015,
+       
+       /****** add new things just above ---^ ******/
 
        LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999,
 };
@@ -1334,20 +1369,26 @@ lws_service_fd(struct lws_context *context,
 LWS_VISIBLE LWS_EXTERN void *
 lws_context_user(struct lws_context *context);
 
+/*
+ * NOTE: These public enums are part of the abi.  If you want to add one,
+ * add it at where specified so existing users are unaffected.
+ */
 enum pending_timeout {
-       NO_PENDING_TIMEOUT = 0,
-       PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE,
-       PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE,
-       PENDING_TIMEOUT_ESTABLISH_WITH_SERVER,
-       PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE,
-       PENDING_TIMEOUT_AWAITING_PING,
-       PENDING_TIMEOUT_CLOSE_ACK,
-       PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE,
-       PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE,
-       PENDING_TIMEOUT_SSL_ACCEPT,
-       PENDING_TIMEOUT_HTTP_CONTENT,
-       PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND,
-       PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE,
+       NO_PENDING_TIMEOUT                                      =  0,
+       PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE                 =  1,
+       PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE               =  2,
+       PENDING_TIMEOUT_ESTABLISH_WITH_SERVER                   =  3,
+       PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE                =  4,
+       PENDING_TIMEOUT_AWAITING_PING                           =  5,
+       PENDING_TIMEOUT_CLOSE_ACK                               =  6,
+       PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE     =  7,
+       PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE                   =  8,
+       PENDING_TIMEOUT_SSL_ACCEPT                              =  9,
+       PENDING_TIMEOUT_HTTP_CONTENT                            = 10,
+       PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND                 = 11,
+       PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE                  = 12,
+       
+       /****** add new things just above ---^ ******/
 };
 
 LWS_VISIBLE LWS_EXTERN void