Configuring our chat room using data forms
At some point, we will want to configure our chat room to do different things, for example, only allow new users to read the messages, maybe add a password, or just set the room name. While this may seem feasible to handle custom stanzas for a few of these types of changes, when you expand to all the use cases just for configuration, then learning/knowing all of these systems would become a nightmare.
Thankfully, XMPP provides something called a data form; it can help address this dilemma. Data forms (as defined in XEP-0004) provide a standard way of requesting and setting structured data. They can be thought of as analogous to forms on a web page, and indeed you may notice several similarities.
The basics of the data form
You'll be able to identify a data form by its distinctive opening tag:
<x xmlns='jabber:x:data'>
Once we see a tag like this, we'll know that we're working with a data form and we can act accordingly. Data forms are broken...