HeXHub • Plugins

* Lines marked with * are new to version 5.02b

3. Plugins

Plugins are Dynamic Link Libraries (DLL) that can be written in any programming language. If a plugin exports specific functions, they will be called by hub when a specific event occures. A plugin can call functions from hub when needed, it must first get their addresses using the GetFunction procedure (address of GetFunction is passed as the parameter of InitPlugin).

3.1. Functions exported by plugin


3.1.1. InitPlugin

LPCTSTR InitPlugin(LPFN _GetFunction);

This function MUST be exported by plugin, all other are optional. Plugins that don't export this function are not loaded.
Plugins are auto-detected by the presence of this function in export table. This function will be called on every plugin initialization, the parameter is a pointer to the GetFunction() procedure.
The function should return a pointer to a NULL-terminated string that specifies its description.
If the function returns NULL, there was an error, and plugin will no longer be used.

On initialization, the plugin can use the GetFunction() procedure to get addresses of procedures that can be called from hub. Its prototype is as follows:

LPFN GetFunction(LPCTSTR functionName);

functionName = pointer to a NULL terminated string specifying a procedure from hub

Function returns the pointer to specified function or NULL if function cannot be found.


3.1.2. UnloadPlugin

void UnloadPlugin(void);

This function is called (if exported by plugin) when plugin is unloaded from memory, or when hub quits. The plugin can unregister all commands / bots / help strings / etc.


3.1.3. SaveSettings

void SaveSettings(void);

If this function is exported by plugin, it will be called before UnloadPlugin() or when hub owner choses to save all hub's settings.


3.1.4. GetConfig

void GetConfig(HWND hParent);

This function is called when hub owner choses the "Configure" option from Plugins page. The plugin can show a custom configuration dialog with specific options related to its useage.
hParent = handle of configuration dialog's parent window.


3.1.5. GenerateLock

BOOL GenerateLock(LPVOID lpBuffer);

If this function is exported, it will be called before any user joins, and it can fill the buffer with a custom generated $Lock string. If the plugin changes the contents of this buffer, the hub will send the new Lock to the user who connects. Last plugin that changed this buffer wins. $Key will be calculated from this buffer. If no plugin changes the Lock string, the default one will be used.
lpBuffer = pointer to a buffer that will receive the new Lock string

Return False to prevent other plugins changing $Lock.


3.1.6. SetWelcomeText

LPCTSTR SetWelcomeText(void);

If this function is exported, it should return the pointer to a NULL terminated string that will be appended to hub's welcome message.


3.1.7. onDataFromUser

BOOL onDataFromUser(DWORD userId,LPVOID lpBuffer,int bufferSize);

This function is called every time a user sends data to hub.
userId = identifier of the connected user that sends data
lpBuffer = buffer with data
bufferSize = number of received bytes

The plugin should not change the contents of this buffer.
Return False to prevent further processing of received data (hub will discard this buffer).


3.1.8. onUnknownData

BOOL onUnknownData(DWORD userId,LPVOID lpBuffer,int bufferSize,LPFLOODINFO userFloodInfo,LPDEFINFO floodDefInfo);

This function will be called every time on a connection is sent unrecognized data (HTTP requests, hub registration attempts, etc).
userId = identifier of the connected user that sends data
lpBuffer = buffer with data
bufferSize = number of received bytes
userFloodInfo = pointer to a structure with flood detection parameters related to current user (see 3.3.1)
floodDefInfo = structure with parameters used to detect if user is flooding the hub (see 3.3.2.)

The plugin should not change the contents of this buffer.
Return False to prevent further processing of this data (hub will discard this buffer).


3.1.9. onCommand

BOOL onCommand(DWORD userId,LPVOID lpBuffer,int cmdSize,LPFLOODINFO userFloodInfo,LPDEFINFO floodDefInfo);

This function will be called every time a user sends a command to hub.
userId = identifier of the connected user that sends data
lpBuffer = buffer with data
cmdSize = size of received command including terminator
userFloodInfo = pointer to a structure with flood detection parameters related to current user (see 3.3.1)
floodDefInfo = structure with parameters used to detect if user is flooding the hub (see 3.3.2.)

The plugin should not change the contents of this buffer. Command detection procedure ignores the case of received commands.
Return False to prevent further processing of this command (hub will discard this buffer).


3.1.10. onUnknownCommand

BOOL onUnknownCommand(DWORD userId,LPVOID lpBuffer,int cmdSize,LPFLOODINFO userFloodInfo,LPDEFINFO floodDefInfo);

This function will be called every time a user sends an unrecognized command to hub.
userId = identifier of the connected user that sends data
lpBuffer = buffer with data
cmdSize = size of received command including terminator (this may be NULL or "|" terminator)
userFloodInfo = pointer to a structure with flood detection parameters related to current user (see 3.3.1)
floodDefInfo = structure with parameters used to detect if user is flooding the hub (see 3.3.2.)

The plugin should not change the contents of this buffer.
Return False to prevent further processing of this data (hub will discard this buffer).


3.1.11. onChatMessage

BOOL onChatMessage(DWORD userId,LPVOID lpBuffer,int bufferSize,LPFLOODINFO userFloodInfo,LPDEFINFO floodDefInfo);

This function will be called every time a user sends a private message or a message in mainchat.
userId = identifier of the connected user that sends data
lpBuffer = buffer with command
bufferSize = size of command including terminator
userFloodInfo = pointer to a structure with flood detection parameters related to current user (see 3.3.1)
floodDefInfo = structure with parameters used to detect if user is flooding the hub (see 3.3.2.)

The plugin should not change the contents of this buffer.
Mainchat messages will start with "<", private messages start with "$To:".
Return False to prevent further processing of this data (hub will discard this buffer).


3.1.12. onPublicMessage

BOOL onPublicMessage(DWORD userId,LPVOID lpBuffer,int bufferSize);

This function will be called every time the hub sends a message in mainchat.
userId = identifier of the connected user that caused the message to be sent
lpBuffer = buffer with data
bufferSize = number of received bytes

The plugin should not change the contents of this buffer.
Return False to prevent further processing of this data (hub will discard this buffer, message will not be sent).


3.1.13. onNickChange

void onNickChange(LPCTSTR lpszOldNick,LPCTSTR lpszNewNick);

This function will be called every time a user changes his nickname or an admin cause the nickname of a user to be changed.
lpszOldNick = pointer to a NULL terminated string with old nickname
lpszNewNick = pointer to a NULL terminated string with new nickname


3.1.14. onError

void onError(DWORD userId,DWORD dwFlags);

This function will be called if an error occures.
userId = identifier of the connected user that probably caused the error
dwFlags = flags that can be used to identify the error
bit 0 => validation timeout
bit 1 => send timeout
bit 2 => WSA error
bit 3 => maximum number of retries exceeded
bit 4 => unknown error
bit 5 => connection closed by client
bit 6 => send error
bit 7 => re-entrancy error
bit 8 => user disconnected
bit 9 => connection flood detected, user delayed

A value of 0 for dwFlags (ERROR_SUCCESS) indicates that a new connection was accepted. A connection is available from onError(userId,0) (new user connected) to onError(userId,0x100) (user disconnected).


3.1.15. onUserIdle

BOOL onUserIdle(DWORD userId);

This function will be called when the hub detects a user is idle.
userId = identifier of the connected user

Return False to prevent calling the other plugins on this event.


3.1.16. BannedUserJoins0

BOOL BannedUserJoins0(DWORD dwUserIp,DWORD dwFlags,BOOL permanent);

This function will be called when a banned user tryes to join the hub (_ban0_).
dwUserIp = IP of the banned user
dwFlags = ban type
bit 0 => hub is locked
bit 1 => DDoS filter
bit 2 => _ban0_
bit 3 => IP was detected as proxy
bit 4 => connection flood detected from user
bit 5 => connection flood detected from multiple IPs
bit 6 => socket error
permanent = true if the ban is permanent

Return False to allow the user to join the hub.


3.1.16. BannedUserJoins1

BOOL BannedUserJoins1(DWORD dwUserIp,DWORD dwFlags,BOOL permanent);

