summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--catgirl.19
-rw-r--r--chat.c7
-rw-r--r--chat.h3
-rw-r--r--irc.c14
4 files changed, 30 insertions, 3 deletions
diff --git a/catgirl.1 b/catgirl.1
index 158466b..e9bb40e 100644
--- a/catgirl.1
+++ b/catgirl.1
@@ -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 .
diff --git a/chat.c b/chat.c
index 89579c0..5796085 100644
--- a/chat.c
+++ b/chat.c
@@ -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();
+ }
}
diff --git a/chat.h b/chat.h
index bb8929b..4dd4732 100644
--- a/chat.h
+++ b/chat.h
@@ -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 \
diff --git a/irc.c b/irc.c
index c1c0e7a..cf8aab7 100644
--- a/irc.c
+++ b/irc.c
@@ -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;
}