/** Main initialisation. */ static void main_init (void) { #ifndef HOST /* Disable watchdog (enabled in bootloader). */ MCUSR &= ~(1 << WDRF); wdt_disable (); #endif /* Serial port */ uart0_init (); /* Enable interrupts */ sei (); /* Main timer */ timer_init (); timer_wait (); /* TWI communications */ asserv_init (); mimot_init (); twi_master_init (); /* IO modules. */ pwm_init (); contact_init (); codebar_init (); usdist_init (); /* AI modules. */ clamp_init (); logistic_init (); path_init (); /* Initialization done. */ proto_send0 ('z'); }
int test_contact(void) { struct contacts *contacts = NULL; struct contact *c; const char *addr = "Neil Young <sip:[email protected]>"; const char *uri = "sip:[email protected]"; struct pl pl_addr; int err; err = contact_init(&contacts); ASSERT_EQ(0, err); /* Verify that we have no contacts */ ASSERT_EQ(0, list_count(contact_list(contacts))); c = contact_find(contacts, "sip:[email protected]"); ASSERT_TRUE(c == NULL); /* Add one contact, list should have one entry and find should return the added contact */ pl_set_str(&pl_addr, addr); err = contact_add(contacts, &c, &pl_addr); ASSERT_EQ(0, err); ASSERT_TRUE(c != NULL); ASSERT_EQ(1, list_count(contact_list(contacts))); c = contact_find(contacts, uri); ASSERT_TRUE(c != NULL); ASSERT_STREQ(addr, contact_str(c)); ASSERT_STREQ(uri, contact_uri(c)); /* Delete 1 contact, verify that list is empty */ mem_deref(c); ASSERT_EQ(0, list_count(contact_list(contacts))); out: mem_deref(contacts); return err; }
/** * Initialise the User-Agents * * @param software SIP User-Agent string * @param udp Enable UDP transport * @param tcp Enable TCP transport * @param tls Enable TLS transport * @param prefer_ipv6 Prefer IPv6 flag * * @return 0 if success, otherwise errorcode */ int ua_init(const char *software, bool udp, bool tcp, bool tls, bool prefer_ipv6) { struct config *cfg = conf_config(); uint32_t bsize; int err; uag.cfg = &cfg->sip; bsize = cfg->sip.trans_bsize; play_init(); err = contact_init(); if (err) return err; /* Initialise Network */ err = net_init(&cfg->net, prefer_ipv6 ? AF_INET6 : AF_INET); if (err) { warning("ua: network init failed: %m\n", err); return err; } uag.use_udp = udp; uag.use_tcp = tcp; uag.use_tls = tls; uag.prefer_ipv6 = prefer_ipv6; list_init(&uag.ual); err = sip_alloc(&uag.sip, net_dnsc(), bsize, bsize, bsize, software, exit_handler, NULL); if (err) { warning("ua: sip stack failed: %m\n", err); goto out; } err = ua_add_transp(); if (err) goto out; err = sip_listen(&uag.lsnr, uag.sip, true, request_handler, NULL); if (err) goto out; err = sipsess_listen(&uag.sock, uag.sip, bsize, sipsess_conn_handler, NULL); if (err) goto out; err = sipevent_listen(&uag.evsock, uag.sip, bsize, bsize, NULL, NULL); if (err) goto out; err = cmd_register(cmdv, ARRAY_SIZE(cmdv)); if (err) goto out; net_change(60, net_change_handler, NULL); out: if (err) { warning("ua: init failed (%m)\n", err); ua_close(); } return err; }