This function will be called when a banned user tryes to join the hub (_ban1_).
dwUserIp = IP of the banned user
dwFlags = ban type
bit 0 => IP / MAC is banned, _ban1_
bit 1 => reconnect flood detected
bit 2 => number of clones exceeded
bit 3 => incorrect ISP
bit 4 => incorrect country
bit 5 => too many concurrent logins
bit 6 => attempt to join a private hub with no account
bit 7 => user limit exceeded
bit 8 => user connected twice on different hub ports
bit 9 => user is trying to join with a reserved prefix
permanent = true if the ban is permanent

Return False to allow the user to join the hub.


3.1.17. BannedUserJoins2

BOOL BannedUserJoins2(DWORD userId,LPCTSTR userName,DWORD userIp,LPCTSTR op,LPCTSTR reason,BOOL permanent);

This function will be called when a banned user tryes to join the hub (_ban2_).
userId = identifier of the user who tryes to join the hub
userName = nickname of the banned user
dwUserIp = IP of the banned user
op = nickname of the operator who banned the user (hub-security nickname if this is an auto-ban)
reason = reason why the user is banned, this may me a NULL pointer
permanent = true if the ban is permanent

Return False to allow the user to join the hub.


3.1.18. onNicklistChange

void onNicklistChange(DWORD dwUserId,BOOL addedToList);

This function will be called every time the hub needs to update the nicklist.
dwUserId = identifier of the user
addedToList = True if the user joined the hub, False if the user disconnected.


3.1.19. GetAboutText

LPCTSTR GetAboutText(void);

If this function is exported, it should return the pointer to a NULL terminated string that contains the copyright information.


3.1.20. onBadSettings

void onBadSettings(DWORD userId,DWORD dwReasonId);

This function will be called if the hub will disconnect a user because of the restrictions (and in some cases a temp ban will be set).
userId = identifier of the connected user that will be disconnected
dwReasonId = error code
1 = key was missing
2 = bad key
3 = bad version
4 = password needed
5 = bad nick when nickchanges are disabled
6 = wrong password
7 = the hub requires some features that are not supported by client
8 = syntax error in $GetINFO
9 = syntax error in $To:
10 = tag states passive/proxy but using active commands
11 = tag states active but using passive commands
12 = incorrect IP in $ConnectToMe
13 = incorrect nick in $RevConnectToMe
14 = syntax error in $SR
15 = incorrect IP in $Search
16 = incorrect nick in passive search
17 = syntax error in $Search
18 = syntax error in mainchat message
19 = syntax error in $MyINFO
20 = forbid, mainchat
21 = forbid, commands
22 = forbid, private message
23 = forbid, search
24 = forbid, search results
25 = forbid, description
26 = forbidden fields found in tag
27 = forbidden client
28 = forbidden connection mode
29 = forbidden connection string
30 = validation timeout
31 = unknown client / client description missing in tag
32 = user has to open more hubs as normal user
33 = user has to open more hubs as registered
34 = user has to open more hubs as op
35 = user has to open more hubs
36 = user is in too many hubs as normal user
37 = user is in too many hubs as registered
38 = user is in too many hubs as op
39 = user is in too many hubs
40 = user has to open more slots
41 = user has too many slots open
42 = low slot ratio
43 = tag missing
44 = invalid e-mail address
45 = fake share detected (too many identical consecutive groups)
46 = invalid characters in share size
47 = low share
48 = too much shared
49 = forbidden files found in share, share size didn't change
50 = wrong prefix
51 = irrelevant prefix found
52 = ISP prefix required
53 = fake number of slots detected
54 = client is using pinger commands
55 = bad client emulation
56 = forbid, share size
57 = forbid, e-mail
58 = forbid, web comments or topics
59 = fake client version
60 = search without $GetNickList
61 = search requests are not yet enabled for this connection
62 = a wrong address was added to favorites as the address of this hub
63 = passive search result without file path

Return False to prevent the user being disconnected.


3.1.21. UserSearch

int UserSearch(DWORD dwUserId,lpstr lpSearchText,lpvoid lpBuffer);

This function will be called every time somebody uses the !seen command to allow a plugin to add extra results.
dwUserId = identifier of the user
lpSearchText = a pipe-terminated string with text to search
lpBuffer = the buffer where the plugin should write the results (buffer size = 10240 bytes)

This function should return the number of bytes written or 0 if the buffer remains unchanged.


3.1.22. GetConfigurationStringsTable

LPVOID GetConfigurationStringsTable(void);

If this function is exported, it should return the pointer to a table of pointers to configurable items, last item in this table must be -1 (0xFFFFFFFF).
This function is called every time a hub administrator writes !set ext %[dll] config.
A configurable item begins with a byte specifying its index (must be 1-based), followed by a NULL-terminated string with first word as configuration parameter accepted by !set followed by a description of that parameter. After the NULL terminator follows a list of structures as follows:
1) boolean:
typedef struct _bool_str{
BYTE struct_id; // for boolean this is 110
DWORD data_ptr; // pointer to data
BYTE bit_pos; // bit index of boolean value
} bool_str;

2) byte:
typedef struct _byte_str{
BYTE struct_id; // for byte this is 111
DWORD data_ptr; // pointer to data
} byte_str;

3) integer:
typedef struct _int_str{
BYTE struct_id; // for integer this is 112
DWORD data_ptr; // pointer to data
} int_str;

3) longint:
typedef struct _long_str{
BYTE struct_id; // for longint this is 113
DWORD data_ptr; // pointer to data
} long_str;

4) int64:
typedef struct _int64_str{
BYTE struct_id; // for 64-bit integer this is 114
DWORD data_ptr; // pointer to data
} int64_str;

5) string:
typedef struct _string_str{
BYTE struct_id; // for strings this is 115
DWORD data_ptr; // pointer to data
WORD string_size; // size of string
} string_str;

6) definition terminator:
typedef struct _term_str{
BYTE struct_id; // if this is last structure in chain, this is -1
} term_str;

Last structure in chain must be 6). The plugin must preserve the configuration information between 2 calls of GetConfigurationStringsTable.


3.1.23. onHTTPRequest

DWORD onHTTPRequest(DWORD userId,LPCTSTR lpHeaders,LPSTR lpszHost,LPSTR lpszReferer,LPSTR lpszUserAgent,LPSTR lpszCookies,DWORD dwFlags);

This function will be called every HTTP request sent.
userId = identifier of the connected user that sent the request
lpHeaders = pointer to the request sent (supported requests are GET, POST and HEAD)
lpszHost = pointer to a null terminated string containing the hostname or pointer to "*" if the user is trying to access a host that is not declared
lpszReferer = pointer to a null terminated string containing the referer address
lpszUserAgent = pointer to a null terminated string containing client type
lpszCookies = pointer to a null terminated string having user's cookies
dwFlags = status flags detected by hub
bit 0 => connection: close
bit 1 => proxy was detected
bit 2 => a proxy was detected and it sent user's real IP

If the plugin exports this function, it should return one of the following values:
1 = the hub should process this request
0 = the hub should ignore this request
-1 = the hub should ignore this request and should not change connection flood detection parameters.


3.1.24. onHTTPerror

DWORD onHTTPerror(DWORD userId,DWORD dwErrorCode,LPSTR lpszPath,LPSTR lpszHost,LPSTR lpszReferer,LPSTR lpszUserAgent,LPSTR lpszCookies);

This function will be called for all HTTP errors.
userId = identifier of the connected user that sent the request
dwErrorCode = HTTP status code, this version will call plugins only for error 404
lpszPath = requested file or directory
lpszHost = pointer to a null terminated string containing the hostname or pointer to "*" if the user is trying to access a host that is not declared
lpszReferer = pointer to a null terminated string containing the referer address
lpszUserAgent = pointer to a null terminated string containing client type
lpszCookies = pointer to a null terminated string having user's cookies

If the plugin exports this function, it should return one of the following values:
1 = the hub should send error response to client
0 = the hub should not reply to client


3.1.25. HTTPFormatPage

DWORD HTTPFormatPage(DWORD userId,LPSTR lpszPath,LPSTR lpszHost,LPSTR lpszReferer,LPSTR lpszUserAgent,LPSTR lpszCookies,LPSTR lpszVariables,LPVOID lpBuffer,DWORD bufferSize);

