diff options
| author | C. McEnroe | 2020-02-01 02:26:35 -0500 | 
|---|---|---|
| committer | C. McEnroe | 2020-02-01 02:26:35 -0500 | 
| commit | 2b3a8bfb9c022269307feed01419c903ba754508 (patch) | |
| tree | 67f588e8b1abe4563af08fa6ab92a528d74cdca0 | |
| parent | 856d40d1212ec835b092a8f275124d09a65ba59d (diff) | |
Add -v flag
| -rw-r--r-- | catgirl.1 | 9 | ||||
| -rw-r--r-- | chat.c | 7 | ||||
| -rw-r--r-- | chat.h | 3 | ||||
| -rw-r--r-- | irc.c | 14 | 
4 files changed, 30 insertions, 3 deletions
| @@ -8,7 +8,7 @@  .  .Sh SYNOPSIS  .Nm -.Op Fl e +.Op Fl ev  .Op Fl a Ar auth  .Op Fl c Ar cert  .Op Fl h Ar host @@ -88,6 +88,13 @@ Set username to  .Ar user .  The default username is the same as the nickname.  . +.It Fl v +Log raw IRC messages to the +.Sy <debug> +window +as well as standard error +if it is not a terminal. +.  .It Fl w Ar pass  Log in with the server password  .Ar pass . @@ -39,7 +39,7 @@ int main(int argc, char *argv[]) {  	const char *real = NULL;  	int opt; -	while (0 < (opt = getopt(argc, argv, "!a:c:eh:j:k:n:p:r:u:w:"))) { +	while (0 < (opt = getopt(argc, argv, "!a:c:eh:j:k:n:p:r:u:vw:"))) {  		switch (opt) {  			break; case '!': insecure = true;  			break; case 'a': sasl = true; self.plain = optarg; @@ -52,6 +52,7 @@ int main(int argc, char *argv[]) {  			break; case 'p': port = optarg;  			break; case 'r': real = optarg;  			break; case 'u': user = optarg; +			break; case 'v': self.debug = true;  			break; case 'w': pass = optarg;  		}  	} @@ -70,4 +71,8 @@ int main(int argc, char *argv[]) {  	ircFormat("CAP LS\r\n");  	ircFormat("NICK :%s\r\n", nick);  	ircFormat("USER %s 0 * :%s\r\n", user, real); + +	for (;;) { +		ircRecv(); +	}  } @@ -33,10 +33,11 @@ enum Cap {  };  extern struct Self { +	bool debug; +	const char *join;  	enum Cap caps;  	char *plain;  	char *nick; -	const char *join;  } self;  #define ENUM_TAG \ @@ -101,6 +101,18 @@ int ircConnect(const char *host, const char *port) {  	return sock;  } +static void debug(char dir, const char *line) { +	if (!self.debug) return; +	size_t len = strcspn(line, "\r\n"); +	/*uiFormat( +		Debug, Cold, NULL, "\3%02d%c%c\3 %.*s", +		Gray, dir, dir, (int)len, line +	);*/ +	if (!isatty(STDERR_FILENO)) { +		fprintf(stderr, "%c%c %.*s\n", dir, dir, (int)len, line); +	} +} +  void ircSend(const char *ptr, size_t len) {  	assert(client);  	while (len) { @@ -119,6 +131,7 @@ void ircFormat(const char *format, ...) {  	int len = vsnprintf(buf, sizeof(buf), format, ap);  	va_end(ap);  	assert((size_t)len < sizeof(buf)); +	debug('<', buf);  	ircSend(buf, len);  } @@ -196,6 +209,7 @@ void ircRecv(void) {  		crlf = memmem(line, &buf[len] - line, "\r\n", 2);  		if (!crlf) break;  		*crlf = '\0'; +		debug('>', line);  		handle(parse(line));  		line = crlf + 2;  	} | 
