static int ol_tcp_acc_get_opts(outlet_t *ol, uint8_t *data, int dlen, char *buf, int sz) { uint8_t *p = data; char *q = buf; int left = sz; while (p < data +dlen) { int opt = *p++; uint32_t val; debug("%s(opt=%d)\n", __FUNCTION__, opt); switch (opt) { case INET_OPT_PRIORITY: // // See comment in ol_tcp_animate() // #if LING_WITH_LWIP val = ol->tcp->prio; #elif LING_WITH_LIBUV val = 0; #endif break; case INET_OPT_TOS: #if LING_WITH_LWIP val = ol->tcp->tos; #elif LING_WITH_LIBUV val = 0; #endif break; case TCP_OPT_NODELAY: val = tcp_get_nodelay(ol); break; default: if (inet_get_opt(ol, opt, &val) < 0) return -BAD_ARG; } if (left < 1 +4) return -TOO_LONG; *q++ = opt; left--; PUT_UINT_32(q, val); q += 4; left -= 4; } return q -buf; }
static int ol_tcp_get_opts(outlet_t *ol, uint8_t *data, int dlen, char *buf, int sz) { uint8_t *p = data; char *q = buf; int left = sz; while (p < data +dlen) { int opt = *p++; uint32_t val; switch (opt) { case INET_OPT_RCVBUF: val = ol->recv_bufsize; break; case INET_OPT_PRIORITY: // // See comment in ol_tcp_animate() // val = ol->tcp->prio; break; case INET_OPT_TOS: val = ol->tcp->tos; break; case TCP_OPT_NODELAY: val = tcp_nagle_disabled(ol->tcp); break; default: if (inet_get_opt(ol, opt, &val) < 0) return -BAD_ARG; } if (left < 1 +4) return -TOO_LONG; *q++ = opt; left--; PUT_UINT_32(q, val); q += 4; left -= 4; } return q -buf; }