diff options
| -rw-r--r-- | chat.c | 4 | ||||
| -rw-r--r-- | chat.h | 11 | ||||
| -rw-r--r-- | handle.c | 14 | 
3 files changed, 21 insertions, 8 deletions
@@ -80,6 +80,10 @@ int main(int argc, char *argv[]) {  	if (!user) user = nick;  	if (!real) real = nick; +	set(&self.network, host); +	set(&self.chanTypes, "#&"); +	set(&self.prefixes, "@+"); +  	ircConfig(insecure, cert, priv);  	uiInit(); @@ -65,12 +65,21 @@ enum Cap {  extern struct Self {  	bool debug; +	char *plain;  	const char *join;  	enum Cap caps; -	char *plain; +	char *network; +	char *chanTypes; +	char *prefixes;  	char *nick;  } self; +static inline void set(char **field, const char *value) { +	free(*field); +	*field = strdup(value); +	if (!*field) err(EX_OSERR, "strdup"); +} +  #define ENUM_TAG \  	X("time", TagTime) @@ -59,12 +59,6 @@ static const char *capList(enum Cap caps) {  	return buf;  } -static void set(char **field, const char *value) { -	free(*field); -	*field = strdup(value); -	if (!*field) err(EX_OSERR, "strdup"); -} -  static void require(struct Message *msg, bool origin, size_t len) {  	if (origin) {  		if (!msg->nick) errx(EX_PROTOCOL, "%s missing origin", msg->cmd); @@ -158,16 +152,22 @@ static void handleReplyWelcome(struct Message *msg) {  }  static void handleReplyISupport(struct Message *msg) { -	// TODO: Extract CHANTYPES and PREFIX for future use.  	for (size_t i = 1; i < ParamCap; ++i) {  		if (!msg->params[i]) break;  		char *key = strsep(&msg->params[i], "=");  		if (!msg->params[i]) continue;  		if (!strcmp(key, "NETWORK")) { +			set(&self.network, msg->params[i]);  			uiFormat(  				Network, Cold, tagTime(msg),  				"You arrive in %s", msg->params[i]  			); +		} else if (!strcmp(key, "CHANTYPES")) { +			set(&self.chanTypes, msg->params[i]); +		} else if (!strcmp(key, "PREFIX")) { +			strsep(&msg->params[i], ")"); +			if (!msg->params[i]) continue; +			set(&self.prefixes, msg->params[i]);  		}  	}  }  | 
