diff options
-rw-r--r-- | bounce.c | 4 | ||||
-rw-r--r-- | bounce.h | 2 | ||||
-rw-r--r-- | pounce.1 | 14 | ||||
-rw-r--r-- | state.c | 2 |
4 files changed, 19 insertions, 3 deletions
diff --git a/bounce.c b/bounce.c index 1257b93..712b9c3 100644 --- a/bounce.c +++ b/bounce.c @@ -93,12 +93,14 @@ int main(int argc, char *argv[]) { const char *join = NULL; int opt; - while (0 < (opt = getopt(argc, argv, "C:H:K:P:W:a:h:j:n:p:r:u:vw:"))) { + while (0 < (opt = getopt(argc, argv, "C:H:K:NTP:W:a:h:j:n:p:r:u:vw:"))) { switch (opt) { break; case 'C': strlcpy(certPath, optarg, sizeof(certPath)); break; case 'H': localHost = optarg; break; case 'K': strlcpy(privPath, optarg, sizeof(privPath)); + break; case 'N': stateJoinNames = true; break; case 'P': localPort = optarg; + break; case 'T': stateJoinTopic = true; break; case 'W': clientPass = sensitive(optarg); break; case 'a': auth = sensitive(optarg); break; case 'h': host = optarg; diff --git a/bounce.h b/bounce.h index 69ba51d..4945931 100644 --- a/bounce.h +++ b/bounce.h @@ -87,6 +87,8 @@ void clientFormat(struct Client *client, const char *format, ...) size_t clientDiff(const struct Client *client); void clientConsume(struct Client *client); +bool stateJoinNames; +bool stateJoinTopic; bool stateReady(void); void stateParse(char *line); void stateSync(struct Client *client); diff --git a/pounce.1 b/pounce.1 index 72ee806..8c76f02 100644 --- a/pounce.1 +++ b/pounce.1 @@ -1,4 +1,4 @@ -.Dd October 25, 2019 +.Dd October 26, 2019 .Dt POUNCE 1 .Os . @@ -8,7 +8,7 @@ . .Sh SYNOPSIS .Nm -.Op Fl v +.Op Fl NTv .Op Fl C Ar cert .Op Fl H Ar host .Op Fl K Ar priv @@ -64,11 +64,21 @@ where is set by .Fl H . . +.It Fl N +Request +.Ql NAMES +for each channel when a client connects. +. .It Fl P Ar port Bind to local .Ar port . The default port is 6697. . +.It Fl T +Request +.Ql TOPIC +for each channel when a client connects. +. .It Fl W Ar pass Require the password .Ar pass diff --git a/state.c b/state.c index 8d45b2e..02eaf72 100644 --- a/state.c +++ b/state.c @@ -263,5 +263,7 @@ void stateSync(struct Client *client) { if (chan.len) assert(self.origin); for (size_t i = 0; i < chan.len; ++i) { clientFormat(client, ":%s JOIN %s\r\n", self.origin, chan.names[i]); + if (stateJoinTopic) serverFormat("TOPIC %s\r\n", chan.names[i]); + if (stateJoinNames) serverFormat("NAMES %s\r\n", chan.names[i]); } } |