static void select_dump(const char *desc, int highests) { char buffer[maxtextlength]; size_t len; int ii; len = 0; len += add_snprintf(buffer + len, maxtextlength - len, "select %s: [read", desc); for (ii=0; ii<highests+1; ii++) { if (FD_ISSET(ii, &gdata.readset)) { len += add_snprintf(buffer + len, maxtextlength - len, " %d", ii); } } len += add_snprintf(buffer + len, maxtextlength - len, "] [write"); for (ii=0; ii<highests+1; ii++) { if (FD_ISSET(ii, &gdata.writeset)) { len += add_snprintf(buffer + len, maxtextlength - len, " %d", ii); } } len += add_snprintf(buffer + len, maxtextlength - len, "]"); ioutput(OUT_S, COLOR_CYAN, "%s", buffer); }
static size_t my_dcc_ip_port(char *buffer, size_t len, ir_sockaddr_union_t *sa) { #if !defined(NO_GETADDRINFO) char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; ir_uint32 ip; socklen_t salen; if (sa->sa.sa_family == AF_INET) { if (gnetwork->usenatip) ip = gnetwork->ourip; else ip = ntohl(sa->sin.sin_addr.s_addr); return add_snprintf(buffer, len, "%u %d", /* NOTRANSLATE */ ip, ntohs(sa->sin.sin_port)); } salen = (sa->sa.sa_family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6); if (getnameinfo(&(sa->sa), salen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) { return add_snprintf(buffer, len, "(unknown)" ); } return add_snprintf(buffer, len, "%s %s", hbuf, sbuf); /* NOTRANSLATE */ #else /* NO_GETADDRINFO */ ir_uint32 ip; if (gnetwork->usenatip) ip = gnetwork->ourip; else ip = ntohl(sa->sin.sin_addr.s_addr); return add_snprintf(buffer, len, "%u %d", /* NOTRANSLATE */ ip, ntohs(sa->sin.sin_port)); #endif /* NO_GETADDRINFO */ }
/* writes IP address and port as text into the buffer */ size_t my_getnameinfo(char *buffer, size_t len, const struct sockaddr *sa) { #if !defined(NO_GETADDRINFO) char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; socklen_t salen; salen = (sa->sa_family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6); if (getnameinfo(sa, salen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) { return add_snprintf(buffer, len, "(unknown)" ); } return add_snprintf(buffer, len, "host=%s port=%s", hbuf, sbuf); #else /* NO_GETADDRINFO */ const struct sockaddr_in *remoteaddr = (const struct sockaddr_in *)sa; ir_uint32 to_ip = ntohl(remoteaddr->sin_addr.s_addr); return add_snprintf(buffer, len, IPV4_PRINT_FMT ":%d", IPV4_PRINT_DATA(to_ip), ntohs(remoteaddr->sin_port)); #endif /* NO_GETADDRINFO */ }
static VALUE cie_info_pack(VALUE UNUSED(module), VALUE rnr, VALUE rkey) { xdcc *xd; const char *key; const char *val; char *tempstr; unsigned int nr; unsigned int ival; off_t oval; size_t len; VALUE rval; if (NIL_P(rnr) || NIL_P(rkey)) return Qnil; nr = FIX2UINT(rnr); if (nr == 0) return Qnil; if (nr > irlist_size(&gdata.xdccs)) return Qnil; xd = get_xdcc_pack(nr); if (xd == NULL) return Qnil; key = rb_obj_as_string_protected(rkey); if (!key) return Qnil; for (;;) { if (strcmp(key, "file") == 0) { /* NOTRANSLATE */ val = xd->file; break; } if (strcmp(key, "name") == 0) { /* NOTRANSLATE */ val = getfilename(xd->file); break; } if (strcmp(key, "desc") == 0) { /* NOTRANSLATE */ val = xd->desc; break; } if (strcmp(key, "note") == 0) { /* NOTRANSLATE */ val = xd->note; break; } if (strcmp(key, "group") == 0) { /* NOTRANSLATE */ val = xd->group; break; } if (strcmp(key, "group_desc") == 0) { /* NOTRANSLATE */ val = find_groupdesc(xd->group); break; } if (strcmp(key, "trigger") == 0) { /* NOTRANSLATE */ val = xd->trigger; break; } if (strcmp(key, "lock") == 0) { /* NOTRANSLATE */ val = xd->lock; break; } if (strcmp(key, "gets") == 0) { /* NOTRANSLATE */ ival = xd->gets; return UINT2NUM(ival); } if (strcmp(key, "color") == 0) { /* NOTRANSLATE */ ival = xd->color; return UINT2NUM(ival); } if (strcmp(key, "dlimit_max") == 0) { /* NOTRANSLATE */ ival = xd->dlimit_max; return UINT2NUM(ival); } if (strcmp(key, "dlimit_used") == 0) { /* NOTRANSLATE */ ival = xd->dlimit_used; return UINT2NUM(ival); } if (strcmp(key, "has_md5sum") == 0) { /* NOTRANSLATE */ ival = xd->has_md5sum; return UINT2NUM(ival); } if (strcmp(key, "has_crc32") == 0) { /* NOTRANSLATE */ ival = xd->has_crc32; return UINT2NUM(ival); } if (strcmp(key, "bytes") == 0) { /* NOTRANSLATE */ oval = xd->st_size; return OFFT2NUM(oval); } if (strcmp(key, "size") == 0) { /* NOTRANSLATE */ tempstr = sizestr(0, xd->st_size); len = strlen(tempstr); rval = rb_str_new(tempstr, len); mydelete(tempstr); return rval; } if (strcmp(key, "mtime") == 0) { /* NOTRANSLATE */ return rb_time_new(xd->mtime, 0); } if (strcmp(key, "xtime") == 0) { /* NOTRANSLATE */ return rb_time_new(xd->xtime, 0); } if (strcmp(key, "crc32") == 0) { /* NOTRANSLATE */ tempstr = mymalloc(maxtextlengthshort); len = add_snprintf(tempstr, maxtextlengthshort, CRC32_PRINT_FMT, xd->crc32); rval = rb_str_new(tempstr, len); mydelete(tempstr); return rval; } if (strcmp(key, "md5sum") == 0) { /* NOTRANSLATE */ tempstr = mymalloc(maxtextlengthshort); len = add_snprintf(tempstr, maxtextlengthshort, MD5_PRINT_FMT, MD5_PRINT_DATA(xd->md5sum)); rval = rb_str_new(tempstr, len); mydelete(tempstr); return rval; } /* minspeed, maxspeed */ return Qnil; } if (val == NULL) return Qnil; return rb_str_new(val, strlen(val)); }
void write_statefile(void) { #ifdef DEBUG ir_uint64 ms1; ir_uint64 ms2; #endif /* DEBUG */ char *statefile_tmp, *statefile_bkup; int fd; int callval; statefile_hdr_t *hdr; size_t length; ir_moutput_t bout; updatecontext(); if (gdata.statefile == NULL) { return; } #ifdef DEBUG ms1 = get_time_in_ms(); #endif /* DEBUG */ statefile_tmp = mystrsuffix(gdata.statefile, ".tmp"); statefile_bkup = mystrsuffix(gdata.statefile, "~"); if (gdata.debug > 0) { ioutput(OUT_S|OUT_L|OUT_D, COLOR_NO_COLOR, "Saving State File... "); } fd = open(statefile_tmp, O_WRONLY | O_CREAT | O_TRUNC | ADDED_OPEN_FLAGS, CREAT_PERMISSIONS); if (fd < 0) { outerror(OUTERROR_TYPE_WARN_LOUD, "Cant Create State File '%s': %s", statefile_tmp, strerror(errno)); goto error_out; } ir_moutput_init(&bout, fd); /*** write ***/ write_statefile_direct(&bout, STATEFILE_MAGIC); write_statefile_direct(&bout, gdata.old_statefile ? STATEFILE_OLD_VERSION : STATEFILE_VERSION); updatecontext(); { unsigned char *data; unsigned char *next; length = sizeof(statefile_hdr_t) + maxtextlength; data = mycalloc(length); /* header */ hdr = (statefile_hdr_t*)data; next = (unsigned char*)(&hdr[1]); length = add_snprintf((char *)next, maxtextlength, "iroffer-dinoex " VERSIONLONG ", %s", gdata.osstring); create_statefile_hdr(hdr, STATEFILE_TAG_IROFFER_VERSION, sizeof(statefile_hdr_t) + ceiling(length+1, 4)); write_statefile_item(&bout, data); mydelete(data); } write_statefile_dinoex(&bout); updatecontext(); { MD5Digest digest; bzero(digest, sizeof(digest)); ir_moutput_get_md5sum(&bout, digest); write_statefile_raw(&bout, &digest, sizeof(digest)); } /*** end write ***/ updatecontext(); close(fd); /* abort if statefile was not written in full */ if (bout.error > 0) { goto error_out; } /* remove old bkup */ callval = unlink(statefile_bkup); if ((callval < 0) && (errno != ENOENT)) { outerror(OUTERROR_TYPE_WARN_LOUD, "Cant Remove Old State File '%s': %s", statefile_bkup, strerror(errno)); /* ignore, continue */ } /* backup old -> bkup */ callval = link(gdata.statefile, statefile_bkup); if ((callval < 0) && (errno != ENOENT)) { outerror(OUTERROR_TYPE_WARN_LOUD, "Cant Backup Old State File '%s' -> '%s': %s", gdata.statefile, statefile_bkup, strerror(errno)); /* ignore, continue */ } /* rename new -> current */ callval = rename(statefile_tmp, gdata.statefile); if (callval < 0) { outerror(OUTERROR_TYPE_WARN_LOUD, "Cant Save New State File '%s': %s", gdata.statefile, strerror(errno)); /* ignore, continue */ } if (gdata.debug > 0) { #ifdef DEBUG ms2 = get_time_in_ms(); ioutput(OUT_S|OUT_L|OUT_D, COLOR_NO_COLOR, "Done" " running: %ld ms", (long)(ms2 - ms1)); #else ioutput(OUT_S|OUT_L|OUT_D, COLOR_NO_COLOR, "Done"); #endif /* DEBUG */ } error_out: mydelete(statefile_tmp); mydelete(statefile_bkup); return; }