ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/hopm/trunk/src/irc.c
(Generate patch)

Comparing hopm/trunk/src/irc.c (file contents):
Revision 8578 by michael, Sun Sep 23 11:39:44 2018 UTC vs.
Revision 8579 by michael, Sun Oct 14 15:12:50 2018 UTC

# Line 81 | Line 81 | get_channel(const char *name)
81   {
82    node_t *node;
83  
84 <  LIST_FOREACH(node, IRCItem->channels->head)
84 >  LIST_FOREACH(node, IRCItem.channels.head)
85    {
86      struct ChannelConf *item = node->data;
87  
# Line 109 | Line 109 | m_perform(char *parv[], unsigned int par
109   {
110    node_t *node;
111  
112 <  log_printf("IRC -> Connected to %s/%d", IRCItem->server, IRCItem->port);
112 >  log_printf("IRC -> Connected to %s/%d", IRCItem.server, IRCItem.port);
113  
114    /* Identify to nickserv if needed */
115 <  if (!EmptyString(IRCItem->nickserv))
116 <    irc_send("%s", IRCItem->nickserv);
115 >  if (!EmptyString(IRCItem.nickserv))
116 >    irc_send("%s", IRCItem.nickserv);
117  
118    /* Oper */
119 <  irc_send("OPER %s", IRCItem->oper);
119 >  irc_send("OPER %s", IRCItem.oper);
120  
121    /* Set modes */
122 <  irc_send("MODE %s %s", IRCItem->nick, IRCItem->mode);
122 >  irc_send("MODE %s %s", IRCItem.nick, IRCItem.mode);
123  
124    /* Set Away */
125 <  if (!EmptyString(IRCItem->away))
126 <    irc_send("AWAY :%s", IRCItem->away);
125 >  if (!EmptyString(IRCItem.away))
126 >    irc_send("AWAY :%s", IRCItem.away);
127  
128    /* Perform */
129 <  LIST_FOREACH(node, IRCItem->performs->head)
129 >  LIST_FOREACH(node, IRCItem.performs.head)
130      irc_send("%s", node->data);
131  
132    /* Join all listed channels. */
133 <  LIST_FOREACH(node, IRCItem->channels->head)
133 >  LIST_FOREACH(node, IRCItem.channels.head)
134    {
135      const struct ChannelConf *channel = node->data;
136  
# Line 247 | Line 247 | m_privmsg(char *parv[], unsigned int par
247    int hit = strncasecmp(parv[3], "!all ", 5) == 0;
248    if (hit == 0)
249    {
250 <    size_t nick_len = strlen(IRCItem->nick);
250 >    size_t nick_len = strlen(IRCItem.nick);
251  
252 <    if (strncasecmp(parv[3], IRCItem->nick, nick_len) == 0)
252 >    if (strncasecmp(parv[3], IRCItem.nick, nick_len) == 0)
253        hit = *(parv[3] + nick_len) == ' ' ||
254              *(parv[3] + nick_len) == ',' ||
255              *(parv[3] + nick_len) == ':';
# Line 292 | Line 292 | m_notice(char *parv[], unsigned int parc
292    {
293      preg = xcalloc(sizeof(*preg));
294  
295 <    if ((errnum = regcomp(preg, IRCItem->connregex, REG_ICASE | REG_EXTENDED)))
295 >    if ((errnum = regcomp(preg, IRCItem.connregex, REG_ICASE | REG_EXTENDED)))
296      {
297        char errmsg[256];
298  
# Line 336 | Line 336 | m_notice(char *parv[], unsigned int parc
336      log_printf("IRC REGEX -> Parsed %s!%s@%s [%s] from connection notice.",
337                 user[0], user[1], user[2], user[3]);
338  
339 <  LIST_FOREACH(node, IRCItem->notices->head)
339 >  LIST_FOREACH(node, IRCItem.notices.head)
340      irc_send("NOTICE %s :%s", user[0], node->data);
341  
342    /* Pass this information off to scan.c */
# Line 468 | Line 468 | irc_init(void)
468    memset(&IRC_SVR, 0, sizeof(IRC_SVR));
469  
470    /* Resolve IRC host. */
471 <  if ((address = firedns_resolveip6(IRCItem->server)))
471 >  if ((address = firedns_resolveip6(IRCItem.server)))
472    {
473      struct sockaddr_in6 *in = (struct sockaddr_in6 *)&IRC_SVR;
474  
475      svr_addrlen = sizeof(*in);
476      IRC_SVR.ss_family = AF_INET6;
477 <    in->sin6_port = htons(IRCItem->port);
477 >    in->sin6_port = htons(IRCItem.port);
478      memcpy(&in->sin6_addr, address, sizeof(in->sin6_addr));
479    }
480 <  else if ((address = firedns_resolveip4(IRCItem->server)))
480 >  else if ((address = firedns_resolveip4(IRCItem.server)))
481    {
482      struct sockaddr_in *in = (struct sockaddr_in *)&IRC_SVR;
483  
484      svr_addrlen = sizeof(*in);
485      IRC_SVR.ss_family = AF_INET;
486 <    in->sin_port = htons(IRCItem->port);
486 >    in->sin_port = htons(IRCItem.port);
487      memcpy(&in->sin_addr, address, sizeof(in->sin_addr));
488    }
489    else
490    {
491 <    log_printf("IRC -> firedns_resolveip(\"%s\"): %s", IRCItem->server,
491 >    log_printf("IRC -> firedns_resolveip(\"%s\"): %s", IRCItem.server,
492                 firedns_strerror(firedns_errno));
493      exit(EXIT_FAILURE);
494    }
# Line 503 | Line 503 | irc_init(void)
503    }
504  
505    /* Bind */
506 <  if (!EmptyString(IRCItem->vhost))
506 >  if (!EmptyString(IRCItem.vhost))
507    {
508      struct addrinfo hints, *res;
509      int n;
# Line 514 | Line 514 | irc_init(void)
514      hints.ai_socktype = SOCK_STREAM;
515      hints.ai_flags = AI_NUMERICHOST;
516  
517 <    if ((n = getaddrinfo(IRCItem->vhost, NULL, &hints, &res)))
517 >    if ((n = getaddrinfo(IRCItem.vhost, NULL, &hints, &res)))
518      {
519 <      log_printf("IRC -> error binding to %s: %s", IRCItem->vhost, gai_strerror(n));
519 >      log_printf("IRC -> error binding to %s: %s", IRCItem.vhost, gai_strerror(n));
520        exit(EXIT_FAILURE);
521      }
522      else if (bind(IRC_FD, res->ai_addr, res->ai_addrlen))
523      {
524 <      log_printf("IRC -> error binding to %s: %s", IRCItem->vhost, strerror(errno));
524 >      log_printf("IRC -> error binding to %s: %s", IRCItem.vhost, strerror(errno));
525        exit(EXIT_FAILURE);
526      }
527  
# Line 544 | Line 544 | irc_reconnect(void)
544  
545    time(&present);
546  
547 <  /* Only try to reconnect every IRCItem->reconnectinterval seconds */
548 <  if ((present - IRC_LASTRECONNECT) < IRCItem->reconnectinterval)
547 >  /* Only try to reconnect every IRCItem.reconnectinterval seconds */
548 >  if ((present - IRC_LASTRECONNECT) < IRCItem.reconnectinterval)
549    {
550      /* Sleep to avoid excessive CPU */
551      sleep(1);
# Line 560 | Line 560 | irc_reconnect(void)
560      IRC_FD = -1;  /* Set IRC_FD -1 for reconnection on next irc_cycle(). */
561    }
562  
563 <  log_printf("IRC -> Connection to (%s) failed, reconnecting.", IRCItem->server);
563 >  log_printf("IRC -> Connection to (%s) failed, reconnecting.", IRCItem.server);
564   }
565  
566   /* irc_connect
# Line 578 | Line 578 | irc_connect(void)
578    if (connect(IRC_FD, (struct sockaddr *)&IRC_SVR, svr_addrlen) == -1)
579    {
580      log_printf("IRC -> connect(): error connecting to %s: %s",
581 <               IRCItem->server, strerror(errno));
581 >               IRCItem.server, strerror(errno));
582  
583      if (errno == EISCONN /* Already connected */ || errno == EALREADY /* Previous attempt not complete */)
584        return;
# Line 588 | Line 588 | irc_connect(void)
588      return;
589    }
590  
591 <  irc_send("NICK %s", IRCItem->nick);
591 >  irc_send("NICK %s", IRCItem.nick);
592  
593 <  if (!EmptyString(IRCItem->password))
594 <    irc_send("PASS %s", IRCItem->password);
593 >  if (!EmptyString(IRCItem.password))
594 >    irc_send("PASS %s", IRCItem.password);
595  
596    irc_send("USER %s %s %s :%s",
597 <           IRCItem->username,
598 <           IRCItem->username,
599 <           IRCItem->username,
600 <           IRCItem->realname);
597 >           IRCItem.username,
598 >           IRCItem.username,
599 >           IRCItem.username,
600 >           IRCItem.realname);
601    time(&IRC_LAST);
602   }
603  
# Line 667 | Line 667 | irc_parse(void)
667      parv[0] = IRC_RAW + 1;
668    else
669    {
670 <    parv[0] = IRCItem->server;
670 >    parv[0] = IRCItem.server;
671      parv[parc++] = IRC_RAW;
672    }
673  
# Line 778 | Line 778 | irc_cycle(void)
778    if (IRC_FD == -1)
779    {
780      /* Initialize negative cache. */
781 <    if (OptionsItem->negcache)
781 >    if (OptionsItem.negcache)
782        negcache_init();
783  
784      /* Resolve remote host. */
# Line 868 | Line 868 | irc_send_channels(const char *data, ...)
868    vsnprintf(buf, sizeof(buf), data, arglist);
869    va_end(arglist);
870  
871 <  LIST_FOREACH(node, IRCItem->channels->head)
871 >  LIST_FOREACH(node, IRCItem.channels.head)
872    {
873      const struct ChannelConf *chan = node->data;
874  
# Line 892 | Line 892 | irc_timer(void)
892  
893    delta = present - IRC_LAST;
894  
895 <  /* No data in IRCItem->readtimeout seconds */
896 <  if (delta >= IRCItem->readtimeout)
895 >  /* No data in IRCItem.readtimeout seconds */
896 >  if (delta >= IRCItem.readtimeout)
897    {
898      log_printf("IRC -> Timeout awaiting data from server.");
899      irc_reconnect();
# Line 901 | Line 901 | irc_timer(void)
901      /* Make sure we don't do this again for a while */
902      time(&IRC_LAST);
903    }
904 <  else if (delta >= IRCItem->readtimeout / 2)
904 >  else if (delta >= IRCItem.readtimeout / 2)
905    {
906      /*
907       * Generate some data so high ping times don't cause uneeded

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)