auth: enable soft reject of clients.

This doesn't cancel callbacks in progress. This is useful in cases where
you're not sure you want to reject a client yet.
This commit is contained in:
Elizabeth Myers 2016-03-10 11:30:09 -06:00
parent df32819e04
commit 91f870b39b
2 changed files with 10 additions and 9 deletions

View file

@ -83,7 +83,7 @@ void destroy_providers(void)
{ {
/* TBD - is this the right thing? /* TBD - is this the right thing?
* (NOTE - this error message is designed for morons) */ * (NOTE - this error message is designed for morons) */
reject_client(&auth_clients[i], 0, reject_client(&auth_clients[i], 0, true,
"IRC server reloading... try reconnecting in a few seconds"); "IRC server reloading... try reconnecting in a few seconds");
} }
} }
@ -138,8 +138,8 @@ void provider_done(struct auth_client *auth, provider_t id)
} }
} }
/* Reject a client, cancel outstanding providers if any */ /* Reject a client, cancel outstanding providers if any if hard set to true */
void reject_client(struct auth_client *auth, provider_t id, const char *reason) void reject_client(struct auth_client *auth, provider_t id, bool hard, const char *reason)
{ {
uint16_t cid = auth->cid; uint16_t cid = auth->cid;
char reject; char reject;
@ -165,11 +165,12 @@ void reject_client(struct auth_client *auth, provider_t id, const char *reason)
unset_provider(auth, id); unset_provider(auth, id);
if(auth->providers) if(hard && auth->providers)
{
cancel_providers(auth); cancel_providers(auth);
memset(&auth_clients[cid], 0, sizeof(struct auth_client)); memset(&auth_clients[cid], 0, sizeof(struct auth_client));
} }
}
/* Accept a client, cancel outstanding providers if any */ /* Accept a client, cancel outstanding providers if any */
void accept_client(struct auth_client *auth, provider_t id) void accept_client(struct auth_client *auth, provider_t id)

View file

@ -82,9 +82,9 @@ void init_providers(void);
void destroy_providers(void); void destroy_providers(void);
void cancel_providers(struct auth_client *auth); void cancel_providers(struct auth_client *auth);
void provider_done(struct auth_client *auth, provider_t provider); void provider_done(struct auth_client *auth, provider_t id);
void reject_client(struct auth_client *auth, provider_t provider, const char *reason); void accept_client(struct auth_client *auth, provider_t id);
void accept_client(struct auth_client *auth, provider_t provider); void reject_client(struct auth_client *auth, provider_t id, bool hard, const char *reason);
void notice_client(struct auth_client *auth, const char *notice); void notice_client(struct auth_client *auth, const char *notice);