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:
@@ -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
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user