Home | History | Annotate | Download | only in base

Lines Matching refs:seg

534   Segment seg;
535 seg
536 seg.seq = bytes_to_long(buffer + 4);
537 seg.ack = bytes_to_long(buffer + 8);
538 seg.flags = buffer[13];
539 seg.wnd = bytes_to_short(buffer + 14);
541 seg.tsval = bytes_to_long(buffer + 16);
542 seg.tsecr = bytes_to_long(buffer + 20);
544 seg.data = reinterpret_cast<const char *>(buffer) + HEADER_SIZE;
545 seg.len = size - HEADER_SIZE;
548 LOG(LS_INFO) << "--> <CONV=" << seg.conv
549 << "><FLG=" << static_cast<unsigned>(seg.flags)
550 << "><SEQ=" << seg.seq << ":" << seg.seq + seg.len
551 << "><ACK=" << seg.ack
552 << "><WND=" << seg.wnd
553 << "><TS=" << (seg.tsval % 10000)
554 << "><TSR=" << (seg.tsecr % 10000)
555 << "><LEN=" << seg.len << ">";
558 return process(seg);
598 bool PseudoTcp::process(Segment& seg) {
600 if (seg.conv != m_conv) {
601 //if ((seg.flags & FLAG_RST) == 0) {
602 // packet(tcb, seg.ack, 0, FLAG_RST, 0, 0);
619 if (seg.flags & FLAG_RST) {
626 if (seg.flags & FLAG_CTL) {
627 if (seg.len == 0) {
630 } else if (seg.data[0] == CTL_CONNECT) {
649 LOG_F(LS_WARNING) << "Unknown control code: " << seg.data[0];
655 if ((seg.seq <= m_ts_lastack) && (m_ts_lastack < seg.seq + seg.len)) {
656 m_ts_recent = seg.tsval;
660 if ((seg.ack > m_snd_una) && (seg.ack <= m_snd_nxt)) {
662 if (seg.tsecr) {
663 long rtt = talk_base::TimeDiff(now, seg.tsecr);
684 m_snd_wnd = seg.wnd;
686 uint32 nAcked = seg.ack - m_snd_una;
687 m_snd_una = seg.ack;
759 } else if (seg.ack == m_snd_una) {
761 m_snd_wnd = seg.wnd;
764 if (seg.len > 0) {
797 if (seg.seq != m_rcv_nxt) {
799 } else if (seg.len != 0) {
808 if (seg.seq > m_rcv_nxt) {
810 } else if (seg.seq + seg.len <= m_rcv_nxt) {
817 if (seg.seq < m_rcv_nxt) {
818 uint32 nAdjust = m_rcv_nxt - seg.seq;
819 if (nAdjust < seg.len) {
820 seg.seq += nAdjust;
821 seg.data += nAdjust;
822 seg.len -= nAdjust;
824 seg.len = 0;
827 if ((seg.seq + seg.len - m_rcv_nxt) > (sizeof(m_rbuf) - m_rlen)) {
828 uint32 nAdjust = seg.seq + seg.len - m_rcv_nxt - (sizeof(m_rbuf) - m_rlen);
829 if (nAdjust < seg.len) {
830 seg.len -= nAdjust;
832 seg.len = 0;
836 bool bIgnoreData = (seg.flags & FLAG_CTL) || (m_shutdown != SD_NONE);
839 if (seg.len > 0) {
841 if (seg.seq == m_rcv_nxt) {
842 m_rcv_nxt += seg.len;
845 uint32 nOffset = seg.seq - m_rcv_nxt;
846 memcpy(m_rbuf + m_rlen + nOffset, seg.data, seg.len);
847 if (seg.seq == m_rcv_nxt) {
848 m_rlen += seg.len;
849 m_rcv_nxt += seg.len;
850 m_rcv_wnd -= seg.len;
869 LOG(LS_INFO) << "Saving " << seg.len << " bytes (" << seg.seq << " -> " << seg.seq + seg.len << ")";
872 rseg.seq = seg.seq;
873 rseg.len = seg.len;
897 bool PseudoTcp::transmit(const SList::iterator& seg, uint32 now) {
898 if (seg->xmit >= ((m_state == TCP_ESTABLISHED) ? 15 : 30)) {
903 uint32 nTransmit = talk_base::_min(seg->len, m_mss);
906 uint32 seq = seg->seq;
907 uint8 flags = (seg->bCtrl ? FLAG_CTL : 0);
908 const char* buffer = m_sbuf + (seg->seq - m_snd_una);
940 if (nTransmit < seg->len) {
943 SSegment subseg(seg->seq + nTransmit, seg->len - nTransmit, seg->bCtrl);
944 //subseg.tstamp = seg->tstamp;
945 subseg.xmit = seg->xmit;
946 seg->len = nTransmit;
948 SList::iterator next = seg;
952 if (seg->xmit == 0) {
953 m_snd_nxt += seg->len;
955 seg->xmit += 1;
956 //seg->tstamp = now;
1036 SList::iterator seg = it;
1039 if (seg->len > nAvailable) {
1040 SSegment subseg(seg->seq + nAvailable, seg->len - nAvailable, seg->bCtrl);
1041 seg->len = nAvailable;
1045 if (!transmit(seg, now)) {