This function is called if the user enters an URL with root path as this plugin's DLL name.
userId = identifier of the connected user that sent the request
lpszPath = requested file or directory
lpszHost = pointer to a null terminated string containing the hostname or pointer to "*" if the user is trying to access a host that is not declared
lpszReferer = pointer to a null terminated string containing the referer address
lpszUserAgent = pointer to a null terminated string containing client type
lpszCookies = pointer to a null terminated string having user's cookies
lpszVariables = pointer to a null terminated string having variables sent by user
lpBuffer = a pointer to an allocated buffer where the plugin can store the new page as a NULL terminated string. The plugin can re-allocate this buffer. If the plugin reallocated the buffer, it also must free the memory allocated for the old buffer.
bufferSize = initial size of allocated memory

If the plugin exports this function, it should return one of the following:
0 = the hub should parse this request and send a default response
-1 = the hub should ignore this request and don't send anything
any other value = a pointer to the buffer containing the page that will be sent


3.1.26. HTTPEnumData

DWORD HTTPEnumData(DWORD userId,LPSTR lpszPath,LPSTR lpszHost,LPSTR lpszReferer,LPSTR lpszUserAgent,LPSTR lpszCookies,LPSTR lpszVariables,DWORD enumerationIndex,LPSTR lpParameters,LPVOID lpBuffer,DWORD dataOffset);

This function is called for %[plugin dllname] blocks to enumerate plugin's data in a loop.
userId = identifier of the connected user that sent the request
lpszPath = requested file or directory
lpszHost = pointer to a null terminated string containing the hostname or pointer to "*" if the user is trying to access a host that is not declared
lpszReferer = pointer to a null terminated string containing the referer address
lpszUserAgent = pointer to a null terminated string containing client type
lpszCookies = pointer to a null terminated string having user's cookies
lpszVariables = pointer to a null terminated string having variables sent by user
enumerationIndex = loop counter for this enumeration. If this is an enumeration, enumerationIndex will have consecutive values. The hub may call this function at a later time with a random index to request some parts of this data again.
lpParameters = a pointer to the parameters found in the index file after "%[plugin dllname". String terminator is "]" or null.
lpBuffer = a pointer to a buffer that will receive plugin's data related to current enumeration index. Default buffer size is 4096 bytes.
dataOffset = if last call to this function returned 4096 written bytes, the hub may or may not call it again with same enumerationIndex to request the rest of the data. This variable will be an index in plugin's data (number of bytes already received for this item).

If the plugin exports this function, it should return one of the following:
-1 = end of enumeration, index is too big
any other value = number of bytes written to buffer.


3.1.27. FirewallIOCTL

BOOL FirewallIOCTL(DWORD hDriver,DWORD dwIoControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned,LPOVERLAPPED lpOverlapped);

This function allows a plugin to provide, change or to intercept firewall functions as described in firewall.txt.
hDriver = a handle to loaded driver (by default DDoSflt) that can be used in a DeviceIoControl to call functions that are not supported by this plugin or 1 if no driver is loaded
dwIoControlCode = control code of operation
lpInBuffer = input buffer
nInBufferSize = size of input buffer
lpOutBuffer = output buffer
nOutBufferSize = size of output buffer
lpBytesReturned = pointer to variable to receive the number of bytes written
lpOverlapped = pointer to an overlapped structure as described in MSDN

If a plugin exports this function, it must update the buffer pointed by lpBytesReturned with the correct number of bytes written.



3.2. Hub's functions that can be called by plugin

3.2.1. GetFunction

LPFN GetFunction(LPCTSTR functionName);

functionName = pointer to a NULL terminated string specifying a procedure from hub

Function returns the pointer to specified function or NULL if function cannot be found. The address of GetFunction is sent as the parameter of InitPlugin.


3.2.2. GetVersion

DWORD GetVersion(void);

This function returns current hub's version (versionHigh<<16 + versionLow<<8 + betaRelease).


3.2.3. SendTo

BOOL SendTo(DWORD userId,LPVOID lpBuffer,int bufferSize);

Send data to a connected user.
userId = identifier of the user who tryes to join the hub
lpBuffer = buffer with data
bufferSize = size of data to send

On success, this function returns True.


3.2.4. SendToAll

void SendToAll(LPVOID lpBuffer,int bufferSize);

Send data to all users
lpBuffer = buffer with data
bufferSize = size of data to send

This function generates public messages and will call all plugins that export onPublicMessage.


3.2.5. SendNotificationMessage

void SendNotificationMessage(LPCTSTR lpszMessage);

Use this function to send a notification message in opchat to all operators who have info1 right.
lpszMessage = message to be sent as a private message from hub-security in opchat


3.2.6. NickFromId

BOOL NickFromId(DWORD userId,LPVOID lpBuffer);

This function returns the nickname of a connected user
userId = identifier of the user
lpBuffer = buffer that will receive nickname (MAX_NICK=40 bytes)

Reserved identifiers: 0 = hub-security bot, 1 = opchat
On success, this function returns True.


3.2.7. ClientnickFromId

BOOL ClientnickFromId(DWORD userId,LPVOID lpBuffer);

This function returns the nickname known by a connected user's client (usually nick before !nick or !rename) of a connected user
userId = identifier of the user
lpBuffer = buffer that will receive nickname (MAX_NICK=40 bytes)

Reserved identifiers: 0 = hub-security bot, 1 = opchat
On success, this function returns True.


3.2.8. IdFromNick

DWORD IdFromNick(LPCTSTR lpBuffer);

This function returns the identifier of a connected user
lpBuffer = buffer that contains nickname

If this function fails it will return -1.


3.2.9. GetInfo

DWORD GetInfo(DWORD userId,LPVOID lpBuffer);

This function returns the MyINFO string of a connected user, restrictions apply.
userId = identifier of the user
lpBuffer = buffer that will receive MyINFO (MAX_MYINFO=400 bytes)

This function returns number of bytes written.


3.2.10. GetFullInfo

DWORD GetFullInfo(DWORD userId,LPVOID lpBuffer);

This function returns the MyINFO string of a connected user with all information.
userId = identifier of the user
lpBuffer = buffer that will receive MyINFO (MAX_MYINFO=400 bytes)

This function returns number of bytes written.


3.2.11. SetInfo

BOOL SetInfo(DWORD userId,LPCTSTR lpBuffer);

This function sets tag, description, e-mail, share and connection using a MyINFO string but does not send $MyINFO to users.
userId = identifier of the user
lpBuffer = buffer with a MyINFO string, nickname is ignored

On success, this function returns True.


3.2.12. GetDescription

DWORD GetDescription(DWORD userId,LPVOID lpBuffer);

This function copies the description of a connected user.
userId = identifier of the user
lpBuffer = buffer that will receive description (MAX_DESCRIPTION=200 bytes)

This function returns number of bytes written.


3.2.13. SetDescription

BOOL SetDescription(DWORD userId,LPCTSTR lpszDescription);

This function changes the description of a connected user but does not send $MyINFO to users.
userId = identifier of the user
lpszDescription = a NULL terminated string with the new description

On success, this function returns True.


3.2.14. GetTag

DWORD GetTag(DWORD userId,LPVOID lpBuffer);

This function copies the tag of a connected user. This may not be the original tag sent by user.
userId = identifier of the user
lpBuffer = buffer that will receive tag (MAX_TAG=53 bytes)

This function returns number of bytes written.


3.2.15. SetTag

BOOL SetTag(DWORD userId,LPCTSTR lpszTag);

This function changes the tag of a connected user but does not send $MyINFO to users and does not check its parameters.
userId = identifier of the user
lpszTag = a NULL terminated string with the new tag

On success, this function returns True.


3.2.16. GetConnection

DWORD GetConnection(DWORD userId,LPVOID lpBuffer);

This function copies the connection identifier of a connected user.
userId = identifier of the user
lpBuffer = buffer that will receive connection string (MAX_DESCRIPTION=20 bytes)

This function returns number of bytes written.


3.2.17. SetConnection

