every plug-in (a DLL file) should be able to provide one or more protocols;
unique session number to identify each protocol, service and connection;
separated data storage for every session;
store saved data on disk and restore data and services on restart;
an interface to set (control panel) options providing different types of options (like string, integer, list, etc) for each protocol and or service;
an interface to load new protocols and create new services;
an interface to retrieve (control panel) options from a specific protocol.
To be able to know which protocols are able to work together it was necessary to define three different types. They are very simulair to the OSI model, which I wasn't aware of at the time. The OSI names are between brackets.
Receiver (Transport layer) This protocol needs to establish connections with clients and send and receive data on request. Examples of well known protocols are TCP/IP and Bluetooth protocol;
Manipulator (Presentation layer) This protocol will be able to change all the transferred data between a receiver and a laborer protocol. Examples of well known protocols are TLS/SSL;
Laborer (Application layer) This protocol will process the clients request by receiving and sending data through the manipulator and receiver protocol. Examples of well known protocols are HTTP, FTP, SMTP.