1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-07-08 21:43:12 +02:00

Module coders: introduce moddata_client_set_string() and moddata_client_get_string(). Will document later in ModData wiki page (which does not exist yet).

This commit is contained in:
Bram Matthys
2015-05-18 17:15:02 +02:00
parent 222c780d64
commit 7ad4b6db67
3 changed files with 50 additions and 16 deletions
+2
View File
@@ -648,6 +648,8 @@ extern void moddata_free_channel(aChannel *chptr);
extern void moddata_free_member(Member *m);
extern void moddata_free_membership(Membership *m);
ModDataInfo *findmoddata_byname(char *name, ModDataType type);
extern int moddata_client_set_string(aClient *acptr, char *varname, char *value);
extern char *moddata_client_get_string(aClient *acptr, char *varname);
/* Hook types */
#define HOOKTYPE_LOCAL_QUIT 1
+43
View File
@@ -380,3 +380,46 @@ aClient *acptr;
}
}
}
/** Set ModData for client (via variable name, string value) */
int moddata_client_set_string(aClient *acptr, char *varname, char *value)
{
ModDataInfo *md;
md = findmoddata_byname(varname, MODDATATYPE_CLIENT);
if (!md)
return 0;
if (value)
{
/* SET */
md->unserialize(value, &moddata_client(acptr, md));
}
else
{
/* UNSET */
md->free(&moddata_client(acptr, md));
memset(&moddata_client(acptr, md), 0, sizeof(ModData));
}
if (value)
sendto_server(NULL, 0, 0, ":%s MD %s %s %s :%s",
me.name, "client", acptr->name, md->name, value); /* set */
else
sendto_server(NULL, 0, 0, ":%s MD %s %s %s",
me.name, "client", acptr->name, md->name); /* unset */
}
/** Get ModData for client (via variable name) */
char *moddata_client_get_string(aClient *acptr, char *varname)
{
ModDataInfo *md;
md = findmoddata_byname(varname, MODDATATYPE_CLIENT);
if (!md)
return NULL;
return md->serialize(&moddata_client(acptr, md)); /* can be NULL */
}
+5 -16
View File
@@ -98,35 +98,24 @@ char *get_fingerprint_for_client(aClient *cptr)
return NULL;
}
void certfp_broadcast(aClient *acptr, char *fp)
{
/* Hmm.. we shouldn't have to do this ourselves.. */
sendto_server(NULL, 0, 0, ":%s MD %s %s %s :%s",
me.name, "client", acptr->name, "certfp", fp);
}
int certfp_connect(aClient *acptr)
{
if (IsSecure(acptr))
{
char *fp = get_fingerprint_for_client(acptr);
void *data = &moddata_client(acptr, certfp_md);
if (!fp)
return 0; /* wtf? */
moddata_client_set_string(acptr, "certfp", fp); /* set & broadcast */
sendnotice(acptr, "*** Your SSL fingerprint is %s", fp);
/* Set & broadcast */
certfp_unserialize(fp, data);
certfp_broadcast(acptr, fp);
}
return 0;
}
int certfp_whois(aClient *sptr, aClient *acptr)
{
char *fp;
void *data = &moddata_client(acptr, certfp_md); /* never NULL */
fp = certfp_serialize(data);
char *fp = moddata_client_get_string(acptr, "certfp");
if (fp)
sendto_one(sptr, WHOISCERTFP_STRING, me.name, sptr->name, acptr->name, fp);