Changeset 3360

Show
Ignore:
Timestamp:
04/10/00 23:33:08 (14 years ago)
Author:
ucacoxh
Message:

Fixes for -f problem.

- Break late parsing into two - parse_addresses and

parse_options_late.

- Wait for rendez-vous to have completed before sending late options

otherwise settings_load will overwrite transmitted options.

Location:
rat/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • rat/trunk/MODS

    r3359 r3360  
    12491249          phone, location). 
    12501250        - Fix -f codec communication from controller to engine. 
     1251        - Break controller address and option parsing so options are not 
     1252          communicated to engine before rendez-vous has occurred.  Otherwise 
     1253          options can be lost due engine's settings_load occuring 
     1254          after rendez-vous. 
    12511255 
    12521256TODO -- They're features not bugs dammit! 
     
    13041308- Rework media engine initialization, so we can query it before sending 
    13051309  rtp.addr() 
    1306 - The -f command line option is broken (message arrives during rendez_vous). 
    1307  
     1310 
     1311 
  • rat/trunk/main_control.c

    r3359 r3360  
    522522} 
    523523 
    524 static int address_count(int argc, char *argv[]) 
     524static int 
     525parse_options_late(struct mbus *m, char *addr, int argc, char *argv[]) 
    525526{ 
    526527        const args_handler *a; 
    527528        int                 i; 
    528          
    529         for (i = 0; i < argc; i++) { 
    530                 a = get_late_args_handler(argv[i]); 
    531                 if (a == NULL) { 
    532                         break; 
    533                 } 
    534                 i += a->argc; 
    535         } 
    536         return argc - i; 
    537 } 
    538  
    539 static void 
    540 parse_non_addr(struct mbus *m, char *addr, int argc, char *argv[]) 
    541 { 
    542         const args_handler *a; 
    543         int                 i; 
     529 
     530        if (argc < 2) { 
     531                usage(NULL); 
     532                return FALSE; 
     533        } 
     534        argc -= 1; /* Skip process name */ 
     535        argv += 1; 
    544536         
    545537        for (i = 0; i < argc; i++) { 
     
    553545                i += a->argc; 
    554546        } 
    555         return; 
    556 } 
     547        return (i != argc); 
     548} 
     549 
     550static int  
     551address_count(int argc, char *argv[]) 
     552{ 
     553        const args_handler *a; 
     554        int                 i; 
     555         
     556        for (i = 0; i < argc; i++) { 
     557                a = get_late_args_handler(argv[i]); 
     558                if (a == NULL) { 
     559                        break; 
     560                } 
     561                i += a->argc; 
     562        } 
     563        return argc - i; 
     564} 
     565 
    557566 
    558567static int  
     
    591600} 
    592601 
    593 static int  
    594 parse_options(struct mbus *m, char *e_addr, char *u_addr, int argc, char *argv[]) 
     602static int 
     603parse_addresses(struct mbus *m, char *e_addr, int argc, char *argv[]) 
    595604{ 
    596605        char            *addr; 
    597606        int              i, naddr, rx_port, tx_port; 
    598         struct timeval   timeout; 
    599          
     607          
    600608        if (argc < 2) { 
    601609                usage(NULL); 
     
    621629                xfree(addr); 
    622630        } 
    623         parse_non_addr(m, e_addr, argc, argv); 
    624          
    625         /* Synchronize with the sub-processes... */ 
    626         do { 
    627                 mbus_send(m); 
    628                 mbus_heartbeat(m, 1); 
    629                 mbus_retransmit(m); 
    630                 timeout.tv_sec  = 0; 
    631                 timeout.tv_usec = 20000; 
    632                 mbus_recv(m, NULL, &timeout); 
    633         } while (!mbus_sent_all(m)); 
    634          
    635         UNUSED(u_addr); 
    636631        return TRUE; 
    637632} 
     
    836831        u_addr = fork_process(m, UI_NAME,     c_addr, &pid_ui,     token_ui); 
    837832        e_addr = fork_process(m, ENGINE_NAME, c_addr, &pid_engine, token_engine); 
    838          
    839         if (parse_options(m, e_addr, u_addr, argc, argv) == TRUE) { 
     833        if (parse_addresses(m, e_addr, argc, argv) == TRUE) { 
    840834                mbus_rendezvous_go(m, token_engine, (void *) m); 
    841835                mbus_rendezvous_go(m, token_ui,     (void *) m);  
    842                  
     836                parse_options_late(m, e_addr, argc, argv); 
    843837                final_iters = 25; 
    844838                should_exit = FALSE;