|  | @@ -214,6 +214,7 @@ static void show_help ()
 | 
		
	
		
			
			| 214 | 214 |      "Options:\n"
 | 
		
	
		
			
			| 215 | 215 |      "   -s<file>       read secrets from file (required)\n"
 | 
		
	
		
			
			| 216 | 216 |      "   -d<domain>     set domain name for rewrite (required)\n"
 | 
		
	
		
			
			|  | 217 | +    "   -a<char>       set first separator character which can be one of: -=+ (default: =)\n"
 | 
		
	
		
			
			| 217 | 218 |      "   -f<port>       set port for the forward SRS lookup (default: 10001)\n"
 | 
		
	
		
			
			| 218 | 219 |      "   -r<port>       set port for the reverse SRS lookup (default: 10002)\n"
 | 
		
	
		
			
			| 219 | 220 |      "   -p<pidfile>    write process ID to pidfile (default: none)\n"
 | 
		
	
	
		
			
			|  | @@ -239,7 +240,7 @@ int main (int argc, char **argv)
 | 
		
	
		
			
			| 239 | 240 |    int opt, timeout = 1800, family = AF_INET;
 | 
		
	
		
			
			| 240 | 241 |    int daemonize = FALSE;
 | 
		
	
		
			
			| 241 | 242 |    char *forward_service = NULL, *reverse_service = NULL,
 | 
		
	
		
			
			| 242 |  | -       *user = NULL, *domain = NULL, *chroot_dir = NULL;
 | 
		
	
		
			
			|  | 243 | +       *user = NULL, *domain = NULL, *chroot_dir = NULL, separator = NULL;
 | 
		
	
		
			
			| 243 | 244 |    int forward_sock, reverse_sock;
 | 
		
	
		
			
			| 244 | 245 |    char *secret_file = NULL, *pid_file = NULL;
 | 
		
	
		
			
			| 245 | 246 |    FILE *pf = NULL, *sf = NULL;
 | 
		
	
	
		
			
			|  | @@ -257,7 +258,7 @@ int main (int argc, char **argv)
 | 
		
	
		
			
			| 257 | 258 |    tmp = strrchr(argv[0], '/');
 | 
		
	
		
			
			| 258 | 259 |    if (tmp) self = strdup(tmp + 1); else self = strdup(argv[0]);
 | 
		
	
		
			
			| 259 | 260 |  
 | 
		
	
		
			
			| 260 |  | -  while ((opt = getopt(argc, argv, "46d:f:r:s:u:t:p:c:X::Dhev")) != -1) {
 | 
		
	
		
			
			|  | 261 | +  while ((opt = getopt(argc, argv, "46d:a:f:r:s:u:t:p:c:X::Dhev")) != -1) {
 | 
		
	
		
			
			| 261 | 262 |      switch (opt) {
 | 
		
	
		
			
			| 262 | 263 |        case '?':
 | 
		
	
		
			
			| 263 | 264 |          return EXIT_FAILURE;
 | 
		
	
	
		
			
			|  | @@ -270,6 +271,9 @@ int main (int argc, char **argv)
 | 
		
	
		
			
			| 270 | 271 |        case 'd':
 | 
		
	
		
			
			| 271 | 272 |          domain = strdup(optarg);
 | 
		
	
		
			
			| 272 | 273 |          break;
 | 
		
	
		
			
			|  | 274 | +      case 'a':
 | 
		
	
		
			
			|  | 275 | +        separator = (char)*optarg;
 | 
		
	
		
			
			|  | 276 | +        break;
 | 
		
	
		
			
			| 273 | 277 |        case 'f':
 | 
		
	
		
			
			| 274 | 278 |          forward_service = strdup(optarg);
 | 
		
	
		
			
			| 275 | 279 |          break;
 | 
		
	
	
		
			
			|  | @@ -318,6 +322,8 @@ int main (int argc, char **argv)
 | 
		
	
		
			
			| 318 | 322 |        case 'e':
 | 
		
	
		
			
			| 319 | 323 |          if ( getenv("SRS_DOMAIN") != NULL )
 | 
		
	
		
			
			| 320 | 324 |            domain = strdup(getenv("SRS_DOMAIN"));
 | 
		
	
		
			
			|  | 325 | +        if ( getenv("SRS_SEPARATOR") != NULL )
 | 
		
	
		
			
			|  | 326 | +          separator = (char)*getenv("SRS_SEPARATOR");
 | 
		
	
		
			
			| 321 | 327 |          if ( getenv("SRS_FORWARD_PORT") != NULL )
 | 
		
	
		
			
			| 322 | 328 |            forward_service = strdup(getenv("SRS_FORWARD_PORT"));
 | 
		
	
		
			
			| 323 | 329 |          if ( getenv("SRS_REVERSE_PORT") != NULL )
 | 
		
	
	
		
			
			|  | @@ -455,7 +461,9 @@ int main (int argc, char **argv)
 | 
		
	
		
			
			| 455 | 461 |        srs_add_secret (srs, secret);
 | 
		
	
		
			
			| 456 | 462 |    }
 | 
		
	
		
			
			| 457 | 463 |    fclose (sf);
 | 
		
	
		
			
			| 458 |  | -  srs_set_separator (srs, '+');
 | 
		
	
		
			
			|  | 464 | +  if (separator && srs_set_separator (srs, separator) != SRS_SUCCESS) {
 | 
		
	
		
			
			|  | 465 | +    srs_set_separator (srs, '=');
 | 
		
	
		
			
			|  | 466 | +  }
 | 
		
	
		
			
			| 459 | 467 |  
 | 
		
	
		
			
			| 460 | 468 |    fds[0].fd = forward_sock;
 | 
		
	
		
			
			| 461 | 469 |    fds[0].events = POLLIN;
 |