commit - 999c11ad49ea1e9c2615e4668f23aae483e549dc
commit + 0ad0fe207ab1705a2b042e7f47f1e0d8ce46e2a9
blob - d10775a88fad4a39ecb363dc7b6c433b5e497306
blob + 37b168ff8d5dac07cb835b86eb37b366da6fcbe3
--- src/ngircd/client.c
+++ src/ngircd/client.c
#include "hash.h"
#include "irc-write.h"
#include "log.h"
+#include "match.h"
#include "messages.h"
#include <exp.h>
} /* Client_ModeDel */
+/**
+ * Search CLIENT structure of a given nick name.
+ *
+ * @return Pointer to CLIENT structure or NULL if not found.
+ */
GLOBAL CLIENT *
Client_Search( const char *Nick )
{
- /* return Client-Structure that has the corresponding Nick.
- * If none is found, return NULL.
- */
-
char search_id[CLIENT_ID_LEN], *ptr;
CLIENT *c = NULL;
UINT32 search_hash;
c = (CLIENT *)c->next;
}
return NULL;
-} /* Client_Search */
+}
+
+
+/**
+ * Serach first CLIENT structure matching a given mask of a server.
+ *
+ * The order of servers is arbitrary, but this function makes sure that the
+ * local server is always returned if the mask matches it.
+ *
+ * @return Pointer to CLIENT structure or NULL if no server could be found.
+ */
+GLOBAL CLIENT *
+Client_SearchServer(const char *Mask)
+{
+ CLIENT *c;
+ assert(Mask != NULL);
+ /* First check if mask matches the local server */
+ if (MatchCaseInsensitive(Mask, Client_ID(Client_ThisServer())))
+ return Client_ThisServer();
+
+ c = My_Clients;
+ while (c) {
+ if (Client_Type(c) == CLIENT_SERVER) {
+ /* This is a server: check if Mask matches */
+ if (MatchCaseInsensitive(Mask, c->id))
+ return c;
+ }
+ c = (CLIENT *)c->next;
+ }
+ return NULL;
+}
+
+
/**
* Get client structure ("introducer") identfied by a server token.
* @return CLIENT structure or NULL if none could be found.
blob - ebbd06cba05b0239fd5f42d6c4e8ce4fee706a79
blob + c248d1ba39756a72a8d7065f6cf1d46349fccdae
--- src/ngircd/client.h
+++ src/ngircd/client.h
GLOBAL CLIENT *Client_GetFromToken PARAMS(( CLIENT *Client, int Token ));
GLOBAL CLIENT *Client_Search PARAMS(( const char *ID ));
+GLOBAL CLIENT *Client_SearchServer PARAMS(( const char *ID ));
GLOBAL CLIENT *Client_First PARAMS(( void ));
GLOBAL CLIENT *Client_Next PARAMS(( CLIENT *c ));