X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=net.c;h=4a31f013446877e45c780e7eb24a27a0a1042c3a;hp=49026db0ec91a7b4a1d3d0917723720eb8d0ba30;hb=081c8921f827c1ed482c45ba22bd8bb97db2838b;hpb=89f2de1016601e523fd456e0e2fa650fa695ecaa diff --git a/net.c b/net.c index 49026db0..4a31f013 100644 --- a/net.c +++ b/net.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2011 Andre Noll + * Copyright (C) 2005-2013 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -264,6 +264,12 @@ struct flowopts { struct list_head sockopts; }; +/** + * Allocate and initialize a flowopt queue. + * + * \return A new structure to be passed to \ref flowopt_add(). It is + * automatically deallocated in \ref makesock(). + */ struct flowopts *flowopt_new(void) { struct flowopts *new = para_malloc(sizeof(*new)); @@ -305,14 +311,6 @@ void flowopt_add(struct flowopts *fo, int lev, int opt, list_add_tail(&new->node, &fo->sockopts); } -void flowopt_add_bool(struct flowopts *fo, int lev, int opt, - const char *optname, bool on_or_off) -{ - int on = on_or_off; /* kernel takes 'int' */ - - flowopt_add(fo, lev, opt, optname, &on, sizeof(on)); -} - /** Set the entire bunch of pre-connection options at once. */ static void flowopt_setopts(int sockfd, struct flowopts *fo) { @@ -674,72 +672,19 @@ char *remote_name(int sockfd) /** * Extract IPv4 or IPv6-mapped-IPv4 address from sockaddr_storage. - * \param ss Container of IPv4/6 address - * \return Extracted IPv4 address (different from 0) or 0 if unsuccessful. * - * \sa RFC 3493 + * \param ss Container of IPv4/6 address. + * \param ia Extracted IPv4 address (different from 0) or 0 if unsuccessful. + * + * \sa RFC 3493. */ -struct in_addr extract_v4_addr(const struct sockaddr_storage *ss) +void extract_v4_addr(const struct sockaddr_storage *ss, struct in_addr *ia) { - struct in_addr ia = {.s_addr = 0}; const struct sockaddr *sa = normalize_ip_address(ss); + memset(ia, 0, sizeof(*ia)); if (sa->sa_family == AF_INET) - ia = ((struct sockaddr_in *)sa)->sin_addr; - return ia; -} - -/** - * Send a binary buffer. - * - * \param fd The file descriptor. - * \param buf The buffer to be sent. - * \param len The length of \a buf. - * - * Send out the buffer and try to resend the remaining part in case of short - * writes. - * - * \return Standard. - */ -int send_bin_buffer(int fd, const char *buf, size_t len) -{ - if (!len) - PARA_CRIT_LOG("len == 0\n"); - return write_all(fd, buf, &len); -} - -/** - * Send a \p NULL-terminated buffer. - * - * \param fd The file descriptor. - * \param buf The null-terminated buffer to be send. - * - * This is equivalent to send_bin_buffer(fd, buf, strlen(buf)). - * - * \return Standard. - */ -int send_buffer(int fd, const char *buf) -{ - return send_bin_buffer(fd, buf, strlen(buf)); -} - -/** - * Send a buffer given by a format string. - * - * \param fd The file descriptor. - * \param fmt A format string. - * - * \return Standard. - */ -__printf_2_3 int send_va_buffer(int fd, const char *fmt, ...) -{ - char *msg; - int ret; - - PARA_VSPRINTF(fmt, msg); - ret = send_buffer(fd, msg); - free(msg); - return ret; + *ia = ((struct sockaddr_in *)sa)->sin_addr; } /** @@ -962,7 +907,7 @@ err: #ifndef HAVE_UCRED ssize_t send_cred_buffer(int sock, char *buf) { - return send_buffer(sock, buf); + return write_buffer(sock, buf); } int recv_cred_buffer(int fd, char *buf, size_t size) {