BOOL SetConnection(DWORD userId,LPCTSTR lpszConnection);

This function changes the connection string of a connected user but does not send $MyINFO to users.
userId = identifier of the user
lpszConnection = a NULL terminated string with the new connection

On success, this function returns True.


3.2.18. GetMail

DWORD GetMail(DWORD userId,LPVOID lpBuffer);

This function copies the e-mail address of a connected user.
userId = identifier of the user
lpBuffer = buffer that will receive e-mail (MAX_MAIL=30 bytes)

This function returns number of bytes written.


3.2.19. SetMail

BOOL SetMail(DWORD userId,LPCTSTR lpszMail);

This function changes the e-mail address of a connected user but does not send $MyINFO to users.
userId = identifier of the user
lpszMail = a NULL terminated string with the new e-mail

On success, this function returns True.


3.2.20. GetShareString

DWORD GetShareString(DWORD userId,LPVOID lpBuffer);

This function copies the number of bytes shared by a connected user.
userId = identifier of the user
lpBuffer = buffer that will receive share (MAX_SHARE=40 bytes)

This function returns number of bytes written.


3.2.21. SetShareString

BOOL SetShareString(DWORD userId,LPCTSTR lpszShare);

This function changes the number of bytes shared by a user but does not send $MyINFO to users.
userId = identifier of the user
lpszShare = a NULL terminated string with the new share

On success, this function returns True.


3.2.22. GetIP

DWORD GetIP(DWORD userId);

This function returns the IP of a connected user or NULL if user is not found.
userId = identifier of the user


3.2.23. GetIPString

DWORD GetIPString(DWORD userId,LPVOID lpBuffer);

This function copies the IP of a connected user.
userId = identifier of the user
lpBuffer = buffer that will receive a NULL-terminated string with the IP address (MAX_IP=16 bytes)

This function returns number of bytes written.


3.2.24. GetISPName

DWORD GetISPName(DWORD userId,LPVOID lpBuffer);

This function copies the ISP of a connected user as defined in ISPs section.
userId = identifier of the user
lpBuffer = buffer that will receive a NULL-terminated string with the ISP name (MAX_ISP=256 bytes)

This function returns number of bytes written.


3.2.25. GetOpStatus

DWORD GetOpStatus(DWORD userId);

This function returns Op status as follows:
0 = normal user
1 = public op
2 = hidden op
-1= user not found

userId = identifier of the user


3.2.26. SetOpStatus

BOOL SetOpStatus(DWORD userId,DWORD isOp);

This function changes the op status of a connected user.
userId = identifier of the user
isOp can be one of the following:
0 = normal user
1 = public op
2 = hidden op

This function will change user's rights if necessarry.


3.2.27. GetLanguage

DWORD GetLanguage(DWORD userId,LPVOID lpBuffer);

This function copies the language identifier of a connected user
userId = identifier of the user
lpBuffer = buffer that will receive a NULL-terminated string with the language identifier (MAX_LANG=3 bytes)

This function returns number of bytes written.


3.2.28. SetLanguage

BOOL SetLanguage(DWORD userId,LPCTSTR lpszLanguage);

This function changes the language setting of a connected user.
userId = identifier of the user
lpszLanguage = a NULL terminated string with the new language identifier

On success, this function returns True.


3.2.29. GetMode

DWORD GetMode(DWORD userId,LPVOID lpBuffer);

This function copies the identifier of the chat filter used to process the messages written by a connected user.
userId = identifier of the user
lpBuffer = buffer that will receive a NULL-terminated string with the mode name (MAX_MODE=5 bytes)

This function returns number of bytes written.


3.2.30. SetMode

DWORD SetMode(DWORD userId,LPCTSTR lpszMode);

This function changes the chat filter used to process the messages written by a connected user.
userId = identifier of the user
lpszMode = the name of the chat filter

The function returns the filter identifier, or -1 if user was not found.


3.2.31. ModeTransform

DWORD ModeTransform(DWORD userId,LPCTSTR lpszModeName,LPCTSTR lpszSource,LPVOID destination);

This function uses a specified chat filter to convert a string
userId = identifier of the user
lpszModeName = name of the chat filter used
lpszSource = pointer to a NULL terminated string that will be converted
destination = pointer to a buffer that will receive the converted string

The function returns the number of bytes written.


3.2.32. GetUserCount

DWORD GetUserCount(void);

This function returns the number of connected users.


3.2.33. GetUserIds

DWORD GetUserIds(LPVOID lpBuffer,DWORD dwIds);

This function copies the specified number of IDs from userlist.
lpBuffer = buffer that will receive the ID list
dwIds = number of IDs to copy

This function returns number of IDs written.


3.2.34. GetMastersCount

DWORD GetMastersCount(void);

This function returns the number of users who can send commands to bots registered by this plugin.


3.2.35. GetMastersIds

DWORD GetMastersIds(LPVOID lpBuffer,DWORD dwIds);

This function copies the specified number of IDs of users who have rights and/or access to send commands to bots registered by this plugin.
lpBuffer = buffer that will receive the ID list
dwIds = number of IDs to copy

This function returns number of IDs written.


3.2.36. GetIpCacheInfo

BOOL GetIpCacheInfo(DWORD Ip,LPVOID lpBuffer);

This function copies the information related to specified IP from IP cache.
Ip = requested IP
lpBuffer = buffer that will receive the contents of the ipInfo structure (see 3.3.3.)

This function returns false if specified IP was not found in cache.


3.2.37. SetIpCacheInfo

void SetIpCacheInfo(LPIPINFO ipInfo);

This function updates the information related to an IP in IP cache. If the IP is not found, a new entry is created.

ipInfo = pointer to an ipInfo structure with data (see 3.3.3.)


3.2.38. GetAccessLevel

DWORD GetAccessLevel(DWORD userId);

This function returns the access level of a connected user or -1 if user is not found.
userId = identifier of the user


3.2.39. SetAccessLevel

BOOL SetAccessLevel(DWORD userId,DWORD dwNewAccess);

This function changes the access level of a connected user, registration information remains unchanged.
userId = identifier of the user
dwNewAccess = a value between 0 and 49999 specifying the new access level

On success, this function returns True.


3.2.40. GetRights

BOOL GetRights(DWORD userId,LPQWORD lpRights);

This function returns user's rights as a quad word.
userId = identifier of the user
lpRights = a buffer that receives user's rights (8 bytes)

On success, this function returns True.


3.2.41. SetRights

BOOL SetRights(DWORD userId,LPQWORD lpRights);

This function changes the rights of a connected user, registration information remains unchanged.
userId = identifier of the user
lpRights = a buffer with user's new rights (8 bytes)

On success, this function returns True.


3.2.42. GetProfileId

DWORD GetProfileId(DWORD userId);

This function returns the identifier of the profile used by a connected user or -1 if user is not found.
userId = identifier of the user


3.2.43. GetAccountId

DWORD GetAccountId(DWORD userId);

This function returns the identifier of the account of a registered user or -1 if user is not found.
For unregistered users, account identifier is 0.
userId = identifier of the user


3.2.44. CreateAccount

void CreateAccount(LPCTSTR lpszUserName,LPCTSTR lpszIp,LPCTSTR lpzsPassword,LPCTSTR lpszReason,DWORD dwProfileId);

This function creates a new account.
lpszUserName = nickname or NULL if not used
lpszIp = a string specifying an IP, IP range, ISP or MAC address, or NULL if account is not restricted
lpszPassword = a string specifying the password used to protect the account or NULL if not used
lpszReason = reason for banning the user, a comment or NULL if this is not used
dwProfileId = identifier of the profile where this account will be created


3.2.45. DeleteAccount

BOOL DeleteAccount(DWORD dwAccountId);

This function deletes an existing account. The account will be permanently deleted.
dwAccountId = identifier of the account that will be deleted

On success, this function returns True.


3.2.46. MoveAccount

BOOL MoveAccount(DWORD dwAccountId,DWORD dwProfileId,DWORD dwContextId);

This function moves an account to another profile.
dwAccountId = identifier of the account that will be moved
dwProfileId = identifier of the destination profile
dwContextId = identifier of a bot created by plugin

