Ignore:
File:
1 edited

Legend:

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

    r8a637a4 r372df8f  
    412412{
    413413        if (server == NULL)
    414                 return EEXIST;
     414                return EEXISTS;
    415415       
    416416        fibril_mutex_lock(&servers_list_mutex);
     
    467467        }
    468468       
     469        /* Set the interface, if any. */
     470        service->forward_interface = IPC_GET_ARG1(*icall);
     471
    469472        /* Get fqsn */
    470473        char *fqsn;
     
    511514                free(service->name);
    512515                free(service);
    513                 async_answer_0(iid, EEXIST);
     516                async_answer_0(iid, EEXISTS);
    514517                return;
    515518        }
     
    699702 *
    700703 */
    701 static void loc_forward(ipc_callid_t callid, ipc_call_t *call, void *arg)
     704static void loc_forward(ipc_callid_t callid, ipc_call_t *call)
    702705{
    703706        fibril_mutex_lock(&services_list_mutex);
     
    706709         * Get ID from request
    707710         */
    708         iface_t iface = IPC_GET_ARG1(*call);
    709711        service_id_t id = IPC_GET_ARG2(*call);
    710712        loc_service_t *svc = loc_service_find_id(id);
     
    717719       
    718720        async_exch_t *exch = async_exchange_begin(svc->server->sess);
    719         async_forward_fast(callid, exch, iface, svc->id, 0, IPC_FF_NONE);
     721       
     722        if (svc->forward_interface == 0)
     723                async_forward_fast(callid, exch, svc->id, 0, 0, IPC_FF_NONE);
     724        else
     725                async_forward_fast(callid, exch, svc->forward_interface,
     726                    svc->id, 0, IPC_FF_NONE);
     727       
    720728        async_exchange_end(exch);
    721729       
     
    951959            loc_namespace_find_id(IPC_GET_ARG1(*icall));
    952960        if (namespace == NULL)
    953                 async_answer_0(iid, EEXIST);
     961                async_answer_0(iid, EEXISTS);
    954962        else
    955963                async_answer_1(iid, EOK, namespace->refcnt);
     
    13171325        categ_dir_add_cat(&cdir, cat);
    13181326
     1327        cat = category_new("disk");
     1328        categ_dir_add_cat(&cdir, cat);
     1329
     1330        cat = category_new("partition");
     1331        categ_dir_add_cat(&cdir, cat);
     1332
    13191333        cat = category_new("iplink");
    13201334        categ_dir_add_cat(&cdir, cat);
     
    13681382 *
    13691383 */
    1370 static void loc_connection_supplier(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     1384static void loc_connection_supplier(ipc_callid_t iid, ipc_call_t *icall)
    13711385{
    13721386        /* Accept connection */
     
    14261440 *
    14271441 */
    1428 static void loc_connection_consumer(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     1442static void loc_connection_consumer(ipc_callid_t iid, ipc_call_t *icall)
    14291443{
    14301444        /* Accept connection */
     
    14931507}
    14941508
     1509/** Function for handling connections to location service
     1510 *
     1511 */
     1512static void loc_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     1513{
     1514        /* Select interface */
     1515        switch ((sysarg_t) (IPC_GET_ARG1(*icall))) {
     1516        case LOC_PORT_SUPPLIER:
     1517                loc_connection_supplier(iid, icall);
     1518                break;
     1519        case LOC_PORT_CONSUMER:
     1520                loc_connection_consumer(iid, icall);
     1521                break;
     1522        case LOC_CONNECT_TO_SERVICE:
     1523                /* Connect client to selected service */
     1524                loc_forward(iid, icall);
     1525                break;
     1526        default:
     1527                /* No such interface */
     1528                async_answer_0(iid, ENOENT);
     1529        }
     1530}
     1531
    14951532/**
    14961533 *
     
    15051542        }
    15061543       
    1507         port_id_t port;
    1508         int rc = async_create_port(INTERFACE_LOC_SUPPLIER,
    1509             loc_connection_supplier, NULL, &port);
     1544        /* Set a handler of incomming connections */
     1545        async_set_client_connection(loc_connection);
     1546       
     1547        /* Register location service at naming service */
     1548        int rc = service_register(SERVICE_LOC);
    15101549        if (rc != EOK)
    15111550                return rc;
    15121551       
    1513         rc = async_create_port(INTERFACE_LOC_CONSUMER,
    1514             loc_connection_consumer, NULL, &port);
    1515         if (rc != EOK)
    1516                 return rc;
    1517        
    1518         /* Set a handler of incomming connections */
    1519         async_set_fallback_port_handler(loc_forward, NULL);
    1520        
    1521         /* Register location service at naming service */
    1522         rc = service_register(SERVICE_LOC);
    1523         if (rc != EOK)
    1524                 return rc;
    1525        
    15261552        printf("%s: Accepting connections\n", NAME);
    15271553        async_manager();
Note: See TracChangeset for help on using the changeset viewer.