Lines Matching +full:buffered +full:- +full:negative
2 * Copyright (c) 2002 - 2003
62 #include "rpcap-protocol.h"
105 // and a platform-dependent (UN*X vs. Windows) identifier for the
170 uint8 type; // ContentType - will be 22, for Handshake
173 // This is *not* aligned on a 2-byte boundary; we just
201 * Maximum sizes for fixed-bit-width values.
251 // a TLS handshake message or a non-TLS rpcapd message. in daemon_serviceloop()
263 if (nrecv == -1) in daemon_serviceloop()
289 // isn't one, assume it's a non-TLS rpcapd message. in daemon_serviceloop()
297 // We assume this is a non-TLS rpcapd message. in daemon_serviceloop()
302 if (nrecv == -1) in daemon_serviceloop()
307 if (nrecv == -2) in daemon_serviceloop()
315 if (rpcapd_discard(sockctrl, NULL, plen) == -1) in daemon_serviceloop()
327 "TLS is required by this server", errbuf) == -1) in daemon_serviceloop()
349 // We're expecting a non-TLS rpcapd message. If this in daemon_serviceloop()
365 if (nrecv == -1) in daemon_serviceloop()
379 if (rpcapd_discard(sockctrl, NULL, plen) == -1) in daemon_serviceloop()
394 TLS_RECORD_HEADER_LEN, errbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_serviceloop()
404 TLS_ALERT_LEN, errbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_serviceloop()
448 &fromlen) == -1) in daemon_serviceloop()
452 if (rpcap_senderror(pars.sockctrl, pars.ssl, 0, PCAP_ERR_NETW, errmsgbuf, errbuf) == -1) in daemon_serviceloop()
465 if (host_port_check_status == -2) { in daemon_serviceloop()
475 if (rpcap_senderror(pars.sockctrl, pars.ssl, 0, PCAP_ERR_HOSTNOAUTH, errmsgbuf, errbuf) == -1) in daemon_serviceloop()
523 if (retval == -1) in daemon_serviceloop()
527 if (rpcap_senderror(pars.sockctrl, pars.ssl, 0, PCAP_ERR_NETW, errmsgbuf, errbuf) == -1) in daemon_serviceloop()
536 …ockctrl, pars.ssl, 0, PCAP_ERR_INITTIMEOUT, "The RPCAP initial timeout has expired", errbuf) == -1) in daemon_serviceloop()
546 if (nrecv == -1) in daemon_serviceloop()
551 if (nrecv == -2) in daemon_serviceloop()
571 errbuf) == -1) in daemon_serviceloop()
588 if (retval == -1) in daemon_serviceloop()
594 if (retval == -2) in daemon_serviceloop()
596 // Non-fatal error; we sent back in daemon_serviceloop()
619 // XXX - is this what happens in active in daemon_serviceloop()
650 errmsgbuf, errbuf) == -1) in daemon_serviceloop()
656 if (rpcapd_discard(pars.sockctrl, pars.ssl, plen) == -1) in daemon_serviceloop()
673 // These are server-to-client messages. in daemon_serviceloop()
678 …snprintf(errmsgbuf, PCAP_ERRBUF_SIZE, "Server-to-client message %s received from client", msg_type… in daemon_serviceloop()
682 …snprintf(errmsgbuf, PCAP_ERRBUF_SIZE, "Server-to-client message of type %u received from client", … in daemon_serviceloop()
686 errmsgbuf, errbuf) == -1) in daemon_serviceloop()
692 if (rpcapd_discard(pars.sockctrl, pars.ssl, plen) == -1) in daemon_serviceloop()
706 errmsgbuf, errbuf) == -1) in daemon_serviceloop()
712 if (rpcapd_discard(pars.sockctrl, pars.ssl, plen) == -1) in daemon_serviceloop()
744 // - I have to be in normal mode (no active mode) in daemon_serviceloop()
745 // - if the device is open, I don't have to be in the middle of a capture (session->sockdata) in daemon_serviceloop()
746 // - if the device is closed, I have always to check if a new command arrives in daemon_serviceloop()
750 if ((!pars.isactive) && (session == NULL || session->sockdata == 0)) in daemon_serviceloop()
764 if (retval == -1) in daemon_serviceloop()
770 errmsgbuf, errbuf) == -1) in daemon_serviceloop()
782 errbuf) == -1) in daemon_serviceloop()
792 if (nrecv == -1) in daemon_serviceloop()
797 if (nrecv == -2) in daemon_serviceloop()
820 errbuf) == -1) in daemon_serviceloop()
839 // XXX - actually exit.... in daemon_serviceloop()
845 if (daemon_msg_findallif_req(header.ver, &pars, plen) == -1) in daemon_serviceloop()
861 // XXX - we don't care if the client sends in daemon_serviceloop()
867 if (retval == -1) in daemon_serviceloop()
887 errbuf) == -1) in daemon_serviceloop()
894 if (rpcapd_discard(pars.sockctrl, pars.ssl, plen) == -1) in daemon_serviceloop()
903 uses_ssl) == -1) in daemon_serviceloop()
917 &pars, session, plen) == -1) in daemon_serviceloop()
930 errbuf) == -1) in daemon_serviceloop()
955 session, plen, &stats, svrcapt) == -1) in daemon_serviceloop()
969 if (pcap_stats(session->fp, &stats)) in daemon_serviceloop()
971 svrcapt = session->TotCapt; in daemon_serviceloop()
982 &pars, session) == -1) in daemon_serviceloop()
1007 &pars, plen, &samp_param) == -1) in daemon_serviceloop()
1027 errbuf) == -1) in daemon_serviceloop()
1033 if (rpcapd_discard(pars.sockctrl, pars.ssl, plen) == -1) in daemon_serviceloop()
1050 // These are server-to-client messages. in daemon_serviceloop()
1055 rpcapd_log(LOGPRIO_INFO, "The client sent a %s server-to-client message", msg_type_string); in daemon_serviceloop()
1056 …snprintf(errmsgbuf, PCAP_ERRBUF_SIZE, "Server-to-client message %s received from client", msg_type… in daemon_serviceloop()
1060 rpcapd_log(LOGPRIO_INFO, "The client sent a server-to-client message of type %u", header.type); in daemon_serviceloop()
1061 …snprintf(errmsgbuf, PCAP_ERRBUF_SIZE, "Server-to-client message of type %u received from client", … in daemon_serviceloop()
1065 errmsgbuf, errbuf) == -1) in daemon_serviceloop()
1071 if (rpcapd_discard(pars.sockctrl, pars.ssl, plen) == -1) in daemon_serviceloop()
1086 errbuf, errmsgbuf) == -1) in daemon_serviceloop()
1092 if (rpcapd_discard(pars.sockctrl, pars.ssl, plen) == -1) in daemon_serviceloop()
1150 if (sock_recv(sockctrl, ssl, remote_errbuf, PCAP_ERRBUF_SIZE - 1, in daemon_msg_err()
1152 PCAP_ERRBUF_SIZE) == -1) in daemon_msg_err()
1156 return -1; in daemon_msg_err()
1158 if (rpcapd_discard(sockctrl, ssl, plen - (PCAP_ERRBUF_SIZE - 1)) == -1) in daemon_msg_err()
1161 return -1; in daemon_msg_err()
1165 * Null-terminate it. in daemon_msg_err()
1167 remote_errbuf[PCAP_ERRBUF_SIZE - 1] = '\0'; in daemon_msg_err()
1178 PCAP_ERRBUF_SIZE) == -1) in daemon_msg_err()
1182 return -1; in daemon_msg_err()
1186 * Null-terminate it. in daemon_msg_err()
1208 * \param errbuf: a user-allocated buffer in which the error message
1212 * \return '0' if everything is fine, '-1' if an unrecoverable error occurred,
1213 * or '-2' if the authentication failed. For errors, an error message is
1224 char sendbuf[RPCAP_NETBUF_SIZE]; // temporary buffer in which data to be sent is buffered in daemon_msg_auth_req()
1225 int sendbufidx = 0; // index which keeps the number of bytes currently buffered in daemon_msg_auth_req()
1228 …status = rpcapd_recv(pars->sockctrl, pars->ssl, (char *) &auth, sizeof(struct rpcap_auth), &plen, … in daemon_msg_auth_req()
1229 if (status == -1) in daemon_msg_auth_req()
1231 return -1; in daemon_msg_auth_req()
1233 if (status == -2) in daemon_msg_auth_req()
1242 if (!pars->nullAuthAllowed) in daemon_msg_auth_req()
1247 if (rpcap_senderror(pars->sockctrl, pars->ssl, in daemon_msg_auth_req()
1248 0, PCAP_ERR_AUTH_FAILED, errmsgbuf, errbuf) == -1) in daemon_msg_auth_req()
1252 return -1; in daemon_msg_auth_req()
1272 status = rpcapd_recv(pars->sockctrl, pars->ssl, username, usernamelen, &plen, errmsgbuf); in daemon_msg_auth_req()
1273 if (status == -1) in daemon_msg_auth_req()
1276 return -1; in daemon_msg_auth_req()
1278 if (status == -2) in daemon_msg_auth_req()
1294 status = rpcapd_recv(pars->sockctrl, pars->ssl, passwd, passwdlen, &plen, errmsgbuf); in daemon_msg_auth_req()
1295 if (status == -1) in daemon_msg_auth_req()
1299 return -1; in daemon_msg_auth_req()
1301 if (status == -2) in daemon_msg_auth_req()
1317 if (rpcap_senderror(pars->sockctrl, pars->ssl, in daemon_msg_auth_req()
1318 0, PCAP_ERR_AUTH_FAILED, errmsgbuf, errbuf) == -1) in daemon_msg_auth_req()
1322 return -1; in daemon_msg_auth_req()
1347 if (rpcap_senderror(pars->sockctrl, pars->ssl, in daemon_msg_auth_req()
1348 0, PCAP_ERR_AUTH_TYPE_NOTSUP, errmsgbuf, errbuf) == -1) in daemon_msg_auth_req()
1352 return -1; in daemon_msg_auth_req()
1359 RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_auth_req()
1368 RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_auth_req()
1373 // version of the byte-order magic is (which will tell the in daemon_msg_auth_req()
1375 // case they will need to byte-swap some fields in some in daemon_msg_auth_req()
1376 // link-layer types' headers). in daemon_msg_auth_req()
1379 authreply->minvers = RPCAP_MIN_VERSION; in daemon_msg_auth_req()
1380 authreply->maxvers = RPCAP_MAX_VERSION; in daemon_msg_auth_req()
1381 authreply->byte_order_magic = RPCAP_BYTE_ORDER_MAGIC; in daemon_msg_auth_req()
1384 if (sock_send(pars->sockctrl, pars->ssl, sendbuf, sendbufidx, errbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_auth_req()
1388 return -1; in daemon_msg_auth_req()
1392 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_auth_req()
1394 return -1; in daemon_msg_auth_req()
1400 if (rpcap_senderror(pars->sockctrl, pars->ssl, 0, PCAP_ERR_AUTH, in daemon_msg_auth_req()
1401 errmsgbuf, errbuf) == -1) in daemon_msg_auth_req()
1405 return -1; in daemon_msg_auth_req()
1410 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_auth_req()
1412 return -1; in daemon_msg_auth_req()
1415 return -2; in daemon_msg_auth_req()
1431 * XXX - hopefully, this returns errors such as ERROR_LOGON_FAILURE, in daemon_AuthUserPwd()
1434 * that's incorrect, so a client that's trying to brute-force in daemon_AuthUserPwd()
1456 return -1; in daemon_AuthUserPwd()
1468 return -1; in daemon_AuthUserPwd()
1488 * XXX - perhaps what we *should* be using is PAM, if we have in daemon_AuthUserPwd()
1490 * authentication, whether it's done with a visible-to-root- in daemon_AuthUserPwd()
1506 return -1; in daemon_AuthUserPwd()
1514 return -1; in daemon_AuthUserPwd()
1516 user_password = usersp->sp_pwdp; in daemon_AuthUserPwd()
1519 * XXX - what about other platforms? in daemon_AuthUserPwd()
1521 * running as root - it's from 2000, so it doesn't indicate whether in daemon_AuthUserPwd()
1524 * HP-UX does something else. in daemon_AuthUserPwd()
1528 user_password = user->pw_passwd; in daemon_AuthUserPwd()
1552 return -1; in daemon_AuthUserPwd()
1557 return -1; in daemon_AuthUserPwd()
1560 if (setuid(user->pw_uid)) in daemon_AuthUserPwd()
1567 return -1; in daemon_AuthUserPwd()
1570 /* if (setgid(user->pw_gid)) in daemon_AuthUserPwd()
1577 return -1; in daemon_AuthUserPwd()
1594 if (replylen > UINT32_MAX - (itemlen)) { \
1606 char sendbuf[RPCAP_NETBUF_SIZE]; // temporary buffer in which data to be sent is buffered in daemon_msg_findallif_req()
1607 int sendbufidx = 0; // index which keeps the number of bytes currently buffered in daemon_msg_findallif_req()
1615 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_findallif_req()
1618 return -1; in daemon_msg_findallif_req()
1622 if (pcap_findalldevs(&alldevs, errmsgbuf) == -1) in daemon_msg_findallif_req()
1627 if (rpcap_senderror(pars->sockctrl, pars->ssl, ver, in daemon_msg_findallif_req()
1631 errbuf) == -1) in daemon_msg_findallif_req()
1634 return -1; in daemon_msg_findallif_req()
1642 for (d = alldevs; d != NULL; d = d->next) in daemon_msg_findallif_req()
1646 if (d->description) { in daemon_msg_findallif_req()
1647 size_t stringlen = strlen(d->description); in daemon_msg_findallif_req()
1656 if (d->name) { in daemon_msg_findallif_req()
1657 size_t stringlen = strlen(d->name); in daemon_msg_findallif_req()
1670 for (address = d->addresses; address != NULL; address = address->next) in daemon_msg_findallif_req()
1675 switch (address->addr->sa_family) in daemon_msg_findallif_req()
1700 PCAP_ERRBUF_SIZE) == -1) in daemon_msg_findallif_req()
1707 for (d = alldevs; d != NULL; d = d->next) in daemon_msg_findallif_req()
1712 // aligned on 4-byte boundaries, because they're in daemon_msg_findallif_req()
1713 // preceded by strings that aren't padded to 4-byte in daemon_msg_findallif_req()
1716 // and store into them - we must fill in a structure and in daemon_msg_findallif_req()
1720 // the lower-order bits). in daemon_msg_findallif_req()
1727 if (d->description) in daemon_msg_findallif_req()
1728 ldescr = (uint16) strlen(d->description); in daemon_msg_findallif_req()
1731 if (d->name) in daemon_msg_findallif_req()
1732 lname = (uint16) strlen(d->name); in daemon_msg_findallif_req()
1738 findalldevs_if.flags = htonl(d->flags); in daemon_msg_findallif_req()
1741 for (address = d->addresses; address != NULL; address = address->next) in daemon_msg_findallif_req()
1746 switch (address->addr->sa_family) in daemon_msg_findallif_req()
1764 PCAP_ERRBUF_SIZE) == -1) in daemon_msg_findallif_req()
1767 if (sock_bufferize(d->name, lname, sendbuf, &sendbufidx, in daemon_msg_findallif_req()
1769 PCAP_ERRBUF_SIZE) == -1) in daemon_msg_findallif_req()
1772 if (sock_bufferize(d->description, ldescr, sendbuf, &sendbufidx, in daemon_msg_findallif_req()
1774 PCAP_ERRBUF_SIZE) == -1) in daemon_msg_findallif_req()
1778 for (address = d->addresses; address != NULL; address = address->next) in daemon_msg_findallif_req()
1785 switch (address->addr->sa_family) in daemon_msg_findallif_req()
1793 &sendbufidx, RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_findallif_req()
1795 daemon_seraddr((struct sockaddr_storage *) address->addr, sockaddr); in daemon_msg_findallif_req()
1799 &sendbufidx, RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_findallif_req()
1801 daemon_seraddr((struct sockaddr_storage *) address->netmask, sockaddr); in daemon_msg_findallif_req()
1805 &sendbufidx, RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_findallif_req()
1807 daemon_seraddr((struct sockaddr_storage *) address->broadaddr, sockaddr); in daemon_msg_findallif_req()
1811 &sendbufidx, RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_findallif_req()
1813 daemon_seraddr((struct sockaddr_storage *) address->dstaddr, sockaddr); in daemon_msg_findallif_req()
1826 if (sock_send(pars->sockctrl, pars->ssl, sendbuf, sendbufidx, errbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_findallif_req()
1829 return -1; in daemon_msg_findallif_req()
1838 if (rpcap_senderror(pars->sockctrl, pars->ssl, ver, in daemon_msg_findallif_req()
1839 PCAP_ERR_FINDALLIF, errmsgbuf, errbuf) == -1) in daemon_msg_findallif_req()
1842 return -1; in daemon_msg_findallif_req()
1859 char sendbuf[RPCAP_NETBUF_SIZE]; // temporary buffer in which data to be sent is buffered in daemon_msg_open_req()
1860 int sendbufidx = 0; // index which keeps the number of bytes currently buffered in daemon_msg_open_req()
1863 if (plen > sourcelen - 1) in daemon_msg_open_req()
1869 nread = sock_recv(pars->sockctrl, pars->ssl, source, plen, in daemon_msg_open_req()
1871 if (nread == -1) in daemon_msg_open_req()
1874 return -1; in daemon_msg_open_req()
1877 plen -= nread; in daemon_msg_open_req()
1898 RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_open_req()
1907 RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_open_req()
1911 openreply->linktype = htonl(pcap_datalink(fp)); in daemon_msg_open_req()
1919 openreply->tzoff = 0; in daemon_msg_open_req()
1925 if (sock_send(pars->sockctrl, pars->ssl, sendbuf, sendbufidx, errbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_open_req()
1928 return -1; in daemon_msg_open_req()
1933 if (rpcap_senderror(pars->sockctrl, pars->ssl, ver, PCAP_ERR_OPEN, in daemon_msg_open_req()
1934 errmsgbuf, errbuf) == -1) in daemon_msg_open_req()
1938 return -1; in daemon_msg_open_req()
1942 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_open_req()
1944 return -1; in daemon_msg_open_req()
1964 char sendbuf[RPCAP_NETBUF_SIZE]; // temporary buffer in which data to be sent is buffered in daemon_msg_startcap_req()
1965 int sendbufidx = 0; // index which keeps the number of bytes currently buffered in daemon_msg_startcap_req()
1967 // socket-related variables in daemon_msg_startcap_req()
1974 // RPCAP-related variables in daemon_msg_startcap_req()
1981 status = rpcapd_recv(pars->sockctrl, pars->ssl, (char *) &startcapreq, in daemon_msg_startcap_req()
1983 if (status == -1) in daemon_msg_startcap_req()
1987 if (status == -2) in daemon_msg_startcap_req()
2011 session->sockdata = INVALID_SOCKET; in daemon_msg_startcap_req()
2012 session->ctrl_ssl = session->data_ssl = NULL; in daemon_msg_startcap_req()
2014 session->have_thread = 0; in daemon_msg_startcap_req()
2025 session->thread = INVALID_HANDLE_VALUE; in daemon_msg_startcap_req()
2027 memset(&session->thread, 0, sizeof(session->thread)); in daemon_msg_startcap_req()
2031 if ((session->fp = pcap_open_live(source, in daemon_msg_startcap_req()
2040 fp->rmt_samp.method = samp_param->method; in daemon_msg_startcap_req()
2041 fp->rmt_samp.value = samp_param->value; in daemon_msg_startcap_req()
2046 - we're using TCP, and the user wants us to be in active mode in daemon_msg_startcap_req()
2047 - we're using UDP in daemon_msg_startcap_req()
2049 …ARTCAPREQ_FLAG_SERVEROPEN) || (startcapreq.flags & RPCAP_STARTCAPREQ_FLAG_DGRAM) || pars->isactive; in daemon_msg_startcap_req()
2055 - if we're in passive mode, we need to know the address family we want to use in daemon_msg_startcap_req()
2057 - if we're in active mode, we need to know the network address of the other host in daemon_msg_startcap_req()
2061 if (getpeername(pars->sockctrl, (struct sockaddr *) &saddr, &saddrlen) == -1) in daemon_msg_startcap_req()
2091 …if ((session->sockdata = sock_open(peerhost, addrinfo, SOCKOPEN_CLIENT, 0, errmsgbuf, PCAP_ERRBUF_… in daemon_msg_startcap_req()
2104 …if ((session->sockdata = sock_open(NULL, addrinfo, SOCKOPEN_SERVER, 1 /* max 1 connection in queue… in daemon_msg_startcap_req()
2109 if (getsockname(session->sockdata, (struct sockaddr *) &saddr, &saddrlen) == -1) in daemon_msg_startcap_req()
2131 session->sockctrl = pars->sockctrl; in daemon_msg_startcap_req()
2132 session->ctrl_ssl = pars->ssl; in daemon_msg_startcap_req()
2133 session->protocol_version = ver; in daemon_msg_startcap_req()
2136 ret = daemon_unpackapplyfilter(pars->sockctrl, pars->ssl, session, &plen, errmsgbuf); in daemon_msg_startcap_req()
2137 if (ret == -1) in daemon_msg_startcap_req()
2142 if (ret == -2) in daemon_msg_startcap_req()
2144 // Non-fatal error. Send an error message to the client. in daemon_msg_startcap_req()
2150 RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_startcap_req()
2159 &sendbufidx, RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_startcap_req()
2163 startcapreply->bufsize = htonl(pcap_bufsize(session->fp)); in daemon_msg_startcap_req()
2168 startcapreply->portdata = htons(port); in daemon_msg_startcap_req()
2171 if (sock_send(pars->sockctrl, pars->ssl, sendbuf, sendbufidx, errbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_startcap_req()
2185 socktemp = accept(session->sockdata, (struct sockaddr *) &saddr, &saddrlen); in daemon_msg_startcap_req()
2197 sock_close(session->sockdata, NULL, 0); in daemon_msg_startcap_req()
2198 session->sockdata = socktemp; in daemon_msg_startcap_req()
2208 ssl = ssl_promotion(1, session->sockdata, errbuf, PCAP_ERRBUF_SIZE); in daemon_msg_startcap_req()
2216 session->data_ssl = ssl; in daemon_msg_startcap_req()
2220 session->thread = (HANDLE)_beginthreadex(NULL, 0, daemon_thrdatamain, in daemon_msg_startcap_req()
2222 if (session->thread == 0) in daemon_msg_startcap_req()
2228 ret = pthread_create(&session->thread, NULL, daemon_thrdatamain, in daemon_msg_startcap_req()
2237 session->have_thread = 1; in daemon_msg_startcap_req()
2240 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_startcap_req()
2262 if (rpcap_senderror(pars->sockctrl, pars->ssl, ver, in daemon_msg_startcap_req()
2263 PCAP_ERR_STARTCAPTURE, errmsgbuf, errbuf) == -1) in daemon_msg_startcap_req()
2267 return -1; in daemon_msg_startcap_req()
2271 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_startcap_req()
2274 return -1; in daemon_msg_startcap_req()
2292 return -1; in daemon_msg_startcap_req()
2306 …if (sock_send(pars->sockctrl, pars->ssl, (char *) &header, sizeof(struct rpcap_header), errbuf, PC… in daemon_msg_endcap_req()
2310 return -1; in daemon_msg_endcap_req()
2324 // the in-kernel limit for Linux and 16 times the in-kernel limit for
2327 // It also prevents an overflow on 32-bit platforms when calculating
2328 // the total size of the filter program. (It's not an issue on 64-bit
2329 // platforms with a 64-bit size_t, as the filter size is 32 bits.)
2345 if (status == -1) in daemon_unpackapplyfilter()
2347 return -1; in daemon_unpackapplyfilter()
2349 if (status == -2) in daemon_unpackapplyfilter()
2351 return -2; in daemon_unpackapplyfilter()
2359 return -2; in daemon_unpackapplyfilter()
2367 return -2; in daemon_unpackapplyfilter()
2374 return -2; in daemon_unpackapplyfilter()
2383 if (status == -1) in daemon_unpackapplyfilter()
2385 return -1; in daemon_unpackapplyfilter()
2387 if (status == -2) in daemon_unpackapplyfilter()
2389 return -2; in daemon_unpackapplyfilter()
2392 bf_insn->code = ntohs(insn.code); in daemon_unpackapplyfilter()
2393 bf_insn->jf = insn.jf; in daemon_unpackapplyfilter()
2394 bf_insn->jt = insn.jt; in daemon_unpackapplyfilter()
2395 bf_insn->k = ntohl(insn.k); in daemon_unpackapplyfilter()
2401 // XXX - pcap_setfilter() should do the validation for us. in daemon_unpackapplyfilter()
2406 return -2; in daemon_unpackapplyfilter()
2409 if (pcap_setfilter(session->fp, &bf_prog)) in daemon_unpackapplyfilter()
2411 snprintf(errmsgbuf, PCAP_ERRBUF_SIZE, "RPCAP error: %s", pcap_geterr(session->fp)); in daemon_unpackapplyfilter()
2412 return -2; in daemon_unpackapplyfilter()
2427 ret = daemon_unpackapplyfilter(pars->sockctrl, pars->ssl, session, &plen, errmsgbuf); in daemon_msg_updatefilter_req()
2428 if (ret == -1) in daemon_msg_updatefilter_req()
2431 return -1; in daemon_msg_updatefilter_req()
2433 if (ret == -2) in daemon_msg_updatefilter_req()
2435 // Non-fatal error. Send an error reply to the client. in daemon_msg_updatefilter_req()
2440 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_updatefilter_req()
2443 return -1; in daemon_msg_updatefilter_req()
2449 …if (sock_send(pars->sockctrl, pars->ssl, (char *) &header, sizeof (struct rpcap_header), errbuf, P… in daemon_msg_updatefilter_req()
2453 return -1; in daemon_msg_updatefilter_req()
2459 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_updatefilter_req()
2461 return -1; in daemon_msg_updatefilter_req()
2463 rpcap_senderror(pars->sockctrl, pars->ssl, ver, PCAP_ERR_UPDATEFILTER, in daemon_msg_updatefilter_req()
2482 …status = rpcapd_recv(pars->sockctrl, pars->ssl, (char *) &rpcap_samp, sizeof(struct rpcap_sampling… in daemon_msg_setsampling_req()
2483 if (status == -1) in daemon_msg_setsampling_req()
2485 return -1; in daemon_msg_setsampling_req()
2487 if (status == -2) in daemon_msg_setsampling_req()
2493 samp_param->method = rpcap_samp.method; in daemon_msg_setsampling_req()
2494 samp_param->value = ntohl(rpcap_samp.value); in daemon_msg_setsampling_req()
2499 …if (sock_send(pars->sockctrl, pars->ssl, (char *) &header, sizeof (struct rpcap_header), errbuf, P… in daemon_msg_setsampling_req()
2503 return -1; in daemon_msg_setsampling_req()
2506 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_setsampling_req()
2508 return -1; in daemon_msg_setsampling_req()
2514 if (rpcap_senderror(pars->sockctrl, pars->ssl, ver, PCAP_ERR_SETSAMPLING, in daemon_msg_setsampling_req()
2515 errmsgbuf, errbuf) == -1) in daemon_msg_setsampling_req()
2519 return -1; in daemon_msg_setsampling_req()
2523 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_setsampling_req()
2525 return -1; in daemon_msg_setsampling_req()
2538 char sendbuf[RPCAP_NETBUF_SIZE]; // temporary buffer in which data to be sent is buffered in daemon_msg_stats_req()
2539 int sendbufidx = 0; // index which keeps the number of bytes currently buffered in daemon_msg_stats_req()
2543 if (rpcapd_discard(pars->sockctrl, pars->ssl, plen) == -1) in daemon_msg_stats_req()
2546 return -1; in daemon_msg_stats_req()
2550 &sendbufidx, RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_stats_req()
2559 &sendbufidx, RPCAP_NETBUF_SIZE, SOCKBUF_CHECKONLY, errmsgbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_stats_req()
2562 if (session && session->fp) in daemon_msg_stats_req()
2564 if (pcap_stats(session->fp, stats) == -1) in daemon_msg_stats_req()
2566 snprintf(errmsgbuf, PCAP_ERRBUF_SIZE, "%s", pcap_geterr(session->fp)); in daemon_msg_stats_req()
2570 netstats->ifdrop = htonl(stats->ps_ifdrop); in daemon_msg_stats_req()
2571 netstats->ifrecv = htonl(stats->ps_recv); in daemon_msg_stats_req()
2572 netstats->krnldrop = htonl(stats->ps_drop); in daemon_msg_stats_req()
2573 netstats->svrcapt = htonl(session->TotCapt); in daemon_msg_stats_req()
2580 netstats->ifdrop = htonl(stats->ps_ifdrop); in daemon_msg_stats_req()
2581 netstats->ifrecv = htonl(stats->ps_recv); in daemon_msg_stats_req()
2582 netstats->krnldrop = htonl(stats->ps_drop); in daemon_msg_stats_req()
2583 netstats->svrcapt = htonl(svrcapt); in daemon_msg_stats_req()
2587 if (sock_send(pars->sockctrl, pars->ssl, sendbuf, sendbufidx, errbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_msg_stats_req()
2590 return -1; in daemon_msg_stats_req()
2596 rpcap_senderror(pars->sockctrl, pars->ssl, ver, PCAP_ERR_GETSTATS, in daemon_msg_stats_req()
2615 char *sendbuf; // temporary buffer in which data to be sent is buffered in daemon_thrdatamain()
2616 int sendbufidx; // index which keeps the number of bytes currently buffered in daemon_thrdatamain()
2624 session->TotCapt = 0; // counter which is incremented each time a packet is received in daemon_thrdatamain()
2631 // for a maximum-size packet for this pcap_t. in daemon_thrdatamain()
2633 if (pcap_snapshot(session->fp) < 0) in daemon_thrdatamain()
2636 // The snapshot length is negative. in daemon_thrdatamain()
2640 "Unable to allocate the buffer for this child thread: snapshot length of %d is negative", in daemon_thrdatamain()
2641 pcap_snapshot(session->fp)); in daemon_thrdatamain()
2649 // a maximum-sized packet is impossibly large, the sum of the in daemon_thrdatamain()
2657 // do so on 64-bit UN*Xes, but can't do so on Windows, not even in daemon_thrdatamain()
2658 // 64-bit Windows, as the send() buffer size argument is an int in daemon_thrdatamain()
2661 …sendbufsize = sizeof(struct rpcap_header) + sizeof(struct rpcap_pkthdr) + pcap_snapshot(session->f… in daemon_thrdatamain()
2682 // packets - we dn't want any other system calls, such as in daemon_thrdatamain()
2700 …retval = pcap_next_ex(session->fp, &pkt_header, (const u_char **) &pkt_data); // cast to avoid a c… in daemon_thrdatamain()
2717 PCAP_ERRBUF_SIZE) == -1) in daemon_thrdatamain()
2726 session->protocol_version, RPCAP_MSG_PACKET, 0, in daemon_thrdatamain()
2727 (uint16) (sizeof(struct rpcap_pkthdr) + pkt_header->caplen)); in daemon_thrdatamain()
2734 PCAP_ERRBUF_SIZE) == -1) in daemon_thrdatamain()
2742 net_pkt_header->caplen = htonl(pkt_header->caplen); in daemon_thrdatamain()
2743 net_pkt_header->len = htonl(pkt_header->len); in daemon_thrdatamain()
2744 net_pkt_header->npkt = htonl(++(session->TotCapt)); in daemon_thrdatamain()
2747 // before 2038-01-19 03:14:07 UTC. in daemon_thrdatamain()
2749 net_pkt_header->timestamp_sec = htonl((uint32)pkt_header->ts.tv_sec); in daemon_thrdatamain()
2750 net_pkt_header->timestamp_usec = htonl((uint32)pkt_header->ts.tv_usec); in daemon_thrdatamain()
2753 if (sock_bufferize((char *) pkt_data, pkt_header->caplen, in daemon_thrdatamain()
2755 errbuf, PCAP_ERRBUF_SIZE) == -1) in daemon_thrdatamain()
2766 …status = sock_send(session->sockdata, session->data_ssl, sendbuf, sendbufidx, errbuf, PCAP_ERRBUF_… in daemon_thrdatamain()
2769 if (status == -1) in daemon_thrdatamain()
2797 snprintf(errbuf, PCAP_ERRBUF_SIZE, "Error reading the packets: %s", pcap_geterr(session->fp)); in daemon_thrdatamain()
2798 rpcap_senderror(session->sockctrl, session->ctrl_ssl, session->protocol_version, in daemon_thrdatamain()
2813 // Do-nothing handler for SIGUSR1; the sole purpose of SIGUSR1 is to
2848 // neatly aligned on 4-byte boundaries, so we must fill in daemon_seraddr()
2851 switch (sockaddrin->ss_family) in daemon_seraddr()
2861 sockaddrout_ipv4.port = htons(sockaddrin_ipv4->sin_port); in daemon_seraddr()
2862 memcpy(&sockaddrout_ipv4.addr, &sockaddrin_ipv4->sin_addr, sizeof(sockaddrout_ipv4.addr)); in daemon_seraddr()
2877 sockaddrout_ipv6.port = htons(sockaddrin_ipv6->sin6_port); in daemon_seraddr()
2878 sockaddrout_ipv6.flowinfo = htonl(sockaddrin_ipv6->sin6_flowinfo); in daemon_seraddr()
2879 memcpy(&sockaddrout_ipv6.addr, &sockaddrin_ipv6->sin6_addr, sizeof(sockaddrout_ipv6.addr)); in daemon_seraddr()
2880 sockaddrout_ipv6.scope_id = htonl(sockaddrin_ipv6->sin6_scope_id); in daemon_seraddr()
2920 if (nread == -1) in rpcapd_recv_msg_header()
2924 return -1; in rpcapd_recv_msg_header()
2929 return -2; in rpcapd_recv_msg_header()
2931 headerp->plen = ntohl(headerp->plen); in rpcapd_recv_msg_header()
2938 * message into errmsgbuf and returns -2. Otherwise, tries to read
2941 * Returns 0 on success, logs a message and returns -1 on a network
2954 return -2; in rpcapd_recv()
2958 if (nread == -1) in rpcapd_recv()
2961 return -1; in rpcapd_recv()
2963 *plen -= nread; in rpcapd_recv()
2969 * Mostly used to discard wrong-sized messages.
2970 * Returns 0 on success, logs a message and returns -1 on a network
2980 if (sock_discard(sock, ssl, len, errbuf, PCAP_ERRBUF_SIZE) == -1) in rpcapd_discard()
2984 return -1; in rpcapd_discard()
2991 // Shut down any packet-capture thread associated with the session,
3001 if (session->have_thread) in session_close()
3010 pcap_breakloop(session->fp); in session_close()
3022 // XXX - what about modules other than NPF? in session_close()
3024 SetEvent(pcap_getevent(session->fp)); in session_close()
3030 // XXX - have a timeout, so we don't wait forever? in session_close()
3032 WaitForSingleObject(session->thread, INFINITE); in session_close()
3038 CloseHandle(session->thread); in session_close()
3039 session->have_thread = 0; in session_close()
3040 session->thread = INVALID_HANDLE_VALUE; in session_close()
3049 pthread_kill(session->thread, SIGUSR1); in session_close()
3055 // XXX - have a timeout, so we don't wait forever? in session_close()
3057 pthread_join(session->thread, NULL); in session_close()
3058 session->have_thread = 0; in session_close()
3059 memset(&session->thread, 0, sizeof(session->thread)); in session_close()
3064 if (session->data_ssl) in session_close()
3068 ssl_finish(session->data_ssl); in session_close()
3069 session->data_ssl = NULL; in session_close()
3073 if (session->sockdata != INVALID_SOCKET) in session_close()
3075 sock_close(session->sockdata, NULL, 0); in session_close()
3076 session->sockdata = INVALID_SOCKET; in session_close()
3079 if (session->fp) in session_close()
3081 pcap_close(session->fp); in session_close()
3082 session->fp = NULL; in session_close()
3100 * URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] in is_url()
3102 * hier-part = "//" authority path-abempty in is_url()
3103 * / path-absolute in is_url()
3104 * / path-rootless in is_url()
3105 * / path-empty in is_url()
3109 * userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) in is_url()
3128 * hier-part = "//" authority path-abempty, not in is_url()
3129 * hier-part = path-absolute in is_url()
3130 * hier-part = path-rootless in is_url()
3131 * hier-part = path-empty in is_url()