Changeset 9448 in ntrip for trunk/ntripserver/ntripserver.c
- Timestamp:
- May 28, 2021, 12:23:36 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ntripserver/ntripserver.c
r9404 r9448 104 104 NTRIP1 = 3, 105 105 UDP = 4, 106 T DC= 5,106 TCPIP = 5, 107 107 END 108 108 }; … … 230 230 const char *ntrip_str = ""; 231 231 232 const char *dabplus_provider = 0;233 char dabplus_provider_str[17] = "";234 235 232 const char *user = ""; 236 233 const char *password = ""; … … 296 293 } 297 294 while ((c = getopt(argc, argv, 298 "M:i:h:b:p:s:a:m:c:H:P:f:x:y:l:u:V:D:U:W:O:E:F:R:N: T:n:B")) != EOF) {295 "M:i:h:b:p:s:a:m:c:H:P:f:x:y:l:u:V:D:U:W:O:E:F:R:N:n:B")) != EOF) { 299 296 switch (c) { 300 297 case 'M': /*** InputMode ***/ … … 422 419 else if (!strcmp(optarg, "u") || !strcmp(optarg, "udp")) 423 420 outputmode = UDP; 424 else if (!strcmp(optarg, "t") || !strcmp(optarg, "t dc"))425 outputmode = T DC;421 else if (!strcmp(optarg, "t") || !strcmp(optarg, "tcpip")) 422 outputmode = TCPIP; 426 423 else 427 424 outputmode = atoi(optarg); … … 438 435 ntrip_str = optarg; 439 436 break; 440 case 'T':441 dabplus_provider = optarg;442 break;443 437 case 'h': /* print help screen */ 444 438 case '?': … … 471 465 } 472 466 473 if (!mountpoint && outputmode != T DC) {467 if (!mountpoint && outputmode != TCPIP) { 474 468 fprintf(stderr, "ERROR: Missing mountpoint argument for stream upload\n"); 475 469 exit(1); 476 470 } 477 478 if (outputmode == TDC) { 479 fprintf(stderr, "ERROR: DABPLUS server upload implementation is so far not completed\n\n"); 480 exit(0); 481 471 if (outputmode == TCPIP) { 482 472 mountpoint = NULL; 483 if (dabplus_provider) {484 i = snprintf(dabplus_provider_str, 17, "%16s", dabplus_provider);485 if ((i > 16) || (i < 0)) {486 fprintf(stderr, "ERROR: DABPLUS provider name to long - length = %d (max: %d)\n", i, 16);487 exit(0);488 }489 }490 else {491 fprintf(stderr, "ERROR: DABPLUS provider name required\n");492 exit(0);493 }494 473 } 495 474 496 475 if (!password[0]) { 497 if (outputmode != T DC)476 if (outputmode != TCPIP) 498 477 fprintf(stderr, 499 478 "WARNING: Missing password argument for stream upload - are you really sure?\n"); … … 515 494 /*** proxy server handling ***/ 516 495 if (*proxyhost) { 517 if (outputmode == TDC) { 518 fprintf(stderr, "\nWARNING: TDC is not able to support proxy servers, try direct connection\n\n"); 519 inhost = proxyhost; 520 inport = proxyport; 521 outhost = casterouthost; 522 outport = casteroutport; 523 } else { 524 outhost = inhost = proxyhost; 525 outport = inport = proxyport; 526 } 527 i = snprintf(szSendBuffer, sizeof(szSendBuffer), "http://%s:%d", casterouthost, casteroutport); 528 if ((i > SZ) || (i < 0)) { 529 fprintf(stderr, 530 "ERROR: Destination caster name/port to long - length = %d (max: %d)\n", 531 i, SZ); 532 exit(0); 533 } else { 534 strncpy(post_extension, szSendBuffer, (size_t) i); 535 strcpy(szSendBuffer, ""); 536 i = snprintf(szSendBuffer, sizeof(szSendBuffer), ":%d", casteroutport); 537 strncpy(rtsp_extension, szSendBuffer, SZ); 538 strcpy(szSendBuffer, ""); i = 0; 539 } 496 inhost = proxyhost; 497 inport = proxyport; 540 498 i = snprintf(szSendBuffer, sizeof(szSendBuffer), "http://%s:%d", casterinhost, casterinport); 541 499 if ((i > SZ) || (i < 0)) { … … 549 507 i = 0; 550 508 } 509 if (strstr(casterouthost, "127.0.0.1") || 510 strstr(casterouthost, "localhost")) { 511 outhost = casterouthost; 512 outport = casteroutport; 513 } 514 else { 515 outhost = proxyhost; 516 outport = proxyport; 517 i = snprintf(szSendBuffer, sizeof(szSendBuffer), "http://%s:%d", casterouthost, casteroutport); 518 if ((i > SZ) || (i < 0)) { 519 fprintf(stderr, 520 "ERROR: Destination caster name/port to long - length = %d (max: %d)\n", 521 i, SZ); 522 exit(0); 523 } else { 524 strncpy(post_extension, szSendBuffer, (size_t) i); 525 strcpy(szSendBuffer, ""); 526 i = snprintf(szSendBuffer, sizeof(szSendBuffer), ":%d", casteroutport); 527 strncpy(rtsp_extension, szSendBuffer, SZ); 528 strcpy(szSendBuffer, ""); i = 0; 529 } 530 } 531 551 532 } else { 552 533 outhost = casterouthost; … … 682 663 } 683 664 } /* connect to input-caster or proxy server*/ 684 else if (connect(gps_socket, (struct sockaddr*) &caster, sizeof(caster)) 685 < 0) { 665 else if (connect(gps_socket, (struct sockaddr*) &caster, sizeof(caster)) < 0) { 686 666 fprintf(stderr, "WARNING: can't connect input to %s at port %d\n", 687 667 inet_ntoa(caster.sin_addr), inport); … … 728 708 szSendBuffer[nBufferBytes++] = '\r'; 729 709 szSendBuffer[nBufferBytes++] = '\n'; 730 //fprintf(stdout, "%s\n", szSendBuffer);710 fprintf(stdout, "%s\n", szSendBuffer); 731 711 if ((send(gps_socket, szSendBuffer, (size_t) nBufferBytes, 0)) != nBufferBytes) { 732 712 fprintf(stderr, "WARNING: could not send Source caster request\n"); … … 917 897 break; 918 898 } 919 920 899 memset((char*) &caster, 0x00, sizeof(caster)); 921 900 memcpy(&caster.sin_addr, he->h_addr, (size_t)he->h_length); … … 929 908 outputmode == HTTP ? "http" : 930 909 outputmode == UDP ? "udp" : 931 outputmode == RTSP ? "rtsp" : "t dc");910 outputmode == RTSP ? "rtsp" : "tcpip"); 932 911 933 912 if (connect(socket_tcp, (struct sockaddr*) &caster, sizeof(caster)) < 0) { … … 1190 1169 break; 1191 1170 } 1192 if ((getsockname(socket_udp, (struct sockaddr*) &local, &len)) 1193 != -1) { 1171 if ((getsockname(socket_udp, (struct sockaddr*) &local, &len)) != -1) { 1194 1172 client_port = (unsigned int) ntohs(local.sin_port); 1195 1173 } else { … … 1327 1305 input_init = output_init = 0; 1328 1306 break; 1329 case T DC:1307 case TCPIP: 1330 1308 fallback = 0; 1331 szSendBuffer[0] = 0x28;1332 szSendBuffer[1] = 0x11;1333 szSendBuffer[2] = 0x19;1334 szSendBuffer[3] = 0x69;1335 strncpy(szSendBuffer + 4, dabplus_provider_str, 16);1336 szSendBuffer[20] = 0; // mot1337 nBufferBytes = strlen(szSendBuffer);1338 if ((nBufferBytes > 20) || (nBufferBytes < 0)) {1339 fprintf(stderr, "ERROR: Destination server request to long\n");1340 reconnect_sec_max = 0;1341 output_init = 0;1342 break;1343 }1344 if (!send_to_caster(szSendBuffer, socket_tcp, nBufferBytes)) {1345 output_init = 0;1346 break;1347 }1348 /* check Destination server's response1349 in case of a unidirectional connection muxd will close the connection1350 if an error occurs without transmitting any status information1351 */1352 1309 send_receive_loop(socket_tcp, outputmode, NULL, 0, 0, chunkymode); 1353 1310 input_init = output_init = 0; … … 1580 1537 /* send data */ 1581 1538 /*****************/ 1582 if ((nBufferBytes) && (outmode == NTRIP1 )) {1539 if ((nBufferBytes) && (outmode == NTRIP1 || outmode == TCPIP)) { 1583 1540 int i; 1584 1541 if ((i = send(sock, buffer, (size_t) nBufferBytes, MSG_DONTWAIT)) != nBufferBytes) { … … 1750 1707 } 1751 1708 } 1752 else if ((nBufferBytes) && (outmode == TDC)) { 1753 1709 else if ((nBufferBytes) && (outmode == TCPIP)) { 1710 int i; 1711 if ((i = send(sock, buffer, (size_t) nBufferBytes, MSG_DONTWAIT)) != nBufferBytes) { 1712 if (i < 0) { 1713 if (errno != EAGAIN) { 1714 perror("WARNING: could not send data to IP server and port"); 1715 return; 1716 } 1717 } else if (i) { 1718 memmove(buffer, buffer + i, (size_t) (nBufferBytes - i)); 1719 nBufferBytes -= i; 1720 } 1721 } else { 1722 nBufferBytes = 0; 1723 } 1754 1724 } 1755 1725 if (send_recv_success == 3) … … 1939 1909 fprintf(stderr, 1940 1910 " and forward that incoming stream (Output, Destination) to either\n\n"); 1941 fprintf(stderr, " - an NTRIP Version 1.0 Caster, or\n"); 1942 fprintf(stderr, " - an NTRIP Version 2.0 Caster via TCP/IP or RTSP/RTP, or \n"); 1943 fprintf(stderr, " - an DABPLUS Content Server via TCP/IP and TDC \n\n\n"); 1911 fprintf(stderr, " 1. an NTRIP Version 2.0 Caster via TCP/IP (Output, Destination), or\n"); 1912 fprintf(stderr, " 2. an NTRIP Version 2.0 Caster via RTSP/RTP (Output, Destination), or\n"); 1913 fprintf(stderr, " 3. an NTRIP Version 2.0 Caster via plain UDP (Output, Destination), or\n"); 1914 fprintf(stderr, " 4. an NTRIP Version 1.0 Caster, or\n"); 1915 fprintf(stderr, " 5. an IP server via TCP/IP\n\n\n"); 1944 1916 fprintf(stderr, "OPTIONS\n"); 1945 1917 fprintf(stderr, " -h|? print this help screen\n\n"); … … 1953 1925 fprintf(stderr, " optional\n\n"); 1954 1926 fprintf(stderr, " -M <InputMode> Sets the input mode (1 = Serial Port, 2 = IP server,\n"); 1955 fprintf(stderr, " 3 = File, 4 = SISNeT Data Server, 5 = UDP server, 6 = NTRIP1 Caster, 7 = NTRIP2 Caster in HTTP mode),\n"); 1927 fprintf(stderr, " 3 = File, 4 = SISNeT Data Server, 5 = UDP server, 6 = NTRIP1 Caster,\n"); 1928 fprintf(stderr, " 7 = NTRIP2 Caster in HTTP mode),\n"); 1956 1929 fprintf(stderr, " mandatory\n\n"); 1957 1930 fprintf(stderr, " <InputMode> = 1 (Serial Port):\n"); … … 1995 1968 fprintf(stderr, " for protected streams if <InputMode> = 6|7\n\n"); 1996 1969 fprintf(stderr, " -O <OutputMode> Sets output mode for communication with destination caster / server\n"); 1997 fprintf(stderr, " 1 = http :NTRIP Version 2.0 Caster in TCP/IP mode\n");1998 fprintf(stderr, " 2 = rtsp :NTRIP Version 2.0 Caster in RTSP/RTP mode\n");1970 fprintf(stderr, " 1 = http : NTRIP Version 2.0 Caster in TCP/IP mode\n"); 1971 fprintf(stderr, " 2 = rtsp : NTRIP Version 2.0 Caster in RTSP/RTP mode\n"); 1999 1972 fprintf(stderr, " 3 = ntrip1: NTRIP Version 1.0 Caster\n"); 2000 fprintf(stderr, " 4 = udp :NTRIP Version 2.0 Caster in Plain UDP mode\n");2001 fprintf(stderr, " 5 = t dc: DABPLUS Content Server in TDCmode\n\n\n");1973 fprintf(stderr, " 4 = udp : NTRIP Version 2.0 Caster in Plain UDP mode\n"); 1974 fprintf(stderr, " 5 = tcpip : IP server in TCP/IP mode\n\n\n"); 2002 1975 fprintf(stderr, " Defaults to NTRIP1.0, but will change to 2.0 in future versions\n"); 2003 1976 fprintf(stderr, " Note that the program automatically falls back from mode rtsp to mode http and\n"); 2004 1977 fprintf(stderr, " further to mode ntrip1 if necessary.\n\n"); 2005 fprintf(stderr, " -a <DestHost> Destination caster name or address, default: 127.0.0.1,\n");1978 fprintf(stderr, " -a <DestHost> Destination caster/server name or address, default: 127.0.0.1,\n"); 2006 1979 fprintf(stderr, " mandatory\n"); 2007 fprintf(stderr, " -p <DestPort> Destination caster port, default: 2101,\n");1980 fprintf(stderr, " -p <DestPort> Destination caster/server port, default: 2101,\n"); 2008 1981 fprintf(stderr, " mandatory\n"); 2009 1982 fprintf(stderr, " -m <DestMount> Destination caster mountpoint for stream upload,\n"); … … 2015 1988 fprintf(stderr, " -N <STR-record> Sourcetable STR-record\n"); 2016 1989 fprintf(stderr, " optional for NTRIP Version 2.0 in RTSP/RTP and TCP/IP mode\n\n"); 2017 fprintf(stderr, " -T <DAB+provider> DAB+ provider name, not longer than 16 char, mandatory for \n");2018 fprintf(stderr, " upload to DABPLUS Content Server in TDC mode\n");2019 1990 exit(rc); 2020 1991 } /* usage */
Note:
See TracChangeset
for help on using the changeset viewer.