On success, this function returns True.


3.2.47. SetProfile

BOOL SetProfile(DWORD dwProfileId,LPCTSTR lpszProfileName,LPPROFILEINFO profileInfo,LPCTSTR lpszRaw1,LPCTSTR lpszRaw2);

This function changes the information related to an existing profile.
dwProfileId = identifier of the profile that will be changed
lpszProfileName = pointer to a NULL terminated string containing the new profile name or NULL if this parameter is not used
profileInfo = pointer to a structure with profile information (see 3.3.4.)
lpszRaw1 = raw sent to user or NULL if this parameter is not used
lpszRaw2 = raw sent to everyone else or NULL if this parameter is not used

On success, this function returns True.


3.2.48. GetProfile

BOOL GetProfile(DWORD dwProfileId,LPCTSTR lpszProfileName,LPPROFILEINFO profileInfo,LPCTSTR lpszRaw1,LPCTSTR lpszRaw2);

This function copies required information from a profile
dwProfileId = identifier of the profile
lpszProfileName = pointer to a buffer that will receive profile name or NULL if not used
profileInfo = pointer to a buffer that will receive profileInfo structure or NULL if not used (see 3.3.4.)
lpszRaw1 = pointer to a buffer that will receive raw sent to user or NULL if not used
lpszRaw2 = pointer to a buffer that will receive raw sent to everyone else or NULL if not used

On success, this function returns True.


3.2.49. GetNextProfile

DWORD GetNextProfile(DWORD dwProfileId);

This function returns the profile ID that follows dwProfileId in registration data. Use a value of -1 to retrieve the first profile's ID.
dwProfileId = identifier of the profile

If all profiles were enumerated, this function returns -1.


3.2.50. SetAccount

BOOL SetAccount(DWORD dwAccountId,LPACCOUNTINFO accountInfo);

This function changes the information related to an existing account.
dwAccountId = identifier of the account that will be changed
accountInfo = pointer to a structure with account information (see 3.3.5.)

On success, this function returns True.


3.2.51. GetAccount

BOOL GetAccount(DWORD dwAccountId,LPACCOUNTINFO accountInfo);

This function copies required information from an existing account
dwAccountId = identifier of the account
accountInfo = pointer to a buffer that will receive accountInfo structure (see 3.3.5.)

On success, this function returns True.


3.2.52. GetNextAccount

DWORD GetNextAccount(DWORD dwAccountId,DWORD dwProfileId);

This function returns the account ID that follows dwAccountId in registration data belonging to the profile specified by dwProfileId. Use a value of -1 to retrieve the first account's ID.
dwAccountId = identifier of the account
dwProfileId = identifier of the profile

If all accounts were enumerated, this function returns -1.


3.2.53. AllocUserData

DWORD AllocUserData(void);

This function reserves one byte in all buffers allocated for users. Total number of bytes that can be reserved by all plugins in a buffer is 40.

On success, this function returns an index in user buffer. Use this index in calls to GetUserData / SetUserData. If the function fails it returns -1.


3.2.54. FreeUserData

BOOL FreeUserData(DWORD dwIndex);

This function removes reservation of a specific index for user structures that was reserved by this plugin using AllocUserData.
dwIndex = the index that will be unallocated

On success, this function returns True.


3.2.55. GetUserData

DWORD GetUserData(DWORD userId,DWORD dwIndex);

This function returns one byte reserved in a buffer of a connected user located at specified index. You need to reserve an index before using this function.
userId = identifier of a connected user
dwIndex = index in user's buffer

On failure, this function returns -1.


3.2.56. SetUserData

BOOL SetUserData(DWORD userId,DWORD dwIndex,BYTE bData);

This function changes one byte reserved in a buffer of a connected user located at specified index. You need to reserve an index before using this function.
userId = identifier of a connected user
dwIndex = index in user's buffer
bData = data that will be written at specified index

On failure, this function returns -1.


3.2.57. RegisterCommand

DWORD RegisterCommand(LPCTSTR lpszCommandName,LPFN functionAddr);

This function registers a new command. When a user will write that command in mainchat or as a private message to hub-security, hub will call the specified function.
lpszCommandName = pointer to a NULL terminated string specifying the new command's name
functionAddr = pointer to a function that will be called

On success, this function returns a command identifier that can be used as a parameter to UnregisterCommand to unregister the command. If function fails it returns -1.
Rights needed for the registered command and minimum access level are checked by hub and can be changed by hub owner.
The function that will be called can be defined as follows:

void onRegisteredCommand(DWORD dwCommandId,DWORD userId,LPVOID rights,LPVOID commandParameters,BOOL isPM);

dwCommandId = registered command's identifier
userId = user who wrote the command
rights = user's rights (pointer to a 8-bytes buffer)
commandParameters = pointer to a buffer with command's parameters, terminator = '|'
isPM = 1 if the user wrote the command as a PM to hub-security, 0 for mainchat


3.2.58. UnregisterCommand

BOOL UnregisterCommand(DWORD dwCommandId);

This function unregisters a command that was previously registered by this plugin using RegisterCommand.
dwCommandId = registered command's identifier

If function succeeds, it returns True.


3.2.59. RegisterHelpString

DWORD RegisterHelpString(LPCTSTR lpszLanguage,LPCTSTR lpszString,DWORD dwSectionId);

This function adds a new string in hub's help. Rights needed for the registered string to be shown and minimum access level are checked by hub and can be changed by hub owner.
lpszLanguage = a NULL terminated string with the 2-letter language identifier
lpszString = a string that will be added in help
dwSectionId = identifier of the help section that will have this new string, can be one of the following:
0 = Hub information
1 = Commands for messages
2 = Operator commands
3 = reserved
4 = Profile management
5 = DC++ commands
6 = Extra
7 = User defined, lpszString will start with a new section name separated by the actual string with a new line

On success, this function returns a help identifier that can be used as a parameter to UnregisterHelpString to unregister the string. If function fails it returns -1.


3.2.60. UnregisterHelpString

BOOL UnregisterHelpString(DWORD dwHelpId);

This function unregisters a string that was previously registered by this plugin using RegisterHelpString.
dwHelpId = registered string's identifier

If function succeeds, it returns True.


3.2.61. RegisterUserCommand

DWORD RegisterUserCommand(LPCTSTR lpszUserCommand);

This function adds a new string in user menus. Rights needed for the registered string to be shown and minimum access level are checked by hub and can be changed by hub owner.
lpszUserCommand = raw command that will be added (should start with $UserCommand)

On success, this function returns a user command identifier that can be used as a parameter to UnregisterUserCommand to unregister the string. If function fails it returns -1.


3.2.62. UnregisterUserCommand

BOOL UnregisterUserCommand(DWORD dwUserCommandId);

This function unregisters a string that was previously registered by this plugin using RegisterUserCommand.
dwUserCommandId = registered string's identifier

If function succeeds, it returns True.


3.2.63. RegisterChatFilter

DWORD RegisterChatFilter(LPCTSTR lpszFilterName,LPFN filterProc,LPCTSTR filterDescription);

This function register a new chat filter. Rights needed for the registered string to be shown and minimum access level are checked by hub and can be changed by hub owner. Chat filters can be changed using the !mode command.
lpszFilterName = name of the new chat mode
filterProc = pointer to a function that will be called to make the translation or chat filtering
filterDescription = a NULL terminated string specifying filter's description (this string will also be added in help at section 1 (commands for messages)

On success, this function returns a user filter identifier that can be used as a parameter to UnregisterChatFilter to unregister the filter. If function fails it returns -1.


3.2.64. UnregisterChatFilter

BOOL UnregisterChatFilter(DWORD dwFilterId);

This function unregisters a chat filter that was previously registered by this plugin using RegisterChatFilter.
dwFilterId = registered filter's identifier

If function succeeds, it returns True.
The function that will be called can be defined as follows:

void FilterMessage(DWORD dwUserId,DWORD dwFilterId,LPCTSTR sourceString,LPVOID destinationString,DWORD filteredMessages);

