static VALUE cie_mynick(void) { const char *mynick; mynick = get_user_nick(); return rb_str_new(mynick, strlen(mynick)); }
void setup_chat_banner(dccchat_t *chat) { char *tempstr; tempstr = mymalloc(maxtextlength); getuptime(tempstr, 0, gdata.startuptime, maxtextlength); writedccchat(chat, 0, "Welcome to %s\n", get_user_nick()); writedccchat(chat, 0, "iroffer-dinoex " VERSIONLONG "%s%s\n", gdata.hideos ? "" : " - ", gdata.hideos ? "" : gdata.osstring); writedccchat(chat, 0, " running %s\n", tempstr); writedccchat(chat, 0, " \n"); writedccchat(chat, 0, "Enter Your Password:\n"); mydelete(tempstr); }
void t_remind(transfer * const t) { gnetwork_t *backup; updatecontext(); backup = gnetwork; gnetwork = &(gdata.networks[t->net]); if (gnetwork->serverstatus == SERVERSTATUS_CONNECTED) { notice(t->nick,"** You have a DCC pending, Set your client to receive the transfer. " "Type \"/MSG %s XDCC CANCEL\" to abort the transfer. " "(%li seconds remaining until timeout)", get_user_nick(), (long)(t->con.lastcontact+180-gdata.curtime)); } if ( gdata.reminder_send_retry > t->reminded ) { t_start_dcc_send(t); } gnetwork = backup; t->reminded++; }
int setupdccchat(const char *nick, const char *hostmask, const char *line) { char *ip, *port; SIGNEDSOCK int addrlen; int retval; dccchat_t *chat; char *msg; updatecontext(); ip = getpart(line,7); port = getpart(line,8); if ( !ip || !port ) { mydelete(ip); mydelete(port); return 1; } /* support passive dcc */ if (strcmp(port, "0") == 0) { char *token; mydelete(ip); mydelete(port); if (gdata.passive_dcc_chat) { token = getpart(line, 9); setupdccchatout(nick, hostmask, token); mydelete(token); } else { notice(nick, "DCC passive Chat denied, use \"/MSG %s ADMIN password CHATME\" instead.", get_user_nick()); ioutput(OUT_S|OUT_L|OUT_D, COLOR_MAGENTA, "DCC CHAT attempt denied from %s (%s on %s)", nick, hostmask, gnetwork->name); } return 1; } chat = irlist_add(&gdata.dccchats, sizeof(dccchat_t)); chat->name = gnetwork->name; bzero((char *) &(chat->con.remote), sizeof(chat->con.remote)); chat->con.family = (strchr(ip, ':')) ? AF_INET6 : AF_INET; chat->con.clientsocket = socket(chat->con.family, SOCK_STREAM, 0); if (chat->con.clientsocket < 0) { outerror(OUTERROR_TYPE_WARN_LOUD,"Socket Error: %s", strerror(errno)); chat->con.clientsocket = FD_UNUSED; mydelete(ip); mydelete(port); return 1; } port[strlen(port)-1] = '\0'; if (chat->con.family == AF_INET) { addrlen = sizeof(struct sockaddr_in); chat->con.remote.sin.sin_family = AF_INET; chat->con.remote.sin.sin_port = htons(atoi(port)); chat->con.remote.sin.sin_addr.s_addr = htonl(atoul(ip)); } else { addrlen = sizeof(struct sockaddr_in6); chat->con.remote.sin6.sin6_family = AF_INET6; chat->con.remote.sin6.sin6_port = htons(atoi(port)); retval = inet_pton(AF_INET6, ip, &(chat->con.remote.sin6.sin6_addr)); if (retval != 0) outerror(OUTERROR_TYPE_WARN_LOUD, "Invalid IP: %s", ip); } mydelete(port); mydelete(ip); if (is_in_badip(&(chat->con.remote))) { shutdowndccchat(chat, 0); return 1; } if (bind_irc_vhost(chat->con.family, chat->con.clientsocket) != 0) { outerror(OUTERROR_TYPE_WARN_LOUD, "Couldn't Bind To Virtual Host: %s", strerror(errno)); chat->con.clientsocket = FD_UNUSED; return 1; } if (set_socket_nonblocking(chat->con.clientsocket, 1) < 0 ) { outerror(OUTERROR_TYPE_WARN,"Couldn't Set Non-Blocking"); } alarm(CTIMEOUT); retval = connect(chat->con.clientsocket, &(chat->con.remote.sa), addrlen); if ((retval < 0) && !((errno == EINPROGRESS) || (errno == EAGAIN))) { outerror(OUTERROR_TYPE_WARN_LOUD,"Connection to DCC Chat Failed: %s", strerror(errno)); chat->con.clientsocket = FD_UNUSED; return 1; } alarm(0); addrlen = sizeof(chat->con.local); if (getsockname(chat->con.clientsocket, &(chat->con.local.sa), &addrlen) < 0) { outerror(OUTERROR_TYPE_WARN_LOUD,"Couldn't get sock name: %s", strerror(errno)); chat->con.clientsocket = FD_UNUSED; return 1; } if (gdata.debug > 0) { ioutput(OUT_S, COLOR_YELLOW, "dccchat socket = %d", chat->con.clientsocket); } gdata.num_dccchats++; chat->status = DCCCHAT_CONNECTING; chat->nick = mystrdup(nick); chat->hostmask = mystrdup(hostmask); chat->con.localport = 0; chat->con.connecttime = gdata.curtime; chat->con.lastcontact = gdata.curtime; chat->net = gnetwork->net; msg = mymalloc(maxtextlength); my_getnameinfo(msg, maxtextlength -1, &(chat->con.local.sa)); chat->con.localaddr = mystrdup(msg); my_getnameinfo(msg, maxtextlength -1, &(chat->con.remote.sa)); chat->con.remoteaddr = mystrdup(msg); mydelete(msg); ioutput(OUT_S|OUT_L|OUT_D, COLOR_MAGENTA, "DCC CHAT received from %s on %s, attempting connection to %s", nick, chat->name, chat->con.remoteaddr); return 0; }