Changeset 6b82009 in mainline for uspace/lib/c/generic/net/modules.c


Ignore:
Timestamp:
2011-06-22T20:41:41Z (13 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ef09a7a
Parents:
55091847
Message:

networking stack: convert to the new async framework

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/net/modules.c

    r55091847 r6b82009  
    4040
    4141#include <async.h>
    42 #include <async_obsolete.h>
    4342#include <malloc.h>
    4443#include <errno.h>
     
    4746#include <net/modules.h>
    4847#include <ns.h>
    49 #include <ns_obsolete.h>
    50 
    51 /** The time between connect requests in microseconds. */
    52 #define MODULE_WAIT_TIME  (10 * 1000)
    5348
    5449/** Answer a call.
     
    9893}
    9994
    100 /** Create bidirectional connection with the needed module service and registers
     95/** Create bidirectional connection with the needed module service and register
    10196 * the message receiver.
    10297 *
    103  * @param[in] need      The needed module service.
    104  * @param[in] arg1      The first parameter.
    105  * @param[in] arg2      The second parameter.
    106  * @param[in] arg3      The third parameter.
    107  * @param[in] client_receiver The message receiver.
    108  *
    109  * @return              The phone of the needed service.
    110  * @return              Other error codes as defined for the ipc_connect_to_me()
    111  *                      function.
    112  */
    113 int bind_service(services_t need, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,
    114     async_client_conn_t client_receiver)
     98 * @param[in] need            Needed module service.
     99 * @param[in] arg1            First parameter.
     100 * @param[in] arg2            Second parameter.
     101 * @param[in] arg3            Third parameter.
     102 * @param[in] client_receiver Message receiver.
     103 *
     104 * @return Session to the needed service.
     105 * @return Other error codes as defined for the async_connect_to_me()
     106 *         function.
     107 *
     108 */
     109async_sess_t *bind_service(services_t need, sysarg_t arg1, sysarg_t arg2,
     110    sysarg_t arg3, async_client_conn_t client_receiver)
    115111{
    116112        /* Connect to the needed service */
    117         int phone = connect_to_service(need);
    118         if (phone >= 0) {
     113        async_sess_t *sess = connect_to_service(need);
     114        if (sess != NULL) {
    119115                /* Request the bidirectional connection */
    120                 int rc = async_obsolete_connect_to_me(phone, arg1, arg2, arg3,
     116                async_exch_t *exch = async_exchange_begin(sess);
     117                int rc = async_connect_to_me(exch, arg1, arg2, arg3,
    121118                    client_receiver, NULL);
     119                async_exchange_end(exch);
     120               
    122121                if (rc != EOK) {
    123                         async_obsolete_hangup(phone);
    124                         return rc;
     122                        async_hangup(sess);
     123                        errno = rc;
     124                        return NULL;
    125125                }
    126126        }
    127127       
    128         return phone;
    129 }
    130 
    131 /** Connects to the needed module.
    132  *
    133  * @param[in] need      The needed module service.
    134  * @return              The phone of the needed service.
    135  */
    136 int connect_to_service(services_t need)
    137 {
    138         return service_obsolete_connect_blocking(need, 0, 0);
    139 }
    140 
    141 /** Replies the data to the other party.
    142  *
    143  * @param[in] data      The data buffer to be sent.
     128        return sess;
     129}
     130
     131/** Connect to the needed module.
     132 *
     133 * @param[in] need Needed module service.
     134 *
     135 * @return Session to the needed service.
     136 * @return NULL if the connection timeouted.
     137 *
     138 */
     139async_sess_t *connect_to_service(services_t need)
     140{
     141        return service_connect_blocking(EXCHANGE_SERIALIZE, need, 0, 0);
     142}
     143
     144/** Reply the data to the other party.
     145 *
     146 * @param[in] data        The data buffer to be sent.
    144147 * @param[in] data_length The buffer length.
    145  * @return              EOK on success.
    146  * @return              EINVAL if the client does not expect the data.
    147  * @return              EOVERFLOW if the client does not expect all the data.
    148  *                      Only partial data are transfered.
    149  * @return              Other error codes as defined for the
    150  *                      async_data_read_finalize() function.
     148 *
     149 * @return EOK on success.
     150 * @return EINVAL if the client does not expect the data.
     151 * @return EOVERFLOW if the client does not expect all the data.
     152 *         Only partial data are transfered.
     153 * @return Other error codes as defined for the
     154 *         async_data_read_finalize() function.
     155 *
    151156 */
    152157int data_reply(void *data, size_t data_length)
     
    154159        size_t length;
    155160        ipc_callid_t callid;
    156 
     161       
    157162        /* Fetch the request */
    158163        if (!async_data_read_receive(&callid, &length))
    159164                return EINVAL;
    160 
     165       
    161166        /* Check the requested data size */
    162167        if (length < data_length) {
     
    164169                return EOVERFLOW;
    165170        }
    166 
     171       
    167172        /* Send the data */
    168173        return async_data_read_finalize(callid, data, data_length);
Note: See TracChangeset for help on using the changeset viewer.