diff options
author | Jakub Sławiński | 2006-02-05 15:14:03 +0100 |
---|---|---|
committer | Joshua Judson Rosen | 2014-07-17 21:15:02 +0200 |
commit | b457fec36399c1f7de093d5e92bb4fa453b79c86 (patch) | |
tree | 2084c9a78d40213015e6f10e3e9e01bc4c0c51f1 /src/server_eval.c | |
parent | Update copyright statements. (diff) | |
download | apf-b457fec36399c1f7de093d5e92bb4fa453b79c86.tar.gz |
v0.8
- Fixed: infinite loop after buffering message
- Fixed: corrupt packets after closing connections in the stopped state
- Fixed: bug in mapping user numbers between afclient and afserver
- Fixed: premature close of the service connection
- Fixed: invalid buffering when the connection is closing
- Added: Multiple tunnels in one afclient<->afserver connection
Diffstat (limited to 'src/server_eval.c')
-rw-r--r-- | src/server_eval.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/server_eval.c b/src/server_eval.c index ef31c8d..a676d3d 100644 --- a/src/server_eval.c +++ b/src/server_eval.c @@ -19,12 +19,24 @@ */ #include <config.h> +#include <assert.h> +#include <string.h> #include "server_eval.h" +/* + * Function name: eval_numofcon + * Description: Returns the real connection number on the afserver. + * Arguments: ptr - the server realm + * client - client number + * numofcon - the connection number on the afclient + * Returns: The real connection number on the afserver. + */ + int eval_numofcon(ServerRealm* ptr, int client, int numofcon) { + assert(ptr != NULL); if ((numofcon >= 0) && (numofcon < ConnectClient_get_limit(ServerRealm_get_clientsTable(ptr)[client]))) { numofcon = ConnectClient_get_users(ServerRealm_get_clientsTable(ptr)[client])[numofcon]; } @@ -34,13 +46,78 @@ eval_numofcon(ServerRealm* ptr, int client, int numofcon) return numofcon; } +/* + * Function name: eval_usernum + * Description: Returns the user number in the connected client on the afserver side. + * Arguments: ptr - the connected client + * usernum - the connection number on the afserver + * Returns: The user number in the connected client on the afserver side. + */ + int eval_usernum(ConnectClient* ptr, int usernum) { int i; + assert(ptr != NULL); for (i = 0; i < ConnectClient_get_limit(ptr); ++i) { if (ConnectClient_get_users(ptr)[i] == usernum) return i; } return -1; } + +/* + * Function name: eval_UsrCliPair + * Description: Returns how many UsrCli structures are connected with the current manage port. + * Arguments: table - the table of UsrCli structures + * index - the current index of the evaluation + * host - the name of the host + * serv - the name of the service (port) + * Returns: How many UsrCli structures are connected with the current manage port. + */ + +int +eval_UsrCliPair(UsrCli** table, int index, char* host, char* serv) +{ + int i; + int result = 0; + assert(table != NULL); + assert(index >= 0); + for (i = 0; i < index; ++i) { + + if (UsrCli_get_manageHostName(table[i])) { + if (host) { + if (strcmp(UsrCli_get_listenHostName(table[i]), host)) { + continue; + } + } + else { + continue; + } + } + else { + if (host) { + continue; + } + } + + if (UsrCli_get_managePortName(table[i])) { + if (serv) { + if (strcmp(UsrCli_get_managePortName(table[i]), serv)) { + continue; + } + } + else { + continue; + } + } + else { + if (serv) { + continue; + } + } + + result++; + } + return result; +} |