Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/locsrv/locsrv.c

    r3a9cf35 r3e6a98c5  
    184184        assert(fibril_mutex_is_locked(&services_list_mutex));
    185185       
    186         list_foreach(namespaces_list, namespaces, loc_namespace_t, namespace) {
     186        list_foreach(namespaces_list, item) {
     187                loc_namespace_t *namespace =
     188                    list_get_instance(item, loc_namespace_t, namespaces);
    187189                if (str_cmp(namespace->name, name) == 0)
    188190                        return namespace;
     
    201203        assert(fibril_mutex_is_locked(&services_list_mutex));
    202204       
    203         list_foreach(namespaces_list, namespaces, loc_namespace_t, namespace) {
     205        list_foreach(namespaces_list, item) {
     206                loc_namespace_t *namespace =
     207                    list_get_instance(item, loc_namespace_t, namespaces);
    204208                if (namespace->id == id)
    205209                        return namespace;
     
    215219        assert(fibril_mutex_is_locked(&services_list_mutex));
    216220       
    217         list_foreach(services_list, services, loc_service_t, service) {
     221        list_foreach(services_list, item) {
     222                loc_service_t *service =
     223                    list_get_instance(item, loc_service_t, services);
    218224                if ((str_cmp(service->namespace->name, ns_name) == 0)
    219225                    && (str_cmp(service->name, name) == 0))
     
    233239        assert(fibril_mutex_is_locked(&services_list_mutex));
    234240       
    235         list_foreach(services_list, services, loc_service_t, service) {
     241        list_foreach(services_list, item) {
     242                loc_service_t *service =
     243                    list_get_instance(item, loc_service_t, services);
    236244                if (service->id == id)
    237245                        return service;
     
    320328                svc_categ_t *memb = list_get_instance(link, svc_categ_t,
    321329                    svc_link);
    322                 category_t *cat = memb->cat;
    323                
    324                 fibril_mutex_lock(&cat->mutex);
     330                fibril_mutex_lock(&memb->cat->mutex);
    325331                category_remove_service(memb);
    326                 fibril_mutex_unlock(&cat->mutex);
     332                fibril_mutex_unlock(&memb->cat->mutex);
    327333        }
    328334       
     
    412418{
    413419        if (server == NULL)
    414                 return EEXIST;
     420                return EEXISTS;
    415421       
    416422        fibril_mutex_lock(&servers_list_mutex);
     
    445451        free(server);
    446452       
    447         loc_category_change_event();
    448453        return EOK;
    449454}
     
    468473        }
    469474       
     475        /* Set the interface, if any. */
     476        service->forward_interface = IPC_GET_ARG1(*icall);
     477
    470478        /* Get fqsn */
    471479        char *fqsn;
     
    512520                free(service->name);
    513521                free(service);
    514                 async_answer_0(iid, EEXIST);
     522                async_answer_0(iid, EEXISTS);
    515523                return;
    516524        }
     
    558566        fibril_mutex_unlock(&services_list_mutex);
    559567        async_answer_0(iid, EOK);
    560 
    561         loc_category_change_event();
    562568}
    563569
     
    702708 *
    703709 */
    704 static void loc_forward(ipc_callid_t callid, ipc_call_t *call, void *arg)
     710static void loc_forward(ipc_callid_t callid, ipc_call_t *call)
    705711{
    706712        fibril_mutex_lock(&services_list_mutex);
     
    709715         * Get ID from request
    710716         */
    711         iface_t iface = IPC_GET_ARG1(*call);
    712717        service_id_t id = IPC_GET_ARG2(*call);
    713718        loc_service_t *svc = loc_service_find_id(id);
     
    720725       
    721726        async_exch_t *exch = async_exchange_begin(svc->server->sess);
    722         async_forward_fast(callid, exch, iface, svc->id, 0, IPC_FF_NONE);
     727       
     728        if (svc->forward_interface == 0)
     729                async_forward_fast(callid, exch, svc->id, 0, 0, IPC_FF_NONE);
     730        else
     731                async_forward_fast(callid, exch, svc->forward_interface,
     732                    svc->id, 0, IPC_FF_NONE);
     733       
    723734        async_exchange_end(exch);
    724735       
     
    878889        fibril_mutex_lock(&callback_sess_mutex);
    879890       
    880         list_foreach(callback_sess_list, cb_sess_list, cb_sess_t, cb_sess) {
     891        list_foreach(callback_sess_list, link) {
     892                cb_sess_t *cb_sess;
     893               
     894                cb_sess = list_get_instance(link, cb_sess_t, cb_sess_list);
     895               
    881896                async_exch_t *exch = async_exchange_begin(cb_sess->sess);
    882897                async_msg_0(exch, LOC_EVENT_CAT_CHANGE);
     
    954969            loc_namespace_find_id(IPC_GET_ARG1(*icall));
    955970        if (namespace == NULL)
    956                 async_answer_0(iid, EEXIST);
     971                async_answer_0(iid, EEXISTS);
    957972        else
    958973                async_answer_1(iid, EOK, namespace->refcnt);
     
    10351050       
    10361051        size_t pos = 0;
    1037         list_foreach(namespaces_list, namespaces, loc_namespace_t, namespace) {
     1052        list_foreach(namespaces_list, item) {
     1053                loc_namespace_t *namespace =
     1054                    list_get_instance(item, loc_namespace_t, namespaces);
     1055               
    10381056                desc[pos].id = namespace->id;
    10391057                str_cpy(desc[pos].name, LOC_NAME_MAXLEN, namespace->name);
     
    10961114       
    10971115        size_t pos = 0;
    1098         list_foreach(services_list, services, loc_service_t, service) {
     1116        list_foreach(services_list, item) {
     1117                loc_service_t *service =
     1118                    list_get_instance(item, loc_service_t, services);
     1119               
    10991120                if (service->namespace == namespace) {
    11001121                        desc[pos].id = service->id;
     
    13171338        categ_dir_init(&cdir);
    13181339
    1319         cat = category_new("disk");
    1320         categ_dir_add_cat(&cdir, cat);
    1321 
    1322         cat = category_new("partition");
     1340        cat = category_new("bd");
    13231341        categ_dir_add_cat(&cdir, cat);
    13241342
     
    13321350        categ_dir_add_cat(&cdir, cat);
    13331351
    1334         cat = category_new("led");
    1335         categ_dir_add_cat(&cdir, cat);
    1336 
    13371352        cat = category_new("serial");
    13381353        categ_dir_add_cat(&cdir, cat);
     
    13551370        cat = category_new("nic");
    13561371        categ_dir_add_cat(&cdir, cat);
    1357        
    1358         cat = category_new("ieee80211");
    1359         categ_dir_add_cat(&cdir, cat);
    13601372
    13611373        cat = category_new("visualizer");
     
    13651377        categ_dir_add_cat(&cdir, cat);
    13661378       
    1367         cat = category_new("audio-pcm");
    1368         categ_dir_add_cat(&cdir, cat);
    1369        
    13701379        return true;
    13711380}
     
    13741383 *
    13751384 */
    1376 static void loc_connection_supplier(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     1385static void loc_connection_supplier(ipc_callid_t iid, ipc_call_t *icall)
    13771386{
    13781387        /* Accept connection */
     
    14321441 *
    14331442 */
    1434 static void loc_connection_consumer(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     1443static void loc_connection_consumer(ipc_callid_t iid, ipc_call_t *icall)
    14351444{
    14361445        /* Accept connection */
     
    14991508}
    15001509
     1510/** Function for handling connections to location service
     1511 *
     1512 */
     1513static void loc_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     1514{
     1515        /* Select interface */
     1516        switch ((sysarg_t) (IPC_GET_ARG1(*icall))) {
     1517        case LOC_PORT_SUPPLIER:
     1518                loc_connection_supplier(iid, icall);
     1519                break;
     1520        case LOC_PORT_CONSUMER:
     1521                loc_connection_consumer(iid, icall);
     1522                break;
     1523        case LOC_CONNECT_TO_SERVICE:
     1524                /* Connect client to selected service */
     1525                loc_forward(iid, icall);
     1526                break;
     1527        default:
     1528                /* No such interface */
     1529                async_answer_0(iid, ENOENT);
     1530        }
     1531}
     1532
    15011533/**
    15021534 *
     
    15111543        }
    15121544       
    1513         port_id_t port;
    1514         int rc = async_create_port(INTERFACE_LOC_SUPPLIER,
    1515             loc_connection_supplier, NULL, &port);
     1545        /* Set a handler of incomming connections */
     1546        async_set_client_connection(loc_connection);
     1547       
     1548        /* Register location service at naming service */
     1549        int rc = service_register(SERVICE_LOC);
    15161550        if (rc != EOK)
    15171551                return rc;
    15181552       
    1519         rc = async_create_port(INTERFACE_LOC_CONSUMER,
    1520             loc_connection_consumer, NULL, &port);
    1521         if (rc != EOK)
    1522                 return rc;
    1523        
    1524         /* Set a handler of incomming connections */
    1525         async_set_fallback_port_handler(loc_forward, NULL);
    1526        
    1527         /* Register location service at naming service */
    1528         rc = service_register(SERVICE_LOC);
    1529         if (rc != EOK)
    1530                 return rc;
    1531        
    15321553        printf("%s: Accepting connections\n", NAME);
    15331554        async_manager();
Note: See TracChangeset for help on using the changeset viewer.