Rhama, any data can be sent from client to server by using /i command even in current patch. What was suggested is server->client communication.
                
            int next_node_index = (car->current_node + 1) % num_nodes;
PathNode *next_node = Nodes + next_node_index;
Vector2d rel_pos = car->pos - next_node->pos;
if (dot_product(rel_pos, next_node->dir) > 0.0f) // crossed the next node
{
	car->current_node = next_node_index;
}
else // didn't cross the next node - check previous node
{
	PathNode *prev_node = Nodes + car->current_node;
	rel_pos = car->pos - prev_node->pos;
	if (dot_product(rel_pos, prev_node->dir) < 0.0f)
	{
		if (car->current_node)
		{
			car->current_node--;
		}
		else
		{
			car->current_node = num_nodes - 1;
		}
	}
}
 In short, ability of client InSims to receive additional info from server InSims can have its uses, I think. I do not see security problems (though I may be short-sighted), as there are already ways to send infos both ways, just not invisibly from server to clients. On the other hand I perfectly understand your concerns. Airio is a large system and quite wide-spread now. It manages many servers in ways that maybe were not your intentions. But I would still hope it is overall perceived as a good thing, especially for the demo servers which are extremely hard/impossible to manage using standard LFS options alone.
 Yes, indeed, even the vote canceling packet worked (works?) only after majority was reached, that means in the 3 seconds after restart/qualify/end countdown actually starts.struct IS_RST // Race STart
{
	byte	Size;		// 28
	byte	Type;		// ISP_RST
	byte	ReqI;		// 0 unless this is a reply to an TINY_RST request
	byte	Zero;
	byte	RaceLaps;	// 0 if qualifying
	byte	QualMins;	// 0 if race
	byte	NumP;		// number of players in race
	byte	Timing;		// lap timing (see below)
	char	Track[6];	// short track name
	byte	Weather;
	byte	Wind;
	word	Flags;		// race flags (must pit, can reset, etc - see below)
	word	NumNodes;	// total number of nodes in the path
	word	Finish;		// node index - finish line
	word	Split1;		// node index - split 1
	word	Split2;		// node index - split 2
	word	Split3;		// node index - split 3
};
// Lap timing info (for Timing byte)
// bits 6 and 7 (Timing & 0xc0) :
// 0x40 : standard timing
// 0x80 : custom timing
// 0xc0 : no lap timing
// bits 0 and 1 (Timing & 0x03) : number of checkpoints if lap timing is enabled
 Anyone please point me somewhere where I could learn more? (How to choose timing, what could it be used for...) Thanks! 

 Here I dare to mention three more things, maybe not exactly InSim matters, but closely related, I hope:
 Thanks again for all the work and answers!
// ALLOWED CARS
// ============
// You can send a packet to limit the cars that can be used by a given connection
struct IS_PLC // PLayer Cars
{
	byte	Size;		// 12
	byte	Type;		// ISP_PLC
	byte	ReqI;		// 0
	byte	Zero;
	byte	UCID;		// connection's unique id
	byte	Sp1;
	byte	Sp2;
	byte	Sp3;
	unsigned	Cars;	// allowed cars - see below
};
// XF GTI			-       1
// XR GT			-       2
// XR GT TURBO		-       4
// RB4 GT			-       8
// FXO TURBO		-    0x10
// LX4				-    0x20
// LX6				-    0x40
// MRT5				-    0x80
// UF 1000			-   0x100
// RACEABOUT		-   0x200
// FZ50				-   0x400
// FORMULA XR		-   0x800
// XF GTR			-  0x1000
// UF GTR			-  0x2000
// FORMULA V8		-  0x4000
// FXO GTR			-  0x8000
// XR GTR			- 0x10000
// FZ50 GTR			- 0x20000
// BMW SAUBER F1.06	- 0x40000
// FORMULA BMW FB02	- 0x80000