/* sapd: main.c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <signal.h> #include "sapmanager.h" #include "sapbtlistener.h" #include "capabilityagent.h" #include "hostmanageragent.h" static int signal_init(int signum, void (*fn)(int)); static void sigint(int signum); volatile int sigint_flag=0; int main(int argc, char *argv[]) { sap_manager *manager; sap_listener *listener; capability_agent *agent; char *bt_address; if(argc!=2 || strcmp(argv[argc-1],"--help")==0) { printf("Syntax: %s bt_address\n",argv[0]); return(1); } if((manager=sap_manager_new())==NULL) { printf("ERROR: Couldn't initialize sap manager\n"); return(2); } if((agent=capability_agent_new(manager))==NULL) { printf("ERROR: Couldn't initialize sap capability agent\n"); sap_manager_free(manager),manager=NULL; return(3); } host_manager_agent_register_services(manager); if((listener=sap_listener_new())==NULL) { printf("ERROR: Couldn't initialize sap listener\n"); capability_agent_free(agent),agent=NULL; sap_manager_free(manager),manager=NULL; return(4); } bt_address=argv[1]; sap_listener_start(listener); sap_listener_nudge(listener,bt_address); sigint_flag=0; signal_init(SIGINT,sigint); while(!sigint_flag) { sap_manager_loop(manager,0); sap_listener_loop(listener,100); } sap_listener_free(listener),listener=NULL; capability_agent_free(agent),agent=NULL; sap_manager_free(manager),manager=NULL; return(0); } static int signal_init(int signum, void (*fn)(int)) { struct sigaction sa; sa.sa_handler=fn; sigemptyset(&sa.sa_mask); sa.sa_flags=0; return(sigaction(signum,&sa,0)); } static void sigint(int signum) { sigint_flag=1; }