|
|
| version 1.1.1.1.2.19, 2010/07/08 08:02:02 | version 1.1.1.1.2.23, 2011/03/15 15:13:22 |
|---|---|
| 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 411 rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) | Line 433 rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) |
| } | } |
| pthread_mutex_unlock(&srv->srv_blob.mtx); | pthread_mutex_unlock(&srv->srv_blob.mtx); |
| while (pthread_mutex_trylock(&srv->srv_blob.mtx) == EBUSY); | |
| pthread_mutex_destroy(&srv->srv_blob.mtx); | pthread_mutex_destroy(&srv->srv_blob.mtx); |
| } | } |
| Line 579 rpc_srv_initServer(u_int regProgID, u_int regProcID, i | Line 602 rpc_srv_initServer(u_int regProgID, u_int regProcID, i |
| } else | } else |
| memset(srv->srv_clients, 0, srv->srv_numcli * sizeof(rpc_cli_t)); | memset(srv->srv_clients, 0, srv->srv_numcli * sizeof(rpc_cli_t)); |
| pthread_mutex_init(&srv->srv_mtx, NULL); | |
| rpc_srv_registerCall(srv, NULL, CALL_SRVSHUTDOWN, 0); | rpc_srv_registerCall(srv, NULL, CALL_SRVSHUTDOWN, 0); |
| rpc_srv_registerCall(srv, NULL, CALL_SRVCLIENTS, 0); | rpc_srv_registerCall(srv, NULL, CALL_SRVCLIENTS, 0); |
| rpc_srv_registerCall(srv, NULL, CALL_SRVCALLS, 0); | rpc_srv_registerCall(srv, NULL, CALL_SRVCALLS, 0); |
| rpc_srv_registerCall(srv, NULL, CALL_SRVSESSIONS, 0); | rpc_srv_registerCall(srv, NULL, CALL_SRVSESSIONS, 0); |
| pthread_mutex_init(&srv->srv_mtx, NULL); | |
| return srv; | return srv; |
| } | } |
| Line 625 rpc_srv_endServer(rpc_srv_t * __restrict srv) | Line 648 rpc_srv_endServer(rpc_srv_t * __restrict srv) |
| } | } |
| pthread_mutex_unlock(&srv->srv_mtx); | pthread_mutex_unlock(&srv->srv_mtx); |
| while (pthread_mutex_trylock(&srv->srv_mtx) == EBUSY); | |
| pthread_mutex_destroy(&srv->srv_mtx); | pthread_mutex_destroy(&srv->srv_mtx); |
| free(srv); | free(srv); |