Add -v flag

master
C. McEnroe 2020-02-01 02:26:35 -05:00
parent 856d40d121
commit 2b3a8bfb9c
4 changed files with 30 additions and 3 deletions

View File

@ -8,7 +8,7 @@
. .
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl e .Op Fl ev
.Op Fl a Ar auth .Op Fl a Ar auth
.Op Fl c Ar cert .Op Fl c Ar cert
.Op Fl h Ar host .Op Fl h Ar host
@ -88,6 +88,13 @@ Set username to
.Ar user . .Ar user .
The default username is the same as the nickname. 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 .It Fl w Ar pass
Log in with the server password Log in with the server password
.Ar pass . .Ar pass .

7
chat.c
View File

@ -39,7 +39,7 @@ int main(int argc, char *argv[]) {
const char *real = NULL; const char *real = NULL;
int opt; 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) { switch (opt) {
break; case '!': insecure = true; break; case '!': insecure = true;
break; case 'a': sasl = true; self.plain = optarg; 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 'p': port = optarg;
break; case 'r': real = optarg; break; case 'r': real = optarg;
break; case 'u': user = optarg; break; case 'u': user = optarg;
break; case 'v': self.debug = true;
break; case 'w': pass = optarg; break; case 'w': pass = optarg;
} }
} }
@ -70,4 +71,8 @@ int main(int argc, char *argv[]) {
ircFormat("CAP LS\r\n"); ircFormat("CAP LS\r\n");
ircFormat("NICK :%s\r\n", nick); ircFormat("NICK :%s\r\n", nick);
ircFormat("USER %s 0 * :%s\r\n", user, real); ircFormat("USER %s 0 * :%s\r\n", user, real);
for (;;) {
ircRecv();
}
} }

3
chat.h
View File

@ -33,10 +33,11 @@ enum Cap {
}; };
extern struct Self { extern struct Self {
bool debug;
const char *join;
enum Cap caps; enum Cap caps;
char *plain; char *plain;
char *nick; char *nick;
const char *join;
} self; } self;
#define ENUM_TAG \ #define ENUM_TAG \

14
irc.c
View File

@ -101,6 +101,18 @@ int ircConnect(const char *host, const char *port) {
return sock; 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) { void ircSend(const char *ptr, size_t len) {
assert(client); assert(client);
while (len) { while (len) {
@ -119,6 +131,7 @@ void ircFormat(const char *format, ...) {
int len = vsnprintf(buf, sizeof(buf), format, ap); int len = vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap); va_end(ap);
assert((size_t)len < sizeof(buf)); assert((size_t)len < sizeof(buf));
debug('<', buf);
ircSend(buf, len); ircSend(buf, len);
} }
@ -196,6 +209,7 @@ void ircRecv(void) {
crlf = memmem(line, &buf[len] - line, "\r\n", 2); crlf = memmem(line, &buf[len] - line, "\r\n", 2);
if (!crlf) break; if (!crlf) break;
*crlf = '\0'; *crlf = '\0';
debug('>', line);
handle(parse(line)); handle(parse(line));
line = crlf + 2; line = crlf + 2;
} }