Rev 3452 | Rev 3456 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3452 | Rev 3454 | ||
---|---|---|---|
Line 42... | Line 42... | ||
42 | #include "ipcp.h" |
42 | #include "ipcp.h" |
43 | 43 | ||
44 | #define IPCP_CALLID_SYNC 0 |
44 | #define IPCP_CALLID_SYNC 0 |
45 | 45 | ||
46 | typedef struct { |
46 | typedef struct { |
47 | int phone_hash; |
47 | ipcarg_t phone_hash; |
48 | ipc_call_t question; |
48 | ipc_call_t question; |
49 | oper_t *oper; |
49 | oper_t *oper; |
50 | 50 | ||
51 | int call_hash; |
51 | ipc_callid_t call_hash; |
52 | 52 | ||
53 | link_t link; |
53 | link_t link; |
54 | } pending_call_t; |
54 | } pending_call_t; |
55 | 55 | ||
56 | typedef struct { |
56 | typedef struct { |
Line 95... | Line 95... | ||
95 | pending_call_t *hs; |
95 | pending_call_t *hs; |
96 | 96 | ||
97 | // printf("pending_call_compare\n"); |
97 | // printf("pending_call_compare\n"); |
98 | hs = hash_table_get_instance(item, pending_call_t, link); |
98 | hs = hash_table_get_instance(item, pending_call_t, link); |
99 | 99 | ||
- | 100 | // FIXME: this will fail if sizeof(long) < sizeof(void *). |
|
100 | return key[0] == hs->call_hash; |
101 | return key[0] == hs->call_hash; |
101 | } |
102 | } |
102 | 103 | ||
103 | static void pending_call_remove_callback(link_t *item) |
104 | static void pending_call_remove_callback(link_t *item) |
104 | { |
105 | { |
Line 132... | Line 133... | ||
132 | /* Not a system method, try the user protocol. */ |
133 | /* Not a system method, try the user protocol. */ |
133 | oper = proto_get_oper(proto, method); |
134 | oper = proto_get_oper(proto, method); |
134 | } |
135 | } |
135 | 136 | ||
136 | if (oper != NULL) { |
137 | if (oper != NULL) { |
137 | printf("%s (%d)", oper->name, method); |
138 | printf("%s (%ld)", oper->name, method); |
138 | return; |
139 | return; |
139 | } |
140 | } |
140 | 141 | ||
141 | printf("%d", method); |
142 | printf("%ld", method); |
142 | } |
143 | } |
143 | 144 | ||
144 | void ipcp_init(void) |
145 | void ipcp_init(void) |
145 | { |
146 | { |
146 | ipc_m_desc_t *desc; |
147 | ipc_m_desc_t *desc; |
Line 196... | Line 197... | ||
196 | else proto = NULL; |
197 | else proto = NULL; |
197 | 198 | ||
198 | args = call->args; |
199 | args = call->args; |
199 | 200 | ||
200 | if ((display_mask & DM_IPC) != 0) { |
201 | if ((display_mask & DM_IPC) != 0) { |
201 | printf("Call ID: 0x%x, phone: %d, proto: %s, method: ", hash, |
202 | printf("Call ID: 0x%lx, phone: %d, proto: %s, method: ", hash, |
202 | phone, (proto ? proto->name : "n/a")); |
203 | phone, (proto ? proto->name : "n/a")); |
203 | ipc_m_print(proto, IPC_GET_METHOD(*call)); |
204 | ipc_m_print(proto, IPC_GET_METHOD(*call)); |
204 | printf(" args: (%u, %u, %u, %u, %u)\n", args[1], args[2], |
205 | printf(" args: (%lu, %lu, %lu, %lu, %lu)\n", args[1], args[2], |
205 | args[3], args[4], args[5]); |
206 | args[3], args[4], args[5]); |
206 | } |
207 | } |
207 | 208 | ||
208 | 209 | ||
209 | if ((display_mask & DM_USER) != 0) { |
210 | if ((display_mask & DM_USER) != 0) { |
Line 255... | Line 256... | ||
255 | } |
256 | } |
256 | 257 | ||
257 | static void parse_answer(ipc_callid_t hash, pending_call_t *pcall, |
258 | static void parse_answer(ipc_callid_t hash, pending_call_t *pcall, |
258 | ipc_call_t *answer) |
259 | ipc_call_t *answer) |
259 | { |
260 | { |
260 | int phone; |
261 | ipcarg_t phone; |
261 | ipcarg_t method; |
262 | ipcarg_t method; |
262 | ipcarg_t service; |
263 | ipcarg_t service; |
263 | int retval; |
264 | ipcarg_t retval; |
264 | proto_t *proto; |
265 | proto_t *proto; |
265 | int cphone; |
266 | int cphone; |
266 | 267 | ||
267 | ipcarg_t *resp; |
268 | ipcarg_t *resp; |
268 | oper_t *oper; |
269 | oper_t *oper; |
Line 275... | Line 276... | ||
275 | retval = IPC_GET_RETVAL(*answer); |
276 | retval = IPC_GET_RETVAL(*answer); |
276 | 277 | ||
277 | resp = answer->args; |
278 | resp = answer->args; |
278 | 279 | ||
279 | if ((display_mask & DM_IPC) != 0) { |
280 | if ((display_mask & DM_IPC) != 0) { |
280 | printf("Response to 0x%x: retval=%d, args = (%u, %u, %u, %u, %u)\n", |
281 | printf("Response to 0x%lx: retval=%ld, args = (%lu, %lu, %lu, %lu, %lu)\n", |
281 | hash, retval, IPC_GET_ARG1(*answer), |
282 | hash, retval, IPC_GET_ARG1(*answer), |
282 | IPC_GET_ARG2(*answer), IPC_GET_ARG3(*answer), |
283 | IPC_GET_ARG2(*answer), IPC_GET_ARG3(*answer), |
283 | IPC_GET_ARG4(*answer), IPC_GET_ARG5(*answer)); |
284 | IPC_GET_ARG4(*answer), IPC_GET_ARG5(*answer)); |
284 | } |
285 | } |
285 | 286 | ||
Line 330... | Line 331... | ||
330 | unsigned long key[1]; |
331 | unsigned long key[1]; |
331 | 332 | ||
332 | // printf("ipcp_call_in()\n"); |
333 | // printf("ipcp_call_in()\n"); |
333 | /* printf("phone: %d, method: ", call->in_phone_hash); |
334 | /* printf("phone: %d, method: ", call->in_phone_hash); |
334 | ipc_m_print(IPC_GET_METHOD(*call)); |
335 | ipc_m_print(IPC_GET_METHOD(*call)); |
335 | printf(" args: (%u, %u, %u, %u, %u)\n", |
336 | printf(" args: (%lu, %lu, %lu, %lu, %lu)\n", |
336 | IPC_GET_ARG1(*call), |
337 | IPC_GET_ARG1(*call), |
337 | IPC_GET_ARG2(*call), |
338 | IPC_GET_ARG2(*call), |
338 | IPC_GET_ARG3(*call), |
339 | IPC_GET_ARG3(*call), |
339 | IPC_GET_ARG4(*call), |
340 | IPC_GET_ARG4(*call), |
340 | IPC_GET_ARG5(*call) |
341 | IPC_GET_ARG5(*call) |
341 | );*/ |
342 | );*/ |
342 | 343 | ||
343 | if ((hash & IPC_CALLID_ANSWERED) == 0 && hash != IPCP_CALLID_SYNC) { |
344 | if ((hash & IPC_CALLID_ANSWERED) == 0 && hash != IPCP_CALLID_SYNC) { |
344 | /* Not a response */ |
345 | /* Not a response */ |
345 | if ((display_mask & DM_IPC) != 0) { |
346 | if ((display_mask & DM_IPC) != 0) { |
346 | printf("Not a response (hash %d)\n", hash); |
347 | printf("Not a response (hash 0x%lx)\n", hash); |
347 | } |
348 | } |
348 | return; |
349 | return; |
349 | } |
350 | } |
350 | 351 | ||
351 | hash = hash & ~IPC_CALLID_ANSWERED; |
352 | hash = hash & ~IPC_CALLID_ANSWERED; |