Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/dnsrsrv/dnsrsrv.c

    rd8b47eca r959d2ec  
    8484}
    8585
    86 static void dnsr_name2host_srv(dnsr_client_t *client, ipc_callid_t iid,
    87     ipc_call_t *icall)
    88 {
     86static void dnsr_name2host_srv(dnsr_client_t *client, ipc_callid_t callid,
     87    ipc_call_t *call)
     88{
     89        char *name;
     90        dns_host_info_t *hinfo;
     91        ipc_callid_t rcallid;
     92        size_t size;
     93        sysarg_t retval;
     94        size_t act_size;
     95        int rc;
     96
    8997        log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_get_srvaddr_srv()");
    90        
    91         char *name;
    92         int rc = async_data_write_accept((void **) &name, true, 0,
     98
     99        rc = async_data_write_accept((void **) &name, true, 0,
    93100            DNS_NAME_MAX_SIZE, 0, NULL);
    94101        if (rc != EOK) {
    95                 async_answer_0(iid, rc);
    96                 return;
    97         }
    98        
    99         dns_host_info_t *hinfo;
     102                async_answer_0(callid, rc);
     103                return;
     104        }
     105
     106        if (!async_data_read_receive(&rcallid, &size)) {
     107                async_answer_0(rcallid, EREFUSED);
     108                async_answer_0(callid, EREFUSED);
     109                return;
     110        }
     111
    100112        rc = dns_name2host(name, &hinfo);
    101113        if (rc != EOK) {
    102                 async_answer_0(iid, rc);
    103                 return;
    104         }
    105        
    106         ipc_callid_t callid;
    107         size_t size;
    108         if (!async_data_read_receive(&callid, &size)) {
    109                 async_answer_0(callid, EREFUSED);
    110                 async_answer_0(iid, EREFUSED);
    111                 return;
    112         }
    113        
    114         if (size != sizeof(inet_addr_t)) {
    115                 async_answer_0(callid, EINVAL);
    116                 async_answer_0(iid, EINVAL);
    117                 return;
    118         }
    119        
    120         rc = async_data_read_finalize(callid, &hinfo->addr, size);
    121         if (rc != EOK) {
     114                async_answer_0(rcallid, rc);
    122115                async_answer_0(callid, rc);
    123                 async_answer_0(iid, rc);
    124                 return;
    125         }
    126        
    127         if (!async_data_read_receive(&callid, &size)) {
    128                 async_answer_0(callid, EREFUSED);
    129                 async_answer_0(iid, EREFUSED);
    130                 return;
    131         }
    132        
    133         size_t act_size = str_size(hinfo->cname);
     116                return;
     117        }
     118
     119        act_size = str_size(hinfo->cname);
    134120        if (act_size > size) {
    135                 async_answer_0(callid, EINVAL);
    136                 async_answer_0(iid, EINVAL);
    137                 return;
    138         }
    139        
    140         rc = async_data_read_finalize(callid, hinfo->cname, act_size);
    141         if (rc != EOK)
    142                 async_answer_0(callid, rc);
    143        
    144         async_answer_0(iid, (sysarg_t) rc);
    145        
     121                async_answer_0(rcallid, EOVERFLOW);
     122                async_answer_0(callid, EOVERFLOW);
     123                return;
     124        }
     125
     126        retval = async_data_read_finalize(rcallid, hinfo->cname, act_size);
     127        async_answer_1(callid, retval, hinfo->addr.ipv4);
     128
    146129        dns_hostinfo_destroy(hinfo);
    147130}
    148131
    149 static void dnsr_get_srvaddr_srv(dnsr_client_t *client, ipc_callid_t iid,
    150     ipc_call_t *icall)
     132static void dnsr_get_srvaddr_srv(dnsr_client_t *client, ipc_callid_t callid,
     133    ipc_call_t *call)
    151134{
    152135        log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_get_srvaddr_srv()");
    153        
    154         ipc_callid_t callid;
    155         size_t size;
    156         if (!async_data_read_receive(&callid, &size)) {
    157                 async_answer_0(callid, EREFUSED);
    158                 async_answer_0(iid, EREFUSED);
    159                 return;
    160         }
    161        
    162         if (size != sizeof(inet_addr_t)) {
    163                 async_answer_0(callid, EINVAL);
    164                 async_answer_0(iid, EINVAL);
    165                 return;
    166         }
    167        
    168         // FIXME locking
    169        
    170         int rc = async_data_read_finalize(callid, &dns_server_addr, size);
    171         if (rc != EOK)
    172                 async_answer_0(callid, rc);
    173        
    174         async_answer_0(iid, rc);
    175 }
    176 
    177 static void dnsr_set_srvaddr_srv(dnsr_client_t *client, ipc_callid_t iid,
    178     ipc_call_t *icall)
     136        async_answer_1(callid, EOK, dns_server_addr.ipv4);
     137}
     138
     139static void dnsr_set_srvaddr_srv(dnsr_client_t *client, ipc_callid_t callid,
     140    ipc_call_t *call)
    179141{
    180142        log_msg(LOG_DEFAULT, LVL_DEBUG, "dnsr_set_srvaddr_srv()");
    181        
    182         ipc_callid_t callid;
    183         size_t size;
    184         if (!async_data_write_receive(&callid, &size)) {
    185                 async_answer_0(callid, EREFUSED);
    186                 async_answer_0(iid, EREFUSED);
    187                 return;
    188         }
    189        
    190         if (size != sizeof(inet_addr_t)) {
    191                 async_answer_0(callid, EINVAL);
    192                 async_answer_0(iid, EINVAL);
    193                 return;
    194         }
    195        
    196         // FIXME locking
    197        
    198         int rc = async_data_write_finalize(callid, &dns_server_addr, size);
    199         if (rc != EOK) {
    200                 async_answer_0(callid, rc);
    201                 async_answer_0(iid, rc);
    202         }
    203        
    204         async_answer_0(iid, (sysarg_t) rc);
     143
     144        dns_server_addr.ipv4 = IPC_GET_ARG1(*call);
     145
     146        async_answer_0(callid, EOK);
    205147}
    206148
Note: See TracChangeset for help on using the changeset viewer.