dwUserId = identifier of the user who wrote the message that will be filtered
dwFilterId = identifier of the registered filter
sourceString = the string that will be filtered, string terminator = '|'
destinationString = a buffer that will return the result of filtering
filteredMessages = number of filtered messages for this user since his filter identifier was changed


3.2.65. RegisterBot

DWORD RegisterBot(LPCTSTR lpszBotName,LPFN onPM);

This function creates a new bot. Rights needed for accessing the registered bot and minimum access level are checked by hub and can be changed by hub owner.
lpszBotName = nickname of the bot that will be added in nicklist or a MyINFO string
onPM = pointer to a function that is called if a user who has access to bot sends a private message to it.

On success, this function returns a bot identifier that can be used as a parameter to UnregisterBot to unregister the bot. If function fails it returns -1.

void onPM(DWORD dwBotId,DWORD userId,LPVOID lpMessage,int bufferSize);

dwBotId = identifier of a bot registered by this plugin
userId = identifier of the user who sent the private message
lpMessage = a string containing the message, not including the "$To: %[bot] From %[nick] $", terminated by '|'
bufferSize = number of bytes



3.2.66. UnregisterBot

BOOL UnregisterBot(DWORD dwBotId);

This function unregisters and removes from nicklist a bot that was created by this plugin using RegisterBot.
dwBotId = registered string's identifier

If function succeeds, it returns True.


3.2.67. CallHubCommand

BOOL CallHubCommand(DWORD dwBotId,LPCTSTR lpszCommand);

This function calls a hub command in the context of a registered bot.
dwBotId = identifier of a bot registered using RegisterBot
lpszCommand = pointer to a string with the command and its parameters

If function succeeds, it returns True.


3.2.68. ProcessUserTraffic

BOOL ProcessUserTraffic(DWORD userId,LPFN _onData,DWORD dwReserved,DWORD dwFlags);

This function determines the hub to call the plugin for all incoming data from a user, and prevents further processing of that data.
userId = identifier of a connected user
_onData = pointer to the funtion that will be called on incoming data
dwReserved = reserved for next versions
dwFlags = flags
bit 0 = disconnect the user when plugin exits

If function succeeds, it returns True.
The function that will be called can be defined as follows:

void _onData(DWORD userId,LPVOID lpBuffer,int bufferSize);

userId = identifier of the connected user that sends data
lpBuffer = buffer with data
bufferSize = number of received bytes


3.2.69. DisableOutputToUser

BOOL DisableOutputToUser(DWORD userId,LPFN filterTraffic,BOOL disable);

This function enables/disables sending data to a connected user.
dwUserId = identifier of a connected user
filterTraffic = pointer to a function that will be called by hub when it needs to send data to user, this parameter is ignored if disable=true
disable = 1 if hub will no longer send data to this user, 0 to enable sending to that user

If function succeeds, it returns True.

BOOL filterTraffic(LPSTR lpBuffer,DWORD numBytes);

lpBuffer = address of buffer that should be sent
numBytes = number of bytes

If this function returns false, the data will not be sent.


3.2.70. AcceptUser

void AcceptUser(SOCKET s,DWORD userIp);

This function registers in hub a connection accepted by the plugin.
s = a socket with a connection accepted by the plugin
userIp = IP of the connected user

If function fails, the socket is closed.


3.2.71. DisconnectUser

BOOL DisconnectUser(DWORD dwUserId);

This function disconnects a user from the hub.
dwUserId = identifier of a connected user

If function succeeds, it returns True.


3.2.72. GetTopic

DWORD GetTopic(LPVOID topic,DWORD maxTopic);

This function returns current topic.
topic = a buffer that receives current topic
maxTopic = maximum characters to copy, including NULL terminator

The function returns the number of characters copied.


3.2.73. SetTopic

void SetTopic(LPCTSTR lpszNewTopic);

This function changes current topic.
lpszNewTopic = a NULL terminated string with the new topic


3.2.74. GetMOTD

DWORD GetMOTD(LPVOID motd,DWORD maxMotd);

This function returns current Message Of The Day.
motd = a buffer that receives current MOTD
maxMotd = maximum characters to copy, including NULL terminator

The function returns the number of characters copied.


3.2.75. SetMOTD

void SetMOTD(LPCTSTR lpszNewMotd);

This function changes current MOTD.
lpszNewMotd = a NULL terminated string with the new MOTD


3.2.76. GetHubUptime

DWORD GetHubUptime(void);

This function returns the number of seconds since hub was started or restarted.


3.2.77. GetHublistEntry

DWORD GetHublistEntry(DWORD iIndex,LPVOID buffer,DWORD bufferSize);

This function returns an entry in hub's hublist.
iIndex = index of the entry that will be copied
buffer = a buffer that receives the entry information
bufferSize = maximum number of bytes to copy

The function returns the number of characters copied.


3.2.78. RegisterBotEx

DWORD RegisterBot(LPCTSTR lpszBotName,LPFN onPM,DWORD rights1,DWORD rights2,DWORD access);

This function creates a new bot. Rights needed for accessing the registered bot and minimum access level are checked by hub and can be changed by hub owner.
lpszBotName = nickname of the bot that will be added in nicklist or a MyINFO string
onPM = pointer to a function that is called if a user who has access to bot sends a private message to it.
rights1 = first dword that contains rights
rights2 = second dword that contains rights
access = access level

On success, this function returns a bot identifier that can be used as a parameter to UnregisterBot to unregister the bot. If function fails it returns -1.

void onPM(DWORD dwBotId,DWORD userId,LPVOID lpMessage,int bufferSize)

dwBotId = identifier of a bot registered by this plugin
userId = identifier of the user who sent the private message
lpMessage = a string containing the message, not including the "$To: %[bot] From %[nick] $", terminated by '|'
bufferSize = number of bytes


3.2.79. SetBan

BOOL SetBan(DWORD banType,DWORD dwIP1,DWORD dwIP2,lpstr lpszNick,lpstr lpszReason,DWORD dwTime);

This function bans a user, account, IP, IP range, ISP, MAC address or a nick.
banType = level of the ban that will be set (0 = _ban0_, 1 = _ban1_, 2 = _ban2)
dwIP1 = IP address that will be banned, use NULL if it's not an IP ban
dwIP2 = second IP address from a range, use NULL if it's not a range ban
lpszNick = optional pointer to a NULL-terminated string specifying a nick or a string that contains an entity that will be banned (can be the nickname of a connected user, an account, IP, IP range, MAC or ISP)
lpszReason = optional pointer to a string specifying a reason that will be used
dwTime = time in seconds until ban expires, use 0 for permanent ban

If function succeeds, it returns True.


3.2.80. FirewallGetVersion

int FirewallGetVersion(void);

This function returns the version number of installed firewall driver. Low byte will be major version number.
If the firewall is not loaded this function returns -1.


3.2.81. FirewallGetAboutString

int FirewallGetAboutString(lpvoid lpBuffer,int bufferSize);

lpBuffer = the buffer that receives copyright information
bufferSize = size of buffer

The function returns the number of bytes written.
If the firewall is not loaded this function returns -1.


3.2.82. FirewallEnable

int FirewallEnable(void);

If the firewall is loaded but disabled, use this function to enable it. This function affects all started hubs that use the firewall.

If the function succeeds the return value is 1.
If the firewall is not loaded this function returns -1.


3.2.83. FirewallDisable

int FirewallDisable(void);

This function disables the firewall in all started hubs.

If the function succeeds the return value is 1.
If the firewall is not loaded this function returns -1.


3.2.84. FirewallBanRange

int FirewallBanRange(lpvoid lpRange);

This function will ban an IP range, all incoming traffic from that range will be filtered by firewall.

lpRange = pointer to a buffer that contains the IP range as 2 dwords (starting IP and ending IP)

If the function succeeds the return value is 1.
If the firewall is not loaded this function returns -1.


3.2.85. FirewallUnbanRange

int FirewallUnbanRange(lpvoid lpRange);

This function removes a range ban from firewall data. Range information must have the exact range that will be unbanned.

lpRange = pointer to a buffer that contains the IP range information (starting and ending IPs)

If the firewall is loaded this function returns 1.
If the firewall is not loaded this function returns -1.


3.2.86. FirewallLookupRange

