Changeset 500 in ntrip for trunk/ntripclient


Ignore:
Timestamp:
Oct 5, 2007, 5:40:24 PM (17 years ago)
Author:
stuerze
Message:

sth. added for sourcetable filtering

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ntripclient/ntripclient.c

    r496 r500  
    11/*
    22  Easy example NTRIP client for POSIX.
    3   $Id: ntripclient.c,v 1.31 2007/09/18 07:09:07 stoecker Exp $
     3  $Id: ntripclient.c,v 1.32 2007/09/18 10:39:19 stoecker Exp $
    44  Copyright (C) 2003-2005 by Dirk Stoecker <soft@dstoecker.de>
    55   
     
    4545
    4646/* CVS revision and version */
    47 static char revisionstr[] = "$Revision: 1.31 $";
    48 static char datestr[]     = "$Date: 2007/09/18 07:09:07 $";
     47static char revisionstr[] = "$Revision: 1.32 $";
     48static char datestr[]     = "$Date: 2007/09/18 10:39:19 $";
    4949
    5050enum MODE { HTTP = 1, RTSP = 2, NTRIP1 = 3, AUTO = 4, END };
     
    108108}
    109109
     110static 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
    110133static const char *geturl(const char *url, struct Args *args)
    111134{
     
    113136  static char *Buffer = buf;
    114137  static char *Bufend = buf+sizeof(buf);
     138  char *h = "0123456789abcdef";
    115139
    116140  if(strncmp("ntrip:", url, 6))
     
    122146    /* scan for mountpoint */
    123147    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    }
    126168    if(Buffer == args->data)
    127169      return "Mountpoint required.";
     
    249291    case 'u': args->user = optarg; break;
    250292    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;
    252299    case 'n': args->nmea = optarg; break;
    253300    case 'b': args->bitrate = 1; break;
     
    389436  {
    390437    int sleeptime = 0;
    391 
    392438    do
    393439    {
     
    435481        port = args.port;
    436482      }
    437 
    438483      memset(&their_addr, 0, sizeof(struct sockaddr_in));
    439484      if((i = strtol(port, &b, 10)) && (!b || !*b))
     
    460505      their_addr.sin_family = AF_INET;
    461506      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)
    464509      {
    465510        struct sockaddr_in local;
     
    762807          exit(1);
    763808        }
    764         if(args.data)
     809        if(args.data && *args.data != '%')
    765810        {
    766811          int k = 0;
     
    902947        close(sockfd);
    903948      }
    904     } while(args.data && !stop);
     949    } while(args.data && *args.data != '%' && !stop);
    905950  }
    906951  return 0;
Note: See TracChangeset for help on using the changeset viewer.