version 1.1.1.1.2.21, 2010/07/08 13:05:50
|
version 1.1.1.1.2.24, 2011/03/15 16:48:31
|
Line 58 rpc_srv_dispatchCall(void *arg)
|
Line 58 rpc_srv_dispatchCall(void *arg)
|
rpc_SetErr(EINVAL, "Error:: get invalid RPC session ...\n"); |
rpc_SetErr(EINVAL, "Error:: get invalid RPC session ...\n"); |
ret = -5; |
ret = -5; |
goto makeReply; |
goto makeReply; |
} | } else |
| Limit = sizeof(struct tagRPCCall); |
// RPC is OK! Go decapsulate variables ... |
// RPC is OK! Go decapsulate variables ... |
if (rpc->call_argc) { |
if (rpc->call_argc) { |
v = (rpc_val_t*) (buf + sizeof(struct tagRPCCall)); | v = (rpc_val_t*) (buf + Limit); |
| // check RPC packet length |
| if (rpc->call_argc * sizeof(rpc_val_t) > BUFSIZ - Limit) { |
| rpc_SetErr(EMSGSIZE, "Error:: Too big RPC packet ...\n"); |
| ret = -5; |
| goto makeReply; |
| } else |
| Limit += rpc->call_argc * sizeof(rpc_val_t); |
// RPC received variables types OK! |
// RPC received variables types OK! |
data = (u_char*) v + rpc->call_argc * sizeof(rpc_val_t); |
data = (u_char*) v + rpc->call_argc * sizeof(rpc_val_t); |
for (i = 0; i < rpc->call_argc; i++) { |
for (i = 0; i < rpc->call_argc; i++) { |
switch (v[i].val_type) { |
switch (v[i].val_type) { |
case buffer: |
case buffer: |
|
if (v[i].val_len > BUFSIZ - Limit) { |
|
rpc_SetErr(EMSGSIZE, "Error:: Too big RPC packet ...\n"); |
|
ret = -5; |
|
goto makeReply; |
|
} else |
|
Limit += v[i].val_len; |
|
|
v[i].val.buffer = data; |
v[i].val.buffer = data; |
data += v[i].val_len; |
data += v[i].val_len; |
break; |
break; |
case string: |
case string: |
|
if (v[i].val_len + 1 > BUFSIZ - Limit) { |
|
rpc_SetErr(EMSGSIZE, "Error:: Too big RPC packet ...\n"); |
|
ret = -5; |
|
goto makeReply; |
|
} else |
|
Limit += v[i].val_len; |
|
|
v[i].val.string = (int8_t*) data; |
v[i].val.string = (int8_t*) data; |
data += v[i].val_len + 1; |
data += v[i].val_len + 1; |
break; |
break; |
Line 159 makeReply:
|
Line 181 makeReply:
|
break; |
break; |
} |
} |
if (ret != Limit) { |
if (ret != Limit) { |
rpc_SetErr(EBADMSG, "Error:: in send RPC request, should be send %d bytes, " | rpc_SetErr(ECANCELED, "Error:: in send RPC request, should be send %d bytes, " |
"really is %d\n", Limit, ret); |
"really is %d\n", Limit, ret); |
ret = -9; |
ret = -9; |
break; |
break; |
Line 274 makeReply:
|
Line 296 makeReply:
|
break; |
break; |
} |
} |
if (ret != sizeof buf) { |
if (ret != sizeof buf) { |
rpc_SetErr(EBADMSG, "Error:: in send BLOB reply, should be send %d bytes, " | rpc_SetErr(ECANCELED, "Error:: in send BLOB reply, should be send %d bytes, " |
"really is %d\n", sizeof buf, ret); |
"really is %d\n", sizeof buf, ret); |
ret = -9; |
ret = -9; |
break; |
break; |
Line 609 rpc_srv_endServer(rpc_srv_t * __restrict srv)
|
Line 631 rpc_srv_endServer(rpc_srv_t * __restrict srv)
|
rpc_srv_endBLOBServer(srv); |
rpc_srv_endBLOBServer(srv); |
|
|
for (i = 0, c = srv->srv_clients; i < srv->srv_numcli && c; i++, c++) |
for (i = 0, c = srv->srv_clients; i < srv->srv_numcli && c; i++, c++) |
if (c->cli_sa.sa_family) | if (c->cli_sa.sa_family) { |
shutdown(c->cli_sock, SHUT_RDWR); |
shutdown(c->cli_sock, SHUT_RDWR); |
|
close(c->cli_sock); |
|
} |
close(srv->srv_server.cli_sock); |
close(srv->srv_server.cli_sock); |
|
|
if (srv->srv_clients) { |
if (srv->srv_clients) { |