WORD FirewallLookupRange(lpvoid lpRange);

This function returns a WORD value containing the status of an IP range as following:
bit 0 = the exact range was found in banlist
bit 1 = the range is intersected with a banned range (only a part of the range is banned)
bit 2 = the range is included in a bigger range that is banned
bit 3 = the range includes a banned range in it

lpRange = pointer to a buffer that has IP range information

If no IP from that range is filtered by firewall, the return value is 0.
If the firewall is not loaded this function returns -1. Requires DDoSflt 1.03.


3.2.87. FirewallGetSettings

int FirewallGetSettings(lpvoid lpSettings);

This function returns current firewall's configuration used by all started hubs.

lpSettings = pointer to a firewallSettingsInfo structure that will receive firewall's settings

If the firewall is loaded this function returns 1.
If the firewall is not loaded this function returns -1. Requires DDoSflt 1.03.


3.2.88. FirewallChangeSettings

int FirewallChangeSettings(lpvoid lpSettings);

This function changes firewall's configuration used by all started hubs.

lpSettings = pointer to a firewallSettingsInfo structure that has the new settings

If the firewall is loaded this function returns 1.
If the firewall is not loaded this function returns -1.


3.2.89. FirewallRegisterHubPort

int FirewallRegisterHubPort(DWORD portInfo);

This function registers a port used by hub or changes flood check settings associated with a port.

portInfo = a DWORD value that contains port information - low word = port number, high word = maximum number of SYN packets allowed

If the firewall is loaded this function returns 1.
If the firewall is not loaded this function returns -1.


3.2.90. FirewallUnregisterHubPort

int FirewallUnregisterHubPort(WORD portNumber);

This function unregisters a port used by hub.

portNumber = number of port that will be removed.

If the firewall is loaded this function returns 1.
If the firewall is not loaded this function returns -1.


3.2.91. FirewallGetStats

int FirewallGetStats(lpvoid firewallStats);

This function returns firewall's statistics related to detected flood attempts.

firewallStats = pointer to a firewallStatisticsInfo structure that will receive firewall's statistics.

If the firewall is loaded this function returns 1.
If the firewall is not loaded this function returns -1.


3.2.92. FirewallGetPortStats

int FirewallGetPortStats(int portNumber,lpvoid portStats);

This function returns statistics for a registered port.

portNumber = number of a registered port
portStats = pointer to a variable that will receive average TCP/SYN / second sent to specified port.

If the firewall is loaded this function returns 1.
If the firewall is not loaded this function returns -1.


3.2.93. DDoSFilterIP

int DDoSFilterIP(DWORD dwIP);

This function adds an IP to DDoS filter, this will affect all started hubs.

dwIP = IP that will be added to filter.

If the firewall is loaded this function returns 1.
If the firewall is not loaded this function returns -1.


3.2.94. DDoSDeleteFilter

int DDoSDeleteFilter(void);

This function deletes all IPs from DDoS filter, this will affect all started hubs.

If the firewall is loaded this function returns 1.
If the firewall is not loaded this function returns -1.


3.2.95. DDoSCountFilteredIPs

int DDoSCountFilteredIPs(void);

This function returns the number of IPs that are currently in DDoS filter.

If the firewall is not loaded this function returns -1. Requires DDoSflt 1.03.


3.2.96. DDoSGetFilter

int DDoSFilterIP(lpvoid lpFilter,int nIPs);

This function returns specified number of IPs from DDoS filter.

lpFilter = pointer to a buffer that will receive the IP list as dword values.
nIPs = number of IPs that will be copied

If this function succeeds the return value is number of IPs copied to buffer.
If the firewall is not loaded this function returns -1. Requires DDoSflt 1.03.


3.2.97. HTTPSendTo

BOOL HTTPSendTo(DWORD userId,lpvoid lpBuffer,int bufferSize,lpstr lpszCookies);

This function formats HTTP headers and sends data from buffer to a user through HTTP.

userId = identifier of the user
lpBuffer = buffer with data that needs to be sent
bufferSize = size of buffer
lpszCookies = optional pointer to the new cookies that will be set. If no cookies need to be changed this may be null. If more cookies are needed to be sent, separate them by a new line.

If this function succeeds the return value is 1.


3.2.98. HTTPSendHeaders

BOOL HTTPSendHeaders(DWORD userId,lpvoid lpBuffer,int bufferSize,lpstr lpszCookies);

This function formats HTTP headers and sends them to a user through HTTP.

userId = identifier of the user
lpBuffer = buffer with data
bufferSize = size of buffer
lpszCookies = optional pointer to the new cookies that will be set. If no cookies need to be changed this may be null. If more cookies are needed to be sent, separate them by a new line.

If this function succeeds the return value is 1.


3.2.99. HTTPRedirect

BOOL HTTPSendTo(DWORD userId,LPCTSTR lpszLocation);

This function will redirect a user to another location.

userId = identifier of the user
lpszLocation = the URL where the user will be redirected to

If this function succeeds the return value is 1.


3.2.100. GetHubWindow

HWND GetHubWindow(void);

This function returns hub's window handle. If the hub didn't create its window in the moment of this call, this function returns NULL.


3.2.101. RegisterPluginWindow

BOOL RegisterPluginWindow(HWND hWnd,LPCTSTR lpszName);

This function is a replacement for GetConfig for plugins that need to display statistics in real time. The window must be a child window and after being registered using this function it will have hub's window as parent. For this function to succeed, call GetHubWindow to make sure that the hub created its own window. A plugin can register a maximum of 4 child windows. A plugin can use a callback from HeXHub's main dialog procedure with SendMessage(GetHubWindow(),WM_USER+500,1,lpCallBackFn);.
hWnd = the handle of the child window that will be registered
lpszName = pointer to a NULL-terminated string specifying a name for this window that will be shown in hub's GUI.


3.2.102. UnregisterPluginWindow

BOOL UnregisterPluginWindow(HWND hWnd);

This function unregisters a window that was registered using RegisterPluginWindow. This function does not destroy plugin's window.
hWnd = the handle of the window that was previously registered using RegisterPluginWindow

*3.2.103. GetHubInfo

* int GetHubInfo(UINT infoIdx,LPVOID lpBuffer,int nBufferSize);

* This function returns a hub configuration setting.
* infoIdx = a parameter identifier, which can be one of the following:
* 1 = hub name, maximum possible length: 512 bytes (HeXHub 5.02b)
* 2 = hub description, maximum possible length: 1000 bytes (HeXHub 5.02b)
* 3 = hub address, maximum possible length: 255 bytes (HeXHub 5.02b)
* 4 = hub owner's e-mail address, maximum possible length: 255 bytes (HeXHub 5.02b)
* 5 = path to hub icon, maximum possible length: 255 bytes (HeXHub 5.02b)
* 6 = hub's topic, maximum possible length: 2000 bytes (HeXHub 5.02b)
* 100 = forbidden words searched in search requests, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 101 = forbidden words searched in search results, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 102 = forbidden words searched in descriptions, e-mails and share sizes, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 103 = forbidden words searched in mainchat messages, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 104 = forbidden words searched in !topic and !motd, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 105 = forbidden words searched in private messages, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 106 = automatic responses of Hub-Security, maximum possible length: 32768 bytes (HeXHub 5.02b)
* lpBuffer = a buffer that receives requested data
* nBufferSize = maximum number of bytes that can be written to buffer

* The function returns the number of bytes written to buffer if infoIdx has a supported value, else it returns -1.

*3.2.104. SetHubInfo

* int SetHubInfo(UINT infoIdx,LPVOID lpBuffer);

