/* pckt_vmke.c * * copyright (c) 2000-2003 SeaD * see GPL for copying info * */ #include #include #include "echat.h" #include "pckt_vpak.h" char *make_vhead(void) { static char head[HEADER_LEN]; register int n; if (config->packet_qchat) { *head = '\0'; return (head); } if (config->packet_xor) *head = PACKET_VYPRESSXOR; else *head = PACKET_VYPRESS; for (n = 1; n < HEADER_LEN; n++) #ifdef FREEBSD head[n] = 'a' + ((char) random() & 0x0f); #else /* FREEBSD */ head[n] = 'a' + ((char) rand() & 0x0f); #endif /* FREEBSD */ return (head); } void make_vherewho(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c", make_vhead(), MSG_VHEREWHO, config->nick, MSG_SPLIT); } void make_vhereim(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u%u", make_vhead(), MSG_VHEREIM, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT, config->mode, config->active); } void make_vchat(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c", make_vhead(), MSG_VCHAT, status->room->name, MSG_SPLIT, config->nick, MSG_SPLIT, buf, MSG_SPLIT); } void make_vnick(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u", make_vhead(), MSG_VNICK, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT, config->gender); } void make_qnick(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c", make_vhead(), MSG_VNICK, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT); } void make_vjoin(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u%u", make_vhead(), MSG_VJOIN, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT, config->mode, config->gender); } void make_qjoin(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u", make_vhead(), MSG_VJOIN, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT, config->mode); } void make_vleave(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u", make_vhead(), MSG_VLEAVE, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT, config->gender); } void make_qleave(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c", make_vhead(), MSG_VLEAVE, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT); } void make_vmesg(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c", make_vhead(), MSG_VMESG, config->nick, MSG_SPLIT, status->nick, MSG_SPLIT, buf, MSG_SPLIT); } void make_vmass(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c", make_vhead(), MSG_VMASS, config->nick, MSG_SPLIT, status->nick, MSG_SPLIT, buf, MSG_SPLIT); } void make_vmesgack(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%u%s%s%s%c", make_vhead(), MSG_VMESGACK, config->mode, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT, config->gender, (config->mode == MOD_DND) ? config->answer_dnd : "", (config->mode == MOD_AWAY) ? config->answer_away : "", (config->mode == MOD_OFF) ? config->answer_off : "", MSG_SPLIT); } void make_qmesgack(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c", make_vhead(), MSG_VMESGACK, config->mode, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT); } void make_vexec(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c%s%c", make_vhead(), MSG_VEXEC, config->nick, MSG_SPLIT, status->nick, MSG_SPLIT, buf, MSG_SPLIT, "", MSG_SPLIT); /* FIXME: no passwords */ } void make_vexecack(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c", make_vhead(), MSG_VEXECACK, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT, "Get out!!!", MSG_SPLIT); } void make_vme(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c", make_vhead(), MSG_VME, status->room->name, MSG_SPLIT, config->nick, MSG_SPLIT, buf, MSG_SPLIT); } void make_vtopicnew(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c", make_vhead(), MSG_VTOPICNEW, status->room->name, MSG_SPLIT, status->room->topic, MSG_SPLIT); } void make_qtopicnew(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c", make_vhead(), MSG_VTOPICNEW, status->chnl[0].topic, MSG_SPLIT); } void make_vtopic(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c", make_vhead(), MSG_VTOPIC, status->nick, MSG_SPLIT, status->channel, MSG_SPLIT, status->chnl[chnl_getnum()].topic, MSG_SPLIT); } void make_qtopic(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c", make_vhead(), MSG_VTOPIC, status->nick, MSG_SPLIT, status->chnl[0].topic, MSG_SPLIT); } void make_vmode(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%u%u%s%s%s%c", make_vhead(), MSG_VMODE, config->nick, MSG_SPLIT, config->mode, config->gender, (config->mode == MOD_DND) ? config->answer_dnd : "", (config->mode == MOD_AWAY) ? config->answer_away : "", (config->mode == MOD_OFF) ? config->answer_off : "", MSG_SPLIT); } void make_qmode(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%u", make_vhead(), MSG_VMODE, config->nick, MSG_SPLIT, config->mode); } void make_vinfo(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c", make_vhead(), MSG_VINFO, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT); } void make_vinform(void) { char host[STR_SIZE]; char addr[ADDR_SIZE+1]; char chnlslist[STR_SIZE]; register int n; gethostname(host, STR_SIZE); for (n = 0; n < status->users; n++) if (!strncmp(status->user[n].nick, config->nick, NICK_MAXLEN)) break; if (n == status->users) *addr = '\0'; else strncpy(addr, status->user[n].addr, ADDR_SIZE); strncpy(chnlslist, status->chnl[0].name, CHANNEL_MAXLEN); for (n = 1; n < status->channels; n++) if (status->chnl[n].name[0] == CHR_CHNL) strncat(chnlslist, status->chnl[n].name, CHANNEL_MAXLEN); status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c%s%c%s%c%s#%c%s%s%s%c", make_vhead(), MSG_VINFORM, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT, host, MSG_SPLIT, config->nick, MSG_SPLIT, addr, MSG_SPLIT, chnlslist, MSG_SPLIT, (config->mode == MOD_DND) ? config->answer_dnd : "", (config->mode == MOD_AWAY) ? config->answer_away : "", (config->mode == MOD_OFF) ? config->answer_off : "", MSG_SPLIT); } void make_qinform(void) { char host[STR_SIZE]; /* char addr[ADDR_SIZE]; */ char chnlslist[STR_SIZE]; register int n; gethostname(host, STR_SIZE); /* for (n = 0; n < status->users; n++) if (!strncmp(status->user[n].nick, config->nick, NICK_MAXLEN)) break; if (n == status->users) *addr = '\0'; else strncpy(addr, status->user[n].addr, ADDR_SIZE); */ strncpy(chnlslist, status->chnl[0].name, CHANNEL_MAXLEN); for (n = 1; n < status->channels; n++) if (status->chnl[n].name[0] == CHR_CHNL) strncat(chnlslist, status->chnl[n].name, CHANNEL_MAXLEN); /* FIXME */ status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c%s%cN/A%cN/A%c%s#%c", make_vhead(), MSG_VINFORM, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT, host, MSG_SPLIT, config->nick, MSG_SPLIT, MSG_SPLIT, MSG_SPLIT, chnlslist, MSG_SPLIT); } void make_vbeepbeep(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c", make_vhead(), MSG_VBEEP, MSG_VBEEPBEEP, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT); } void make_vbeepack(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%u", make_vhead(), MSG_VBEEP, MSG_VBEEPACK, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT, config->gender); } void make_qbeepack(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c", make_vhead(), MSG_VBEEP, MSG_VBEEPACK, status->nick, MSG_SPLIT, config->nick, MSG_SPLIT); } void make_vbeepreq(void) { /* FIXME: dont implemented */ status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c", make_vhead(), MSG_VBEEPREQ, config->nick, MSG_SPLIT, buf, MSG_SPLIT, status->room->name, MSG_SPLIT); } void make_vprivatjoin(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%u", make_vhead(), MSG_VPRIVAT, MSG_VPRIVATJOIN, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT, config->gender); } void make_qprivatjoin(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c", make_vhead(), MSG_VPRIVAT, MSG_VPRIVATJOIN, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT); } void make_vprivatleave(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%u", make_vhead(), MSG_VPRIVAT, MSG_VPRIVATLEAVE, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT, config->gender); } void make_qprivatleave(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c", make_vhead(), MSG_VPRIVAT, MSG_VPRIVATLEAVE, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT); } void make_vprivatchat(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%s%c", make_vhead(), MSG_VPRIVAT, MSG_VPRIVATCHAT, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT, buf, MSG_SPLIT); } void make_vprivatme(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%s%c", make_vhead(), MSG_VPRIVAT, MSG_VPRIVATME, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT, buf, MSG_SPLIT); } void make_vhere(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c", make_vhead(), MSG_VHERE, config->nick, MSG_SPLIT, status->channel, MSG_SPLIT); } void make_vherewe(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c%u", make_vhead(), MSG_VHEREWE, status->nick, MSG_SPLIT, status->channel, MSG_SPLIT, config->nick, MSG_SPLIT, config->active); } void make_vactive(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%u", make_vhead(), MSG_VACTIVE, config->nick, MSG_SPLIT, config->active); } void make_vuserchnls(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c", make_vhead(), MSG_VUSERCHNLS, config->nick, MSG_SPLIT); } void make_vuserchnlslist(void) { status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s#%c", make_vhead(), MSG_VUSERCHNLSLIST, status->nick, MSG_SPLIT, status->info.chnlslist, MSG_SPLIT); }