about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--chat.c10
-rw-r--r--chat.h4
-rw-r--r--irc.c12
3 files changed, 18 insertions, 8 deletions
diff --git a/chat.c b/chat.c
index b966fd1..9325bb6 100644
--- a/chat.c
+++ b/chat.c
@@ -55,17 +55,19 @@ static char *prompt(const char *prompt) {
 int main(int argc, char *argv[]) {
 	char *host = NULL;
 	const char *port = "6697";
-	const char *webPass = NULL;
+	const char *pass = NULL;
+	const char *webirc = NULL;
 
 	int opt;
-	while (0 < (opt = getopt(argc, argv, "h:j:n:p:vw:"))) {
+	while (0 < (opt = getopt(argc, argv, "W:h:j:n:p:vw:"))) {
 		switch (opt) {
+			break; case 'W': webirc = optarg;
 			break; case 'h': host = strdup(optarg);
 			break; case 'j': chat.chan = strdup(optarg);
 			break; case 'n': chat.nick = strdup(optarg);
 			break; case 'p': port = optarg;
 			break; case 'v': chat.verbose = true;
-			break; case 'w': webPass = optarg;
+			break; case 'w': pass = optarg;
 			break; default:  return EX_USAGE;
 		}
 	}
@@ -82,7 +84,7 @@ int main(int argc, char *argv[]) {
 	uiLog(L"Traveling...");
 	uiDraw();
 
-	int sock = ircConnect(host, port, webPass);
+	int sock = ircConnect(host, port, pass, webirc);
 	free(host);
 
 	struct pollfd fds[2] = {
diff --git a/chat.h b/chat.h
index 3a84b6c..af13410 100644
--- a/chat.h
+++ b/chat.h
@@ -41,7 +41,9 @@ enum {
 	IRC_UNDERLINE = 037,
 };
 
-int ircConnect(const char *host, const char *port, const char *webPass);
+int ircConnect(
+	const char *host, const char *port, const char *pass, const char *webPass
+);
 void ircRead(void);
 void ircWrite(const char *ptr, size_t len);
 
diff --git a/irc.c b/irc.c
index b718b13..b9bef73 100644
--- a/irc.c
+++ b/irc.c
@@ -43,7 +43,9 @@ static void webirc(const char *pass) {
 	);
 }
 
-int ircConnect(const char *host, const char *port, const char *webPass) {
+int ircConnect(
+	const char *host, const char *port, const char *pass, const char *webPass
+) {
 	int error;
 
 	struct tls_config *config = tls_config_new();
@@ -80,8 +82,12 @@ int ircConnect(const char *host, const char *port, const char *webPass) {
 	if (error) err(EX_PROTOCOL, "tls_connect");
 
 	if (webPass) webirc(webPass);
-	ircFmt("NICK %s\r\n", chat.nick);
-	ircFmt("USER %s 0 * :%s\r\n", chat.user, chat.nick);
+	if (pass) ircFmt("PASS :%s\r\n", pass);
+	ircFmt(
+		"NICK %s\r\n"
+		"USER %s 0 * :%s\r\n",
+		chat.nick, chat.user, chat.nick
+	);
 
 	return sock;
 }