From eabed8defe9a0dea9d734efaae534c0f85f8f35b Mon Sep 17 00:00:00 2001
From: Andy Green <andy.green@linaro.org>
Date: Mon, 11 Aug 2014 12:11:36 +0800
Subject: [PATCH] protocol struct add user controlled id member

Signed-off-by: Andy Green <andy.green@linaro.org>
---
 changelog           | 5 +++++
 lib/libwebsockets.h | 7 +++++++
 2 files changed, 12 insertions(+)

diff --git a/changelog b/changelog
index e3166c2a..1652fe8f 100644
--- a/changelog
+++ b/changelog
@@ -11,6 +11,11 @@ There's a new member in the info struct used to control context creation,
 ssl_private_key_password, which allows passing into lws the passphrase on
 an SSL cetificate
 
+There's a new member in struct protocols, id, which is ignored by lws but can
+be used by the user code to mark the selected protocol by user-defined version
+or capabliity flag information, for the case multiple versions of a protocol are
+supported.
+
 
 v1.3-chrome37-firefox30
 =======================
diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h
index 203c54e1..71b6a65a 100644
--- a/lib/libwebsockets.h
+++ b/lib/libwebsockets.h
@@ -863,6 +863,12 @@ typedef int (extension_callback_function)(struct libwebsocket_context *context,
  *		protocols where you stream big blocks, set to nonzero and use
  *		the return value from libwebsocket_write() to manage how much
  *		got send yourself.
+ * @id:		ignored by lws, but useful to contain user information bound
+ *		to the selected protocol.  For example if this protocol was
+ *		called "myprotocol-v2", you might set id to 2, and the user
+ *		code that acts differently according to the version can do so by
+ *		switch (wsi->protocol->id), user code might use some bits as
+ *		capability flags based on selected protocol version, etc.
  * @owning_server:	the server init call fills in this opaque pointer when
  *		registering this protocol with the server.
  * @protocol_index: which protocol we are starting from zero
@@ -882,6 +888,7 @@ struct libwebsocket_protocols {
 	size_t per_session_data_size;
 	size_t rx_buffer_size;
 	int no_buffer_all_partial_tx;
+	unsigned int id;
 
 	/*
 	 * below are filled in on server init and can be left uninitialized,
-- 
GitLab