X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/e17ab35b5dbba3b55a377e8be87253ac62b57df6..12894c8888675e4627d0e16b850e73648b5f3dce:/src/s_serv.c diff --git a/src/s_serv.c b/src/s_serv.c index 10c0fab..315e18a 100644 --- a/src/s_serv.c +++ b/src/s_serv.c @@ -54,6 +54,7 @@ #include "msg.h" #include "reject.h" #include "sslproc.h" +#include "irc_dictionary.h" #ifndef INADDR_NONE #define INADDR_NONE ((unsigned int) 0xffffffff) @@ -469,6 +470,8 @@ burst_TS6(struct Client *client_p) char *t; int tlen, mlen; int cur_len = 0; + struct Metadata *md; + struct DictionaryIter iter; hclientinfo.client = hchaninfo.client = client_p; @@ -506,6 +509,10 @@ burst_TS6(struct Client *client_p) IsIPSpoof(target_p) ? "0" : target_p->sockhost, target_p->id, target_p->info); + if(!EmptyString(target_p->certfp)) + sendto_one(client_p, ":%s ENCAP * CERTFP :%s", + use_id(target_p), target_p->certfp); + if(!IsCapable(client_p, CAP_EUID)) { if(IsDynSpoof(target_p)) @@ -516,6 +523,12 @@ burst_TS6(struct Client *client_p) use_id(target_p), target_p->user->suser); } + DICTIONARY_FOREACH(md, &iter, target_p->user->metadata) + { + sendto_one(client_p, ":%s ENCAP * METADATA ADD %s %s :%s", + use_id(&me), use_id(target_p), md->name, md->value); + } + if(ConfigFileEntry.burst_away && !EmptyString(target_p->user->away)) sendto_one(client_p, ":%s AWAY :%s", use_id(target_p), @@ -543,8 +556,12 @@ burst_TS6(struct Client *client_p) msptr = uptr->data; tlen = strlen(use_id(msptr->client_p)) + 1; + if(is_admin(msptr)) + tlen++; if(is_chanop(msptr)) tlen++; + if(is_halfop(msptr)) + tlen++; if(is_voiced(msptr)) tlen++; @@ -570,6 +587,14 @@ burst_TS6(struct Client *client_p) } sendto_one(client_p, "%s", buf); + DICTIONARY_FOREACH(md, &iter, chptr->metadata) + { + /* don't bother bursting +J metadata */ + if(!(md->name[0] == 'K')) + sendto_one(client_p, ":%s ENCAP * METADATA ADD %s %s :%s", + use_id(&me), chptr->chname, md->name, md->value); + } + if(rb_dlink_list_length(&chptr->banlist) > 0) burst_modes_TS6(client_p, chptr, &chptr->banlist, 'b');