summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2022-04-27 14:54:50 +0200
committerAnton Luka Šijanec <anton@sijanec.eu>2022-04-27 14:54:50 +0200
commit0d2646b246def5144dee17963d165fb222b27d26 (patch)
tree21475f9850d31a83d65e5f6692daca28355ae5c5 /main.c
parentinitial commit (diff)
downloadircxmpp-0.0.1.tar
ircxmpp-0.0.1.tar.gz
ircxmpp-0.0.1.tar.bz2
ircxmpp-0.0.1.tar.lz
ircxmpp-0.0.1.tar.xz
ircxmpp-0.0.1.tar.zst
ircxmpp-0.0.1.zip
Diffstat (limited to 'main.c')
-rw-r--r--main.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/main.c b/main.c
index 4f3cbad..e38ec0a 100644
--- a/main.c
+++ b/main.c
@@ -101,7 +101,7 @@ void bridge_forward (const char * from, const char * msg, struct ircxmpp * ircxm
} else
bridge = *bridge_resp;
if (side == IRC) {
- irc_cmd_join(bridge->irc, ircxmpp->channel, NULL /* password */); /* da smo gotovo joinani */
+ irc_cmd_join(bridge->irc, ircxmpp->channel, ircxmpp->channel_password);
irc_run_once(bridge);
if (msg)
irc_cmd_msg(bridge->irc, ircxmpp->channel, msg);
@@ -244,13 +244,13 @@ void dump_event (irc_session_t * s, const char * e, const char * o, const char *
void event_connect (irc_session_t * s, const char * e, const char * o, const char ** p, unsigned c) {
dump_event(s, e, o, p, c);
struct bridge * bridge = (struct bridge *) irc_get_ctx(s);
- irc_cmd_join(s, bridge->ircxmpp->channel, NULL /* password */);
+ irc_cmd_join(s, bridge->ircxmpp->channel, bridge->ircxmpp->channel_password);
}
void event_connect_control (irc_session_t * s, const char * e, const char * o, const char ** p,
unsigned c) {
dump_event(s, e, o, p, c);
struct ircxmpp * ircxmpp = (struct ircxmpp *) irc_get_ctx(s);
- irc_cmd_join(s, ircxmpp->channel, NULL);
+ irc_cmd_join(s, ircxmpp->channel, ircxmpp->channel_password);
}
void event_privmsg (irc_session_t * s, const char * e, const char * o, const char ** p, unsigned c) {
dump_event(s, e, o, p, c); /* SAME FOR _control. do NOT use irc_get_ctx here!!! */
@@ -300,16 +300,25 @@ void event_join_control (irc_session_t * s, const char * e, const char * o, cons
void event_nick_control (irc_session_t * s, const char * e, const char * o, const char ** p,
unsigned c) {
dump_event(s, e, o, p, c); /* o je originalen nick, p[0] je nov nick */
+ if (!c)
+ return;
struct ircxmpp * ircxmpp = (struct ircxmpp *) irc_get_ctx(s);
struct bridge ** bridge = find_bridge(&ircxmpp->bridges, o /* indeed n!u@h */, IRC);
if (!bridge || !*bridge)
return;
free_bridge(bridge, "nick change from irc");
- bridge_forward(o, NULL, ircxmpp, XMPP); /* and now connect */
+ char buf[512];
+ snprintf(buf, 512, "%s%s", p[0], strchr(o, '!') ? strchr(o, '!')
+ : "neznan uporabnik@neznan strežnik");
+ bridge_forward(buf, NULL, ircxmpp, XMPP); /* and now connect */
}
void event_topic_control (irc_session_t * s, const char * e, const char * o, const char ** p,
unsigned c) {
dump_event(s, e, o, p, c); /* o je avtor, p[0] je kanal, p[1] je nova tema/zadeva */
+ struct ircxmpp * ircxmpp = (struct ircxmpp *) irc_get_ctx(s);
+ char buf[1024];
+ snprintf(buf, 1024, "/me je nastavil IRC temo na: %s", p[1]);
+ bridge_forward(o, buf, ircxmpp, XMPP);
} /* TODO */
void event_numeric (irc_session_t * s, unsigned int e, const char * o, const char ** p, unsigned c) {
char b[512];
@@ -494,21 +503,24 @@ int shouldexit = 0;
void signalhandler (int s) {
shouldexit += s+1; /* only for -Wunused-parameter */
}
-int main (int argc, char ** argv) {
+int main (void) {
srand(time(NULL));
struct ircxmpp ircxmpp;
memset(&ircxmpp, '\0', sizeof(ircxmpp));
xmpp_log_t *log;
- if (argc != 1+6) {
- fprintf(stderr, "Usage: ircxmpp <jid> <pass> <hostname> <port> <channel> <muc>\n");
+ if (!getenv("IX_JID") || !getenv("IX_PASS") || !getenv("IX_HOST") || !getenv("IX_PORT")
+ || !getenv("IX_CHANNEL") || !getenv("IX_MUC")) {
+ fprintf(stderr, "Usage: IX_JID=jid@xmpp.server IX_PASS=pass IX_HOST=irc.server "
+ "IX_PORT=6666 IX_CHANNEL=#channel IX_MUC=muc@xmpp.srv ircxmpp\n");
return 1;
}
- ircxmpp.jid = argv[1];
- ircxmpp.password = argv[2];
- ircxmpp.hostname = argv[3];
- ircxmpp.port = atoi(argv[4]);
- ircxmpp.channel = argv[5];
- ircxmpp.muc = argv[6];
+ ircxmpp.jid = getenv("IX_JID");
+ ircxmpp.password = getenv("IX_PASS");
+ ircxmpp.hostname = getenv("IX_HOST");
+ ircxmpp.port = atoi(getenv("IX_PORT"));
+ ircxmpp.channel = getenv("IX_CHANNEL");
+ ircxmpp.muc = getenv("IX_MUC");
+ ircxmpp.channel_password = getenv("IX_CHPASS");
xmpp_initialize();
log = xmpp_get_default_logger(XMPP_LEVEL_DEBUG);
init_irc_control(&ircxmpp);
@@ -574,7 +586,7 @@ cont:
}
struct timespec ts = {
.tv_sec = 0,
- .tv_nsec = 1e8 /* 0.1s per event loop */
+ .tv_nsec = getenv("IX_LOOPDELAY") ? atoi(getenv("IX_LOOPDELAY"))/1000 : 1e8
};
nanosleep(&ts, NULL);
}