Subversion Repositories HelenOS

Rev

Rev 3685 | Rev 3912 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3685 Rev 3846
Line 31... Line 31...
31
 */
31
 */
32
 
32
 
33
/** @file
33
/** @file
34
 */
34
 */
35
#include <async.h>
35
#include <async.h>
-
 
36
 
36
#include <ipc/ipc.h>
37
#include <ipc/ipc.h>
37
#include <ipc/services.h>
38
#include <ipc/services.h>
38
 
39
 
39
#include "err.h"
40
#include "err.h"
40
#include "modules.h"
41
#include "modules.h"
Line 51... Line 52...
51
        res = async_req_3_5( PHONE_NS, IPC_M_CONNECT_ME_TO, need, 0, 0, NULL, NULL, NULL, NULL, & phone );
52
        res = async_req_3_5( PHONE_NS, IPC_M_CONNECT_ME_TO, need, 0, 0, NULL, NULL, NULL, NULL, & phone );
52
    }
53
    }
53
    return phone;
54
    return phone;
54
}
55
}
55
 
56
 
56
int start_service( services_t me, services_t need[], int * need_phone[], void ( * client_connection )( ipc_callid_t iid, ipc_call_t * icall ), int ( * initialize_me )( void )){
57
int bind_service( services_t need, ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3, async_client_conn_t client_receiver ){
57
    ipcarg_t phonehash;
-
 
58
    ERROR_DECLARE;
58
    ERROR_DECLARE;
59
 
59
 
60
    if( ! client_connection ) return EINVAL;
60
    ipcarg_t    phone;
61
    async_set_client_connection( client_connection );
61
    ipcarg_t    phonehash;
62
 
62
 
63
    if( need ){
-
 
64
        if( ! need_phone ) return EINVAL;
63
    phone = connect_to_service( need );
65
        while( * need ){
64
    if( phone >= 0 ){
66
            if( ! * need_phone ) return EINVAL;
-
 
67
 
-
 
68
            /* Connect to the needed service */
65
        if( ERROR_OCCURED( ipc_connect_to_me( phone, arg1, arg2, arg3, & phonehash ))){
69
            ** need_phone = connect_to_service( * need );
66
            async_msg_0( phone, IPC_M_PHONE_HUNGUP );
70
            ++ need;
-
 
71
            ++ need_phone;
67
            return ERROR_CODE;
72
        }
68
        }
-
 
69
        async_new_connection( phonehash, 0, NULL, client_receiver );
73
    }
70
    }
74
 
-
 
75
    /* Initialize service by its callback */
-
 
76
    if( initialize_me ) ERROR_PROPAGATE( initialize_me());
-
 
77
 
-
 
78
    /* Register service at NS */
-
 
79
    if( me ) ERROR_PROPAGATE( REGISTER_ME( me, & phonehash ));
-
 
80
 
-
 
81
    async_manager();
-
 
82
 
-
 
83
    return EOK;
71
    return phone;
84
}
72
}
85
 
73
 
86
/** @}
74
/** @}
87
 */
75
 */