|
|
| version 1.1.1.1.2.21, 2010/07/08 13:05:50 | version 1.1.1.1.2.25, 2011/05/02 23:02:44 |
|---|---|
| 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 169 makeReply: | Line 191 makeReply: |
| shutdown(c->cli_sock, SHUT_RDWR); | shutdown(c->cli_sock, SHUT_RDWR); |
| close(c->cli_sock); | close(c->cli_sock); |
| memset(c, 0, sizeof(rpc_cli_t)); | memset(c, 0, sizeof(rpc_cli_t)); |
| return (void*) ret; | return (void*) (long)ret; |
| } | } |
| 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 284 makeReply: | Line 306 makeReply: |
| shutdown(c->cli_sock, SHUT_RDWR); | shutdown(c->cli_sock, SHUT_RDWR); |
| close(c->cli_sock); | close(c->cli_sock); |
| memset(c, 0, sizeof(rpc_cli_t)); | memset(c, 0, sizeof(rpc_cli_t)); |
| return (void*) ret; | return (void*) (long)ret; |
| } | } |
| // ------------------------------------------------- | // ------------------------------------------------- |
| 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) { |