Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2394 | konopa | 1 | /* Sending extended well formed messages to FS over |
2 | * standard HelenOS message agrs and over shared buffer. |
||
3 | */ |
||
4 | |||
5 | /* Methods: |
||
6 | * send_request: forms and sends extended message to FS |
||
7 | * unpack_message: unpacks message to given message_params_t* structure |
||
8 | */ |
||
9 | |||
10 | |||
11 | #include <async.h> |
||
12 | #include <task.h> |
||
13 | #include "../fs/fs.h" |
||
14 | #include "message.h" |
||
15 | |||
16 | int send_request(int phoneid, ipcarg_t method, message_params_t *params, void *shared_buffer); |
||
17 | void unpack_message(message_params_t *message, ipc_call_t m_input, void *shared_buffer); |
||
18 | |||
19 | /* This method should be used by all callers of FS. Candidate at library function. */ |
||
20 | int send_request(int phoneid, ipcarg_t method, message_params_t *params, void *shared_buffer) |
||
21 | { |
||
22 | |||
23 | int retval, shift; |
||
24 | size_t size; |
||
25 | |||
26 | size = sizeof(message_params_t); |
||
27 | memset((void *)shared_buffer, 0, size); |
||
28 | |||
29 | /* Setting 'buffered' parameters. */ |
||
30 | memcpy((void* )shared_buffer, (void *)(¶ms->nbytes), sizeof(unsigned int)); |
||
31 | shift = sizeof(unsigned int); |
||
32 | memcpy((void *)(shared_buffer + shift), (void *)(¶ms->offset), sizeof(offset_t)); |
||
33 | shift += sizeof(offset_t); |
||
34 | memcpy((void *)(shared_buffer + shift), (void *)(¶ms->fname), DIRSIZEX); |
||
35 | params->fname[DIRSIZEX-1] = '\0'; |
||
36 | shift += DIRSIZEX * sizeof(char); |
||
37 | memcpy((void *)(shared_buffer + shift), (void *)(¶ms->entry_number), sizeof(int)); |
||
38 | |||
39 | /* 'Most used' parameters will be pass in standart message parameters. */ |
||
40 | retval = async_req_3(phoneid, method, task_get_id(), params->fd, params->whence, NULL, NULL, NULL); |
||
41 | |||
42 | return retval; |
||
43 | } |
||
44 | |||
45 | /* Will be used by FS to unpacking incoming extended message. */ |
||
46 | void unpack_message(message_params_t *message, ipc_call_t m_input, void *shared_buffer) |
||
47 | { |
||
48 | |||
49 | int shift; |
||
50 | |||
51 | /* Core message parameters. */ |
||
52 | message->id_task = IPC_GET_ARG1(m_input); |
||
53 | message->fd = IPC_GET_ARG2(m_input); |
||
54 | message->whence = IPC_GET_ARG3(m_input); |
||
55 | |||
56 | /* Buffered parameters - extended. */ |
||
57 | memcpy((void *)&message->nbytes, (void *)(shared_buffer), sizeof(unsigned int)); |
||
58 | shift = sizeof(unsigned int); |
||
59 | memcpy((void *)(&message->offset), (void *)(shared_buffer + shift), sizeof(offset_t)); |
||
60 | shift += sizeof(offset_t); |
||
61 | memcpy((void *)(&message->fname), (void *)(shared_buffer + shift), DIRSIZEX); |
||
62 | shift += DIRSIZEX * sizeof(char); |
||
63 | memcpy((void *)(&message->entry_number), (void *)(shared_buffer + shift), sizeof(int)); |
||
64 | |||
65 | } |