* This function changes a hub configuration setting.
* infoIdx = a parameter identifier, which can be one of the following:
* 1 = hub name, maximum possible length: 512 bytes (HeXHub 5.02b)
* 2 = hub description, maximum possible length: 1000 bytes (HeXHub 5.02b)
* 3 = hub address, maximum possible length: 255 bytes (HeXHub 5.02b)
* 4 = hub owner's e-mail address, maximum possible length: 255 bytes (HeXHub 5.02b)
* 5 = path to hub icon, maximum possible length: 255 bytes (HeXHub 5.02b)
* 6 = hub's topic, maximum possible length: 2000 bytes (HeXHub 5.02b)
* 100 = forbidden words searched in search requests, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 101 = forbidden words searched in search results, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 102 = forbidden words searched in descriptions, e-mails and share sizes, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 103 = forbidden words searched in mainchat messages, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 104 = forbidden words searched in !topic and !motd, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 105 = forbidden words searched in private messages, maximum possible length: 32768 bytes (HeXHub 5.02b)
* 106 = automatic responses of Hub-Security, maximum possible length: 32768 bytes (HeXHub 5.02b)
* lpBuffer = a buffer that contains hub configuration data

* The function returns the number of bytes written or -1 if infoIdx has a value that is not supported.



3.3. Structure definitions

3.3.1. userFloodInfo

typedef struct _userFloodInfo{
DWORD lasttick; //number of seconds since hub was started
WORD flcnt1; //command counter, current user
WORD flcnt2; //command counter, all users
BYTE flag1; //command flags
} userFloodInfo;

3.3.2. floodDefInfo

typedef struct _floodDefInfo{
LPSTR lpszCmdName; //command name
LPFN cmdproc; //address of procedure that is called when specified command is received
DWORD floodFlags; //flags used by flood check procedures
//bit 0
//bit 1
//bit 2 => bits 0,1,2 are used as follows:
// 210
// 000 = /session
// 001 = /second
// 010 = /minute
// 011 = /hour
// 100 = /day
//bit 3
//bit 4
//bit 5 => bits 3,4,5 are used as follows:
// 543
// 000 = /session
// 001 = /second
// 010 = /minute
// 011 = /hour
// 100 = /day
//bit 8 => keep only the last of a command chain
//bit 9 => restriction enabled: "allow only ... from one"
//bit 10 => restriction enabled: "allow only ... from all"
//bit 11 => reserved
//bit 12 => if flood is detected, user is delayed
//bit 13 => if flood is detected, command is ignored
//bit 14 => if flood is detected, a notification message will be sent
//bit 15 => if flood is detected, user will be disconnected
//bit 16 => do Not combine messages
WORD flcnt1; //maximum allowed from one user
WORD flcnt2; //maximum allowed from all users
DWORD counter; //total number of commands received from all users (for !stats command)
DWORD cmdFlags; //flags related to specified command
DWORD cmdParam1; //parameters specific to this command
DWORD cmdParam2; //parameters specific to this command
DWORD lastTick; //number of seconds since hub was started
WORD _flcnt1; //command counter, all users
WORD _flcnt2; //number of times when flood was detected from all users
} floodDefInfo;

3.3.3. ipInfo

typedef struct _ipInfo{
DWORD lastIp; //IP number
WORD timer1;
WORD timer2;
WORD timer3;
WORD timer4;
WORD timer5; //timers used to check for reconnect flood
BYTE fcount; //number of reconnects
BYTE flags1; //flags
//bit 0 => reserved
//bit 1 => reserved
//bit 2 => used by DDoS filter
//bit 3 => IP was checked for public proxy
//bit 4 => IP is a public proxy
//bit 5 => from this IP a user was disconnected because of incorrect settings for active mode
//bit 6 => this IP belongs to a faker and a notification message was sent
//bit 7 => reserved
DWORD lastconn; //last connection time in seconds relative to hub startup
DWORD tc_save; //reserved
BYTE langtmp; //language index in language table
BYTE invpasvd; //number of invalid passwords sent
BYTE timeskicked; //number of kicks
BYTE modetmp; //last chat filter's index (used by older versions)
BYTE country; //country name index
BYTE flagextra; //flags
//bit 0 => country ID was detected
//bit 1 => user was banned for forbidden files in share, share size must change
BYTE share_check; //checksum for share size
BYTE macaddr[6]; //MAC address
BYTE reserved[3]; //reserved
} ipInfo;

3.3.4. profileInfo

typedef struct _profileInfo{
BYTE rights[8]; //rights
DWORD minAccess; //minimum access
DWORD maxAccess; //maximum access
DWORD accessIncrease; //increment
DWORD availability; //availability in hours (0 = permanent)
} profileInfo;

3.3.5. accountInfo

typedef struct _accountInfo{
DWORD reserved1; //reserved
CHAR name[40]; //user name
WORD profileId; //profile identifier
WORD profileReset; //identifier of the profile it resets to
DWORD userId; //user identifier
BYTE rights[8]; //rights
DWORD access; //access level
DWORD maxAccess; //maximum access for current profile
DWORD accessTime; //timer increment
DWORD availability; //account availability
DWORD maxClones; //maximum clones allowed (if the account is for an IP)
CHAR language[2]; //language identifier
WORD mode; //last chat filter used
CHAR password[40]; //password
BYTE ipInformation; //1 = IP/IP range, 2 = ISP, 3 = MAC
DWORD IP1; //first IP in range
DWORD IP2; //last IP in range
CHAR ipstr[40]; //string containing IP, ISP or MAC (as ipInformation specifies)
DWORD reserved2; //reserved
CHAR creator[40]; //nickname of the admin who created this account
BYTE reserved[8]; //reserved, date+time
CHAR modifier[40]; //nickname of the last admin who modified this account
BYTE reserved[8]; //reserved, date+time
BYTE reserved[50]; //reserved
CHAR reason[220]; //reason or comment
BYTE reserved[62]; //reserved
} accountInfo;

3.3.6. firewallSettingsInfo

typedef struct _firewallSettingsInfo{
WORD pcapFlags; //flags used by WinPCap procedures, bit 0 = WinPCap enabled, bit 1 = adapters were detected
WORD pcapAdapters; //flags used by WinPCap procedures to enable / disable adapters (bit 0 = first adapter, bit 1 = second adapter, etc)
DWORD pcapTimeout; //timeout used by WinPCap procedures for capturing packets
BYTE maxSyn; //maximum number of TCP/SYN packets / second allowed from same IP
BYTE maxUdp; //maximum number of UDP packets / second allowed from same IP
BYTE maxIcmp; //maximum number of ICMP packets / second allowed from same IP
BYTE firewallFlags; //flags used by firewall
// bit 0 => firewall is registered
// bit 1 => firewall is loaded
// bit 2 => SYN flood check on hub's ports is enabled
// bit 3 => SYN flood check on ports not used by hub is enabled
// bit 4 => incoming ICMP traffic is blocked
// bit 5 => TCP/RST packets are not sent on connection resets
// bit 6 => if flood is detected, a _ban0_ is added for source IP
// bit 7 => if flood is detected, a notification message is sent in opchat
int hubPortSyn; //maximum number of SYN packets allowed to be sent to a port opened by hub
int otherPortsSyn; //maximum number of SYN packets allowed to be sent to all other ports that are not used by hub
} firewallSettingsInfo;

3.3.7. firewallStatisticsInfo

typedef struct _firewallStatisticsInfo{
syn_str synFlood; //statistics for SYN packets
syn_str udpFlood; //statistics for UDP packets
syn_str icmpFlood; //statistics for ICMP packets
long ddosSyn; //filtered SYN packets sent from IPs found in DDoS filter
long banSyn; //filtered SYN packets sent from banned IPs
long fltPort; //filtered SYN packets sent to all registered ports if flood was detected
DWORD reserved; //pointer to last syn_str structure that was written
} firewallStatisticsInfo;

3.3.8. syn_str

typedef struct _syn_str{
BYTE syn_idx; //index of next syn_info structure that will be used
BYTE isFlood; //detected flood type, 2 = portscan, 3 = SYN flood, 4 = UDP flood, 5 = ICMP flood
DWORD lastIP; //last IP that was detected as flooding
sin_info sInfo[20]; //information about last sent packets
} syn_str;

3.3.8. syn_info

typedef struct _syn_info{
long lastCount; //number of seconds since firewall was started when packet was sent
DWORD sourceIP; //source IP
DWORD destinationIP; //destination IP
DWORD lastPort; //destination port
WORD isflood; //flood indicator, 1 = flood is detected
WORD reserved; //reserved
} syn_info;

Комментарии

There are no comments for this page, you can write one here.