66,68 → 66,69 |
static void fs_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
|
int result; |
int result = 0; |
ipcarg_t arg = 0; |
|
ipc_answer_fast(iid, 0, 0, 0); |
|
|
while (1) |
{ |
prepare_message(); |
|
if (fs_call == IPC_M_PHONE_HUNGUP) { |
ipc_answer_fast(callid, 0,0,0); |
return; |
} |
switch (fs_call) |
{ |
case IPC_M_PHONE_HUNGUP: |
ipc_answer_fast(callid, 0,0,0); |
return; |
|
if (fs_call == FS_NEW_CONSUMER) { |
if (!new_consument) { |
ipc_answer_fast(callid, FS_ECONNECT, 0, 0); |
} |
else { |
result = new_consument_map(); |
ipc_answer_fast(callid, result, 0, 0); |
case FS_NEW_CONSUMER: |
if (!new_consument) { |
result = FS_ECONNECT; |
} |
else { |
result = new_consument_map(); |
if (!result) { |
new_consument = FALSE; |
} |
} |
break; |
|
if (!result) { |
new_consument = FALSE; |
case IPC_M_AS_AREA_SEND: |
if (!new_consument) |
result = FS_ECONNECT; |
else { |
result = 0; |
arg = (uintptr_t)fp->buffer; |
fp = &fproc[new_consument]; |
fp->connected = TRUE; |
new_consument = FALSE; |
} |
} |
continue; |
} |
break; |
|
if (fs_call == IPC_M_AS_AREA_SEND) { |
if (!new_consument) |
ipc_answer_fast(callid, FS_ECONNECT, 0, 0); |
else { |
ipc_answer_fast(callid, 0, (uintptr_t)fp->buffer, 0); |
fp = &fproc[new_consument]; |
fp->connected = TRUE; |
new_consument = FALSE; |
} |
continue; |
} |
case FS_DROP_CONSUMER: |
fproc->connected = FALSE; |
fproc->buffer = NULL; |
result = 0; |
break; |
|
if (fs_call == FS_DROP_CONSUMER) { |
fproc->connected = FALSE; |
fproc->buffer = NULL; |
ipc_answer_fast(callid, 0, 0, 0); |
|
continue; |
default: |
if (check_con < 0) { |
result = err_code; |
check_con = TRUE; |
break; |
} |
if (FS_IN_RANGE(fs_call)) { |
result = call_vector[fs_call-FS_BASE](); |
} |
else { |
result = FS_EBADCALL; |
} |
break; |
|
} |
|
if (check_con < 0) { |
ipc_answer_fast(callid, err_code, 0, 0); |
check_con = TRUE; |
continue; |
} |
|
if (FS_IN_RANGE(fs_call)) { |
result = call_vector[fs_call-FS_BASE](); |
} |
else { |
result = FS_EBADCALL; |
} |
|
ipc_answer_fast(callid, result, 0, 0); |
ipc_answer_fast(callid, result, arg, 0); |
arg = 0; |
} |
} |
|
136,7 → 137,8 |
{ |
|
int shift, id_task; |
|
|
|
callid = async_get_call(&m_input); |
fs_call = IPC_GET_METHOD(m_input); |
|