@@ -91,6 +91,7 @@ static void sim_parse_display(const char *message) {
9191static int sim_call_pending = 0 ;
9292static int sim_call_active = 0 ;
9393static int sim_hangup_called = 0 ;
94+ static int sim_sip_registered = 1 ; /* 1=registered (default), 0=unavailable */
9495
9596/* ── Millennium SDK stubs ──────────────────────────────────────────── */
9697
@@ -242,6 +243,13 @@ void millennium_client_write_to_display(millennium_client_t *c, const char *m) {
242243 (void )c ; (void )m ;
243244}
244245
246+ /* SIP status stub: controlled by sip_registered scenario command (#94) */
247+ void millennium_sdk_get_sip_status (int * registered , char * last_error , size_t last_error_size ) {
248+ if (registered ) * registered = sim_sip_registered ;
249+ if (last_error && last_error_size > 0 ) last_error [0 ] = '\0' ;
250+ (void )last_error_size ;
251+ }
252+
245253logger_level_t millennium_logger_parse_level (const char * s ) { (void )s ; return LOGGER_INFO ; }
246254void millennium_logger_set_level (logger_level_t l ) { (void )l ; }
247255void millennium_logger_log (logger_level_t l , const char * m ) { (void )l ; (void )m ; }
@@ -448,6 +456,8 @@ static int run_scenario(const char *path) {
448456 return 1 ;
449457 }
450458
459+ sim_sip_registered = 1 ; /* default: SIP registered for each scenario */
460+
451461 while (fgets (line , sizeof (line ), f )) {
452462 line_num ++ ;
453463 cmd = trim (line );
@@ -674,6 +684,14 @@ static int run_scenario(const char *path) {
674684 sim_drain_events ();
675685 }
676686
687+ /* ── sip_registered <0|1> (#94) ──────────────────────────── */
688+ else if (strncmp (cmd , "sip_registered " , 15 ) == 0 ) {
689+ const char * p = cmd + 15 ;
690+ while (* p == ' ' ) p ++ ;
691+ sim_sip_registered = (* p == '1' ) ? 1 : 0 ;
692+ fprintf (stderr , " sip_registered = %d\n" , sim_sip_registered );
693+ }
694+
677695 /* ── config <key> <value> ──────────────────────────────── */
678696 else if (strncmp (cmd , "config " , 7 ) == 0 ) {
679697 char cfg_key [256 ];
0 commit comments