Changeset 9812 in ntrip for trunk/ntripserver/ntripserver.c


Ignore:
Timestamp:
Aug 23, 2022, 4:30:54 PM (2 years ago)
Author:
stoecker
Message:

prevent large UDP packets

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ntripserver/ntripserver.c

    r9643 r9812  
    15891589    }
    15901590    else if ((nBufferBytes) && (outmode == UDP)) {
     1591      int i;
    15911592      char rtpbuf[1592];
    1592       int i;
    1593       int ct = time(0);
    1594       udp_tim += (ct - udp_init) * 1000000 / TIME_RESOLUTION;
    1595       udp_init = ct;
    1596       rtpbuf[0] = (2 << 6);
    1597       rtpbuf[1] = 96;
    1598       rtpbuf[2] = (udp_seq >> 8) & 0xFF;
    1599       rtpbuf[3] = (udp_seq) & 0xFF;
    1600       rtpbuf[4] = (udp_tim >> 24) & 0xFF;
    1601       rtpbuf[5] = (udp_tim >> 16) & 0xFF;
    1602       rtpbuf[6] = (udp_tim >> 8) & 0xFF;
    1603       rtpbuf[7] = (udp_tim) & 0xFF;
    1604       rtpbuf[8] = (rtpssrc >> 24) & 0xFF;
    1605       rtpbuf[9] = (rtpssrc >> 16) & 0xFF;
    1606       rtpbuf[10] = (rtpssrc >> 8) & 0xFF;
    1607       rtpbuf[11] = (rtpssrc) & 0xFF;
    1608       ++udp_seq;
    1609       memcpy(rtpbuf + 12, buffer, nBufferBytes);
    1610       if ((i = send(socket_tcp, rtpbuf, (size_t) nBufferBytes + 12, MSG_DONTWAIT)) != nBufferBytes + 12) {
    1611         if (errno != EAGAIN) {
    1612           perror("WARNING: could not send data to Destination caster");
    1613           return;
    1614         }
    1615       } else
    1616         nBufferBytes = 0;
     1593      while(nBufferBytes)
     1594      {
     1595        int ct = time(0);
     1596        int s = nBufferBytes;
     1597        if(s > 1400)
     1598          s = 1400;
     1599        udp_tim += (ct - udp_init) * 1000000 / TIME_RESOLUTION;
     1600        udp_init = ct;
     1601        rtpbuf[0] = (2 << 6);
     1602        rtpbuf[1] = 96;
     1603        rtpbuf[2] = (udp_seq >> 8) & 0xFF;
     1604        rtpbuf[3] = (udp_seq) & 0xFF;
     1605        rtpbuf[4] = (udp_tim >> 24) & 0xFF;
     1606        rtpbuf[5] = (udp_tim >> 16) & 0xFF;
     1607        rtpbuf[6] = (udp_tim >> 8) & 0xFF;
     1608        rtpbuf[7] = (udp_tim) & 0xFF;
     1609        rtpbuf[8] = (rtpssrc >> 24) & 0xFF;
     1610        rtpbuf[9] = (rtpssrc >> 16) & 0xFF;
     1611        rtpbuf[10] = (rtpssrc >> 8) & 0xFF;
     1612        rtpbuf[11] = (rtpssrc) & 0xFF;
     1613        ++udp_seq;
     1614        memcpy(rtpbuf + 12, buffer, s);
     1615        if ((i = send(socket_tcp, rtpbuf, (size_t) s + 12, MSG_DONTWAIT)) != s + 12) {
     1616          if (errno != EAGAIN) {
     1617            perror("WARNING: could not send data to Destination caster");
     1618            return;
     1619          }
     1620        } else
     1621          nBufferBytes -= s;
     1622      }
    16171623      i = recv(socket_tcp, rtpbuf, sizeof(rtpbuf), 0);
    16181624      if (i >= 12 && (unsigned char) rtpbuf[0] == (2 << 6)
     
    19962002  fprintf(stderr, "       Note that the program automatically falls back from mode rtsp to mode http and\n");
    19972003  fprintf(stderr, "       further to mode ntrip1 if necessary.\n\n");
    1998   fprintf(stderr, "       -a <DestHost>     Destination caster/server name or address, default: 127.0.0.1,\n");
     2004  fprintf(stderr, "       -a <DestHost>     Destination caster/server name or address, default: " NTRIP_CASTER ",\n");
    19992005  fprintf(stderr, "                         mandatory\n");
    20002006  fprintf(stderr, "       -p <DestPort>     Destination caster/server port, default: 2101,\n");
Note: See TracChangeset for help on using the changeset viewer.