Changeset 500 in ntrip
- Timestamp:
- Oct 5, 2007, 5:40:24 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ntripclient/ntripclient.c
r496 r500 1 1 /* 2 2 Easy example NTRIP client for POSIX. 3 $Id: ntripclient.c,v 1.3 12007/09/1807:09:07stoecker Exp $3 $Id: ntripclient.c,v 1.32 2007/09/18 10:39:19 stoecker Exp $ 4 4 Copyright (C) 2003-2005 by Dirk Stoecker <soft@dstoecker.de> 5 5 … … 45 45 46 46 /* CVS revision and version */ 47 static char revisionstr[] = "$Revision: 1.3 1$";48 static char datestr[] = "$Date: 2007/09/18 07:09:07$";47 static char revisionstr[] = "$Revision: 1.32 $"; 48 static char datestr[] = "$Date: 2007/09/18 10:39:19 $"; 49 49 50 50 enum MODE { HTTP = 1, RTSP = 2, NTRIP1 = 3, AUTO = 4, END }; … … 108 108 } 109 109 110 static const char *encodeurl(const char *req) 111 { 112 char *h = "0123456789abcdef"; 113 static char buf[128]; 114 char *urlenc = buf; 115 char *bufend = buf + sizeof(buf); 116 117 while(*req && urlenc != bufend) 118 { 119 if(isalnum(*req) 120 || *req == '-' || *req == '_' || *req == '.') 121 *urlenc++ = *req++; 122 else 123 { 124 *urlenc++ = '%'; 125 *urlenc++ = h[*req >> 4]; 126 *urlenc++ = h[*req & 0x0f]; 127 *req++; 128 } 129 } 130 return buf; 131 } 132 110 133 static const char *geturl(const char *url, struct Args *args) 111 134 { … … 113 136 static char *Buffer = buf; 114 137 static char *Bufend = buf+sizeof(buf); 138 char *h = "0123456789abcdef"; 115 139 116 140 if(strncmp("ntrip:", url, 6)) … … 122 146 /* scan for mountpoint */ 123 147 args->data = Buffer; 124 while(*url && *url != '@' && *url != ';' &&*url != '/' && Buffer != Bufend) 125 *(Buffer++) = *(url++); 148 if(*url != '?') 149 { 150 while(*url && *url != '@' && *url != ';' && *url != '/' && Buffer != Bufend) 151 *(Buffer++) = *(url++); 152 } 153 else 154 { 155 while(*url && *url != '@' && *url != '/' && Buffer != Bufend) 156 { 157 if(isalnum(*url) || *url == '-' || *url == '_' || *url == '.') 158 *Buffer++ = *url++; 159 else 160 { 161 *Buffer++ = '%'; 162 *Buffer++ = h[*url >> 4]; 163 *Buffer++ = h[*url & 0x0f]; 164 *url++; 165 } 166 } 167 } 126 168 if(Buffer == args->data) 127 169 return "Mountpoint required."; … … 249 291 case 'u': args->user = optarg; break; 250 292 case 'p': args->password = optarg; break; 251 case 'd': args->data = optarg; break; 293 case 'd': 294 if(*optarg == '?') 295 args->data = encodeurl(optarg); 296 else 297 args->data = optarg; 298 break; 252 299 case 'n': args->nmea = optarg; break; 253 300 case 'b': args->bitrate = 1; break; … … 389 436 { 390 437 int sleeptime = 0; 391 392 438 do 393 439 { … … 435 481 port = args.port; 436 482 } 437 438 483 memset(&their_addr, 0, sizeof(struct sockaddr_in)); 439 484 if((i = strtol(port, &b, 10)) && (!b || !*b)) … … 460 505 their_addr.sin_family = AF_INET; 461 506 their_addr.sin_addr = *((struct in_addr *)he->h_addr); 462 463 if(args.data && args.mode == RTSP) 507 508 if(args.data && *args.data != '%' && args.mode == RTSP) 464 509 { 465 510 struct sockaddr_in local; … … 762 807 exit(1); 763 808 } 764 if(args.data) 809 if(args.data && *args.data != '%') 765 810 { 766 811 int k = 0; … … 902 947 close(sockfd); 903 948 } 904 } while(args.data && !stop); 949 } while(args.data && *args.data != '%' && !stop); 905 950 } 906 951 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.